Add ENABLE_MEDIA_ROUTER define to builds other than Android and iOS.
[chromium-blink-merge.git] / chrome / browser / extensions / api / desktop_capture / desktop_capture_api.h
blobb76b5c4a24018a7da40b0807c38e33540db33f15
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DESKTOP_CAPTURE_DESKTOP_CAPTURE_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_DESKTOP_CAPTURE_DESKTOP_CAPTURE_API_H_
8 #include <map>
10 #include "base/memory/singleton.h"
11 #include "chrome/browser/extensions/chrome_extension_function.h"
12 #include "chrome/browser/media/desktop_media_list.h"
13 #include "chrome/browser/media/desktop_media_picker.h"
14 #include "chrome/browser/media/native_desktop_media_list.h"
15 #include "chrome/common/extensions/api/desktop_capture.h"
16 #include "content/public/browser/web_contents_observer.h"
17 #include "url/gurl.h"
19 namespace extensions {
21 class DesktopCaptureChooseDesktopMediaFunction
22 : public ChromeAsyncExtensionFunction,
23 public content::WebContentsObserver {
24 public:
25 DECLARE_EXTENSION_FUNCTION("desktopCapture.chooseDesktopMedia",
26 DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA)
28 // Factory creating DesktopMediaList and DesktopMediaPicker instances.
29 // Used for tests to supply fake picker.
30 class PickerFactory {
31 public:
32 virtual scoped_ptr<DesktopMediaList> CreateModel(bool show_screens,
33 bool show_windows) = 0;
34 virtual scoped_ptr<DesktopMediaPicker> CreatePicker() = 0;
35 protected:
36 virtual ~PickerFactory() {}
39 // Used to set PickerFactory used to create mock DesktopMediaPicker instances
40 // for tests. Calling tests keep ownership of the factory. Can be called with
41 // |factory| set to NULL at the end of the test.
42 static void SetPickerFactoryForTests(PickerFactory* factory);
44 DesktopCaptureChooseDesktopMediaFunction();
46 void Cancel();
48 private:
49 ~DesktopCaptureChooseDesktopMediaFunction() override;
51 // ExtensionFunction overrides.
52 bool RunAsync() override;
54 // content::WebContentsObserver overrides.
55 void WebContentsDestroyed() override;
57 void OnPickerDialogResults(content::DesktopMediaID source);
59 int request_id_;
61 // URL of page that desktop capture was requested for.
62 GURL origin_;
64 scoped_ptr<DesktopMediaPicker> picker_;
67 class DesktopCaptureCancelChooseDesktopMediaFunction
68 : public ChromeSyncExtensionFunction {
69 public:
70 DECLARE_EXTENSION_FUNCTION("desktopCapture.cancelChooseDesktopMedia",
71 DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA)
73 DesktopCaptureCancelChooseDesktopMediaFunction();
75 private:
76 ~DesktopCaptureCancelChooseDesktopMediaFunction() override;
78 // ExtensionFunction overrides.
79 bool RunSync() override;
82 class DesktopCaptureRequestsRegistry {
83 public:
84 DesktopCaptureRequestsRegistry();
85 ~DesktopCaptureRequestsRegistry();
87 static DesktopCaptureRequestsRegistry* GetInstance();
89 void AddRequest(int process_id,
90 int request_id,
91 DesktopCaptureChooseDesktopMediaFunction* handler);
92 void RemoveRequest(int process_id, int request_id);
93 void CancelRequest(int process_id, int request_id);
95 private:
96 friend struct DefaultSingletonTraits<DesktopCaptureRequestsRegistry>;
98 struct RequestId {
99 RequestId(int process_id, int request_id);
101 // Need to use RequestId as a key in std::map<>.
102 bool operator<(const RequestId& other) const;
104 int process_id;
105 int request_id;
108 typedef std::map<RequestId,
109 DesktopCaptureChooseDesktopMediaFunction*> RequestsMap;
111 RequestsMap requests_;
113 DISALLOW_COPY_AND_ASSIGN(DesktopCaptureRequestsRegistry);
116 } // namespace extensions
118 #endif // CHROME_BROWSER_EXTENSIONS_API_DESKTOP_CAPTURE_DESKTOP_CAPTURE_API_H_