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

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

Issue 1622733002: Add CombinedDesktopMediaList class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed for android build 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"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "chrome/browser/extensions/extension_tab_util.h" 12 #include "chrome/browser/extensions/extension_tab_util.h"
13 #include "chrome/browser/media/combined_desktop_media_list.h"
13 #include "chrome/browser/media/desktop_media_list_ash.h" 14 #include "chrome/browser/media/desktop_media_list_ash.h"
14 #include "chrome/browser/media/desktop_streams_registry.h" 15 #include "chrome/browser/media/desktop_streams_registry.h"
15 #include "chrome/browser/media/media_capture_devices_dispatcher.h" 16 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
16 #include "chrome/browser/media/native_desktop_media_list.h" 17 #include "chrome/browser/media/native_desktop_media_list.h"
18 #include "chrome/browser/media/tab_desktop_media_list.h"
17 #include "chrome/browser/ui/ash/ash_util.h" 19 #include "chrome/browser/ui/ash/ash_util.h"
18 #include "content/public/browser/render_frame_host.h" 20 #include "content/public/browser/render_frame_host.h"
19 #include "content/public/browser/render_process_host.h" 21 #include "content/public/browser/render_process_host.h"
20 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
21 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" 23 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
22 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" 24 #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
23 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h" 25 #include "third_party/webrtc/modules/desktop_capture/window_capturer.h"
24 26
25 namespace extensions { 27 namespace extensions {
26 28
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute( 71 bool DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
70 const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources, 72 const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources,
71 content::WebContents* web_contents, 73 content::WebContents* web_contents,
72 const GURL& origin, 74 const GURL& origin,
73 const base::string16 target_name) { 75 const base::string16 target_name) {
74 // Register to be notified when the tab is closed. 76 // Register to be notified when the tab is closed.
75 Observe(web_contents); 77 Observe(web_contents);
76 78
77 bool show_screens = false; 79 bool show_screens = false;
78 bool show_windows = false; 80 bool show_windows = false;
81 bool show_tabs = false;
79 82
80 for (auto source_type : sources) { 83 for (auto source_type : sources) {
81 switch (source_type) { 84 switch (source_type) {
82 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE: 85 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_NONE:
83 error_ = kInvalidSourceNameError; 86 error_ = kInvalidSourceNameError;
84 return false; 87 return false;
85 88
86 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN: 89 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_SCREEN:
87 show_screens = true; 90 show_screens = true;
88 break; 91 break;
89 92
90 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_WINDOW: 93 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_WINDOW:
91 show_windows = true; 94 show_windows = true;
92 break; 95 break;
93 96
94 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB: 97 case api::desktop_capture::DESKTOP_CAPTURE_SOURCE_TYPE_TAB:
98 // TODO(gyzhou) replace next two lines with line show_tabs = true after
99 // a flag for tab capture permission are added.
95 error_ = kTabCaptureNotSupportedError; 100 error_ = kTabCaptureNotSupportedError;
96 return false; 101 return false;
102 break;
qiangchen 2016/01/26 01:01:50 No need to break after return;
GeorgeZ 2016/01/27 00:17:37 Done.
97 } 103 }
98 } 104 }
99 105
100 if (!show_screens && !show_windows) { 106 if (!show_screens && !show_windows && !show_tabs) {
101 error_ = kEmptySourcesListError; 107 error_ = kEmptySourcesListError;
102 return false; 108 return false;
103 } 109 }
104 110
105 const gfx::NativeWindow parent_window = 111 const gfx::NativeWindow parent_window =
106 web_contents->GetTopLevelNativeWindow(); 112 web_contents->GetTopLevelNativeWindow();
107 scoped_ptr<DesktopMediaList> media_list; 113
114 std::vector<scoped_ptr<DesktopMediaList>> media_lists;
108 if (g_picker_factory) { 115 if (g_picker_factory) {
109 media_list = g_picker_factory->CreateModel( 116 scoped_ptr<DesktopMediaList> media_list =
110 show_screens, show_windows); 117 g_picker_factory->CreateModel(show_screens, show_windows);
118 media_lists.push_back(std::move(media_list));
111 picker_ = g_picker_factory->CreatePicker(); 119 picker_ = g_picker_factory->CreatePicker();
112 } else { 120 } else {
121 scoped_ptr<DesktopMediaList> screen_window_list;
113 #if defined(USE_ASH) 122 #if defined(USE_ASH)
114 if (chrome::IsNativeWindowInAsh(parent_window)) { 123 if (chrome::IsNativeWindowInAsh(parent_window)) {
115 media_list.reset(new DesktopMediaListAsh( 124 screen_window_list.reset(new DesktopMediaListAsh(
116 (show_screens ? DesktopMediaListAsh::SCREENS : 0) | 125 (show_screens ? DesktopMediaListAsh::SCREENS : 0) |
117 (show_windows ? DesktopMediaListAsh::WINDOWS : 0))); 126 (show_windows ? DesktopMediaListAsh::WINDOWS : 0)));
118 } 127 }
119 #endif 128 #endif
120 if (!media_list) { 129 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
121 webrtc::DesktopCaptureOptions options = 130 webrtc::DesktopCaptureOptions options =
122 webrtc::DesktopCaptureOptions::CreateDefault(); 131 webrtc::DesktopCaptureOptions::CreateDefault();
123 options.set_disable_effects(false); 132 options.set_disable_effects(false);
124 scoped_ptr<webrtc::ScreenCapturer> screen_capturer( 133 scoped_ptr<webrtc::ScreenCapturer> screen_capturer(
125 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL); 134 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL);
126 scoped_ptr<webrtc::WindowCapturer> window_capturer( 135 scoped_ptr<webrtc::WindowCapturer> window_capturer(
127 show_windows ? webrtc::WindowCapturer::Create(options) : NULL); 136 show_windows ? webrtc::WindowCapturer::Create(options) : NULL);
128 137
129 media_list.reset(new NativeDesktopMediaList(std::move(screen_capturer), 138 screen_window_list.reset(new NativeDesktopMediaList(
130 std::move(window_capturer))); 139 std::move(screen_capturer), std::move(window_capturer)));
140 }
141
142 media_lists.push_back(std::move(screen_window_list));
143 if (show_tabs) {
144 scoped_ptr<DesktopMediaList> tab_list(new TabDesktopMediaList());
145 media_lists.push_back(std::move(tab_list));
131 } 146 }
132 147
133 // DesktopMediaPicker is implemented only for Windows, OSX and 148 // DesktopMediaPicker is implemented only for Windows, OSX and
134 // Aura Linux builds. 149 // Aura Linux builds.
135 #if defined(TOOLKIT_VIEWS) || defined(OS_MACOSX) 150 #if defined(TOOLKIT_VIEWS) || defined(OS_MACOSX)
136 picker_ = DesktopMediaPicker::Create(); 151 picker_ = DesktopMediaPicker::Create();
137 #else 152 #else
138 error_ = "Desktop Capture API is not yet implemented for this platform."; 153 error_ = "Desktop Capture API is not yet implemented for this platform.";
139 return false; 154 return false;
140 #endif 155 #endif
141 } 156 }
157
158 scoped_ptr<CombinedDesktopMediaList> combined_list(
159 new CombinedDesktopMediaList(media_lists));
142 DesktopMediaPicker::DoneCallback callback = base::Bind( 160 DesktopMediaPicker::DoneCallback callback = base::Bind(
143 &DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults, 161 &DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults,
144 this); 162 this);
145 163
146 picker_->Show(web_contents, parent_window, parent_window, 164 picker_->Show(web_contents, parent_window, parent_window,
147 base::UTF8ToUTF16(extension()->name()), target_name, 165 base::UTF8ToUTF16(extension()->name()), target_name,
148 std::move(media_list), callback); 166 std::move(combined_list), callback);
149 origin_ = origin; 167 origin_ = origin;
150 return true; 168 return true;
151 } 169 }
152 170
153 void DesktopCaptureChooseDesktopMediaFunctionBase::WebContentsDestroyed() { 171 void DesktopCaptureChooseDesktopMediaFunctionBase::WebContentsDestroyed() {
154 Cancel(); 172 Cancel();
155 } 173 }
156 174
157 void DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults( 175 void DesktopCaptureChooseDesktopMediaFunctionBase::OnPickerDialogResults(
158 content::DesktopMediaID source) { 176 content::DesktopMediaID source) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 247
230 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id, 248 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id,
231 int request_id) { 249 int request_id) {
232 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id)); 250 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id));
233 if (it != requests_.end()) 251 if (it != requests_.end())
234 it->second->Cancel(); 252 it->second->Cancel();
235 } 253 }
236 254
237 255
238 } // namespace extensions 256 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/media/combined_desktop_media_list.h » ('j') | chrome/browser/media/combined_desktop_media_list.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698