#include "base/memory/singleton.h"
#include "chrome/browser/extensions/chrome_extension_function.h"
+#include "chrome/browser/media/desktop_media_list.h"
#include "chrome/browser/media/desktop_media_picker.h"
-#include "chrome/browser/media/desktop_media_picker_model.h"
+#include "chrome/browser/media/native_desktop_media_list.h"
#include "chrome/common/extensions/api/desktop_capture.h"
+#include "content/public/browser/web_contents_observer.h"
#include "url/gurl.h"
namespace extensions {
class DesktopCaptureChooseDesktopMediaFunction
- : public ChromeAsyncExtensionFunction {
+ : public ChromeAsyncExtensionFunction,
+ public content::WebContentsObserver {
public:
DECLARE_EXTENSION_FUNCTION("desktopCapture.chooseDesktopMedia",
DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA)
- // Factory creating DesktopMediaPickerModel and DesktopMediaPicker instances.
+ // Factory creating DesktopMediaList and DesktopMediaPicker instances.
// Used for tests to supply fake picker.
class PickerFactory {
public:
- virtual scoped_ptr<DesktopMediaPickerModel> CreateModel(
- scoped_ptr<webrtc::ScreenCapturer> screen_capturer,
- scoped_ptr<webrtc::WindowCapturer> window_capturer) = 0;
+ virtual scoped_ptr<DesktopMediaList> CreateModel(bool show_screens,
+ bool show_windows) = 0;
virtual scoped_ptr<DesktopMediaPicker> CreatePicker() = 0;
protected:
virtual ~PickerFactory() {}
virtual ~DesktopCaptureChooseDesktopMediaFunction();
// ExtensionFunction overrides.
- virtual bool RunImpl() OVERRIDE;
+ virtual bool RunAsync() OVERRIDE;
+
+ // content::WebContentsObserver overrides.
+ virtual void WebContentsDestroyed() OVERRIDE;
void OnPickerDialogResults(content::DesktopMediaID source);
int request_id_;
- // Parameters of the tab the stream is requested for.
- int render_process_id_;
- int render_view_id_;
+ // URL of page that desktop capture was requested for.
GURL origin_;
scoped_ptr<DesktopMediaPicker> picker_;
virtual ~DesktopCaptureCancelChooseDesktopMediaFunction();
// ExtensionFunction overrides.
- virtual bool RunImpl() OVERRIDE;
+ virtual bool RunSync() OVERRIDE;
};
class DesktopCaptureRequestsRegistry {