Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1711)

Unified Diff: chrome/browser/android/dev_tools_discovery_provider_android.cc

Issue 2263843002: DevTools: merge devtools target with devtools host, part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: for landing 3 Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/dev_tools_discovery_provider_android.cc
diff --git a/chrome/browser/android/dev_tools_discovery_provider_android.cc b/chrome/browser/android/dev_tools_discovery_provider_android.cc
index 113748bf31d7443d468e4fea29b4f5a122a51ee0..148b530937735235d1e574b109d93ef15e9166a9 100644
--- a/chrome/browser/android/dev_tools_discovery_provider_android.cc
+++ b/chrome/browser/android/dev_tools_discovery_provider_android.cc
@@ -17,106 +17,80 @@
#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_agent_host_client.h"
+#include "content/public/browser/devtools_external_agent_proxy.h"
+#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
using content::DevToolsAgentHost;
using content::WebContents;
+using devtools_discovery::DevToolsTargetDescriptor;
namespace {
-GURL GetFaviconURLForContents(WebContents* web_contents) {
- content::NavigationController& controller = web_contents->GetController();
- content::NavigationEntry* entry = controller.GetActiveEntry();
- if (entry != NULL && entry->GetURL().is_valid())
- return entry->GetFavicon().url;
- return GURL();
-}
-
-class TabDescriptor : public devtools_discovery::DevToolsTargetDescriptor {
+class TabProxyDelegate : public content::DevToolsExternalAgentProxyDelegate,
+ public content::DevToolsAgentHostClient {
public:
- static TabDescriptor* CreateForWebContents(int tab_id,
- WebContents* web_contents) {
- return new TabDescriptor(tab_id, web_contents);
+ explicit TabProxyDelegate(TabAndroid* tab)
+ : tab_id_(tab->GetAndroidId()),
+ title_(base::UTF16ToUTF8(tab->GetTitle())),
+ url_(tab->GetURL()),
+ agent_host_(tab->web_contents() ?
+ DevToolsAgentHost::GetOrCreateFor(tab->web_contents()) : nullptr) {
}
- static TabDescriptor* CreateForUnloadedTab(int tab_id,
- const base::string16& title,
- const GURL& url) {
- return new TabDescriptor(tab_id, title, url);
+ ~TabProxyDelegate() override {
}
- ~TabDescriptor() override {
+ void DispatchProtocolMessage(DevToolsAgentHost* agent_host,
+ const std::string& message) override {
+ proxy_->DispatchOnClientHost(message);
}
- // devtools_discovery::DevToolsTargetDescriptor implementation.
- std::string GetParentId() const override {
- return std::string();
+ void AgentHostClosed(DevToolsAgentHost* agent_host,
+ bool replaced_with_another_client) override {
+ proxy_->ConnectionClosed();
}
- std::string GetTitle() const override {
- return title_;
+ void Attach(content::DevToolsExternalAgentProxy* proxy) override {
+ proxy_ = proxy;
+ MaterializeAgentHost();
}
- std::string GetDescription() const override {
- return std::string();
+ void Detach() override {
+ if (agent_host_)
+ agent_host_->DetachClient(this);
+ agent_host_ = nullptr;
+ proxy_ = nullptr;
}
- GURL GetURL() const override {
- return url_;
+ std::string GetId() override {
+ return base::IntToString(tab_id_);
}
- GURL GetFaviconURL() const override {
- return favicon_url_;
+ std::string GetType() override {
+ return agent_host_ ? agent_host_->GetType() : DevToolsAgentHost::kTypePage;
}
- base::TimeTicks GetLastActivityTime() const override {
- return last_activity_time_;
+ std::string GetTitle() override {
+ return agent_host_ ? agent_host_->GetTitle() : title_;
}
- std::string GetId() const override {
- return base::IntToString(tab_id_);
+ std::string GetDescription() override {
+ return agent_host_ ? agent_host_->GetDescription() : "";
}
- std::string GetType() const override {
- return devtools_discovery::BasicTargetDescriptor::kTypePage;
+ GURL GetURL() override {
+ return agent_host_ ? agent_host_->GetURL() : url_;
}
- bool IsAttached() const override {
- TabModel* model;
- int index;
- if (!FindTab(&model, &index))
- return false;
- WebContents* web_contents = model->GetWebContentsAt(index);
- if (!web_contents)
- return false;
- return DevToolsAgentHost::IsDebuggerAttached(web_contents);
+ GURL GetFaviconURL() override {
+ return agent_host_ ? agent_host_->GetFaviconURL() : GURL();
}
- scoped_refptr<DevToolsAgentHost> GetAgentHost() const override {
- TabModel* model;
- int index;
- if (!FindTab(&model, &index))
- return NULL;
- WebContents* web_contents = model->GetWebContentsAt(index);
- if (!web_contents) {
- // The tab has been pushed out of memory, pull it back.
- TabAndroid* tab = model->GetTabAt(index);
- if (!tab)
- return NULL;
-
- if (!tab->LoadIfNeeded())
- return NULL;
-
- web_contents = model->GetWebContentsAt(index);
- if (!web_contents)
- return NULL;
- }
- return DevToolsAgentHost::GetOrCreateFor(web_contents);
- }
-
- bool Activate() const override {
+ bool Activate() override {
TabModel* model;
int index;
if (!FindTab(&model, &index))
@@ -125,7 +99,20 @@ class TabDescriptor : public devtools_discovery::DevToolsTargetDescriptor {
return true;
}
- bool Close() const override {
+ bool Inspect() override {
+ MaterializeAgentHost();
+ if (agent_host_)
+ return agent_host_->Inspect();
+ return false;
+ }
+
+ void Reload() override {
+ MaterializeAgentHost();
+ if (agent_host_)
+ agent_host_->Reload();
+ }
+
+ bool Close() override {
TabModel* model;
int index;
if (!FindTab(&model, &index))
@@ -134,19 +121,23 @@ class TabDescriptor : public devtools_discovery::DevToolsTargetDescriptor {
return true;
}
- private:
- 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()) {
+ void SendMessageToBackend(const std::string& message) override {
+ if (agent_host_)
+ agent_host_->DispatchProtocolMessage(this, message);
}
- TabDescriptor(int tab_id, const base::string16& title, const GURL& url)
- : tab_id_(tab_id),
- title_(base::UTF16ToUTF8(title)),
- url_(url) {
+ private:
+ void MaterializeAgentHost() {
+ if (agent_host_)
+ return;
+ TabModel* model;
+ int index;
+ if (!FindTab(&model, &index))
+ return;
+ WebContents* web_contents = model->GetWebContentsAt(index);
+ if (!web_contents)
+ return;
+ agent_host_ = DevToolsAgentHost::GetOrCreateFor(web_contents);
}
bool FindTab(TabModel** model_result, int* index_result) const {
@@ -168,10 +159,9 @@ class TabDescriptor : public devtools_discovery::DevToolsTargetDescriptor {
const int tab_id_;
const std::string title_;
const GURL url_;
- const GURL favicon_url_;
- const base::TimeTicks last_activity_time_;
-
- DISALLOW_COPY_AND_ASSIGN(TabDescriptor);
+ scoped_refptr<content::DevToolsAgentHost> agent_host_;
+ content::DevToolsExternalAgentProxy* proxy_;
+ DISALLOW_COPY_AND_ASSIGN(TabProxyDelegate);
};
std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>
@@ -191,8 +181,9 @@ CreateNewAndroidTab(const GURL& url) {
if (!tab)
return std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>();
- return base::WrapUnique(
- TabDescriptor::CreateForWebContents(tab->GetAndroidId(), web_contents));
+ scoped_refptr<content::DevToolsAgentHost> host =
+ DevToolsAgentHost::Create(new TabProxyDelegate(tab));
+ return base::WrapUnique(new devtools_discovery::BasicTargetDescriptor(host));
}
} // namespace
@@ -217,15 +208,8 @@ DevToolsDiscoveryProviderAndroid::GetDescriptors() {
if (!tab)
continue;
- WebContents* web_contents = tab->web_contents();
- if (web_contents) {
- tab_web_contents.insert(web_contents);
- result.push_back(TabDescriptor::CreateForWebContents(
- tab->GetAndroidId(), web_contents));
- } else {
- result.push_back(TabDescriptor::CreateForUnloadedTab(
- tab->GetAndroidId(), tab->GetTitle(), tab->GetURL()));
- }
+ scoped_refptr<content::DevToolsAgentHost> host =
+ DevToolsAgentHost::Create(new TabProxyDelegate(tab));
}
}

Powered by Google App Engine
This is Rietveld 408576698