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

Side by Side Diff: chrome/browser/devtools/device/devtools_android_bridge.cc

Issue 762903004: Enabling WebRTCDeviceProvider under enable-devtools-experiments flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-web-client
Patch Set: Created 6 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/devtools/device/devtools_android_bridge.h" 5 #include "chrome/browser/devtools/device/devtools_android_bridge.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/command_line.h"
12 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
13 #include "base/json/json_reader.h" 14 #include "base/json/json_reader.h"
14 #include "base/lazy_instance.h" 15 #include "base/lazy_instance.h"
15 #include "base/memory/singleton.h" 16 #include "base/memory/singleton.h"
16 #include "base/message_loop/message_loop.h" 17 #include "base/message_loop/message_loop.h"
17 #include "base/prefs/pref_service.h" 18 #include "base/prefs/pref_service.h"
18 #include "base/strings/string_number_conversions.h" 19 #include "base/strings/string_number_conversions.h"
19 #include "base/strings/string_util.h" 20 #include "base/strings/string_util.h"
20 #include "base/strings/stringprintf.h" 21 #include "base/strings/stringprintf.h"
21 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
22 #include "base/threading/thread.h" 23 #include "base/threading/thread.h"
23 #include "base/values.h" 24 #include "base/values.h"
24 #include "chrome/browser/devtools/browser_list_tabcontents_provider.h" 25 #include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
25 #include "chrome/browser/devtools/device/adb/adb_device_info_query.h" 26 #include "chrome/browser/devtools/device/adb/adb_device_info_query.h"
26 #include "chrome/browser/devtools/device/adb/adb_device_provider.h" 27 #include "chrome/browser/devtools/device/adb/adb_device_provider.h"
27 #include "chrome/browser/devtools/device/port_forwarding_controller.h" 28 #include "chrome/browser/devtools/device/port_forwarding_controller.h"
28 #include "chrome/browser/devtools/device/self_device_provider.h" 29 #include "chrome/browser/devtools/device/self_device_provider.h"
29 #include "chrome/browser/devtools/device/usb/usb_device_provider.h" 30 #include "chrome/browser/devtools/device/usb/usb_device_provider.h"
31 #include "chrome/browser/devtools/device/webrtc/webrtc_device_provider.h"
30 #include "chrome/browser/devtools/devtools_protocol.h" 32 #include "chrome/browser/devtools/devtools_protocol.h"
31 #include "chrome/browser/devtools/devtools_target_impl.h" 33 #include "chrome/browser/devtools/devtools_target_impl.h"
32 #include "chrome/browser/devtools/devtools_window.h" 34 #include "chrome/browser/devtools/devtools_window.h"
33 #include "chrome/browser/profiles/profile.h" 35 #include "chrome/browser/profiles/profile.h"
36 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
37 #include "chrome/browser/signin/signin_manager_factory.h"
38 #include "chrome/common/chrome_switches.h"
34 #include "chrome/common/pref_names.h" 39 #include "chrome/common/pref_names.h"
35 #include "components/keyed_service/content/browser_context_dependency_manager.h" 40 #include "components/keyed_service/content/browser_context_dependency_manager.h"
41 #include "components/signin/core/browser/profile_oauth2_token_service.h"
42 #include "components/signin/core/browser/signin_manager.h"
36 #include "content/public/browser/devtools_agent_host.h" 43 #include "content/public/browser/devtools_agent_host.h"
37 #include "content/public/browser/devtools_external_agent_proxy.h" 44 #include "content/public/browser/devtools_external_agent_proxy.h"
38 #include "content/public/browser/devtools_external_agent_proxy_delegate.h" 45 #include "content/public/browser/devtools_external_agent_proxy_delegate.h"
39 #include "content/public/browser/user_metrics.h" 46 #include "content/public/browser/user_metrics.h"
40 #include "net/base/escape.h" 47 #include "net/base/escape.h"
41 #include "net/base/net_errors.h" 48 #include "net/base/net_errors.h"
42 49
43 using content::BrowserThread; 50 using content::BrowserThread;
44 51
45 namespace { 52 namespace {
46 53
47 const char kPageListRequest[] = "/json"; 54 const char kPageListRequest[] = "/json";
48 const char kVersionRequest[] = "/json/version"; 55 const char kVersionRequest[] = "/json/version";
49 const char kClosePageRequest[] = "/json/close/%s"; 56 const char kClosePageRequest[] = "/json/close/%s";
50 const char kNewPageRequest[] = "/json/new"; 57 const char kNewPageRequest[] = "/json/new";
51 const char kNewPageRequestWithURL[] = "/json/new?%s"; 58 const char kNewPageRequestWithURL[] = "/json/new?%s";
52 const char kActivatePageRequest[] = "/json/activate/%s"; 59 const char kActivatePageRequest[] = "/json/activate/%s";
53 const char kBrowserTargetSocket[] = "/devtools/browser"; 60 const char kBrowserTargetSocket[] = "/devtools/browser";
54 const int kAdbPollingIntervalMs = 1000; 61 const int kAdbPollingIntervalMs = 1000;
55 62
56 const char kUrlParam[] = "url"; 63 const char kUrlParam[] = "url";
57 const char kPageReloadCommand[] = "Page.reload"; 64 const char kPageReloadCommand[] = "Page.reload";
58 const char kPageNavigateCommand[] = "Page.navigate"; 65 const char kPageNavigateCommand[] = "Page.navigate";
59 66
60 const int kMinVersionNewWithURL = 32; 67 const int kMinVersionNewWithURL = 32;
61 const int kNewPageNavigateDelayMs = 500; 68 const int kNewPageNavigateDelayMs = 500;
62 69
70 bool IsWebRTCDeviceProviderEnabled() {
71 return base::CommandLine::ForCurrentProcess()->HasSwitch(
72 switches::kEnableDevToolsExperiments);
73 }
74
63 } // namespace 75 } // namespace
64 76
65 // DiscoveryRequest ----------------------------------------------------- 77 // DiscoveryRequest -----------------------------------------------------
66 78
67 class DevToolsAndroidBridge::DiscoveryRequest 79 class DevToolsAndroidBridge::DiscoveryRequest
68 : public base::RefCountedThreadSafe<DiscoveryRequest, 80 : public base::RefCountedThreadSafe<DiscoveryRequest,
69 BrowserThread::DeleteOnUIThread> { 81 BrowserThread::DeleteOnUIThread> {
70 public: 82 public:
71 DiscoveryRequest(AndroidDeviceManager* device_manager, 83 DiscoveryRequest(AndroidDeviceManager* device_manager,
72 const DeviceListCallback& callback); 84 const DeviceListCallback& callback);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 // static 257 // static
246 DevToolsAndroidBridge* DevToolsAndroidBridge::Factory::GetForProfile( 258 DevToolsAndroidBridge* DevToolsAndroidBridge::Factory::GetForProfile(
247 Profile* profile) { 259 Profile* profile) {
248 return static_cast<DevToolsAndroidBridge*>(GetInstance()-> 260 return static_cast<DevToolsAndroidBridge*>(GetInstance()->
249 GetServiceForBrowserContext(profile, true)); 261 GetServiceForBrowserContext(profile, true));
250 } 262 }
251 263
252 DevToolsAndroidBridge::Factory::Factory() 264 DevToolsAndroidBridge::Factory::Factory()
253 : BrowserContextKeyedServiceFactory( 265 : BrowserContextKeyedServiceFactory(
254 "DevToolsAndroidBridge", 266 "DevToolsAndroidBridge",
255 BrowserContextDependencyManager::GetInstance()) {} 267 BrowserContextDependencyManager::GetInstance()) {
268 if (IsWebRTCDeviceProviderEnabled()) {
269 DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
270 DependsOn(SigninManagerFactory::GetInstance());
271 }
272 }
256 273
257 DevToolsAndroidBridge::Factory::~Factory() {} 274 DevToolsAndroidBridge::Factory::~Factory() {}
258 275
259 KeyedService* DevToolsAndroidBridge::Factory::BuildServiceInstanceFor( 276 KeyedService* DevToolsAndroidBridge::Factory::BuildServiceInstanceFor(
260 content::BrowserContext* context) const { 277 content::BrowserContext* context) const {
261 return new DevToolsAndroidBridge(Profile::FromBrowserContext(context)); 278 Profile* profile = Profile::FromBrowserContext(context);
279
280 ProfileOAuth2TokenService* token_service = nullptr;
281 SigninManagerBase* signin_manager = nullptr;
282
283 if (IsWebRTCDeviceProviderEnabled()) {
284 token_service = ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
285 signin_manager = SigninManagerFactory::GetForProfile(profile);
286 }
287
288 return new DevToolsAndroidBridge(
289 profile, signin_manager, token_service);
262 } 290 }
263 291
264 // AgentHostDelegate ---------------------------------------------------------- 292 // AgentHostDelegate ----------------------------------------------------------
265 293
266 class DevToolsAndroidBridge::AgentHostDelegate 294 class DevToolsAndroidBridge::AgentHostDelegate
267 : public content::DevToolsExternalAgentProxyDelegate, 295 : public content::DevToolsExternalAgentProxyDelegate,
268 public AndroidDeviceManager::AndroidWebSocket::Delegate { 296 public AndroidDeviceManager::AndroidWebSocket::Delegate {
269 public: 297 public:
270 static scoped_refptr<content::DevToolsAgentHost> GetOrCreateAgentHost( 298 static scoped_refptr<content::DevToolsAgentHost> GetOrCreateAgentHost(
271 DevToolsAndroidBridge* bridge, 299 DevToolsAndroidBridge* bridge,
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 ++it) { 783 ++it) {
756 browsers_.push_back(new RemoteBrowser(serial, *it)); 784 browsers_.push_back(new RemoteBrowser(serial, *it));
757 } 785 }
758 } 786 }
759 787
760 DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() { 788 DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() {
761 } 789 }
762 790
763 // DevToolsAndroidBridge ------------------------------------------------------ 791 // DevToolsAndroidBridge ------------------------------------------------------
764 792
765 DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile) 793 DevToolsAndroidBridge::DevToolsAndroidBridge(
794 Profile* profile,
795 SigninManagerBase* signin_manager,
796 ProfileOAuth2TokenService* const token_service)
766 : profile_(profile), 797 : profile_(profile),
798 signin_manager_(signin_manager),
799 token_service_(token_service),
767 device_manager_(AndroidDeviceManager::Create()), 800 device_manager_(AndroidDeviceManager::Create()),
768 task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)), 801 task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)),
769 port_forwarding_controller_(new PortForwardingController(profile, this)), 802 port_forwarding_controller_(new PortForwardingController(profile, this)),
770 weak_factory_(this) { 803 weak_factory_(this) {
771 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 804 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
772 pref_change_registrar_.Init(profile_->GetPrefs()); 805 pref_change_registrar_.Init(profile_->GetPrefs());
773 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled, 806 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled,
774 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders, 807 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders,
775 base::Unretained(this))); 808 base::Unretained(this)));
776 CreateDeviceProviders(); 809 CreateDeviceProviders();
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 994
962 PrefService* service = profile_->GetPrefs(); 995 PrefService* service = profile_->GetPrefs();
963 const PrefService::Preference* pref = 996 const PrefService::Preference* pref =
964 service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled); 997 service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled);
965 const base::Value* pref_value = pref->GetValue(); 998 const base::Value* pref_value = pref->GetValue();
966 999
967 bool enabled; 1000 bool enabled;
968 if (pref_value->GetAsBoolean(&enabled) && enabled) { 1001 if (pref_value->GetAsBoolean(&enabled) && enabled) {
969 device_providers.push_back(new UsbDeviceProvider(profile_)); 1002 device_providers.push_back(new UsbDeviceProvider(profile_));
970 } 1003 }
1004
1005 if (IsWebRTCDeviceProviderEnabled()) {
1006 device_providers.push_back(
1007 new WebRTCDeviceProvider(profile_, signin_manager_, token_service_));
1008 }
1009
971 device_manager_->SetDeviceProviders(device_providers); 1010 device_manager_->SetDeviceProviders(device_providers);
972 if (NeedsDeviceListPolling()) { 1011 if (NeedsDeviceListPolling()) {
973 StopDeviceListPolling(); 1012 StopDeviceListPolling();
974 StartDeviceListPolling(); 1013 StartDeviceListPolling();
975 } 1014 }
976 } 1015 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698