diff options
7 files changed, 124 insertions, 92 deletions
diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc index fb94f77..9cd24f25 100644 --- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc +++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc @@ -16,6 +16,7 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_view.h" +#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" @@ -126,8 +127,9 @@ bool DesktopCaptureChooseDesktopMediaFunction::RunImpl() { render_process_id_ = render_view->GetProcess()->GetID(); render_view_id_ = render_view->GetRoutingID(); - scoped_ptr<webrtc::ScreenCapturer> screen_capturer; - scoped_ptr<webrtc::WindowCapturer> window_capturer; + + bool show_screens = false; + bool show_windows = false; for (std::vector<api::desktop_capture::DesktopCaptureSourceType>::iterator it = params->sources.begin(); it != params->sources.end(); ++it) { @@ -137,17 +139,11 @@ bool DesktopCaptureChooseDesktopMediaFunction::RunImpl() { return false; case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN: -#if defined(OS_WIN) - // ScreenCapturerWin disables Aero by default. - screen_capturer.reset( - webrtc::ScreenCapturer::CreateWithDisableAero(false)); -#else - screen_capturer.reset(webrtc::ScreenCapturer::Create()); -#endif + show_screens = true; break; case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_WINDOW: - window_capturer.reset(webrtc::WindowCapturer::Create()); + show_windows = true; break; case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB: @@ -156,7 +152,7 @@ bool DesktopCaptureChooseDesktopMediaFunction::RunImpl() { } } - if (!screen_capturer && !window_capturer) { + if (!show_screens && !show_windows) { error_ = kEmptySourcesListError; return false; } @@ -164,19 +160,25 @@ bool DesktopCaptureChooseDesktopMediaFunction::RunImpl() { scoped_ptr<DesktopMediaList> media_list; if (g_picker_factory) { media_list = g_picker_factory->CreateModel( - screen_capturer.Pass(), window_capturer.Pass()); + show_screens, show_windows); picker_ = g_picker_factory->CreatePicker(); } else { // DesktopMediaPicker is implemented only for Windows, OSX and // Aura Linux builds. #if (defined(TOOLKIT_VIEWS) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) + webrtc::DesktopCaptureOptions options = + webrtc::DesktopCaptureOptions::CreateDefault(); + options.set_disable_effects(false); + scoped_ptr<webrtc::ScreenCapturer> screen_capturer( + show_screens ? webrtc::ScreenCapturer::Create(options) : NULL); + scoped_ptr<webrtc::WindowCapturer> window_capturer( + show_windows ? webrtc::WindowCapturer::Create(options) : NULL); + media_list.reset(new NativeDesktopMediaList( screen_capturer.Pass(), window_capturer.Pass())); picker_ = DesktopMediaPicker::Create(); #else - const char kNotImplementedError[] = - "Desktop Capture API is not yet implemented for this platform."; - error_ = kNotImplementedError; + error_ = "Desktop Capture API is not yet implemented for this platform."; return false; #endif } diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.h b/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.h index 5842684..4268316 100644 --- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.h +++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.h @@ -27,9 +27,8 @@ class DesktopCaptureChooseDesktopMediaFunction // Used for tests to supply fake picker. class PickerFactory { public: - virtual scoped_ptr<DesktopMediaList> 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() {} diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc index ebc7e5d..4bbe02b 100644 --- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc +++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc @@ -9,7 +9,7 @@ #include "base/thread_task_runner_handle.h" #include "chrome/browser/extensions/api/desktop_capture/desktop_capture_api.h" #include "chrome/browser/extensions/extension_apitest.h" -#include "chrome/browser/media/desktop_media_picker.h" +#include "chrome/browser/media/fake_desktop_media_list.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" @@ -17,8 +17,6 @@ #include "content/public/test/browser_test_utils.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" -#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" -#include "third_party/webrtc/modules/desktop_capture/window_capturer.h" namespace extensions { @@ -88,15 +86,14 @@ class FakeDesktopMediaPickerFactory : // DesktopCaptureChooseDesktopMediaFunction::PickerFactory interface. virtual scoped_ptr<DesktopMediaList> CreateModel( - scoped_ptr<webrtc::ScreenCapturer> screen_capturer, - scoped_ptr<webrtc::WindowCapturer> window_capturer) OVERRIDE { + bool show_screens, + bool show_windows) OVERRIDE { EXPECT_TRUE(!expectations_.empty()); if (!expectations_.empty()) { - EXPECT_EQ(expectations_.front().screens, !!screen_capturer.get()); - EXPECT_EQ(expectations_.front().windows, !!window_capturer.get()); + EXPECT_EQ(expectations_.front().screens, show_screens); + EXPECT_EQ(expectations_.front().windows, show_windows); } - return scoped_ptr<DesktopMediaList>(new NativeDesktopMediaList( - screen_capturer.Pass(), window_capturer.Pass())); + return scoped_ptr<DesktopMediaList>(new FakeDesktopMediaList()); } virtual scoped_ptr<DesktopMediaPicker> CreatePicker() OVERRIDE { content::DesktopMediaID next_source; diff --git a/chrome/browser/media/fake_desktop_media_list.cc b/chrome/browser/media/fake_desktop_media_list.cc new file mode 100644 index 0000000..3350e91 --- /dev/null +++ b/chrome/browser/media/fake_desktop_media_list.cc @@ -0,0 +1,59 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/media/fake_desktop_media_list.h" + +#include "chrome/browser/media/desktop_media_list_observer.h" +#include "ui/gfx/skia_util.h" + +FakeDesktopMediaList::FakeDesktopMediaList() : observer_(NULL) {} +FakeDesktopMediaList::~FakeDesktopMediaList() {} + +void FakeDesktopMediaList::AddSource(int id) { + Source source; + source.id = content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, id); + source.name = base::Int64ToString16(id); + + sources_.push_back(source); + observer_->OnSourceAdded(sources_.size() - 1); +} + +void FakeDesktopMediaList::RemoveSource(int index) { + sources_.erase(sources_.begin() + index); + observer_->OnSourceRemoved(sources_.size() - 1); +} + +void FakeDesktopMediaList::SetSourceThumbnail(int index) { + sources_[index].thumbnail = thumbnail_; + observer_->OnSourceThumbnailChanged(index); +} + +void FakeDesktopMediaList::SetSourceName(int index, string16 name) { + sources_[index].name = name; + observer_->OnSourceNameChanged(index); +} + +void FakeDesktopMediaList::SetUpdatePeriod(base::TimeDelta period) {} + +void FakeDesktopMediaList::SetThumbnailSize(const gfx::Size& thumbnail_size) {} + +void FakeDesktopMediaList::SetViewDialogWindowId( + content::DesktopMediaID::Id dialog_id) {} + +void FakeDesktopMediaList::StartUpdating(DesktopMediaListObserver* observer) { + observer_ = observer; + + SkBitmap bitmap; + bitmap.setConfig(SkBitmap::kARGB_8888_Config, 150, 150); + bitmap.allocPixels(); + bitmap.eraseRGB(0, 255, 0); + thumbnail_ = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); +} + +int FakeDesktopMediaList::GetSourceCount() const { return sources_.size(); } + +const DesktopMediaList::Source& FakeDesktopMediaList::GetSource( + int index) const { + return sources_[index]; +} diff --git a/chrome/browser/media/fake_desktop_media_list.h b/chrome/browser/media/fake_desktop_media_list.h new file mode 100644 index 0000000..67e7ffe --- /dev/null +++ b/chrome/browser/media/fake_desktop_media_list.h @@ -0,0 +1,37 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_MEDIA_FAKE_DESKTOP_MEDIA_LIST_H_ +#define CHROME_BROWSER_MEDIA_FAKE_DESKTOP_MEDIA_LIST_H_ + +#include <vector> + +#include "chrome/browser/media/desktop_media_list.h" + +class FakeDesktopMediaList : public DesktopMediaList { + public: + FakeDesktopMediaList(); + virtual ~FakeDesktopMediaList(); + + void AddSource(int id); + void RemoveSource(int index); + void SetSourceThumbnail(int index); + void SetSourceName(int index, string16 name); + + // DesktopMediaList implementation: + virtual void SetUpdatePeriod(base::TimeDelta period) OVERRIDE; + virtual void SetThumbnailSize(const gfx::Size& thumbnail_size) OVERRIDE; + virtual void SetViewDialogWindowId( + content::DesktopMediaID::Id dialog_id) OVERRIDE; + virtual void StartUpdating(DesktopMediaListObserver* observer) OVERRIDE; + virtual int GetSourceCount() const OVERRIDE; + virtual const Source& GetSource(int index) const OVERRIDE; + + private: + std::vector<Source> sources_; + DesktopMediaListObserver* observer_; + gfx::ImageSkia thumbnail_; +}; + +#endif // CHROME_BROWSER_MEDIA_FAKE_DESKTOP_MEDIA_LIST_H_ diff --git a/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm index 3901f95..17aa9a6 100644 --- a/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm @@ -8,6 +8,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/run_loop.h" #include "chrome/browser/media/desktop_media_list_observer.h" +#include "chrome/browser/media/fake_desktop_media_list.h" #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" #include "content/public/test/test_browser_thread_bundle.h" #include "testing/gtest_mac.h" @@ -36,71 +37,6 @@ } @end -class FakeDesktopMediaList : public DesktopMediaList { - public: - FakeDesktopMediaList() : observer_(NULL) { - } - - void AddSource(int id) { - Source source; - source.id = - content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, id); - source.name = base::Int64ToString16(id); - - sources_.push_back(source); - observer_->OnSourceAdded(sources_.size() - 1); - } - - void RemoveSource(int index) { - sources_.erase(sources_.begin() + index); - observer_->OnSourceRemoved(sources_.size() - 1); - } - - void SetSourceThumbnail(int index) { - sources_[index].thumbnail = thumbnail_; - observer_->OnSourceThumbnailChanged(index); - } - - void SetSourceName(int index, string16 name) { - sources_[index].name = name; - observer_->OnSourceNameChanged(index); - } - - // DesktopMediaList implementation: - virtual void SetUpdatePeriod(base::TimeDelta period) OVERRIDE { - } - - virtual void SetThumbnailSize(const gfx::Size& thumbnail_size) OVERRIDE { - } - - virtual void SetViewDialogWindowId( - content::DesktopMediaID::Id dialog_id) OVERRIDE { - } - - virtual void StartUpdating(DesktopMediaListObserver* observer) OVERRIDE { - observer_ = observer; - - SkBitmap bitmap; - bitmap.setConfig(SkBitmap::kARGB_8888_Config, 150, 150); - bitmap.allocPixels(); - bitmap.eraseRGB(0, 255, 0); - thumbnail_ = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); - } - - virtual int GetSourceCount() const OVERRIDE { - return sources_.size(); - } - - virtual const Source& GetSource(int index) const OVERRIDE { - return sources_[index]; - } - - private: - std::vector<Source> sources_; - DesktopMediaListObserver* observer_; - gfx::ImageSkia thumbnail_; -}; - class DesktopMediaPickerControllerTest : public CocoaTest { public: DesktopMediaPickerControllerTest() diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi index 4c48506..6cbd2a7 100644 --- a/chrome/chrome_tests_unit.gypi +++ b/chrome/chrome_tests_unit.gypi @@ -139,6 +139,8 @@ 'browser/extensions/test_extension_service.h', 'browser/extensions/test_extension_system.cc', 'browser/extensions/test_extension_system.h', + 'browser/media/fake_desktop_media_list.cc', + 'browser/media/fake_desktop_media_list.h', 'browser/media_galleries/media_galleries_test_util.cc', 'browser/media_galleries/media_galleries_test_util.h', 'browser/net/dns_probe_test_util.cc', |