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

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: Created 4 years, 11 months 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 #include <utility> 8 #include <utility>
9 9
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 11 matching lines...) Expand all
22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" 22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" 23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h"
24 24
25 namespace extensions { 25 namespace extensions {
26 26
27 namespace { 27 namespace {
28 28
29 const char kInvalidSourceNameError[] = "Invalid source type specified."; 29 const char kInvalidSourceNameError[] = "Invalid source type specified.";
30 const char kEmptySourcesListError[] = 30 const char kEmptySourcesListError[] =
31 "At least one source type must be specified."; 31 "At least one source type must be specified.";
32 const char kTabCaptureNotSupportedError[] = "Tab capture is not supported yet.";
33 32
34 DesktopCaptureChooseDesktopMediaFunctionBase::PickerFactory* g_picker_factory = 33 DesktopCaptureChooseDesktopMediaFunctionBase::PickerFactory* g_picker_factory =
35 NULL; 34 NULL;
36 35
37 } // namespace 36 } // namespace
38 37
39 // static 38 // static
40 void DesktopCaptureChooseDesktopMediaFunctionBase::SetPickerFactoryForTests( 39 void DesktopCaptureChooseDesktopMediaFunctionBase::SetPickerFactoryForTests(
41 PickerFactory* factory) { 40 PickerFactory* factory) {
42 g_picker_factory = factory; 41 g_picker_factory = factory;
(...skipping 26 matching lines...) Expand all
69 bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( 68 bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
70 const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources, 69 const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources,
71 content::WebContents* web_contents, 70 content::WebContents* web_contents,
72 const GURL& origin, 71 const GURL& origin,
73 const base::string16 target_name) { 72 const base::string16 target_name) {
74 // Register to be notified when the tab is closed. 73 // Register to be notified when the tab is closed.
75 Observe(web_contents); 74 Observe(web_contents);
76 75
77 bool show_screens = false; 76 bool show_screens = false;
78 bool show_windows = false; 77 bool show_windows = false;
78 bool show_tabs = false;
79 79
80 for (auto source_type : sources) { 80 for (auto source_type : sources) {
81 switch (source_type) { 81 switch (source_type) {
82 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE: 82 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE:
83 error_ = kInvalidSourceNameError; 83 error_ = kInvalidSourceNameError;
84 return false; 84 return false;
85 85
86 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN: 86 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN:
87 show_screens = true; 87 show_screens = true;
88 break; 88 break;
89 89
90 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_WINDOW: 90 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_WINDOW:
91 show_windows = true; 91 show_windows = true;
92 break; 92 break;
93 93
94 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB: 94 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB:
95 error_ = kTabCaptureNotSupportedError; 95 show_tabs = true;
Sergey Ulanov 2016/01/13 19:06:11 tab capture is still not implemented yet. leave th
GeorgeZ 2016/01/13 22:29:02 Done.
96 return false; 96 break;
97 } 97 }
98 } 98 }
99 99
100 if (!show_screens && !show_windows) { 100 if (!show_screens && !show_windows && !show_tabs) {
101 error_ = kEmptySourcesListError; 101 error_ = kEmptySourcesListError;
102 return false; 102 return false;
103 } 103 }
104 104
105 const gfx::NativeWindow parent_window = 105 const gfx::NativeWindow parent_window =
106 web_contents->GetTopLevelNativeWindow(); 106 web_contents->GetTopLevelNativeWindow();
107 scoped_ptr<DesktopMediaList> media_list; 107 scoped_ptr<DesktopMediaList> media_list;
108 if (g_picker_factory) { 108 if (g_picker_factory) {
109 media_list = g_picker_factory->CreateModel( 109 media_list = g_picker_factory->CreateModel(
110 show_screens, show_windows); 110 show_screens, show_windows);
111 picker_ = g_picker_factory->CreatePicker(); 111 picker_ = g_picker_factory->CreatePicker();
112 } else { 112 } else {
113 #if defined(USE_ASH) 113 #if defined(USE_ASH)
114 const int source_types = (show_screens ? DesktopMediaListAsh::SCREENS : 0) |
Sergey Ulanov 2016/01/13 19:06:11 Move this inside the if statement below, but I'm n
GeorgeZ 2016/01/13 22:29:02 Done.
115 (show_windows ? DesktopMediaListAsh::WINDOWS : 0);
114 if (chrome::IsNativeWindowInAsh(parent_window)) { 116 if (chrome::IsNativeWindowInAsh(parent_window)) {
115 media_list.reset(new DesktopMediaListAsh( 117 media_list.reset(new DesktopMediaListAsh(source_types));
116 (show_screens ? DesktopMediaListAsh::SCREENS : 0) |
117 (show_windows ? DesktopMediaListAsh::WINDOWS : 0)));
118 } 118 }
119 #endif 119 #endif
120 if (!media_list) { 120 if (!media_list) {
121 webrtc::DesktopCaptureOptions options = 121 webrtc::DesktopCaptureOptions options =
122 webrtc::DesktopCaptureOptions::CreateDefault(); 122 webrtc::DesktopCaptureOptions::CreateDefault();
123 options.set_disable_effects(false); 123 options.set_disable_effects(false);
124 scoped_ptr<webrtc::ScreenCapturer> screen_capturer( 124 scoped_ptr<webrtc::ScreenCapturer> screen_capturer(
125 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL); 125 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL);
126 scoped_ptr<webrtc::WindowCapturer> window_capturer( 126 scoped_ptr<webrtc::WindowCapturer> window_capturer(
127 show_windows ? webrtc::WindowCapturer::Create(options) : NULL); 127 show_windows ? webrtc::WindowCapturer::Create(options) : NULL);
128 128 media_list.reset(new NativeDesktopMediaList(
129 media_list.reset(new NativeDesktopMediaList(std::move(screen_capturer), 129 std::move(screen_capturer), std::move(window_capturer)));
130 std::move(window_capturer)));
131 } 130 }
132 131
133 // DesktopMediaPicker is implemented only for Windows, OSX and 132 // DesktopMediaPicker is implemented only for Windows, OSX and
134 // Aura Linux builds. 133 // Aura Linux builds.
135 // TODO(bshe): Use ANDROID_JAVA_UI flag here after it landed. 134 // TODO(bshe): Use ANDROID_JAVA_UI flag here after it landed.
136 #if (defined(TOOLKIT_VIEWS) && !defined(OS_ANDROID)) || defined(OS_MACOSX) 135 #if (defined(TOOLKIT_VIEWS) && !defined(OS_ANDROID)) || defined(OS_MACOSX)
137 // TODO(bshe): This is called if chrome.desktopCapture.chooseDesktopMedia 136 // TODO(bshe): This is called if chrome.desktopCapture.chooseDesktopMedia
138 // or chrome.webrtcDesktopCapturePrivate.chooseDesktopMedia are called by 137 // or chrome.webrtcDesktopCapturePrivate.chooseDesktopMedia are called by
139 // extensions. Simply return error message on Android platform for now. 138 // extensions. Simply return error message on Android platform for now.
140 // Revisit this when necessary. See crbug.com/557424. 139 // Revisit this when necessary. See crbug.com/557424.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 233
235 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id, 234 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id,
236 int request_id) { 235 int request_id) {
237 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id)); 236 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id));
238 if (it != requests_.end()) 237 if (it != requests_.end())
239 it->second->Cancel(); 238 it->second->Cancel();
240 } 239 }
241 240
242 241
243 } // namespace extensions 242 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698