Chromium Code Reviews| 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 ca25d95a7575ef5eb795cfd9f54c407ab63c03c2..08c9743764d866d629fbe2c3d726a48fa2fa625f 100644 |
| --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
| +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc |
| @@ -7,7 +7,6 @@ |
| #include "base/strings/utf_string_conversions.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/devtools/devtools_network_protocol_handler.h" |
| -#include "components/devtools_discovery/devtools_discovery_manager.h" |
| #include "content/public/browser/devtools_agent_host.h" |
| #include "content/public/browser/web_contents.h" |
| @@ -15,6 +14,9 @@ |
| #include "chrome/browser/devtools/devtools_window.h" |
| #include "chrome/browser/extensions/extension_tab_util.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/profiles/profile_manager.h" |
| +#include "chrome/browser/ui/browser_navigator.h" |
| +#include "chrome/browser/ui/browser_navigator_params.h" |
| #include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "extensions/browser/extension_host.h" |
| @@ -26,8 +28,6 @@ |
| #include "chrome/browser/ui/android/tab_model/tab_model_list.h" |
| #endif // !defined(OS_ANDROID) |
| -using devtools_discovery::DevToolsDiscoveryManager; |
| - |
| char ChromeDevToolsManagerDelegate::kTypeApp[] = "app"; |
| char ChromeDevToolsManagerDelegate::kTypeBackgroundPage[] = "background_page"; |
| @@ -61,8 +61,7 @@ base::DictionaryValue* ChromeDevToolsManagerDelegate::HandleCommand( |
| content::DevToolsAgentHost* agent_host, |
| base::DictionaryValue* command_dict) { |
| std::unique_ptr<base::DictionaryValue> result = |
| - DevToolsDiscoveryManager::GetInstance()->HandleCreateTargetCommand( |
| - command_dict); |
| + HandleCreateTargetCommand(command_dict); |
| if (result) |
| return result.release(); // Caller takes ownership. |
| return network_protocol_handler_->HandleCommand(agent_host, command_dict); |
| @@ -137,8 +136,70 @@ std::string ChromeDevToolsManagerDelegate::GetTargetTitle( |
| return ""; |
| } |
| +scoped_refptr<content::DevToolsAgentHost> |
| +ChromeDevToolsManagerDelegate::CreateNewTarget(const GURL& url) { |
| +#if !defined(OS_ANDROID) |
| + chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(), |
| + url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL); |
| + params.disposition = NEW_FOREGROUND_TAB; |
| + chrome::Navigate(¶ms); |
| + if (!params.target_contents) |
| + return nullptr; |
| + |
| + if (!params.target_contents) |
|
dgozman
2016/08/25 01:08:11
This is checked 3 lines above.
|
| + return nullptr; |
| + return content::DevToolsAgentHost::GetOrCreateFor(params.target_contents); |
| + |
| +#else |
| + if (TabModelList::empty()) |
| + return nullptr; |
| + |
| + TabModel* tab_model = TabModelList::get(0); |
| + if (!tab_model) |
| + return nullptr; |
| + |
| + WebContents* web_contents = tab_model->CreateNewTabForDevTools(url); |
| + if (!web_contents) |
| + return nullptr; |
| + |
| + TabAndroid* tab = TabAndroid::FromWebContents(web_contents); |
| + if (!tab) |
| + return nullptr; |
| + |
| + return content::DevToolsAgentHost::Create(new TabProxyDelegate( |
|
dgozman
2016/08/25 01:08:11
TabProxyDelegate is a private class from another f
|
| + tab->GetAndroidId(), tab->GetTitle(), tab->GetURL())); |
| +#endif // !defined(OS_ANDROID) |
| +} |
| + |
| void ChromeDevToolsManagerDelegate::DevToolsAgentStateChanged( |
| content::DevToolsAgentHost* agent_host, |
| bool attached) { |
| network_protocol_handler_->DevToolsAgentStateChanged(agent_host, attached); |
| } |
| + |
| +std::unique_ptr<base::DictionaryValue> |
| +ChromeDevToolsManagerDelegate::HandleCreateTargetCommand( |
| + base::DictionaryValue* command_dict) { |
| + int id; |
| + std::string method; |
| + std::string url; |
| + const base::DictionaryValue* params_dict = nullptr; |
| + if (command_dict->GetInteger("id", &id) && |
| + command_dict->GetString("method", &method) && |
| + method == "Browser.createTarget" && |
| + command_dict->GetDictionary("params", ¶ms_dict) && |
| + params_dict->GetString("url", &url)) { |
| + scoped_refptr<content::DevToolsAgentHost> agent_host = |
| + CreateNewTarget(GURL(url)); |
| + if (!agent_host) |
| + return nullptr; |
| + std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue()); |
| + result->SetInteger("id", id); |
| + std::unique_ptr<base::DictionaryValue> cmd_result( |
| + new base::DictionaryValue()); |
| + cmd_result->SetString("targetId", agent_host->GetId()); |
| + result->Set("result", std::move(cmd_result)); |
| + return result; |
| + } |
| + return nullptr; |
| +} |