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

Side by Side Diff: chrome/browser/devtools/chrome_devtools_manager_delegate.cc

Issue 2370483002: DevTools: discover default port node servers for debugging (behind experiment) (Closed)
Patch Set: for landing Created 4 years, 2 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 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/chrome_devtools_manager_delegate.h" 5 #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
6 6
7 #include "base/memory/ptr_util.h"
7 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
8 #include "build/build_config.h" 9 #include "build/build_config.h"
10 #include "chrome/browser/devtools/device/android_device_manager.h"
11 #include "chrome/browser/devtools/device/tcp_device_provider.h"
9 #include "chrome/browser/devtools/devtools_network_protocol_handler.h" 12 #include "chrome/browser/devtools/devtools_network_protocol_handler.h"
13 #include "chrome/browser/devtools/devtools_protocol_constants.h"
10 #include "chrome/browser/devtools/devtools_window.h" 14 #include "chrome/browser/devtools/devtools_window.h"
11 #include "chrome/browser/extensions/extension_tab_util.h" 15 #include "chrome/browser/extensions/extension_tab_util.h"
12 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/profiles/profile_manager.h" 17 #include "chrome/browser/profiles/profile_manager.h"
14 #include "chrome/browser/ui/browser_navigator.h" 18 #include "chrome/browser/ui/browser_navigator.h"
15 #include "chrome/browser/ui/browser_navigator_params.h" 19 #include "chrome/browser/ui/browser_navigator_params.h"
16 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" 20 #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
17 #include "chrome/grit/browser_resources.h" 21 #include "chrome/grit/browser_resources.h"
18 #include "components/guest_view/browser/guest_view_base.h" 22 #include "components/guest_view/browser/guest_view_base.h"
19 #include "content/public/browser/devtools_agent_host.h" 23 #include "content/public/browser/devtools_agent_host.h"
20 #include "content/public/browser/render_frame_host.h" 24 #include "content/public/browser/render_frame_host.h"
21 #include "content/public/browser/web_contents.h" 25 #include "content/public/browser/web_contents.h"
22 #include "extensions/browser/extension_host.h" 26 #include "extensions/browser/extension_host.h"
23 #include "extensions/browser/extension_registry.h" 27 #include "extensions/browser/extension_registry.h"
24 #include "extensions/browser/process_manager.h" 28 #include "extensions/browser/process_manager.h"
29 #include "net/base/host_port_pair.h"
25 #include "ui/base/resource/resource_bundle.h" 30 #include "ui/base/resource/resource_bundle.h"
26 31
32 using content::DevToolsAgentHost;
33
27 char ChromeDevToolsManagerDelegate::kTypeApp[] = "app"; 34 char ChromeDevToolsManagerDelegate::kTypeApp[] = "app";
28 char ChromeDevToolsManagerDelegate::kTypeBackgroundPage[] = "background_page"; 35 char ChromeDevToolsManagerDelegate::kTypeBackgroundPage[] = "background_page";
29 char ChromeDevToolsManagerDelegate::kTypeWebView[] = "webview"; 36 char ChromeDevToolsManagerDelegate::kTypeWebView[] = "webview";
30 37
38 char kLocationsParam[] = "locations";
39 char kHostParam[] = "host";
40 char kPortParam[] = "port";
41
31 ChromeDevToolsManagerDelegate::ChromeDevToolsManagerDelegate() 42 ChromeDevToolsManagerDelegate::ChromeDevToolsManagerDelegate()
32 : network_protocol_handler_(new DevToolsNetworkProtocolHandler()) { 43 : network_protocol_handler_(new DevToolsNetworkProtocolHandler()) {
33 } 44 }
34 45
35 ChromeDevToolsManagerDelegate::~ChromeDevToolsManagerDelegate() { 46 ChromeDevToolsManagerDelegate::~ChromeDevToolsManagerDelegate() {
36 } 47 }
37 48
38 void ChromeDevToolsManagerDelegate::Inspect( 49 void ChromeDevToolsManagerDelegate::Inspect(
39 content::DevToolsAgentHost* agent_host) { 50 content::DevToolsAgentHost* agent_host) {
40 DevToolsWindow::OpenDevToolsWindow(agent_host, nullptr); 51 DevToolsWindow::OpenDevToolsWindow(agent_host, nullptr);
41 } 52 }
42 53
54 void ChromeDevToolsManagerDelegate::DevicesAvailable(
55 const DevToolsAgentHost::DiscoveryCallback& callback,
56 const DevToolsAndroidBridge::CompleteDevices& devices) {
57 DevToolsAgentHost::List result = DevToolsAgentHost::GetOrCreateAll();
58 for (const auto& complete : devices) {
59 for (const auto& browser : complete.second->browsers()) {
60 for (const auto& page : browser->pages())
61 result.push_back(page->CreateTarget());
62 }
63 }
64 callback.Run(std::move(result));
65 }
66
67 bool ChromeDevToolsManagerDelegate::DiscoverTargets(
68 const DevToolsAgentHost::DiscoveryCallback& callback) {
69 if (!device_manager_) {
70 device_manager_ = AndroidDeviceManager::Create();
71 }
72
73 AndroidDeviceManager::DeviceProviders providers;
74 providers.push_back(new TCPDeviceProvider(tcp_locations_));
75 device_manager_->SetDeviceProviders(providers);
76
77 DevToolsAndroidBridge::QueryCompleteDevices(
78 device_manager_.get(),
79 base::Bind(&ChromeDevToolsManagerDelegate::DevicesAvailable,
80 base::Unretained(this),
81 callback));
82 return true;
dgozman 2016/09/23 20:57:22 Let's skip all the work and callback synchronously
pfeldman 2016/09/23 21:05:21 Done.
83 }
84
43 base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand( 85 base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand(
44 content::DevToolsAgentHost* agent_host, 86 DevToolsAgentHost* agent_host,
45 base::DictionaryValue* command_dict) { 87 base::DictionaryValue* command_dict) {
88
89 int id = 0;
90 std::string method;
91 base::DictionaryValue* params = nullptr;
92 if (!DevToolsProtocol::ParseCommand(command_dict, &id, &method, &params))
93 return nullptr;
94
95 if (method == chrome::devtools::Browser::setRemoteLocations::kName)
96 return SetRemoteLocations(agent_host, id, params).release();
97
46 return network_protocol_handler_->HandleCommand(agent_host, command_dict); 98 return network_protocol_handler_->HandleCommand(agent_host, command_dict);
47 } 99 }
48 100
49 std::string ChromeDevToolsManagerDelegate::GetTargetType( 101 std::string ChromeDevToolsManagerDelegate::GetTargetType(
50 content::RenderFrameHost* host) { 102 content::RenderFrameHost* host) {
51 content::WebContents* web_contents = 103 content::WebContents* web_contents =
52 content::WebContents::FromRenderFrameHost(host); 104 content::WebContents::FromRenderFrameHost(host);
53 105
54 guest_view::GuestViewBase* guest = 106 guest_view::GuestViewBase* guest =
55 guest_view::GuestViewBase::FromWebContents(web_contents); 107 guest_view::GuestViewBase::FromWebContents(web_contents);
56 content::WebContents* guest_contents = 108 content::WebContents* guest_contents =
57 guest ? guest->embedder_web_contents() : nullptr; 109 guest ? guest->embedder_web_contents() : nullptr;
58 if (guest_contents) 110 if (guest_contents)
59 return kTypeWebView; 111 return kTypeWebView;
60 112
61 if (host->GetParent()) 113 if (host->GetParent())
62 return content::DevToolsAgentHost::kTypeFrame; 114 return DevToolsAgentHost::kTypeFrame;
63 115
64 for (TabContentsIterator it; !it.done(); it.Next()) { 116 for (TabContentsIterator it; !it.done(); it.Next()) {
65 if (*it == web_contents) 117 if (*it == web_contents)
66 return content::DevToolsAgentHost::kTypePage; 118 return DevToolsAgentHost::kTypePage;
67 } 119 }
68 120
69 const extensions::Extension* extension = extensions::ExtensionRegistry::Get( 121 const extensions::Extension* extension = extensions::ExtensionRegistry::Get(
70 web_contents->GetBrowserContext())->enabled_extensions().GetByID( 122 web_contents->GetBrowserContext())->enabled_extensions().GetByID(
71 host->GetLastCommittedURL().host()); 123 host->GetLastCommittedURL().host());
72 if (!extension) 124 if (!extension)
73 return content::DevToolsAgentHost::kTypeOther; 125 return DevToolsAgentHost::kTypeOther;
74 126
75 Profile* profile = 127 Profile* profile =
76 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 128 Profile::FromBrowserContext(web_contents->GetBrowserContext());
77 if (!profile) 129 if (!profile)
78 return content::DevToolsAgentHost::kTypeOther; 130 return DevToolsAgentHost::kTypeOther;
79 131
80 extensions::ExtensionHost* extension_host = 132 extensions::ExtensionHost* extension_host =
81 extensions::ProcessManager::Get(profile) 133 extensions::ProcessManager::Get(profile)
82 ->GetBackgroundHostForExtension(extension->id()); 134 ->GetBackgroundHostForExtension(extension->id());
83 if (extension_host && 135 if (extension_host &&
84 extension_host->host_contents() == web_contents) { 136 extension_host->host_contents() == web_contents) {
85 return kTypeBackgroundPage; 137 return kTypeBackgroundPage;
86 } else if (extension->is_hosted_app() 138 } else if (extension->is_hosted_app()
87 || extension->is_legacy_packaged_app() 139 || extension->is_legacy_packaged_app()
88 || extension->is_platform_app()) { 140 || extension->is_platform_app()) {
89 return kTypeApp; 141 return kTypeApp;
90 } 142 }
91 return content::DevToolsAgentHost::kTypeOther; 143 return DevToolsAgentHost::kTypeOther;
92 } 144 }
93 145
94 std::string ChromeDevToolsManagerDelegate::GetTargetTitle( 146 std::string ChromeDevToolsManagerDelegate::GetTargetTitle(
95 content::RenderFrameHost* host) { 147 content::RenderFrameHost* host) {
96 content::WebContents* web_contents = 148 content::WebContents* web_contents =
97 content::WebContents::FromRenderFrameHost(host); 149 content::WebContents::FromRenderFrameHost(host);
98 if (host->GetParent()) 150 if (host->GetParent())
99 return host->GetLastCommittedURL().spec(); 151 return host->GetLastCommittedURL().spec();
100 for (TabContentsIterator it; !it.done(); it.Next()) { 152 for (TabContentsIterator it; !it.done(); it.Next()) {
101 if (*it == web_contents) 153 if (*it == web_contents)
102 return base::UTF16ToUTF8(web_contents->GetTitle()); 154 return base::UTF16ToUTF8(web_contents->GetTitle());
103 } 155 }
104 const extensions::Extension* extension = extensions::ExtensionRegistry::Get( 156 const extensions::Extension* extension = extensions::ExtensionRegistry::Get(
105 web_contents->GetBrowserContext())->enabled_extensions().GetByID( 157 web_contents->GetBrowserContext())->enabled_extensions().GetByID(
106 host->GetLastCommittedURL().host()); 158 host->GetLastCommittedURL().host());
107 if (extension) 159 if (extension)
108 return extension->name(); 160 return extension->name();
109 return ""; 161 return "";
110 } 162 }
111 163
112 scoped_refptr<content::DevToolsAgentHost> 164 scoped_refptr<DevToolsAgentHost>
113 ChromeDevToolsManagerDelegate::CreateNewTarget(const GURL& url) { 165 ChromeDevToolsManagerDelegate::CreateNewTarget(const GURL& url) {
114 chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(), 166 chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(),
115 url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL); 167 url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
116 params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; 168 params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
117 chrome::Navigate(&params); 169 chrome::Navigate(&params);
118 if (!params.target_contents) 170 if (!params.target_contents)
119 return nullptr; 171 return nullptr;
120 return content::DevToolsAgentHost::GetOrCreateFor(params.target_contents); 172 return DevToolsAgentHost::GetOrCreateFor(params.target_contents);
121 } 173 }
122 174
123 std::string ChromeDevToolsManagerDelegate::GetDiscoveryPageHTML() { 175 std::string ChromeDevToolsManagerDelegate::GetDiscoveryPageHTML() {
124 return ResourceBundle::GetSharedInstance().GetRawDataResource( 176 return ResourceBundle::GetSharedInstance().GetRawDataResource(
125 IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string(); 177 IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
126 } 178 }
127 179
128 std::string ChromeDevToolsManagerDelegate::GetFrontendResource( 180 std::string ChromeDevToolsManagerDelegate::GetFrontendResource(
129 const std::string& path) { 181 const std::string& path) {
130 return content::DevToolsFrontendHost::GetFrontendResource(path).as_string(); 182 return content::DevToolsFrontendHost::GetFrontendResource(path).as_string();
131 } 183 }
132 184
133 void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged( 185 void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged(
134 content::DevToolsAgentHost* agent_host, 186 DevToolsAgentHost* agent_host,
135 bool attached) { 187 bool attached) {
136 network_protocol_handler_->DevToolsAgentStateChanged(agent_host, attached); 188 network_protocol_handler_->DevToolsAgentStateChanged(agent_host, attached);
137 } 189 }
190
191 std::unique_ptr<base::DictionaryValue>
192 ChromeDevToolsManagerDelegate::SetRemoteLocations(
193 content::DevToolsAgentHost* agent_host,
194 int command_id,
195 base::DictionaryValue* params) {
196 tcp_locations_.clear();
197
198 base::ListValue* locations;
199 if (!params->GetList(kLocationsParam, &locations))
200 return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
201 kLocationsParam);
202 for (const auto& item : *locations) {
203 if (!item->IsType(base::Value::TYPE_DICTIONARY)) {
204 return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
205 kLocationsParam);
206 }
207 base::DictionaryValue* dictionary =
208 static_cast<base::DictionaryValue*>(item.get());
209 std::string host;
210 if (!dictionary->GetStringWithoutPathExpansion(kHostParam, &host)) {
211 return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
212 kLocationsParam);
213 }
214 int port = 0;
215 if (!dictionary->GetIntegerWithoutPathExpansion(kPortParam, &port)) {
216 return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
217 kLocationsParam);
218 }
219 tcp_locations_.insert(net::HostPortPair(host, port));
220 }
221 std::unique_ptr<base::DictionaryValue> result(
222 base::MakeUnique<base::DictionaryValue>());
223 return DevToolsProtocol::CreateSuccessResponse(command_id, std::move(result));
224 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/chrome_devtools_manager_delegate.h ('k') | chrome/browser/devtools/device/devtools_android_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698