Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Side by Side Diff: chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc

Issue 1503563004: Desktop chrome tab capture-chooseDesktopMedia() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review patch 5 Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/desktop_capture/desktop_capture_base.h" 5 #include "chrome/browser/extensions/api/desktop_capture/desktop_capture_base.h"
6 6
7 #include <tuple> 7 #include <tuple>
8 8
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/extensions/extension_tab_util.h" 10 #include "chrome/browser/extensions/extension_tab_util.h"
11 #include "chrome/browser/media/desktop_media_list_ash.h" 11 #include "chrome/browser/media/desktop_media_list_ash.h"
12 #include "chrome/browser/media/desktop_streams_registry.h" 12 #include "chrome/browser/media/desktop_streams_registry.h"
13 #include "chrome/browser/media/media_capture_devices_dispatcher.h" 13 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
14 #include "chrome/browser/media/native_desktop_media_list.h" 14 #include "chrome/browser/media/native_desktop_media_list.h"
15 #include "chrome/browser/ui/ash/ash_util.h" 15 #include "chrome/browser/ui/ash/ash_util.h"
16 #include "content/public/browser/render_frame_host.h" 16 #include "content/public/browser/render_frame_host.h"
17 #include "content/public/browser/render_process_host.h" 17 #include "content/public/browser/render_process_host.h"
18 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
19 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" 19 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
20 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" 20 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
21 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" 21 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h"
22 22
23 namespace extensions { 23 namespace extensions {
24 24
25 namespace { 25 namespace {
26 26
27 const char kInvalidSourceNameError[] = "Invalid source type specified."; 27 const char kInvalidSourceNameError[] = "Invalid source type specified.";
28 const char kEmptySourcesListError[] = 28 const char kEmptySourcesListError[] =
29 "At least one source type must be specified."; 29 "At least one source type must be specified.";
30 const char kTabCaptureNotSupportedError[] = "Tab capture is not supported yet.";
31 30
32 DesktopCaptureChooseDesktopMediaFunctionBase::PickerFactory* g_picker_factory = 31 DesktopCaptureChooseDesktopMediaFunctionBase::PickerFactory* g_picker_factory =
33 NULL; 32 NULL;
34 33
35 } // namespace 34 } // namespace
36 35
37 // static 36 // static
38 void DesktopCaptureChooseDesktopMediaFunctionBase::SetPickerFactoryForTests( 37 void DesktopCaptureChooseDesktopMediaFunctionBase::SetPickerFactoryForTests(
39 PickerFactory* factory) { 38 PickerFactory* factory) {
40 g_picker_factory = factory; 39 g_picker_factory = factory;
(...skipping 26 matching lines...) Expand all
67 bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( 66 bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
68 const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources, 67 const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources,
69 content::WebContents* web_contents, 68 content::WebContents* web_contents,
70 const GURL& origin, 69 const GURL& origin,
71 const base::string16 target_name) { 70 const base::string16 target_name) {
72 // Register to be notified when the tab is closed. 71 // Register to be notified when the tab is closed.
73 Observe(web_contents); 72 Observe(web_contents);
74 73
75 bool show_screens = false; 74 bool show_screens = false;
76 bool show_windows = false; 75 bool show_windows = false;
76 bool show_tabs = false;
77 77
78 for (auto source_type : sources) { 78 for (auto source_type : sources) {
79 switch (source_type) { 79 switch (source_type) {
80 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE: 80 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE:
81 error_ = kInvalidSourceNameError; 81 error_ = kInvalidSourceNameError;
82 return false; 82 return false;
83 83
84 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN: 84 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN:
85 show_screens = true; 85 show_screens = true;
86 break; 86 break;
87 87
88 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_WINDOW: 88 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_WINDOW:
89 show_windows = true; 89 show_windows = true;
90 break; 90 break;
91 91
92 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB: 92 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB:
93 error_ = kTabCaptureNotSupportedError; 93 show_tabs = true;
94 return false; 94 break;
95 } 95 }
96 } 96 }
97 97
98 if (!show_screens && !show_windows) { 98 if (!show_screens && !show_windows && !show_tabs) {
99 error_ = kEmptySourcesListError; 99 error_ = kEmptySourcesListError;
100 return false; 100 return false;
101 } 101 }
102 102
103 const gfx::NativeWindow parent_window = 103 const gfx::NativeWindow parent_window =
104 web_contents->GetTopLevelNativeWindow(); 104 web_contents->GetTopLevelNativeWindow();
105 scoped_ptr<DesktopMediaList> media_list; 105 scoped_ptr<DesktopMediaList> media_list;
106 if (g_picker_factory) { 106 if (g_picker_factory) {
107 media_list = g_picker_factory->CreateModel( 107 media_list = g_picker_factory->CreateModel(
108 show_screens, show_windows); 108 show_screens, show_windows);
109 picker_ = g_picker_factory->CreatePicker(); 109 picker_ = g_picker_factory->CreatePicker();
110 } else { 110 } else {
111 #if defined(USE_ASH) 111 #if defined(USE_ASH)
112 const int source_types = (show_screens ? DesktopMediaListAsh::SCREENS : 0) |
113 (show_windows ? DesktopMediaListAsh::WINDOWS : 0) |
114 (show_tabs ? DesktopMediaListAsh::TABS : 0);
112 if (chrome::IsNativeWindowInAsh(parent_window)) { 115 if (chrome::IsNativeWindowInAsh(parent_window)) {
113 media_list.reset(new DesktopMediaListAsh( 116 media_list.reset(new DesktopMediaListAsh(source_types));
114 (show_screens ? DesktopMediaListAsh::SCREENS : 0) |
115 (show_windows ? DesktopMediaListAsh::WINDOWS : 0)));
116 } 117 }
117 #endif 118 #endif
118 if (!media_list) { 119 if (!media_list) {
119 webrtc::DesktopCaptureOptions options = 120 webrtc::DesktopCaptureOptions options =
120 webrtc::DesktopCaptureOptions::CreateDefault(); 121 webrtc::DesktopCaptureOptions::CreateDefault();
121 options.set_disable_effects(false); 122 options.set_disable_effects(false);
122 scoped_ptr<webrtc::ScreenCapturer> screen_capturer( 123 scoped_ptr<webrtc::ScreenCapturer> screen_capturer(
123 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL); 124 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL);
124 scoped_ptr<webrtc::WindowCapturer> window_capturer( 125 scoped_ptr<webrtc::WindowCapturer> window_capturer(
125 show_windows ? webrtc::WindowCapturer::Create(options) : NULL); 126 show_windows ? webrtc::WindowCapturer::Create(options) : NULL);
126
127 media_list.reset(new NativeDesktopMediaList( 127 media_list.reset(new NativeDesktopMediaList(
128 screen_capturer.Pass(), window_capturer.Pass())); 128 screen_capturer.Pass(), window_capturer.Pass(), show_tabs));
129 } 129 }
130 130
131 // DesktopMediaPicker is implemented only for Windows, OSX and 131 // DesktopMediaPicker is implemented only for Windows, OSX and
132 // Aura Linux builds. 132 // Aura Linux builds.
133 // TODO(bshe): Use ANDROID_JAVA_UI flag here after it landed. 133 // TODO(bshe): Use ANDROID_JAVA_UI flag here after it landed.
134 #if (defined(TOOLKIT_VIEWS) && !defined(OS_ANDROID)) || defined(OS_MACOSX) 134 #if (defined(TOOLKIT_VIEWS) && !defined(OS_ANDROID)) || defined(OS_MACOSX)
135 // TODO(bshe): This is called if chrome.desktopCapture.chooseDesktopMedia 135 // TODO(bshe): This is called if chrome.desktopCapture.chooseDesktopMedia
136 // or chrome.webrtcDesktopCapturePrivate.chooseDesktopMedia are called by 136 // or chrome.webrtcDesktopCapturePrivate.chooseDesktopMedia are called by
137 // extensions. Simply return error message on Android platform for now. 137 // extensions. Simply return error message on Android platform for now.
138 // Revisit this when necessary. See crbug.com/557424. 138 // Revisit this when necessary. See crbug.com/557424.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 236
237 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id, 237 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id,
238 int request_id) { 238 int request_id) {
239 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id)); 239 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id));
240 if (it != requests_.end()) 240 if (it != requests_.end())
241 it->second->Cancel(); 241 it->second->Cancel();
242 } 242 }
243 243
244 244
245 } // namespace extensions 245 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698