Chromium Code Reviews| Index: chrome/browser/android/dev_tools_discovery_provider_android.cc |
| diff --git a/chrome/browser/android/dev_tools_manager_delegate_android.cc b/chrome/browser/android/dev_tools_discovery_provider_android.cc |
| similarity index 42% |
| copy from chrome/browser/android/dev_tools_manager_delegate_android.cc |
| copy to chrome/browser/android/dev_tools_discovery_provider_android.cc |
| index b7561ad6afeb2adb95a7ad0c7ea00b391c6a2252..452e2ed6efd55ea98630783ddad296d214315d20 100644 |
| --- a/chrome/browser/android/dev_tools_manager_delegate_android.cc |
| +++ b/chrome/browser/android/dev_tools_discovery_provider_android.cc |
| @@ -1,20 +1,20 @@ |
| -// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "chrome/browser/android/dev_tools_manager_delegate_android.h" |
| +#include "chrome/browser/android/dev_tools_discovery_provider_android.h" |
| #include "base/basictypes.h" |
| +#include "base/bind.h" |
| #include "base/compiler_specific.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/android/tab_android.h" |
| #include "chrome/browser/browser_process.h" |
| -#include "chrome/browser/history/top_sites_factory.h" |
| -#include "chrome/browser/profiles/profile_manager.h" |
| #include "chrome/browser/ui/android/tab_model/tab_model.h" |
| #include "chrome/browser/ui/android/tab_model/tab_model_list.h" |
| -#include "components/history/core/browser/top_sites.h" |
| +#include "components/devtools_discovery/basic_target_descriptor.h" |
| +#include "components/devtools_discovery/devtools_discovery_manager.h" |
| #include "content/public/browser/devtools_agent_host.h" |
| #include "content/public/browser/devtools_target.h" |
| #include "content/public/browser/favicon_status.h" |
| @@ -26,10 +26,6 @@ using content::WebContents; |
| namespace { |
| -const char kTargetTypePage[] = "page"; |
| -const char kTargetTypeServiceWorker[] = "service_worker"; |
| -const char kTargetTypeOther[] = "other"; |
| - |
| GURL GetFaviconURLForContents(WebContents* web_contents) { |
| content::NavigationController& controller = web_contents->GetController(); |
| content::NavigationEntry* entry = controller.GetActiveEntry(); |
| @@ -38,81 +34,54 @@ GURL GetFaviconURLForContents(WebContents* web_contents) { |
| return GURL(); |
| } |
| -GURL GetFaviconURLForAgentHost( |
| - scoped_refptr<DevToolsAgentHost> agent_host) { |
| - if (WebContents* web_contents = agent_host->GetWebContents()) |
| - return GetFaviconURLForContents(web_contents); |
| - return GURL(); |
| -} |
| - |
| -base::TimeTicks GetLastActiveTimeForAgentHost( |
| - scoped_refptr<DevToolsAgentHost> agent_host) { |
| - if (WebContents* web_contents = agent_host->GetWebContents()) |
| - return web_contents->GetLastActiveTime(); |
| - return base::TimeTicks(); |
| -} |
| - |
| -class TargetBase : public content::DevToolsTarget { |
| +class TabDescriptor : public devtools_discovery::DevToolsTargetDescriptor { |
| public: |
| - // content::DevToolsTarget implementation: |
| - std::string GetParentId() const override { return std::string(); } |
| - |
| - std::string GetTitle() const override { return title_; } |
| - |
| - std::string GetDescription() const override { return std::string(); } |
| - |
| - GURL GetURL() const override { return url_; } |
| + static TabDescriptor* CreateForWebContents(int tab_id, |
| + WebContents* web_contents) { |
| + return new TabDescriptor(tab_id, web_contents); |
| + } |
| - GURL GetFaviconURL() const override { return favicon_url_; } |
| + static TabDescriptor* CreateForUnloadedTab(int tab_id, |
| + const base::string16& title, |
| + const GURL& url) { |
| + return new TabDescriptor(tab_id, title, url); |
| + } |
| - base::TimeTicks GetLastActivityTime() const override { |
| - return last_activity_time_; |
| + ~TabDescriptor() override { |
| } |
| - protected: |
| - explicit TargetBase(WebContents* web_contents) |
| - : title_(base::UTF16ToUTF8(web_contents->GetTitle())), |
| - url_(web_contents->GetURL()), |
| - favicon_url_(GetFaviconURLForContents(web_contents)), |
| - last_activity_time_(web_contents->GetLastActiveTime()) { |
| + // devtools_discovery::DevToolsTargetDescriptor implementation. |
| + std::string GetParentId() const override { |
|
David Trainor- moved to gerrit
2015/04/23 18:01:07
Might not be in the scope of this change, but have
dgozman
2015/04/24 10:23:25
That's interesting idea. I have to check this won'
|
| + return std::string(); |
| } |
| - explicit TargetBase(scoped_refptr<DevToolsAgentHost> agent_host) |
| - : title_(agent_host->GetTitle()), |
| - url_(agent_host->GetURL()), |
| - favicon_url_(GetFaviconURLForAgentHost(agent_host)), |
| - last_activity_time_(GetLastActiveTimeForAgentHost(agent_host)) { |
| + std::string GetTitle() const override { |
| + return title_; |
| } |
| - TargetBase(const std::string& title, const GURL& url) |
| - : title_(title), |
| - url_(url) { |
| + std::string GetDescription() const override { |
| + return std::string(); |
| } |
| - private: |
| - const std::string title_; |
| - const GURL url_; |
| - const GURL favicon_url_; |
| - const base::TimeTicks last_activity_time_; |
| -}; |
| + GURL GetURL() const override { |
| + return url_; |
| + } |
| -class TabTarget : public TargetBase { |
| - public: |
| - static TabTarget* CreateForWebContents(int tab_id, |
| - WebContents* web_contents) { |
| - return new TabTarget(tab_id, web_contents); |
| + GURL GetFaviconURL() const override { |
| + return favicon_url_; |
| } |
| - static TabTarget* CreateForUnloadedTab(int tab_id, |
| - const base::string16& title, |
| - const GURL& url) { |
| - return new TabTarget(tab_id, title, url); |
| + base::TimeTicks GetLastActivityTime() const override { |
| + return last_activity_time_; |
| } |
| - // content::DevToolsTarget implementation: |
| - std::string GetId() const override { return base::IntToString(tab_id_); } |
| + std::string GetId() const override { |
| + return base::IntToString(tab_id_); |
| + } |
| - std::string GetType() const override { return kTargetTypePage; } |
| + std::string GetType() const override { |
| + return devtools_discovery::BasicTargetDescriptor::kTypePage; |
| + } |
| bool IsAttached() const override { |
| TabModel* model; |
| @@ -166,14 +135,18 @@ class TabTarget : public TargetBase { |
| } |
| private: |
| - TabTarget(int tab_id, WebContents* web_contents) |
| - : TargetBase(web_contents), |
| - tab_id_(tab_id) { |
| + TabDescriptor(int tab_id, WebContents* web_contents) |
| + : tab_id_(tab_id), |
| + title_(base::UTF16ToUTF8(web_contents->GetTitle())), |
| + url_(web_contents->GetURL()), |
| + favicon_url_(GetFaviconURLForContents(web_contents)), |
| + last_activity_time_(web_contents->GetLastActiveTime()) { |
| } |
| - TabTarget(int tab_id, const base::string16& title, const GURL& url) |
| - : TargetBase(base::UTF16ToUTF8(title), url), |
| - tab_id_(tab_id) { |
| + TabDescriptor(int tab_id, const base::string16& title, const GURL& url) |
| + : tab_id_(tab_id), |
| + title_(base::UTF16ToUTF8(title)), |
| + url_(url) { |
| } |
| bool FindTab(TabModel** model_result, int* index_result) const { |
| @@ -193,98 +166,46 @@ class TabTarget : public TargetBase { |
| } |
| const int tab_id_; |
| -}; |
| - |
| -class NonTabTarget : public TargetBase { |
| - public: |
| - explicit NonTabTarget(scoped_refptr<DevToolsAgentHost> agent_host) |
| - : TargetBase(agent_host), |
| - agent_host_(agent_host) { |
| - } |
| - |
| - // content::DevToolsTarget implementation: |
| - std::string GetId() const override { return agent_host_->GetId(); } |
| - |
| - std::string GetType() const override { |
| - switch (agent_host_->GetType()) { |
| - case DevToolsAgentHost::TYPE_WEB_CONTENTS: |
| - if (TabModelList::begin() == TabModelList::end()) { |
| - // If there are no tab models we must be running in ChromeShell. |
| - // Return the 'page' target type for backwards compatibility. |
| - return kTargetTypePage; |
| - } |
| - break; |
| - case DevToolsAgentHost::TYPE_SERVICE_WORKER: |
| - return kTargetTypeServiceWorker; |
| - default: |
| - break; |
| - } |
| - return kTargetTypeOther; |
| - } |
| - |
| - bool IsAttached() const override { return agent_host_->IsAttached(); } |
| - |
| - scoped_refptr<DevToolsAgentHost> GetAgentHost() const override { |
| - return agent_host_; |
| - } |
| - |
| - bool Activate() const override { return agent_host_->Activate(); } |
| - |
| - bool Close() const override { return agent_host_->Close(); } |
| + const std::string title_; |
| + const GURL url_; |
| + const GURL favicon_url_; |
| + const base::TimeTicks last_activity_time_; |
| - private: |
| - scoped_refptr<DevToolsAgentHost> agent_host_; |
| + DISALLOW_COPY_AND_ASSIGN(TabDescriptor); |
| }; |
| -} // namespace |
| - |
| -DevToolsManagerDelegateAndroid::DevToolsManagerDelegateAndroid() |
| - : network_protocol_handler_(new DevToolsNetworkProtocolHandler()) { |
| -} |
| - |
| -DevToolsManagerDelegateAndroid::~DevToolsManagerDelegateAndroid() { |
| -} |
| - |
| -void DevToolsManagerDelegateAndroid::Inspect( |
| - content::BrowserContext* browser_context, |
| - content::DevToolsAgentHost* agent_host) { |
| -} |
| - |
| -base::DictionaryValue* DevToolsManagerDelegateAndroid::HandleCommand( |
| - content::DevToolsAgentHost* agent_host, |
| - base::DictionaryValue* command_dict) { |
| - return network_protocol_handler_->HandleCommand(agent_host, command_dict); |
| -} |
| - |
| -void DevToolsManagerDelegateAndroid::DevToolsAgentStateChanged( |
| - content::DevToolsAgentHost* agent_host, |
| - bool attached) { |
| - network_protocol_handler_->DevToolsAgentStateChanged(agent_host, attached); |
| -} |
| - |
| -scoped_ptr<content::DevToolsTarget> |
| - DevToolsManagerDelegateAndroid::CreateNewTarget(const GURL& url) { |
| +scoped_ptr<devtools_discovery::DevToolsTargetDescriptor> |
| +CreateNewAndroidTab(const GURL& url) { |
| if (TabModelList::empty()) |
| - return scoped_ptr<content::DevToolsTarget>(); |
| + return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>(); |
| TabModel* tab_model = TabModelList::get(0); |
| if (!tab_model) |
| - return scoped_ptr<content::DevToolsTarget>(); |
| + return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>(); |
| WebContents* web_contents = tab_model->CreateNewTabForDevTools(url); |
| if (!web_contents) |
| - return scoped_ptr<content::DevToolsTarget>(); |
| + return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>(); |
| TabAndroid* tab = TabAndroid::FromWebContents(web_contents); |
| if (!tab) |
| - return scoped_ptr<content::DevToolsTarget>(); |
| + return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>(); |
| - return scoped_ptr<content::DevToolsTarget>( |
| - TabTarget::CreateForWebContents(tab->GetAndroidId(), web_contents)); |
| + return make_scoped_ptr(TabDescriptor::CreateForWebContents( |
| + tab->GetAndroidId(), web_contents)); |
| } |
| -void DevToolsManagerDelegateAndroid::EnumerateTargets(TargetCallback callback) { |
| - TargetList targets; |
| +} // namespace |
| + |
| +DevToolsDiscoveryProviderAndroid::DevToolsDiscoveryProviderAndroid() { |
| +} |
| + |
| +DevToolsDiscoveryProviderAndroid::~DevToolsDiscoveryProviderAndroid() { |
| +} |
| + |
| +devtools_discovery::DevToolsTargetDescriptor::List |
| +DevToolsDiscoveryProviderAndroid::GetDescriptors() { |
| + devtools_discovery::DevToolsTargetDescriptor::List result; |
| // Enumerate existing tabs, including the ones with no WebContents. |
| std::set<WebContents*> tab_web_contents; |
| @@ -299,17 +220,16 @@ void DevToolsManagerDelegateAndroid::EnumerateTargets(TargetCallback callback) { |
| WebContents* web_contents = model->GetWebContentsAt(i); |
|
David Trainor- moved to gerrit
2015/04/23 18:01:06
Maybe change this to tab->web_contents()? That's
dgozman
2015/04/24 10:23:25
Done.
|
| if (web_contents) { |
| tab_web_contents.insert(web_contents); |
| - targets.push_back(TabTarget::CreateForWebContents(tab->GetAndroidId(), |
| - web_contents)); |
| + result.push_back(TabDescriptor::CreateForWebContents( |
| + tab->GetAndroidId(), web_contents)); |
| } else { |
| - targets.push_back(TabTarget::CreateForUnloadedTab(tab->GetAndroidId(), |
| - tab->GetTitle(), |
| - tab->GetURL())); |
| + result.push_back(TabDescriptor::CreateForUnloadedTab( |
| + tab->GetAndroidId(), tab->GetTitle(), tab->GetURL())); |
| } |
| } |
| } |
| - // Add targets for WebContents not associated with any tabs. |
| + // Add descriptors for targets not associated with any tabs. |
| DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); |
| for (DevToolsAgentHost::List::iterator it = agents.begin(); |
| it != agents.end(); ++it) { |
| @@ -317,21 +237,17 @@ void DevToolsManagerDelegateAndroid::EnumerateTargets(TargetCallback callback) { |
| if (tab_web_contents.find(web_contents) != tab_web_contents.end()) |
| continue; |
| } |
| - targets.push_back(new NonTabTarget(*it)); |
| + result.push_back(new devtools_discovery::BasicTargetDescriptor(*it)); |
| } |
| - callback.Run(targets); |
| + return result; |
| } |
| -std::string DevToolsManagerDelegateAndroid::GetPageThumbnailData( |
| - const GURL& url) { |
| - Profile* profile = ProfileManager::GetLastUsedProfile()->GetOriginalProfile(); |
| - scoped_refptr<history::TopSites> top_sites = |
| - TopSitesFactory::GetForProfile(profile); |
| - if (top_sites) { |
| - scoped_refptr<base::RefCountedMemory> data; |
| - if (top_sites->GetPageThumbnail(url, false, &data)) |
| - return std::string(data->front_as<char>(), data->size()); |
| - } |
| - return std::string(); |
| +// static |
| +void DevToolsDiscoveryProviderAndroid::Install() { |
| + devtools_discovery::DevToolsDiscoveryManager* discovery_manager = |
| + devtools_discovery::DevToolsDiscoveryManager::GetInstance(); |
| + discovery_manager->AddProvider( |
| + make_scoped_ptr(new DevToolsDiscoveryProviderAndroid())); |
| + discovery_manager->SetCreateCallback(base::Bind(&CreateNewAndroidTab)); |
| } |