| 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 #include "chrome/browser/ui/webui/inspect_ui.h" | 5 #include "chrome/browser/ui/webui/inspect_ui.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "chrome/browser/devtools/devtools_targets_ui.h" | 9 #include "chrome/browser/devtools/devtools_targets_ui.h" |
| 10 #include "chrome/browser/devtools/devtools_ui_bindings.h" | 10 #include "chrome/browser/devtools/devtools_ui_bindings.h" |
| 11 #include "chrome/browser/devtools/devtools_window.h" | 11 #include "chrome/browser/devtools/devtools_window.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/ui/browser_navigator_params.h" | 13 #include "chrome/browser/ui/browser_navigator_params.h" |
| 14 #include "chrome/browser/ui/singleton_tabs.h" | 14 #include "chrome/browser/ui/singleton_tabs.h" |
| 15 #include "chrome/browser/ui/webui/theme_source.h" | 15 #include "chrome/browser/ui/webui/theme_source.h" |
| 16 #include "chrome/common/pref_names.h" | 16 #include "chrome/common/pref_names.h" |
| 17 #include "chrome/common/url_constants.h" | 17 #include "chrome/common/url_constants.h" |
| 18 #include "chrome/grit/browser_resources.h" | 18 #include "chrome/grit/browser_resources.h" |
| 19 #include "components/prefs/pref_service.h" | 19 #include "components/prefs/pref_service.h" |
| 20 #include "components/ui_devtools/devtools_server.h" |
| 20 #include "content/public/browser/devtools_agent_host.h" | 21 #include "content/public/browser/devtools_agent_host.h" |
| 21 #include "content/public/browser/navigation_entry.h" | 22 #include "content/public/browser/navigation_entry.h" |
| 22 #include "content/public/browser/notification_service.h" | 23 #include "content/public/browser/notification_service.h" |
| 23 #include "content/public/browser/notification_source.h" | 24 #include "content/public/browser/notification_source.h" |
| 24 #include "content/public/browser/notification_types.h" | 25 #include "content/public/browser/notification_types.h" |
| 25 #include "content/public/browser/user_metrics.h" | 26 #include "content/public/browser/user_metrics.h" |
| 26 #include "content/public/browser/web_contents.h" | 27 #include "content/public/browser/web_contents.h" |
| 27 #include "content/public/browser/web_contents_delegate.h" | 28 #include "content/public/browser/web_contents_delegate.h" |
| 28 #include "content/public/browser/web_contents_observer.h" | 29 #include "content/public/browser/web_contents_observer.h" |
| 29 #include "content/public/browser/web_ui.h" | 30 #include "content/public/browser/web_ui.h" |
| 30 #include "content/public/browser/web_ui_data_source.h" | 31 #include "content/public/browser/web_ui_data_source.h" |
| 31 #include "content/public/browser/web_ui_message_handler.h" | 32 #include "content/public/browser/web_ui_message_handler.h" |
| 32 #include "content/public/common/frame_navigate_params.h" | 33 #include "content/public/common/frame_navigate_params.h" |
| 33 | 34 |
| 34 using content::DevToolsAgentHost; | 35 using content::DevToolsAgentHost; |
| 35 using content::WebContents; | 36 using content::WebContents; |
| 36 using content::WebUIMessageHandler; | 37 using content::WebUIMessageHandler; |
| 37 | 38 |
| 38 namespace { | 39 namespace { |
| 39 | 40 |
| 40 const char kInitUICommand[] = "init-ui"; | 41 const char kInitUICommand[] = "init-ui"; |
| 41 const char kInspectCommand[] = "inspect"; | 42 const char kInspectCommand[] = "inspect"; |
| 43 const char kInspectAdditionalCommand[] = "inspect-additional"; |
| 42 const char kActivateCommand[] = "activate"; | 44 const char kActivateCommand[] = "activate"; |
| 43 const char kCloseCommand[] = "close"; | 45 const char kCloseCommand[] = "close"; |
| 44 const char kReloadCommand[] = "reload"; | 46 const char kReloadCommand[] = "reload"; |
| 45 const char kOpenCommand[] = "open"; | 47 const char kOpenCommand[] = "open"; |
| 46 const char kInspectBrowser[] = "inspect-browser"; | 48 const char kInspectBrowser[] = "inspect-browser"; |
| 47 const char kLocalHost[] = "localhost"; | 49 const char kLocalHost[] = "localhost"; |
| 48 | 50 |
| 49 const char kDiscoverUsbDevicesEnabledCommand[] = | 51 const char kDiscoverUsbDevicesEnabledCommand[] = |
| 50 "set-discover-usb-devices-enabled"; | 52 "set-discover-usb-devices-enabled"; |
| 51 const char kPortForwardingEnabledCommand[] = | 53 const char kPortForwardingEnabledCommand[] = |
| 52 "set-port-forwarding-enabled"; | 54 "set-port-forwarding-enabled"; |
| 53 const char kPortForwardingConfigCommand[] = "set-port-forwarding-config"; | 55 const char kPortForwardingConfigCommand[] = "set-port-forwarding-config"; |
| 54 const char kDiscoverTCPTargetsEnabledCommand[] = | 56 const char kDiscoverTCPTargetsEnabledCommand[] = |
| 55 "set-discover-tcp-targets-enabled"; | 57 "set-discover-tcp-targets-enabled"; |
| 56 const char kTCPDiscoveryConfigCommand[] = "set-tcp-discovery-config"; | 58 const char kTCPDiscoveryConfigCommand[] = "set-tcp-discovery-config"; |
| 57 | 59 |
| 58 const char kPortForwardingDefaultPort[] = "8080"; | 60 const char kPortForwardingDefaultPort[] = "8080"; |
| 59 const char kPortForwardingDefaultLocation[] = "localhost:8080"; | 61 const char kPortForwardingDefaultLocation[] = "localhost:8080"; |
| 60 | 62 |
| 63 const char kNameField[] = "name"; |
| 64 const char kUrlField[] = "url"; |
| 65 const char kIsAdditionalField[] = "isAdditional"; |
| 66 |
| 67 void GetUiDevToolsTargets(base::ListValue& targets) { |
| 68 for (const auto& client_pair : |
| 69 ui::devtools::UiDevToolsServer::GetClientNamesAndUrls()) { |
| 70 auto target_data = base::MakeUnique<base::DictionaryValue>(); |
| 71 target_data->SetString(kNameField, client_pair.first); |
| 72 target_data->SetString(kUrlField, client_pair.second); |
| 73 target_data->SetBoolean(kIsAdditionalField, true); |
| 74 targets.Append(std::move(target_data)); |
| 75 } |
| 76 } |
| 77 |
| 61 // InspectMessageHandler -------------------------------------------- | 78 // InspectMessageHandler -------------------------------------------- |
| 62 | 79 |
| 63 class InspectMessageHandler : public WebUIMessageHandler { | 80 class InspectMessageHandler : public WebUIMessageHandler { |
| 64 public: | 81 public: |
| 65 explicit InspectMessageHandler(InspectUI* inspect_ui) | 82 explicit InspectMessageHandler(InspectUI* inspect_ui) |
| 66 : inspect_ui_(inspect_ui) {} | 83 : inspect_ui_(inspect_ui) {} |
| 67 ~InspectMessageHandler() override {} | 84 ~InspectMessageHandler() override {} |
| 68 | 85 |
| 69 private: | 86 private: |
| 70 // WebUIMessageHandler implementation. | 87 // WebUIMessageHandler implementation. |
| 71 void RegisterMessages() override; | 88 void RegisterMessages() override; |
| 72 | 89 |
| 73 void HandleInitUICommand(const base::ListValue* args); | 90 void HandleInitUICommand(const base::ListValue* args); |
| 74 void HandleInspectCommand(const base::ListValue* args); | 91 void HandleInspectCommand(const base::ListValue* args); |
| 92 void HandleInspectAdditionalCommand(const base::ListValue* args); |
| 75 void HandleActivateCommand(const base::ListValue* args); | 93 void HandleActivateCommand(const base::ListValue* args); |
| 76 void HandleCloseCommand(const base::ListValue* args); | 94 void HandleCloseCommand(const base::ListValue* args); |
| 77 void HandleReloadCommand(const base::ListValue* args); | 95 void HandleReloadCommand(const base::ListValue* args); |
| 78 void HandleOpenCommand(const base::ListValue* args); | 96 void HandleOpenCommand(const base::ListValue* args); |
| 79 void HandleInspectBrowserCommand(const base::ListValue* args); | 97 void HandleInspectBrowserCommand(const base::ListValue* args); |
| 80 void HandleBooleanPrefChanged(const char* pref_name, | 98 void HandleBooleanPrefChanged(const char* pref_name, |
| 81 const base::ListValue* args); | 99 const base::ListValue* args); |
| 82 void HandlePortForwardingConfigCommand(const base::ListValue* args); | 100 void HandlePortForwardingConfigCommand(const base::ListValue* args); |
| 83 void HandleTCPDiscoveryConfigCommand(const base::ListValue* args); | 101 void HandleTCPDiscoveryConfigCommand(const base::ListValue* args); |
| 84 | 102 |
| 85 InspectUI* inspect_ui_; | 103 InspectUI* inspect_ui_; |
| 86 | 104 |
| 87 DISALLOW_COPY_AND_ASSIGN(InspectMessageHandler); | 105 DISALLOW_COPY_AND_ASSIGN(InspectMessageHandler); |
| 88 }; | 106 }; |
| 89 | 107 |
| 90 void InspectMessageHandler::RegisterMessages() { | 108 void InspectMessageHandler::RegisterMessages() { |
| 91 web_ui()->RegisterMessageCallback(kInitUICommand, | 109 web_ui()->RegisterMessageCallback(kInitUICommand, |
| 92 base::Bind(&InspectMessageHandler::HandleInitUICommand, | 110 base::Bind(&InspectMessageHandler::HandleInitUICommand, |
| 93 base::Unretained(this))); | 111 base::Unretained(this))); |
| 94 web_ui()->RegisterMessageCallback(kInspectCommand, | 112 web_ui()->RegisterMessageCallback(kInspectCommand, |
| 95 base::Bind(&InspectMessageHandler::HandleInspectCommand, | 113 base::Bind(&InspectMessageHandler::HandleInspectCommand, |
| 96 base::Unretained(this))); | 114 base::Unretained(this))); |
| 115 web_ui()->RegisterMessageCallback( |
| 116 kInspectAdditionalCommand, |
| 117 base::Bind(&InspectMessageHandler::HandleInspectAdditionalCommand, |
| 118 base::Unretained(this))); |
| 97 web_ui()->RegisterMessageCallback(kActivateCommand, | 119 web_ui()->RegisterMessageCallback(kActivateCommand, |
| 98 base::Bind(&InspectMessageHandler::HandleActivateCommand, | 120 base::Bind(&InspectMessageHandler::HandleActivateCommand, |
| 99 base::Unretained(this))); | 121 base::Unretained(this))); |
| 100 web_ui()->RegisterMessageCallback(kCloseCommand, | 122 web_ui()->RegisterMessageCallback(kCloseCommand, |
| 101 base::Bind(&InspectMessageHandler::HandleCloseCommand, | 123 base::Bind(&InspectMessageHandler::HandleCloseCommand, |
| 102 base::Unretained(this))); | 124 base::Unretained(this))); |
| 103 web_ui()->RegisterMessageCallback(kDiscoverUsbDevicesEnabledCommand, | 125 web_ui()->RegisterMessageCallback(kDiscoverUsbDevicesEnabledCommand, |
| 104 base::Bind(&InspectMessageHandler::HandleBooleanPrefChanged, | 126 base::Bind(&InspectMessageHandler::HandleBooleanPrefChanged, |
| 105 base::Unretained(this), | 127 base::Unretained(this), |
| 106 &prefs::kDevToolsDiscoverUsbDevicesEnabled[0])); | 128 &prefs::kDevToolsDiscoverUsbDevicesEnabled[0])); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 (!arg2 || (arg_size > 2 && args->GetString(2, arg2))); | 165 (!arg2 || (arg_size > 2 && args->GetString(2, arg2))); |
| 144 } | 166 } |
| 145 | 167 |
| 146 void InspectMessageHandler::HandleInspectCommand(const base::ListValue* args) { | 168 void InspectMessageHandler::HandleInspectCommand(const base::ListValue* args) { |
| 147 std::string source; | 169 std::string source; |
| 148 std::string id; | 170 std::string id; |
| 149 if (ParseStringArgs(args, &source, &id)) | 171 if (ParseStringArgs(args, &source, &id)) |
| 150 inspect_ui_->Inspect(source, id); | 172 inspect_ui_->Inspect(source, id); |
| 151 } | 173 } |
| 152 | 174 |
| 175 void InspectMessageHandler::HandleInspectAdditionalCommand( |
| 176 const base::ListValue* args) { |
| 177 std::string url; |
| 178 if (ParseStringArgs(args, &url, nullptr)) { |
| 179 WebContents* inspect_ui = web_ui()->GetWebContents(); |
| 180 web_ui()->GetWebContents()->GetDelegate()->OpenURLFromTab( |
| 181 inspect_ui, |
| 182 content::OpenURLParams(GURL(url), content::Referrer(), |
| 183 WindowOpenDisposition::NEW_FOREGROUND_TAB, |
| 184 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, false)); |
| 185 } |
| 186 } |
| 187 |
| 153 void InspectMessageHandler::HandleActivateCommand(const base::ListValue* args) { | 188 void InspectMessageHandler::HandleActivateCommand(const base::ListValue* args) { |
| 154 std::string source; | 189 std::string source; |
| 155 std::string id; | 190 std::string id; |
| 156 if (ParseStringArgs(args, &source, &id)) | 191 if (ParseStringArgs(args, &source, &id)) |
| 157 inspect_ui_->Activate(source, id); | 192 inspect_ui_->Activate(source, id); |
| 158 } | 193 } |
| 159 | 194 |
| 160 void InspectMessageHandler::HandleCloseCommand(const base::ListValue* args) { | 195 void InspectMessageHandler::HandleCloseCommand(const base::ListValue* args) { |
| 161 std::string source; | 196 std::string source; |
| 162 std::string id; | 197 std::string id; |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 | 435 |
| 401 void InspectUI::StartListeningNotifications() { | 436 void InspectUI::StartListeningNotifications() { |
| 402 if (!target_handlers_.empty()) // Possible when reloading the page. | 437 if (!target_handlers_.empty()) // Possible when reloading the page. |
| 403 StopListeningNotifications(); | 438 StopListeningNotifications(); |
| 404 | 439 |
| 405 Profile* profile = Profile::FromWebUI(web_ui()); | 440 Profile* profile = Profile::FromWebUI(web_ui()); |
| 406 | 441 |
| 407 DevToolsTargetsUIHandler::Callback callback = | 442 DevToolsTargetsUIHandler::Callback callback = |
| 408 base::Bind(&InspectUI::PopulateTargets, base::Unretained(this)); | 443 base::Bind(&InspectUI::PopulateTargets, base::Unretained(this)); |
| 409 | 444 |
| 445 base::ListValue additional_targets; |
| 446 GetUiDevToolsTargets(additional_targets); |
| 447 PopulateAdditionalTargets(additional_targets); |
| 448 |
| 410 AddTargetUIHandler( | 449 AddTargetUIHandler( |
| 411 DevToolsTargetsUIHandler::CreateForLocal(callback)); | 450 DevToolsTargetsUIHandler::CreateForLocal(callback)); |
| 412 if (profile->IsOffTheRecord()) { | 451 if (profile->IsOffTheRecord()) { |
| 413 ShowIncognitoWarning(); | 452 ShowIncognitoWarning(); |
| 414 } else { | 453 } else { |
| 415 AddTargetUIHandler( | 454 AddTargetUIHandler( |
| 416 DevToolsTargetsUIHandler::CreateForAdb(callback, profile)); | 455 DevToolsTargetsUIHandler::CreateForAdb(callback, profile)); |
| 417 } | 456 } |
| 418 | 457 |
| 419 port_status_serializer_.reset( | 458 port_status_serializer_.reset( |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 return it != target_handlers_.end() ? | 589 return it != target_handlers_.end() ? |
| 551 it->second->GetTarget(target_id) : nullptr; | 590 it->second->GetTarget(target_id) : nullptr; |
| 552 } | 591 } |
| 553 | 592 |
| 554 void InspectUI::PopulateTargets(const std::string& source, | 593 void InspectUI::PopulateTargets(const std::string& source, |
| 555 const base::ListValue& targets) { | 594 const base::ListValue& targets) { |
| 556 web_ui()->CallJavascriptFunctionUnsafe("populateTargets", | 595 web_ui()->CallJavascriptFunctionUnsafe("populateTargets", |
| 557 base::StringValue(source), targets); | 596 base::StringValue(source), targets); |
| 558 } | 597 } |
| 559 | 598 |
| 599 void InspectUI::PopulateAdditionalTargets(const base::ListValue& targets) { |
| 600 web_ui()->CallJavascriptFunctionUnsafe("populateAdditionalTargets", targets); |
| 601 } |
| 602 |
| 560 void InspectUI::ForceUpdateIfNeeded(const std::string& source_id, | 603 void InspectUI::ForceUpdateIfNeeded(const std::string& source_id, |
| 561 const std::string& target_type) { | 604 const std::string& target_type) { |
| 562 // TODO(dgozman): remove this after moving discovery to protocol. | 605 // TODO(dgozman): remove this after moving discovery to protocol. |
| 563 // See crbug.com/398049. | 606 // See crbug.com/398049. |
| 564 if (target_type != content::DevToolsAgentHost::kTypeServiceWorker) | 607 if (target_type != content::DevToolsAgentHost::kTypeServiceWorker) |
| 565 return; | 608 return; |
| 566 DevToolsTargetsUIHandler* handler = FindTargetHandler(source_id); | 609 DevToolsTargetsUIHandler* handler = FindTargetHandler(source_id); |
| 567 if (handler) | 610 if (handler) |
| 568 handler->ForceUpdate(); | 611 handler->ForceUpdate(); |
| 569 } | 612 } |
| 570 | 613 |
| 571 void InspectUI::PopulatePortStatus(const base::Value& status) { | 614 void InspectUI::PopulatePortStatus(const base::Value& status) { |
| 572 web_ui()->CallJavascriptFunctionUnsafe("populatePortStatus", status); | 615 web_ui()->CallJavascriptFunctionUnsafe("populatePortStatus", status); |
| 573 } | 616 } |
| 574 | 617 |
| 575 void InspectUI::ShowIncognitoWarning() { | 618 void InspectUI::ShowIncognitoWarning() { |
| 576 web_ui()->CallJavascriptFunctionUnsafe("showIncognitoWarning"); | 619 web_ui()->CallJavascriptFunctionUnsafe("showIncognitoWarning"); |
| 577 } | 620 } |
| OLD | NEW |