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

Side by Side Diff: chrome/browser/ui/webui/inspect_ui.cc

Issue 278953002: DevTools: allow inspecting browsers using custom front-ends. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Manually tested end-to-end. Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/ui/webui/inspect_ui.h" 5 #include "chrome/browser/ui/webui/inspect_ui.h"
6 6
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "chrome/browser/devtools/devtools_target_impl.h" 9 #include "chrome/browser/devtools/devtools_target_impl.h"
10 #include "chrome/browser/devtools/devtools_targets_ui.h" 10 #include "chrome/browser/devtools/devtools_targets_ui.h"
11 #include "chrome/browser/devtools/devtools_ui_bindings.h"
11 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/browser_navigator.h" 13 #include "chrome/browser/ui/browser_navigator.h"
13 #include "chrome/browser/ui/singleton_tabs.h" 14 #include "chrome/browser/ui/singleton_tabs.h"
14 #include "chrome/browser/ui/webui/theme_source.h" 15 #include "chrome/browser/ui/webui/theme_source.h"
15 #include "chrome/common/pref_names.h" 16 #include "chrome/common/pref_names.h"
16 #include "chrome/common/url_constants.h" 17 #include "chrome/common/url_constants.h"
18 #include "content/public/browser/devtools_agent_host.h"
19 #include "content/public/browser/devtools_manager.h"
17 #include "content/public/browser/notification_service.h" 20 #include "content/public/browser/notification_service.h"
18 #include "content/public/browser/notification_source.h" 21 #include "content/public/browser/notification_source.h"
19 #include "content/public/browser/notification_types.h" 22 #include "content/public/browser/notification_types.h"
20 #include "content/public/browser/user_metrics.h" 23 #include "content/public/browser/user_metrics.h"
21 #include "content/public/browser/web_contents.h" 24 #include "content/public/browser/web_contents.h"
25 #include "content/public/browser/web_contents_delegate.h"
22 #include "content/public/browser/web_ui.h" 26 #include "content/public/browser/web_ui.h"
23 #include "content/public/browser/web_ui_data_source.h" 27 #include "content/public/browser/web_ui_data_source.h"
24 #include "content/public/browser/web_ui_message_handler.h" 28 #include "content/public/browser/web_ui_message_handler.h"
25 #include "grit/browser_resources.h" 29 #include "grit/browser_resources.h"
26 30
27 using content::WebContents; 31 using content::WebContents;
28 using content::WebUIMessageHandler; 32 using content::WebUIMessageHandler;
29 33
30 namespace { 34 namespace {
31 35
32 const char kInitUICommand[] = "init-ui"; 36 const char kInitUICommand[] = "init-ui";
33 const char kInspectCommand[] = "inspect"; 37 const char kInspectCommand[] = "inspect";
34 const char kActivateCommand[] = "activate"; 38 const char kActivateCommand[] = "activate";
35 const char kCloseCommand[] = "close"; 39 const char kCloseCommand[] = "close";
36 const char kReloadCommand[] = "reload"; 40 const char kReloadCommand[] = "reload";
37 const char kOpenCommand[] = "open"; 41 const char kOpenCommand[] = "open";
42 const char kInspectBrowser[] = "inspect-browser";
38 43
39 const char kDiscoverUsbDevicesEnabledCommand[] = 44 const char kDiscoverUsbDevicesEnabledCommand[] =
40 "set-discover-usb-devices-enabled"; 45 "set-discover-usb-devices-enabled";
41 const char kPortForwardingEnabledCommand[] = 46 const char kPortForwardingEnabledCommand[] =
42 "set-port-forwarding-enabled"; 47 "set-port-forwarding-enabled";
43 const char kPortForwardingConfigCommand[] = "set-port-forwarding-config"; 48 const char kPortForwardingConfigCommand[] = "set-port-forwarding-config";
44 49
45 const char kPortForwardingDefaultPort[] = "8080"; 50 const char kPortForwardingDefaultPort[] = "8080";
46 const char kPortForwardingDefaultLocation[] = "localhost:8080"; 51 const char kPortForwardingDefaultLocation[] = "localhost:8080";
47 52
48 class InspectMessageHandler : public WebUIMessageHandler { 53 class InspectMessageHandler : public WebUIMessageHandler {
49 public: 54 public:
50 explicit InspectMessageHandler(InspectUI* inspect_ui) 55 explicit InspectMessageHandler(InspectUI* inspect_ui)
51 : inspect_ui_(inspect_ui) {} 56 : inspect_ui_(inspect_ui) {}
52 virtual ~InspectMessageHandler() {} 57 virtual ~InspectMessageHandler() {}
53 58
54 private: 59 private:
55 // WebUIMessageHandler implementation. 60 // WebUIMessageHandler implementation.
56 virtual void RegisterMessages() OVERRIDE; 61 virtual void RegisterMessages() OVERRIDE;
57 62
58 void HandleInitUICommand(const base::ListValue* args); 63 void HandleInitUICommand(const base::ListValue* args);
59 void HandleInspectCommand(const base::ListValue* args); 64 void HandleInspectCommand(const base::ListValue* args);
60 void HandleActivateCommand(const base::ListValue* args); 65 void HandleActivateCommand(const base::ListValue* args);
61 void HandleCloseCommand(const base::ListValue* args); 66 void HandleCloseCommand(const base::ListValue* args);
62 void HandleReloadCommand(const base::ListValue* args); 67 void HandleReloadCommand(const base::ListValue* args);
63 void HandleOpenCommand(const base::ListValue* args); 68 void HandleOpenCommand(const base::ListValue* args);
69 void HandleInspectBrowserCommand(const base::ListValue* args);
64 void HandleBooleanPrefChanged(const char* pref_name, 70 void HandleBooleanPrefChanged(const char* pref_name,
65 const base::ListValue* args); 71 const base::ListValue* args);
66 void HandlePortForwardingConfigCommand(const base::ListValue* args); 72 void HandlePortForwardingConfigCommand(const base::ListValue* args);
67 73
68 InspectUI* inspect_ui_; 74 InspectUI* inspect_ui_;
69 75
70 DISALLOW_COPY_AND_ASSIGN(InspectMessageHandler); 76 DISALLOW_COPY_AND_ASSIGN(InspectMessageHandler);
71 }; 77 };
72 78
73 void InspectMessageHandler::RegisterMessages() { 79 void InspectMessageHandler::RegisterMessages() {
(...skipping 19 matching lines...) Expand all
93 &prefs::kDevToolsPortForwardingEnabled[0])); 99 &prefs::kDevToolsPortForwardingEnabled[0]));
94 web_ui()->RegisterMessageCallback(kPortForwardingConfigCommand, 100 web_ui()->RegisterMessageCallback(kPortForwardingConfigCommand,
95 base::Bind(&InspectMessageHandler::HandlePortForwardingConfigCommand, 101 base::Bind(&InspectMessageHandler::HandlePortForwardingConfigCommand,
96 base::Unretained(this))); 102 base::Unretained(this)));
97 web_ui()->RegisterMessageCallback(kReloadCommand, 103 web_ui()->RegisterMessageCallback(kReloadCommand,
98 base::Bind(&InspectMessageHandler::HandleReloadCommand, 104 base::Bind(&InspectMessageHandler::HandleReloadCommand,
99 base::Unretained(this))); 105 base::Unretained(this)));
100 web_ui()->RegisterMessageCallback(kOpenCommand, 106 web_ui()->RegisterMessageCallback(kOpenCommand,
101 base::Bind(&InspectMessageHandler::HandleOpenCommand, 107 base::Bind(&InspectMessageHandler::HandleOpenCommand,
102 base::Unretained(this))); 108 base::Unretained(this)));
109 web_ui()->RegisterMessageCallback(kInspectBrowser,
110 base::Bind(&InspectMessageHandler::HandleInspectBrowserCommand,
111 base::Unretained(this)));
103 } 112 }
104 113
105 void InspectMessageHandler::HandleInitUICommand(const base::ListValue*) { 114 void InspectMessageHandler::HandleInitUICommand(const base::ListValue*) {
106 inspect_ui_->InitUI(); 115 inspect_ui_->InitUI();
107 } 116 }
108 117
109 static bool ParseStringArgs(const base::ListValue* args, 118 static bool ParseStringArgs(const base::ListValue* args,
110 std::string* arg0, 119 std::string* arg0,
111 std::string* arg1, 120 std::string* arg1,
112 std::string* arg2 = 0) { 121 std::string* arg2 = 0) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 } 154 }
146 155
147 void InspectMessageHandler::HandleOpenCommand(const base::ListValue* args) { 156 void InspectMessageHandler::HandleOpenCommand(const base::ListValue* args) {
148 std::string source_id; 157 std::string source_id;
149 std::string browser_id; 158 std::string browser_id;
150 std::string url; 159 std::string url;
151 if (ParseStringArgs(args, &source_id, &browser_id, &url)) 160 if (ParseStringArgs(args, &source_id, &browser_id, &url))
152 inspect_ui_->Open(source_id, browser_id, url); 161 inspect_ui_->Open(source_id, browser_id, url);
153 } 162 }
154 163
164 void InspectMessageHandler::HandleInspectBrowserCommand(
165 const base::ListValue* args) {
166 std::string source_id;
167 std::string browser_id;
168 std::string front_end;
169 if (ParseStringArgs(args, &source_id, &browser_id, &front_end)) {
170 inspect_ui_->InspectBrowserWithCustomFrontend(
171 source_id, browser_id, GURL(front_end));
172 }
173 }
174
155 void InspectMessageHandler::HandleBooleanPrefChanged( 175 void InspectMessageHandler::HandleBooleanPrefChanged(
156 const char* pref_name, 176 const char* pref_name,
157 const base::ListValue* args) { 177 const base::ListValue* args) {
158 Profile* profile = Profile::FromWebUI(web_ui()); 178 Profile* profile = Profile::FromWebUI(web_ui());
159 if (!profile) 179 if (!profile)
160 return; 180 return;
161 181
162 bool enabled; 182 bool enabled;
163 if (args->GetSize() == 1 && args->GetBoolean(0, &enabled)) 183 if (args->GetSize() == 1 && args->GetBoolean(0, &enabled))
164 profile->GetPrefs()->SetBoolean(pref_name, enabled); 184 profile->GetPrefs()->SetBoolean(pref_name, enabled);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 static void NoOp(DevToolsTargetImpl*) {} 251 static void NoOp(DevToolsTargetImpl*) {}
232 252
233 void InspectUI::Open(const std::string& source_id, 253 void InspectUI::Open(const std::string& source_id,
234 const std::string& browser_id, 254 const std::string& browser_id,
235 const std::string& url) { 255 const std::string& url) {
236 DevToolsTargetsUIHandler* handler = FindTargetHandler(source_id); 256 DevToolsTargetsUIHandler* handler = FindTargetHandler(source_id);
237 if (handler) 257 if (handler)
238 handler->Open(browser_id, url, base::Bind(&NoOp)); 258 handler->Open(browser_id, url, base::Bind(&NoOp));
239 } 259 }
240 260
261 void InspectUI::InspectBrowserWithCustomFrontend(
262 const std::string& source_id,
263 const std::string& browser_id,
264 const GURL& frontend_url) {
265 DevToolsTargetsUIHandler* handler = FindTargetHandler(source_id);
266 if (!handler)
267 return;
268
269 // Fetch agent host from remote browser.
270 scoped_refptr<content::DevToolsAgentHost> agent_host =
271 handler->GetBrowserAgentHost(browser_id);
272 if (agent_host->IsAttached())
273 return;
274
275 // Create web contents for the front-end.
Vladislav Kaznacheev 2014/05/16 13:38:37 This class is a UI handler. The tab opening and bi
276 WebContents* inspect_ui = web_ui()->GetWebContents();
277 WebContents* front_end = inspect_ui->GetDelegate()->OpenURLFromTab(
278 inspect_ui,
279 content::OpenURLParams(GURL(content::kAboutBlankURL),
280 content::Referrer(),
281 NEW_FOREGROUND_TAB,
282 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
283 false));
284
285 // Install devtools bindings.
286 DevToolsUIBindings* bindings = DevToolsUIBindings::GetOrCreateFor(front_end);
287
288 // Navigate to a page.
289 front_end->GetController().LoadURL(
290 frontend_url, content::Referrer(),
291 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string());
292
293
294 // Engage remote debugging between front-end and agent host.
295 content::DevToolsManager::GetInstance()->RegisterDevToolsClientHostFor(
296 agent_host, bindings->frontend_host());
297 }
298
241 void InspectUI::InspectDevices(Browser* browser) { 299 void InspectUI::InspectDevices(Browser* browser) {
242 content::RecordAction(base::UserMetricsAction("InspectDevices")); 300 content::RecordAction(base::UserMetricsAction("InspectDevices"));
243 chrome::NavigateParams params(chrome::GetSingletonTabNavigateParams( 301 chrome::NavigateParams params(chrome::GetSingletonTabNavigateParams(
244 browser, GURL(chrome::kChromeUIInspectURL))); 302 browser, GURL(chrome::kChromeUIInspectURL)));
245 params.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE; 303 params.path_behavior = chrome::NavigateParams::IGNORE_AND_NAVIGATE;
246 ShowSingletonTabOverwritingNTP(browser, params); 304 ShowSingletonTabOverwritingNTP(browser, params);
247 } 305 }
248 306
249 void InspectUI::Observe(int type, 307 void InspectUI::Observe(int type,
250 const content::NotificationSource& source, 308 const content::NotificationSource& source,
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 scoped_ptr<base::Value> source_value(base::Value::CreateStringValue(source)); 449 scoped_ptr<base::Value> source_value(base::Value::CreateStringValue(source));
392 web_ui()->CallJavascriptFunction( 450 web_ui()->CallJavascriptFunction(
393 "populateTargets", 451 "populateTargets",
394 *source_value.get(), 452 *source_value.get(),
395 *targets.get()); 453 *targets.get());
396 } 454 }
397 455
398 void InspectUI::PopulatePortStatus(const base::Value& status) { 456 void InspectUI::PopulatePortStatus(const base::Value& status) {
399 web_ui()->CallJavascriptFunction("populatePortStatus", status); 457 web_ui()->CallJavascriptFunction("populatePortStatus", status);
400 } 458 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/inspect_ui.h ('k') | content/browser/devtools/devtools_browser_target.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698