| 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; |
| 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) | |
| 115 (show_windows ? DesktopMediaListAsh::WINDOWS : 0) | |
| 116 (show_tabs ? DesktopMediaListAsh::TABS : 0); |
| 114 if (chrome::IsNativeWindowInAsh(parent_window)) { | 117 if (chrome::IsNativeWindowInAsh(parent_window)) { |
| 115 media_list.reset(new DesktopMediaListAsh( | 118 media_list.reset(new DesktopMediaListAsh(source_types)); |
| 116 (show_screens ? DesktopMediaListAsh::SCREENS : 0) | | |
| 117 (show_windows ? DesktopMediaListAsh::WINDOWS : 0))); | |
| 118 } | 119 } |
| 119 #endif | 120 #endif |
| 120 if (!media_list) { | 121 if (!media_list) { |
| 121 webrtc::DesktopCaptureOptions options = | 122 webrtc::DesktopCaptureOptions options = |
| 122 webrtc::DesktopCaptureOptions::CreateDefault(); | 123 webrtc::DesktopCaptureOptions::CreateDefault(); |
| 123 options.set_disable_effects(false); | 124 options.set_disable_effects(false); |
| 124 scoped_ptr<webrtc::ScreenCapturer> screen_capturer( | 125 scoped_ptr<webrtc::ScreenCapturer> screen_capturer( |
| 125 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL); | 126 show_screens ? webrtc::ScreenCapturer::Create(options) : NULL); |
| 126 scoped_ptr<webrtc::WindowCapturer> window_capturer( | 127 scoped_ptr<webrtc::WindowCapturer> window_capturer( |
| 127 show_windows ? webrtc::WindowCapturer::Create(options) : NULL); | 128 show_windows ? webrtc::WindowCapturer::Create(options) : NULL); |
| 128 | 129 media_list.reset(new NativeDesktopMediaList( |
| 129 media_list.reset(new NativeDesktopMediaList(std::move(screen_capturer), | 130 std::move(screen_capturer), std::move(window_capturer), show_tabs)); |
| 130 std::move(window_capturer))); | |
| 131 } | 131 } |
| 132 | 132 |
| 133 // DesktopMediaPicker is implemented only for Windows, OSX and | 133 // DesktopMediaPicker is implemented only for Windows, OSX and |
| 134 // Aura Linux builds. | 134 // Aura Linux builds. |
| 135 // TODO(bshe): Use ANDROID_JAVA_UI flag here after it landed. | 135 // TODO(bshe): Use ANDROID_JAVA_UI flag here after it landed. |
| 136 #if (defined(TOOLKIT_VIEWS) && !defined(OS_ANDROID)) || defined(OS_MACOSX) | 136 #if (defined(TOOLKIT_VIEWS) && !defined(OS_ANDROID)) || defined(OS_MACOSX) |
| 137 // TODO(bshe): This is called if chrome.desktopCapture.chooseDesktopMedia | 137 // TODO(bshe): This is called if chrome.desktopCapture.chooseDesktopMedia |
| 138 // or chrome.webrtcDesktopCapturePrivate.chooseDesktopMedia are called by | 138 // or chrome.webrtcDesktopCapturePrivate.chooseDesktopMedia are called by |
| 139 // extensions. Simply return error message on Android platform for now. | 139 // extensions. Simply return error message on Android platform for now. |
| 140 // Revisit this when necessary. See crbug.com/557424. | 140 // Revisit this when necessary. See crbug.com/557424. |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 | 234 |
| 235 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id, | 235 void DesktopCaptureRequestsRegistry::CancelRequest(int process_id, |
| 236 int request_id) { | 236 int request_id) { |
| 237 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id)); | 237 RequestsMap::iterator it = requests_.find(RequestId(process_id, request_id)); |
| 238 if (it != requests_.end()) | 238 if (it != requests_.end()) |
| 239 it->second->Cancel(); | 239 it->second->Cancel(); |
| 240 } | 240 } |
| 241 | 241 |
| 242 | 242 |
| 243 } // namespace extensions | 243 } // namespace extensions |
| OLD | NEW |