| Index: chrome/browser/devtools/chrome_devtools_manager_delegate.cc
|
| diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
|
| index e72dc3a5206db283ffc6c1663588bbfffea2992b..48a5aa442ea2f945da411d29adecfce50078f56c 100644
|
| --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
|
| +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
|
| @@ -4,9 +4,13 @@
|
|
|
| #include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
|
|
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "build/build_config.h"
|
| +#include "chrome/browser/devtools/device/android_device_manager.h"
|
| +#include "chrome/browser/devtools/device/tcp_device_provider.h"
|
| #include "chrome/browser/devtools/devtools_network_protocol_handler.h"
|
| +#include "chrome/browser/devtools/devtools_protocol_constants.h"
|
| #include "chrome/browser/devtools/devtools_window.h"
|
| #include "chrome/browser/extensions/extension_tab_util.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -22,12 +26,19 @@
|
| #include "extensions/browser/extension_host.h"
|
| #include "extensions/browser/extension_registry.h"
|
| #include "extensions/browser/process_manager.h"
|
| +#include "net/base/host_port_pair.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
|
|
| +using content::DevToolsAgentHost;
|
| +
|
| char ChromeDevToolsManagerDelegate::kTypeApp[] = "app";
|
| char ChromeDevToolsManagerDelegate::kTypeBackgroundPage[] = "background_page";
|
| char ChromeDevToolsManagerDelegate::kTypeWebView[] = "webview";
|
|
|
| +char kLocationsParam[] = "locations";
|
| +char kHostParam[] = "host";
|
| +char kPortParam[] = "port";
|
| +
|
| ChromeDevToolsManagerDelegate::ChromeDevToolsManagerDelegate()
|
| : network_protocol_handler_(new DevToolsNetworkProtocolHandler()) {
|
| }
|
| @@ -40,9 +51,52 @@ void ChromeDevToolsManagerDelegate::Inspect(
|
| DevToolsWindow::OpenDevToolsWindow(agent_host, nullptr);
|
| }
|
|
|
| +void ChromeDevToolsManagerDelegate::DevicesAvailable(
|
| + const DevToolsAgentHost::DiscoveryCallback& callback,
|
| + const DevToolsAndroidBridge::CompleteDevices& devices) {
|
| + DevToolsAgentHost::List result = DevToolsAgentHost::GetOrCreateAll();
|
| + for (const auto& complete : devices) {
|
| + for (const auto& browser : complete.second->browsers()) {
|
| + for (const auto& page : browser->pages())
|
| + result.push_back(page->CreateTarget());
|
| + }
|
| + }
|
| + callback.Run(std::move(result));
|
| +}
|
| +
|
| +bool ChromeDevToolsManagerDelegate::DiscoverTargets(
|
| + const DevToolsAgentHost::DiscoveryCallback& callback) {
|
| + if (!tcp_locations_.size())
|
| + return false;
|
| +
|
| + if (!device_manager_)
|
| + device_manager_ = AndroidDeviceManager::Create();
|
| +
|
| + AndroidDeviceManager::DeviceProviders providers;
|
| + providers.push_back(new TCPDeviceProvider(tcp_locations_));
|
| + device_manager_->SetDeviceProviders(providers);
|
| +
|
| + DevToolsAndroidBridge::QueryCompleteDevices(
|
| + device_manager_.get(),
|
| + base::Bind(&ChromeDevToolsManagerDelegate::DevicesAvailable,
|
| + base::Unretained(this),
|
| + callback));
|
| + return true;
|
| +}
|
| +
|
| base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand(
|
| - content::DevToolsAgentHost* agent_host,
|
| + DevToolsAgentHost* agent_host,
|
| base::DictionaryValue* command_dict) {
|
| +
|
| + int id = 0;
|
| + std::string method;
|
| + base::DictionaryValue* params = nullptr;
|
| + if (!DevToolsProtocol::ParseCommand(command_dict, &id, &method, ¶ms))
|
| + return nullptr;
|
| +
|
| + if (method == chrome::devtools::Browser::setRemoteLocations::kName)
|
| + return SetRemoteLocations(agent_host, id, params).release();
|
| +
|
| return network_protocol_handler_->HandleCommand(agent_host, command_dict);
|
| }
|
|
|
| @@ -59,23 +113,23 @@ std::string ChromeDevToolsManagerDelegate::GetTargetType(
|
| return kTypeWebView;
|
|
|
| if (host->GetParent())
|
| - return content::DevToolsAgentHost::kTypeFrame;
|
| + return DevToolsAgentHost::kTypeFrame;
|
|
|
| for (TabContentsIterator it; !it.done(); it.Next()) {
|
| if (*it == web_contents)
|
| - return content::DevToolsAgentHost::kTypePage;
|
| + return DevToolsAgentHost::kTypePage;
|
| }
|
|
|
| const extensions::Extension* extension = extensions::ExtensionRegistry::Get(
|
| web_contents->GetBrowserContext())->enabled_extensions().GetByID(
|
| host->GetLastCommittedURL().host());
|
| if (!extension)
|
| - return content::DevToolsAgentHost::kTypeOther;
|
| + return DevToolsAgentHost::kTypeOther;
|
|
|
| Profile* profile =
|
| Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
| if (!profile)
|
| - return content::DevToolsAgentHost::kTypeOther;
|
| + return DevToolsAgentHost::kTypeOther;
|
|
|
| extensions::ExtensionHost* extension_host =
|
| extensions::ProcessManager::Get(profile)
|
| @@ -88,7 +142,7 @@ std::string ChromeDevToolsManagerDelegate::GetTargetType(
|
| || extension->is_platform_app()) {
|
| return kTypeApp;
|
| }
|
| - return content::DevToolsAgentHost::kTypeOther;
|
| + return DevToolsAgentHost::kTypeOther;
|
| }
|
|
|
| std::string ChromeDevToolsManagerDelegate::GetTargetTitle(
|
| @@ -109,7 +163,7 @@ std::string ChromeDevToolsManagerDelegate::GetTargetTitle(
|
| return "";
|
| }
|
|
|
| -scoped_refptr<content::DevToolsAgentHost>
|
| +scoped_refptr<DevToolsAgentHost>
|
| ChromeDevToolsManagerDelegate::CreateNewTarget(const GURL& url) {
|
| chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(),
|
| url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
|
| @@ -117,7 +171,7 @@ ChromeDevToolsManagerDelegate::CreateNewTarget(const GURL& url) {
|
| chrome::Navigate(¶ms);
|
| if (!params.target_contents)
|
| return nullptr;
|
| - return content::DevToolsAgentHost::GetOrCreateFor(params.target_contents);
|
| + return DevToolsAgentHost::GetOrCreateFor(params.target_contents);
|
| }
|
|
|
| std::string ChromeDevToolsManagerDelegate::GetDiscoveryPageHTML() {
|
| @@ -131,7 +185,42 @@ std::string ChromeDevToolsManagerDelegate::GetFrontendResource(
|
| }
|
|
|
| void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged(
|
| - content::DevToolsAgentHost* agent_host,
|
| + DevToolsAgentHost* agent_host,
|
| bool attached) {
|
| network_protocol_handler_->DevToolsAgentStateChanged(agent_host, attached);
|
| }
|
| +
|
| +std::unique_ptr<base::DictionaryValue>
|
| +ChromeDevToolsManagerDelegate::SetRemoteLocations(
|
| + content::DevToolsAgentHost* agent_host,
|
| + int command_id,
|
| + base::DictionaryValue* params) {
|
| + tcp_locations_.clear();
|
| +
|
| + base::ListValue* locations;
|
| + if (!params->GetList(kLocationsParam, &locations))
|
| + return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
|
| + kLocationsParam);
|
| + for (const auto& item : *locations) {
|
| + if (!item->IsType(base::Value::TYPE_DICTIONARY)) {
|
| + return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
|
| + kLocationsParam);
|
| + }
|
| + base::DictionaryValue* dictionary =
|
| + static_cast<base::DictionaryValue*>(item.get());
|
| + std::string host;
|
| + if (!dictionary->GetStringWithoutPathExpansion(kHostParam, &host)) {
|
| + return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
|
| + kLocationsParam);
|
| + }
|
| + int port = 0;
|
| + if (!dictionary->GetIntegerWithoutPathExpansion(kPortParam, &port)) {
|
| + return DevToolsProtocol::CreateInvalidParamsResponse(command_id,
|
| + kLocationsParam);
|
| + }
|
| + tcp_locations_.insert(net::HostPortPair(host, port));
|
| + }
|
| + std::unique_ptr<base::DictionaryValue> result(
|
| + base::MakeUnique<base::DictionaryValue>());
|
| + return DevToolsProtocol::CreateSuccessResponse(command_id, std::move(result));
|
| +}
|
|
|