Commit cb088d0b authored by dgozman's avatar dgozman Committed by Commit bot

[DevTools] Migrate chrome to devtools_discovery.

BUG=476496

Review URL: https://codereview.chromium.org/1109483003

Cr-Commit-Position: refs/heads/master@{#327267}
parent 596da6ef
......@@ -148,6 +148,7 @@
#include "chrome/browser/android/dev_tools_discovery_provider_android.h"
#include "chrome/browser/metrics/thread_watcher_android.h"
#else
#include "chrome/browser/devtools/chrome_devtools_discovery_provider.h"
#include "chrome/browser/feedback/feedback_profile_observer.h"
#endif // defined(OS_ANDROID)
......@@ -1097,6 +1098,8 @@ void ChromeBrowserMainParts::PostProfileInit() {
#if defined(OS_ANDROID)
DevToolsDiscoveryProviderAndroid::Install();
#else
ChromeDevToolsDiscoveryProvider::Install();
#endif // defined(OS_ANDROID)
LaunchDevToolsHandlerIfNeeded(parsed_command_line());
......
......@@ -77,6 +77,8 @@ static_library("devtools") {
":webrtc_device_provider_resources",
]
sources += [
"chrome_devtools_discovery_provider.cc",
"chrome_devtools_discovery_provider.h",
"chrome_devtools_manager_delegate.cc",
"chrome_devtools_manager_delegate.h",
"device/adb/adb_client_socket.cc",
......
include_rules = [
"+components/devtools_discovery",
"+components/devtools_http_handler",
]
// 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/devtools/chrome_devtools_discovery_provider.h"
#include "chrome/browser/devtools/devtools_target_impl.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser_navigator.h"
namespace {
scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>
CreateNewChromeTab(const GURL& url) {
chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(),
url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
params.disposition = NEW_FOREGROUND_TAB;
chrome::Navigate(&params);
if (!params.target_contents)
return scoped_ptr<devtools_discovery::DevToolsTargetDescriptor>();
return DevToolsTargetImpl::CreateForTab(params.target_contents).Pass();
}
} // namespace
ChromeDevToolsDiscoveryProvider::ChromeDevToolsDiscoveryProvider() {
}
ChromeDevToolsDiscoveryProvider::~ChromeDevToolsDiscoveryProvider() {
}
devtools_discovery::DevToolsTargetDescriptor::List
ChromeDevToolsDiscoveryProvider::GetDescriptors() {
std::vector<DevToolsTargetImpl*> list = DevToolsTargetImpl::EnumerateAll();
devtools_discovery::DevToolsTargetDescriptor::List result;
result.reserve(list.size());
for (const auto& descriptor : list)
result.push_back(descriptor);
return result;
}
// static
void ChromeDevToolsDiscoveryProvider::Install() {
devtools_discovery::DevToolsDiscoveryManager* discovery_manager =
devtools_discovery::DevToolsDiscoveryManager::GetInstance();
discovery_manager->AddProvider(
make_scoped_ptr(new ChromeDevToolsDiscoveryProvider()));
discovery_manager->SetCreateCallback(base::Bind(&CreateNewChromeTab));
}
// 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.
#ifndef CHROME_BROWSER_DEVTOOLS_CHROME_DEVTOOLS_DISCOVERY_PROVIDER_H_
#define CHROME_BROWSER_DEVTOOLS_CHROME_DEVTOOLS_DISCOVERY_PROVIDER_H_
#include "components/devtools_discovery/devtools_discovery_manager.h"
class ChromeDevToolsDiscoveryProvider :
public devtools_discovery::DevToolsDiscoveryManager::Provider {
public:
// Installs provider to devtools_discovery.
static void Install();
~ChromeDevToolsDiscoveryProvider() override;
// devtools_discovery::DevToolsDiscoveryManager::Provider implementation.
devtools_discovery::DevToolsTargetDescriptor::List GetDescriptors() override;
private:
ChromeDevToolsDiscoveryProvider();
DISALLOW_COPY_AND_ASSIGN(ChromeDevToolsDiscoveryProvider);
};
#endif // CHROME_BROWSER_DEVTOOLS_CHROME_DEVTOOLS_DISCOVERY_PROVIDER_H_
......@@ -12,6 +12,7 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_iterator.h"
#include "components/devtools_discovery/devtools_discovery_manager.h"
#include "components/history/core/browser/top_sites.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
......@@ -66,18 +67,16 @@ std::string ChromeDevToolsManagerDelegate::GetPageThumbnailData(
scoped_ptr<content::DevToolsTarget>
ChromeDevToolsManagerDelegate::CreateNewTarget(const GURL& url) {
chrome::NavigateParams params(ProfileManager::GetLastUsedProfile(),
url, ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
params.disposition = NEW_FOREGROUND_TAB;
chrome::Navigate(&params);
if (!params.target_contents)
return scoped_ptr<content::DevToolsTarget>();
return scoped_ptr<content::DevToolsTarget>(
DevToolsTargetImpl::CreateForWebContents(params.target_contents, true));
return devtools_discovery::DevToolsDiscoveryManager::GetInstance()->
CreateNew(url);
}
void ChromeDevToolsManagerDelegate::EnumerateTargets(TargetCallback callback) {
DevToolsTargetImpl::EnumerateAllTargets(
*reinterpret_cast<DevToolsTargetImpl::Callback*>(&callback));
TargetList targets;
devtools_discovery::DevToolsDiscoveryManager* discovery_manager =
devtools_discovery::DevToolsDiscoveryManager::GetInstance();
for (const auto& descriptor : discovery_manager->GetDescriptors())
targets.push_back(descriptor);
callback.Run(targets);
}
......@@ -13,10 +13,10 @@
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/common/extensions/extension_constants.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/extension_registry.h"
......@@ -26,9 +26,7 @@
using content::BrowserThread;
using content::DevToolsAgentHost;
using content::RenderViewHost;
using content::WebContents;
using content::WorkerService;
const char DevToolsTargetImpl::kTargetTypeApp[] = "app";
const char DevToolsTargetImpl::kTargetTypeBackgroundPage[] = "background_page";
......@@ -47,8 +45,7 @@ class WebContentsTarget : public DevToolsTargetImpl {
public:
WebContentsTarget(WebContents* web_contents, bool is_tab);
// DevToolsTargetImpl overrides:
WebContents* GetWebContents() const override;
// DevToolsTargetImpl overrides.
int GetTabId() const override;
std::string GetExtensionId() const override;
void Inspect(Profile* profile) const override;
......@@ -63,12 +60,6 @@ WebContentsTarget::WebContentsTarget(WebContents* web_contents, bool is_tab)
tab_id_(-1) {
set_type(kTargetTypeOther);
content::NavigationController& controller = web_contents->GetController();
content::NavigationEntry* entry = controller.GetActiveEntry();
if (entry != NULL && entry->GetURL().is_valid())
set_favicon_url(entry->GetFavicon().url);
set_last_activity_time(web_contents->GetLastActiveTime());
extensions::GuestViewBase* guest =
extensions::GuestViewBase::FromWebContents(web_contents);
WebContents* guest_contents = guest ? guest->embedder_web_contents() : NULL;
......@@ -112,10 +103,6 @@ WebContentsTarget::WebContentsTarget(WebContents* web_contents, bool is_tab)
ExtensionIconSet::MATCH_BIGGER, false, NULL));
}
WebContents* WebContentsTarget::GetWebContents() const {
return GetAgentHost()->GetWebContents();
}
int WebContentsTarget::GetTabId() const {
return tab_id_;
}
......@@ -190,58 +177,7 @@ DevToolsTargetImpl::~DevToolsTargetImpl() {
DevToolsTargetImpl::DevToolsTargetImpl(
scoped_refptr<DevToolsAgentHost> agent_host)
: agent_host_(agent_host),
title_(agent_host->GetTitle()),
url_(agent_host->GetURL()) {
}
std::string DevToolsTargetImpl::GetParentId() const {
return parent_id_;
}
std::string DevToolsTargetImpl::GetId() const {
return agent_host_->GetId();
}
std::string DevToolsTargetImpl::GetType() const {
return type_;
}
std::string DevToolsTargetImpl::GetTitle() const {
return title_;
}
std::string DevToolsTargetImpl::GetDescription() const {
return description_;
}
GURL DevToolsTargetImpl::GetURL() const {
return url_;
}
GURL DevToolsTargetImpl::GetFaviconURL() const {
return favicon_url_;
}
base::TimeTicks DevToolsTargetImpl::GetLastActivityTime() const {
return last_activity_time_;
}
scoped_refptr<content::DevToolsAgentHost>
DevToolsTargetImpl::GetAgentHost() const {
return agent_host_;
}
bool DevToolsTargetImpl::IsAttached() const {
return agent_host_->IsAttached();
}
bool DevToolsTargetImpl::Activate() const {
return agent_host_->Activate();
}
bool DevToolsTargetImpl::Close() const {
return agent_host_->Close();
: devtools_discovery::BasicTargetDescriptor(agent_host) {
}
int DevToolsTargetImpl::GetTabId() const {
......@@ -249,7 +185,7 @@ int DevToolsTargetImpl::GetTabId() const {
}
WebContents* DevToolsTargetImpl::GetWebContents() const {
return NULL;
return GetAgentHost()->GetWebContents();
}
std::string DevToolsTargetImpl::GetExtensionId() const {
......@@ -263,22 +199,21 @@ void DevToolsTargetImpl::Reload() const {
}
// static
scoped_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForWebContents(
content::WebContents* web_contents,
bool is_tab) {
scoped_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForTab(
content::WebContents* web_contents) {
return scoped_ptr<DevToolsTargetImpl>(
new WebContentsTarget(web_contents, is_tab));
new WebContentsTarget(web_contents, true));
}
// static
void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) {
std::vector<DevToolsTargetImpl*> DevToolsTargetImpl::EnumerateAll() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
std::set<WebContents*> tab_web_contents;
for (TabContentsIterator it; !it.done(); it.Next())
tab_web_contents.insert(*it);
DevToolsTargetImpl::List result;
std::vector<DevToolsTargetImpl*> result;
DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll();
for (DevToolsAgentHost::List::iterator it = agents.begin();
it != agents.end(); ++it) {
......@@ -304,6 +239,5 @@ void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) {
break;
}
}
callback.Run(result);
return result;
}
......@@ -8,18 +8,16 @@
#include <vector>
#include "base/callback.h"
#include "content/public/browser/devtools_target.h"
#include "content/public/browser/worker_service.h"
#include "components/devtools_discovery/basic_target_descriptor.h"
class Profile;
namespace content {
class DevToolsAgentHost;
class RenderViewHost;
class WebContents;
}
class DevToolsTargetImpl : public content::DevToolsTarget {
class DevToolsTargetImpl : public devtools_discovery::BasicTargetDescriptor {
public:
static const char kTargetTypeApp[];
static const char kTargetTypeBackgroundPage[];
......@@ -34,23 +32,9 @@ class DevToolsTargetImpl : public content::DevToolsTarget {
scoped_refptr<content::DevToolsAgentHost> agent_host);
~DevToolsTargetImpl() override;
// content::DevToolsTarget overrides:
std::string GetId() const override;
std::string GetParentId() const override;
std::string GetType() const override;
std::string GetTitle() const override;
std::string GetDescription() const override;
GURL GetURL() const override;
GURL GetFaviconURL() const override;
base::TimeTicks GetLastActivityTime() const override;
scoped_refptr<content::DevToolsAgentHost> GetAgentHost() const override;
bool IsAttached() const override;
bool Activate() const override;
bool Close() const override;
// Returns the WebContents associated with the target on NULL if there is
// not any.
virtual content::WebContents* GetWebContents() const;
content::WebContents* GetWebContents() const;
// Returns the tab id if the target is associated with a tab, -1 otherwise.
virtual int GetTabId() const;
......@@ -65,35 +49,12 @@ class DevToolsTargetImpl : public content::DevToolsTarget {
// Reload the target page.
virtual void Reload() const;
// Creates a new target associated with WebContents.
static scoped_ptr<DevToolsTargetImpl> CreateForWebContents(
content::WebContents* web_contents,
bool is_tab);
void set_parent_id(const std::string& parent_id) { parent_id_ = parent_id; }
void set_type(const std::string& type) { type_ = type; }
void set_title(const std::string& title) { title_ = title; }
void set_description(const std::string& desc) { description_ = desc; }
void set_url(const GURL& url) { url_ = url; }
void set_favicon_url(const GURL& url) { favicon_url_ = url; }
void set_last_activity_time(const base::TimeTicks& time) {
last_activity_time_ = time;
}
typedef std::vector<DevToolsTargetImpl*> List;
typedef base::Callback<void(const List&)> Callback;
static void EnumerateAllTargets(Callback callback);
// Creates a new target associated with tab.
static scoped_ptr<DevToolsTargetImpl> CreateForTab(
content::WebContents* web_contents);
private:
scoped_refptr<content::DevToolsAgentHost> agent_host_;
std::string parent_id_;
std::string type_;
std::string title_;
std::string description_;
GURL url_;
GURL favicon_url_;
base::TimeTicks last_activity_time_;
// Caller takes ownership of returned objects.
static std::vector<DevToolsTargetImpl*> EnumerateAll();
};
#endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_TARGET_IMPL_H_
......@@ -169,7 +169,7 @@ private:
void ScheduleUpdate();
void UpdateTargets();
void SendTargets(const DevToolsTargetImpl::List& targets);
void SendTargets(const std::vector<DevToolsTargetImpl*>& targets);
content::NotificationRegistrar notification_registrar_;
scoped_ptr<CancelableTimer> timer_;
......@@ -222,20 +222,16 @@ void LocalTargetsUIHandler::ScheduleUpdate() {
}
void LocalTargetsUIHandler::UpdateTargets() {
DevToolsTargetImpl::EnumerateAllTargets(base::Bind(
&LocalTargetsUIHandler::SendTargets,
weak_factory_.GetWeakPtr()));
SendTargets(DevToolsTargetImpl::EnumerateAll());
}
void LocalTargetsUIHandler::SendTargets(
const DevToolsTargetImpl::List& targets) {
const std::vector<DevToolsTargetImpl*>& targets) {
base::ListValue list_value;
std::map<std::string, base::DictionaryValue*> id_to_descriptor;
STLDeleteValues(&targets_);
for (DevToolsTargetImpl::List::const_iterator it = targets.begin();
it != targets.end(); ++it) {
DevToolsTargetImpl* target = *it;
for (DevToolsTargetImpl* target : targets) {
targets_[target->GetId()] = target;
id_to_descriptor[target->GetId()] = Serialize(*target);
}
......
......@@ -31,6 +31,7 @@
#include "chrome/grit/generated_resources.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
#include "components/infobars/core/infobar.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
......@@ -732,8 +733,11 @@ DebuggerGetTargetsFunction::~DebuggerGetTargetsFunction() {
}
bool DebuggerGetTargetsFunction::RunAsync() {
DevToolsTargetImpl::EnumerateAllTargets(
base::Bind(&DebuggerGetTargetsFunction::SendTargetList, this));
std::vector<DevToolsTargetImpl*> list = DevToolsTargetImpl::EnumerateAll();
content::BrowserThread::PostTask(
content::BrowserThread::UI,
FROM_HERE,
base::Bind(&DebuggerGetTargetsFunction::SendTargetList, this, list));
return true;
}
......
......@@ -57,6 +57,8 @@
'sources': [
'<(SHARED_INTERMEDIATE_DIR)/chrome/grit/webrtc_device_provider_resources_map.cc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/grit/webrtc_device_provider_resources_map.h',
'browser/devtools/chrome_devtools_discovery_provider.cc',
'browser/devtools/chrome_devtools_discovery_provider.h',
'browser/devtools/chrome_devtools_manager_delegate.cc',
'browser/devtools/chrome_devtools_manager_delegate.h',
'browser/devtools/device/adb/adb_client_socket.cc',
......
......@@ -18,9 +18,30 @@ const char BasicTargetDescriptor::kTypeServiceWorker[] = "service_worker";
const char BasicTargetDescriptor::kTypeSharedWorker[] = "worker";
const char BasicTargetDescriptor::kTypeOther[] = "other";
namespace {
std::string GetTypeFromAgentHost(DevToolsAgentHost* agent_host) {
switch (agent_host->GetType()) {
case DevToolsAgentHost::TYPE_WEB_CONTENTS:
return BasicTargetDescriptor::kTypePage;
case DevToolsAgentHost::TYPE_SERVICE_WORKER:
return BasicTargetDescriptor::kTypeServiceWorker;
case DevToolsAgentHost::TYPE_SHARED_WORKER:
return BasicTargetDescriptor::kTypeSharedWorker;
default:
break;
}
return BasicTargetDescriptor::kTypeOther;
}
} // namespace
BasicTargetDescriptor::BasicTargetDescriptor(
scoped_refptr<DevToolsAgentHost> agent_host)
: agent_host_(agent_host) {
: agent_host_(agent_host),
type_(GetTypeFromAgentHost(agent_host.get())),
title_(agent_host->GetTitle()),
url_(agent_host->GetURL()) {
if (content::WebContents* web_contents = agent_host_->GetWebContents()) {
content::NavigationController& controller = web_contents->GetController();
content::NavigationEntry* entry = controller.GetActiveEntry();
......@@ -38,33 +59,23 @@ std::string BasicTargetDescriptor::GetId() const {
}
std::string BasicTargetDescriptor::GetParentId() const {
return std::string();
return parent_id_;
}
std::string BasicTargetDescriptor::GetType() const {
switch (agent_host_->GetType()) {
case DevToolsAgentHost::TYPE_WEB_CONTENTS:
return kTypePage;
case DevToolsAgentHost::TYPE_SERVICE_WORKER:
return kTypeServiceWorker;
case DevToolsAgentHost::TYPE_SHARED_WORKER:
return kTypeSharedWorker;
default:
break;
}
return kTypeOther;
return type_;
}
std::string BasicTargetDescriptor::GetTitle() const {
return agent_host_->GetTitle();
return title_;
}
std::string BasicTargetDescriptor::GetDescription() const {
return std::string();
return description_;
}
GURL BasicTargetDescriptor::GetURL() const {
return agent_host_->GetURL();
return url_;
}
GURL BasicTargetDescriptor::GetFaviconURL() const {
......
......@@ -34,8 +34,21 @@ class BasicTargetDescriptor : public DevToolsTargetDescriptor {
bool Activate() const override;
bool Close() const override;
protected:
void set_parent_id(const std::string& parent_id) { parent_id_ = parent_id; }
void set_type(const std::string& type) { type_ = type; }
void set_title(const std::string& title) { title_ = title; }
void set_description(const std::string& desc) { description_ = desc; }
void set_url(const GURL& url) { url_ = url; }
void set_favicon_url(const GURL& url) { favicon_url_ = url; }
private:
scoped_refptr<content::DevToolsAgentHost> agent_host_;
std::string parent_id_;
std::string type_;
std::string title_;
std::string description_;
GURL url_;
GURL favicon_url_;
base::TimeTicks last_activity_time_;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment