OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Implements the Chrome Extensions Tab Capture API. | 5 // Implements the Chrome Extensions Tab Capture API. |
6 | 6 |
7 #include "chrome/browser/extensions/api/tab_capture/tab_capture_api.h" | 7 #include "chrome/browser/extensions/api/tab_capture/tab_capture_api.h" |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" | 12 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" |
13 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory
.h" | 13 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory
.h" |
14 #include "chrome/browser/extensions/browser_event_router.h" | 14 #include "chrome/browser/extensions/browser_event_router.h" |
15 #include "chrome/browser/extensions/event_names.h" | 15 #include "chrome/browser/extensions/event_names.h" |
16 #include "chrome/browser/extensions/extension_renderer_state.h" | 16 #include "chrome/browser/extensions/extension_renderer_state.h" |
17 #include "chrome/browser/extensions/tab_helper.h" | 17 #include "chrome/browser/extensions/tab_helper.h" |
18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
19 #include "chrome/browser/sessions/session_tab_helper.h" | 19 #include "chrome/browser/sessions/session_tab_helper.h" |
20 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
21 #include "chrome/browser/ui/browser_finder.h" | 21 #include "chrome/browser/ui/browser_finder.h" |
22 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 22 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
23 #include "chrome/common/chrome_switches.h" | 23 #include "chrome/common/chrome_switches.h" |
24 #include "chrome/common/extensions/feature_switch.h" | |
25 #include "chrome/common/extensions/features/base_feature_provider.h" | 24 #include "chrome/common/extensions/features/base_feature_provider.h" |
26 #include "chrome/common/extensions/features/simple_feature.h" | 25 #include "chrome/common/extensions/features/simple_feature.h" |
27 #include "content/public/browser/render_process_host.h" | 26 #include "content/public/browser/render_process_host.h" |
28 #include "content/public/browser/render_view_host.h" | 27 #include "content/public/browser/render_view_host.h" |
29 | 28 |
30 using extensions::api::tab_capture::MediaStreamConstraint; | 29 using extensions::api::tab_capture::MediaStreamConstraint; |
31 | 30 |
32 namespace TabCapture = extensions::api::tab_capture; | 31 namespace TabCapture = extensions::api::tab_capture; |
33 namespace GetCapturedTabs = TabCapture::GetCapturedTabs; | 32 namespace GetCapturedTabs = TabCapture::GetCapturedTabs; |
34 | 33 |
(...skipping 10 matching lines...) Expand all Loading... |
45 "permission). Chrome pages cannot be captured."; | 44 "permission). Chrome pages cannot be captured."; |
46 | 45 |
47 // Keys/values for media stream constraints. | 46 // Keys/values for media stream constraints. |
48 const char kMediaStreamSource[] = "chromeMediaSource"; | 47 const char kMediaStreamSource[] = "chromeMediaSource"; |
49 const char kMediaStreamSourceId[] = "chromeMediaSourceId"; | 48 const char kMediaStreamSourceId[] = "chromeMediaSourceId"; |
50 const char kMediaStreamSourceTab[] = "tab"; | 49 const char kMediaStreamSourceTab[] = "tab"; |
51 | 50 |
52 } // namespace | 51 } // namespace |
53 | 52 |
54 bool TabCaptureCaptureFunction::RunImpl() { | 53 bool TabCaptureCaptureFunction::RunImpl() { |
55 if (!FeatureSwitch::tab_capture()->IsEnabled()) { | |
56 error_ = kPermissionError; | |
57 return false; | |
58 } | |
59 | |
60 scoped_ptr<api::tab_capture::Capture::Params> params = | 54 scoped_ptr<api::tab_capture::Capture::Params> params = |
61 TabCapture::Capture::Params::Create(*args_); | 55 TabCapture::Capture::Params::Create(*args_); |
62 EXTENSION_FUNCTION_VALIDATE(params.get()); | 56 EXTENSION_FUNCTION_VALIDATE(params.get()); |
63 | 57 |
64 // Figure out the active WebContents and retrieve the needed ids. | 58 // Figure out the active WebContents and retrieve the needed ids. |
65 Browser* target_browser = chrome::FindAnyBrowser(profile(), | 59 Browser* target_browser = chrome::FindAnyBrowser(profile(), |
66 include_incognito(), | 60 include_incognito(), |
67 chrome::GetActiveDesktop()); | 61 chrome::GetActiveDesktop()); |
68 if (!target_browser) { | 62 if (!target_browser) { |
69 error_ = kFindingTabError; | 63 error_ = kFindingTabError; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 // intercepted by custom bindings which will build and send the special | 143 // intercepted by custom bindings which will build and send the special |
150 // WebRTC user media request. | 144 // WebRTC user media request. |
151 base::DictionaryValue* result = new base::DictionaryValue(); | 145 base::DictionaryValue* result = new base::DictionaryValue(); |
152 result->MergeDictionary(params->options.ToValue().get()); | 146 result->MergeDictionary(params->options.ToValue().get()); |
153 | 147 |
154 SetResult(result); | 148 SetResult(result); |
155 return true; | 149 return true; |
156 } | 150 } |
157 | 151 |
158 bool TabCaptureGetCapturedTabsFunction::RunImpl() { | 152 bool TabCaptureGetCapturedTabsFunction::RunImpl() { |
159 if (!FeatureSwitch::tab_capture()->IsEnabled()) { | |
160 error_ = kPermissionError; | |
161 return false; | |
162 } | |
163 | |
164 extensions::TabCaptureRegistry* registry = | 153 extensions::TabCaptureRegistry* registry = |
165 extensions::TabCaptureRegistryFactory::GetForProfile(profile()); | 154 extensions::TabCaptureRegistryFactory::GetForProfile(profile()); |
166 | 155 |
167 const TabCaptureRegistry::RegistryCaptureInfo& captured_tabs = | 156 const TabCaptureRegistry::RegistryCaptureInfo& captured_tabs = |
168 registry->GetCapturedTabs(GetExtension()->id()); | 157 registry->GetCapturedTabs(GetExtension()->id()); |
169 | 158 |
170 base::ListValue *list = new base::ListValue(); | 159 base::ListValue *list = new base::ListValue(); |
171 for (TabCaptureRegistry::RegistryCaptureInfo::const_iterator it = | 160 for (TabCaptureRegistry::RegistryCaptureInfo::const_iterator it = |
172 captured_tabs.begin(); it != captured_tabs.end(); ++it) { | 161 captured_tabs.begin(); it != captured_tabs.end(); ++it) { |
173 scoped_ptr<tab_capture::CaptureInfo> info(new tab_capture::CaptureInfo()); | 162 scoped_ptr<tab_capture::CaptureInfo> info(new tab_capture::CaptureInfo()); |
174 info->tab_id = it->first; | 163 info->tab_id = it->first; |
175 info->status = it->second; | 164 info->status = it->second; |
176 list->Append(info->ToValue().release()); | 165 list->Append(info->ToValue().release()); |
177 } | 166 } |
178 | 167 |
179 SetResult(list); | 168 SetResult(list); |
180 return true; | 169 return true; |
181 } | 170 } |
182 | 171 |
183 } // namespace extensions | 172 } // namespace extensions |
OLD | NEW |