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_
10 #include "base/memory/singleton.h"
11 #include "chrome/browser/extensions/chrome_extension_function.h"
12 #include "chrome/browser/media/desktop_media_picker.h"
13 #include "chrome/browser/media/desktop_media_picker_model.h"
14 #include "chrome/common/extensions/api/desktop_capture.h"
17 namespace extensions {
19 class DesktopCaptureChooseDesktopMediaFunction
20 : public ChromeAsyncExtensionFunction {
22 DECLARE_EXTENSION_FUNCTION("desktopCapture.chooseDesktopMedia",
23 DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA)
25 // Factory creating DesktopMediaPickerModel and DesktopMediaPicker instances.
26 // Used for tests to supply fake picker.
29 virtual scoped_ptr<DesktopMediaPickerModel> CreateModel(
30 scoped_ptr<webrtc::ScreenCapturer> screen_capturer,
31 scoped_ptr<webrtc::WindowCapturer> window_capturer) = 0;
32 virtual scoped_ptr<DesktopMediaPicker> CreatePicker() = 0;
34 virtual ~PickerFactory() {}
37 // Used to set PickerFactory used to create mock DesktopMediaPicker instances
38 // for tests. Calling tests keep ownership of the factory. Can be called with
39 // |factory| set to NULL at the end of the test.
40 static void SetPickerFactoryForTests(PickerFactory* factory);
42 DesktopCaptureChooseDesktopMediaFunction();
47 virtual ~DesktopCaptureChooseDesktopMediaFunction();
49 // ExtensionFunction overrides.
50 virtual bool RunImpl() OVERRIDE;
52 void OnPickerDialogResults(content::DesktopMediaID source);
56 // Parameters of the tab the stream is requested for.
57 int render_process_id_;
61 scoped_ptr<DesktopMediaPicker> picker_;
64 class DesktopCaptureCancelChooseDesktopMediaFunction
65 : public ChromeSyncExtensionFunction {
67 DECLARE_EXTENSION_FUNCTION("desktopCapture.cancelChooseDesktopMedia",
68 DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA)
70 DesktopCaptureCancelChooseDesktopMediaFunction();
73 virtual ~DesktopCaptureCancelChooseDesktopMediaFunction();
75 // ExtensionFunction overrides.
76 virtual bool RunImpl() OVERRIDE;
79 class DesktopCaptureRequestsRegistry {
81 DesktopCaptureRequestsRegistry();
82 ~DesktopCaptureRequestsRegistry();
84 static DesktopCaptureRequestsRegistry* GetInstance();
86 void AddRequest(int process_id,
88 DesktopCaptureChooseDesktopMediaFunction* handler);
89 void RemoveRequest(int process_id, int request_id);
90 void CancelRequest(int process_id, int request_id);
93 friend struct DefaultSingletonTraits<DesktopCaptureRequestsRegistry>;
96 RequestId(int process_id, int request_id);
98 // Need to use RequestId as a key in std::map<>.
99 bool operator<(const RequestId& other) const;
105 typedef std::map<RequestId,
106 DesktopCaptureChooseDesktopMediaFunction*> RequestsMap;
108 RequestsMap requests_;
110 DISALLOW_COPY_AND_ASSIGN(DesktopCaptureRequestsRegistry);
113 } // namespace extensions
115 #endif // CHROME_BROWSER_EXTENSIONS_API_DESKTOP_CAPTURE_DESKTOP_CAPTURE_API_H_