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

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

Issue 2289773002: Revert of DevTools: merge devtools target with devtools host, part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 148b530937735235d1e574b109d93ef15e9166a9..113748bf31d7443d468e4fea29b4f5a122a51ee0 100644
--- a/chrome/browser/android/dev_tools_discovery_provider_android.cc
+++ b/chrome/browser/android/dev_tools_discovery_provider_android.cc
@@ -17,80 +17,106 @@
#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 {
-class TabProxyDelegate : public content::DevToolsExternalAgentProxyDelegate,
- public content::DevToolsAgentHostClient {
+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 {
public:
- 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) {
- }
-
- ~TabProxyDelegate() override {
- }
-
- void DispatchProtocolMessage(DevToolsAgentHost* agent_host,
- const std::string& message) override {
- proxy_->DispatchOnClientHost(message);
- }
-
- void AgentHostClosed(DevToolsAgentHost* agent_host,
- bool replaced_with_another_client) override {
- proxy_->ConnectionClosed();
- }
-
- void Attach(content::DevToolsExternalAgentProxy* proxy) override {
- proxy_ = proxy;
- MaterializeAgentHost();
- }
-
- void Detach() override {
- if (agent_host_)
- agent_host_->DetachClient(this);
- agent_host_ = nullptr;
- proxy_ = nullptr;
- }
-
- std::string GetId() override {
+ static TabDescriptor* CreateForWebContents(int tab_id,
+ WebContents* web_contents) {
+ return new TabDescriptor(tab_id, web_contents);
+ }
+
+ static TabDescriptor* CreateForUnloadedTab(int tab_id,
+ const base::string16& title,
+ const GURL& url) {
+ return new TabDescriptor(tab_id, title, url);
+ }
+
+ ~TabDescriptor() override {
+ }
+
+ // devtools_discovery::DevToolsTargetDescriptor 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_;
+ }
+
+ GURL GetFaviconURL() const override {
+ return favicon_url_;
+ }
+
+ base::TimeTicks GetLastActivityTime() const override {
+ return last_activity_time_;
+ }
+
+ std::string GetId() const override {
return base::IntToString(tab_id_);
}
- std::string GetType() override {
- return agent_host_ ? agent_host_->GetType() : DevToolsAgentHost::kTypePage;
- }
-
- std::string GetTitle() override {
- return agent_host_ ? agent_host_->GetTitle() : title_;
- }
-
- std::string GetDescription() override {
- return agent_host_ ? agent_host_->GetDescription() : "";
- }
-
- GURL GetURL() override {
- return agent_host_ ? agent_host_->GetURL() : url_;
- }
-
- GURL GetFaviconURL() override {
- return agent_host_ ? agent_host_->GetFaviconURL() : GURL();
- }
-
- bool Activate() override {
+ std::string GetType() const override {
+ return devtools_discovery::BasicTargetDescriptor::kTypePage;
+ }
+
+ 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);
+ }
+
+ 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 {
TabModel* model;
int index;
if (!FindTab(&model, &index))
@@ -99,20 +125,7 @@
return true;
}
- 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 {
+ bool Close() const override {
TabModel* model;
int index;
if (!FindTab(&model, &index))
@@ -121,23 +134,19 @@
return true;
}
- void SendMessageToBackend(const std::string& message) override {
- if (agent_host_)
- agent_host_->DispatchProtocolMessage(this, message);
- }
-
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);
+ 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()) {
+ }
+
+ 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 {
@@ -159,9 +168,10 @@
const int tab_id_;
const std::string title_;
const GURL url_;
- scoped_refptr<content::DevToolsAgentHost> agent_host_;
- content::DevToolsExternalAgentProxy* proxy_;
- DISALLOW_COPY_AND_ASSIGN(TabProxyDelegate);
+ const GURL favicon_url_;
+ const base::TimeTicks last_activity_time_;
+
+ DISALLOW_COPY_AND_ASSIGN(TabDescriptor);
};
std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>
@@ -181,9 +191,8 @@
if (!tab)
return std::unique_ptr<devtools_discovery::DevToolsTargetDescriptor>();
- scoped_refptr<content::DevToolsAgentHost> host =
- DevToolsAgentHost::Create(new TabProxyDelegate(tab));
- return base::WrapUnique(new devtools_discovery::BasicTargetDescriptor(host));
+ return base::WrapUnique(
+ TabDescriptor::CreateForWebContents(tab->GetAndroidId(), web_contents));
}
} // namespace
@@ -208,8 +217,15 @@
if (!tab)
continue;
- scoped_refptr<content::DevToolsAgentHost> host =
- DevToolsAgentHost::Create(new TabProxyDelegate(tab));
+ 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()));
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698