OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |