Chromium Code Reviews| Index: chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc |
| diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc |
| index fccf615c9eecd33b6737ad7439b3405340281109..c8ff00752cca7be8b476f619ba255f722fa42bcf 100644 |
| --- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc |
| +++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc |
| @@ -10,10 +10,12 @@ |
| #include "base/strings/utf_string_conversions.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/extensions/extension_tab_util.h" |
| +#include "chrome/browser/media/combined_desktop_media_list.h" |
| #include "chrome/browser/media/desktop_media_list_ash.h" |
| #include "chrome/browser/media/desktop_streams_registry.h" |
| #include "chrome/browser/media/media_capture_devices_dispatcher.h" |
| #include "chrome/browser/media/native_desktop_media_list.h" |
| +#include "chrome/browser/media/tab_desktop_media_list.h" |
| #include "chrome/browser/ui/ash/ash_util.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/render_process_host.h" |
| @@ -76,6 +78,7 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( |
| bool show_screens = false; |
| bool show_windows = false; |
| + bool show_tabs = false; |
| for (auto source_type : sources) { |
| switch (source_type) { |
| @@ -92,32 +95,38 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( |
| break; |
| case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB: |
| + // TODO(gyzhou) replace next two lines with line show_tabs = true after |
| + // a flag for tab capture permission are added. |
| error_ = kTabCaptureNotSupportedError; |
| return false; |
| + break; |
|
qiangchen
2016/01/26 01:01:50
No need to break after return;
GeorgeZ
2016/01/27 00:17:37
Done.
|
| } |
| } |
| - if (!show_screens && !show_windows) { |
| + if (!show_screens && !show_windows && !show_tabs) { |
| error_ = kEmptySourcesListError; |
| return false; |
| } |
| const gfx::NativeWindow parent_window = |
| web_contents->GetTopLevelNativeWindow(); |
| - scoped_ptr<DesktopMediaList> media_list; |
| + |
| + std::vector<scoped_ptr<DesktopMediaList>> media_lists; |
| if (g_picker_factory) { |
| - media_list = g_picker_factory->CreateModel( |
| - show_screens, show_windows); |
| + scoped_ptr<DesktopMediaList> media_list = |
| + g_picker_factory->CreateModel(show_screens, show_windows); |
| + media_lists.push_back(std::move(media_list)); |
| picker_ = g_picker_factory->CreatePicker(); |
| } else { |
| + scoped_ptr<DesktopMediaList> screen_window_list; |
| #if defined(USE_ASH) |
| if (chrome::IsNativeWindowInAsh(parent_window)) { |
| - media_list.reset(new DesktopMediaListAsh( |
| + screen_window_list.reset(new DesktopMediaListAsh( |
| (show_screens ? DesktopMediaListAsh::SCREENS : 0) | |
| (show_windows ? DesktopMediaListAsh::WINDOWS : 0))); |
| } |
| #endif |
| - if (!media_list) { |
| + if (!screen_window_list) { |
|
qiangchen
2016/01/26 01:01:50
Not your fault.
But I think it would be better to
GeorgeZ
2016/01/27 00:17:37
I am not sure whether USE_ASH case will never use
|
| webrtc::DesktopCaptureOptions options = |
| webrtc::DesktopCaptureOptions::CreateDefault(); |
| options.set_disable_effects(false); |
| @@ -126,8 +135,14 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( |
| scoped_ptr<webrtc::WindowCapturer> window_capturer( |
| show_windows ? webrtc::WindowCapturer::Create(options) : NULL); |
| - media_list.reset(new NativeDesktopMediaList(std::move(screen_capturer), |
| - std::move(window_capturer))); |
| + screen_window_list.reset(new NativeDesktopMediaList( |
| + std::move(screen_capturer), std::move(window_capturer))); |
| + } |
| + |
| + media_lists.push_back(std::move(screen_window_list)); |
| + if (show_tabs) { |
| + scoped_ptr<DesktopMediaList> tab_list(new TabDesktopMediaList()); |
| + media_lists.push_back(std::move(tab_list)); |
| } |
| // DesktopMediaPicker is implemented only for Windows, OSX and |
| @@ -139,13 +154,16 @@ bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( |
| return false; |
| #endif |
| } |
| + |
| + scoped_ptr<CombinedDesktopMediaList> combined_list( |
| + new CombinedDesktopMediaList(media_lists)); |
| DesktopMediaPicker::DoneCallback callback = base::Bind( |
| &DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults, |
| this); |
| picker_->Show(web_contents, parent_window, parent_window, |
| base::UTF8ToUTF16(extension()->name()), target_name, |
| - std::move(media_list), callback); |
| + std::move(combined_list), callback); |
| origin_ = origin; |
| return true; |
| } |