summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaznacheev@chromium.org <kaznacheev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-10 09:26:09 +0000
committerkaznacheev@chromium.org <kaznacheev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-10 09:26:09 +0000
commit04ea1bb6a3f58e23f26dd925c481fd7a65f7602e (patch)
treec39cf59339f9b3d3cecff0b1aa0ce29a4dee6cbf
parentcacf4e2d364d72ac9b58279c22a8fa9f279e35ba (diff)
downloadchromium_src-04ea1bb6a3f58e23f26dd925c481fd7a65f7602e.zip
chromium_src-04ea1bb6a3f58e23f26dd925c481fd7a65f7602e.tar.gz
chromium_src-04ea1bb6a3f58e23f26dd925c481fd7a65f7602e.tar.bz2
Get rid of cookies in DevToolsAgentHost API
Since DevToolsAgentHost is ref counted (since r174617) it is safe to store scoped_refptr<DevToolsAgentHost> directly instead of a cookie (the only place where this is necessary is extension_service.cc) BUG=None Review URL: https://chromiumcodereview.appspot.com/18459004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@210791 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_service.cc11
-rw-r--r--chrome/browser/extensions/extension_service.h8
-rw-r--r--content/browser/devtools/devtools_agent_host_impl.cc4
-rw-r--r--content/browser/devtools/devtools_agent_host_impl.h4
-rw-r--r--content/browser/devtools/render_view_devtools_agent_host.cc45
-rw-r--r--content/browser/devtools/render_view_devtools_agent_host.h5
-rw-r--r--content/public/browser/devtools_agent_host.h17
7 files changed, 42 insertions, 52 deletions
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 4dfb055..9dd6724 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -697,10 +697,10 @@ void ExtensionService::ReloadExtension(const std::string extension_id) {
manager->GetBackgroundHostForExtension(extension_id);
if (host && DevToolsAgentHost::HasFor(host->render_view_host())) {
// Look for an open inspector for the background page.
- std::string devtools_cookie = DevToolsAgentHost::DisconnectRenderViewHost(
- host->render_view_host());
- if (devtools_cookie != std::string())
- orphaned_dev_tools_[extension_id] = devtools_cookie;
+ scoped_refptr<DevToolsAgentHost> agent_host =
+ DevToolsAgentHost::GetOrCreateFor(host->render_view_host());
+ agent_host->DisconnectRenderViewHost();
+ orphaned_dev_tools_[extension_id] = agent_host;
}
path = current_extension->path();
@@ -2697,8 +2697,7 @@ void ExtensionService::DidCreateRenderViewForBackgroundPage(
if (iter == orphaned_dev_tools_.end())
return;
- DevToolsAgentHost::ConnectRenderViewHost(iter->second,
- host->render_view_host());
+ iter->second->ConnectRenderViewHost(host->render_view_host());
orphaned_dev_tools_.erase(iter);
}
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 6ee4546..4ff3178 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -35,6 +35,7 @@
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_set.h"
#include "chrome/common/extensions/manifest.h"
+#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "extensions/common/one_shot_event.h"
@@ -873,9 +874,10 @@ class ExtensionService
// Store the ids of reloading extensions.
std::set<std::string> reloading_extensions_;
- // Map of inspector cookies that are detached, waiting for an extension to be
- // reloaded.
- typedef std::map<std::string, std::string> OrphanedDevTools;
+ // Map of DevToolsAgentHost instances that are detached,
+ // waiting for an extension to be reloaded.
+ typedef std::map<std::string, scoped_refptr<content::DevToolsAgentHost> >
+ OrphanedDevTools;
OrphanedDevTools orphaned_dev_tools_;
content::NotificationRegistrar registrar_;
diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc
index 881e4bfc..35111e9 100644
--- a/content/browser/devtools/devtools_agent_host_impl.cc
+++ b/content/browser/devtools/devtools_agent_host_impl.cc
@@ -53,6 +53,10 @@ RenderViewHost* DevToolsAgentHostImpl::GetRenderViewHost() {
return NULL;
}
+void DevToolsAgentHostImpl::DisconnectRenderViewHost() {}
+
+void DevToolsAgentHostImpl::ConnectRenderViewHost(RenderViewHost* rvh) {}
+
void DevToolsAgentHostImpl::NotifyCloseListener() {
if (close_listener_) {
scoped_refptr<DevToolsAgentHostImpl> protect(this);
diff --git a/content/browser/devtools/devtools_agent_host_impl.h b/content/browser/devtools/devtools_agent_host_impl.h
index 9c21650..9bd800d 100644
--- a/content/browser/devtools/devtools_agent_host_impl.h
+++ b/content/browser/devtools/devtools_agent_host_impl.h
@@ -49,6 +49,10 @@ class CONTENT_EXPORT DevToolsAgentHostImpl : public DevToolsAgentHost {
virtual RenderViewHost* GetRenderViewHost() OVERRIDE;
+ virtual void DisconnectRenderViewHost() OVERRIDE;
+
+ virtual void ConnectRenderViewHost(RenderViewHost* rvh) OVERRIDE;
+
protected:
DevToolsAgentHostImpl();
virtual ~DevToolsAgentHostImpl();
diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc
index 2acdea4..974b370 100644
--- a/content/browser/devtools/render_view_devtools_agent_host.cc
+++ b/content/browser/devtools/render_view_devtools_agent_host.cc
@@ -96,27 +96,6 @@ bool DevToolsAgentHost::IsDebuggerAttached(WebContents* web_contents) {
return false;
}
-// static
-std::string DevToolsAgentHost::DisconnectRenderViewHost(RenderViewHost* rvh) {
- RenderViewDevToolsAgentHost* agent_host = FindAgentHost(rvh);
- if (!agent_host)
- return std::string();
- agent_host->DisconnectRenderViewHost();
- return agent_host->GetId();
-}
-
-// static
-void DevToolsAgentHost::ConnectRenderViewHost(const std::string& cookie,
- RenderViewHost* rvh) {
- for (Instances::iterator it = g_instances.Get().begin();
- it != g_instances.Get().end(); ++it) {
- if (cookie == (*it)->GetId()) {
- (*it)->ConnectRenderViewHost(rvh, true);
- break;
- }
- }
-}
-
//static
std::vector<RenderViewHost*> DevToolsAgentHost::GetValidRenderViewHosts() {
std::vector<RenderViewHost*> result;
@@ -144,15 +123,17 @@ std::vector<RenderViewHost*> DevToolsAgentHost::GetValidRenderViewHosts() {
void RenderViewDevToolsAgentHost::OnCancelPendingNavigation(
RenderViewHost* pending,
RenderViewHost* current) {
- std::string cookie = DevToolsAgentHost::DisconnectRenderViewHost(pending);
- if (cookie != std::string())
- DevToolsAgentHost::ConnectRenderViewHost(cookie, current);
+ RenderViewDevToolsAgentHost* agent_host = FindAgentHost(pending);
+ if (!agent_host)
+ return;
+ agent_host->DisconnectRenderViewHost();
+ agent_host->ConnectRenderViewHost(current);
}
RenderViewDevToolsAgentHost::RenderViewDevToolsAgentHost(
RenderViewHost* rvh)
: overrides_handler_(new RendererOverridesHandler(this)) {
- ConnectRenderViewHost(rvh, false);
+ SetRenderViewHost(rvh);
g_instances.Get().push_back(this);
RenderViewHostDelegate* delegate = render_view_host_->GetDelegate();
if (delegate && delegate->GetAsWebContents())
@@ -244,7 +225,7 @@ void RenderViewDevToolsAgentHost::AboutToNavigateRenderView(
base::TERMINATION_STATUS_STILL_RUNNING)
return;
DisconnectRenderViewHost();
- ConnectRenderViewHost(dest_rvh, true);
+ ConnectRenderViewHost(dest_rvh);
}
void RenderViewDevToolsAgentHost::RenderProcessGone(
@@ -270,15 +251,17 @@ void RenderViewDevToolsAgentHost::DidAttachInterstitialPage() {
if (!web_contents)
return;
DisconnectRenderViewHost();
- ConnectRenderViewHost(web_contents->GetRenderViewHost(), true);
+ ConnectRenderViewHost(web_contents->GetRenderViewHost());
}
-void RenderViewDevToolsAgentHost::ConnectRenderViewHost(RenderViewHost* rvh,
- bool reattach) {
+void RenderViewDevToolsAgentHost::SetRenderViewHost(RenderViewHost* rvh) {
render_view_host_ = rvh;
rvh_observer_.reset(new DevToolsAgentHostRvhObserver(rvh, this));
- if (reattach)
- Reattach(state_);
+}
+
+void RenderViewDevToolsAgentHost::ConnectRenderViewHost(RenderViewHost* rvh) {
+ SetRenderViewHost(rvh);
+ Reattach(state_);
}
void RenderViewDevToolsAgentHost::DisconnectRenderViewHost() {
diff --git a/content/browser/devtools/render_view_devtools_agent_host.h b/content/browser/devtools/render_view_devtools_agent_host.h
index 8257663..bbd226e 100644
--- a/content/browser/devtools/render_view_devtools_agent_host.h
+++ b/content/browser/devtools/render_view_devtools_agent_host.h
@@ -38,6 +38,8 @@ class CONTENT_EXPORT RenderViewDevToolsAgentHost
virtual ~RenderViewDevToolsAgentHost();
// DevTooolsAgentHost overrides.
+ virtual void DisconnectRenderViewHost() OVERRIDE;
+ virtual void ConnectRenderViewHost(RenderViewHost* rvh) OVERRIDE;
virtual RenderViewHost* GetRenderViewHost() OVERRIDE;
// IPCDevToolsAgentHost overrides.
@@ -51,8 +53,7 @@ class CONTENT_EXPORT RenderViewDevToolsAgentHost
virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
virtual void DidAttachInterstitialPage() OVERRIDE;
- void ConnectRenderViewHost(RenderViewHost* rvh, bool reattach);
- void DisconnectRenderViewHost();
+ void SetRenderViewHost(RenderViewHost* rvh);
void RenderViewHostDestroyed(RenderViewHost* rvh);
void RenderViewCrashed();
diff --git a/content/public/browser/devtools_agent_host.h b/content/public/browser/devtools_agent_host.h
index 80182fe..b98363e 100644
--- a/content/public/browser/devtools_agent_host.h
+++ b/content/public/browser/devtools_agent_host.h
@@ -39,16 +39,6 @@ class CONTENT_EXPORT DevToolsAgentHost
static bool IsDebuggerAttached(WebContents* web_contents);
- // Detaches given |rvh| from the agent host temporarily and returns the agent
- // host id that allows to reattach another rvh to that agent host later.
- // Returns empty string if there is no agent host associated with the |rvh|.
- static std::string DisconnectRenderViewHost(RenderViewHost* rvh);
-
- // Reattaches agent host detached with DisconnectRenderViewHost method above
- // to |rvh|.
- static void ConnectRenderViewHost(const std::string& agent_host_cookie,
- RenderViewHost* rvh);
-
// Returns a list of all existing RenderViewHost's that can be debugged.
static std::vector<RenderViewHost*> GetValidRenderViewHosts();
@@ -64,6 +54,13 @@ class CONTENT_EXPORT DevToolsAgentHost
// Returns render view host instance for this host if any.
virtual RenderViewHost* GetRenderViewHost() = 0;
+ // Temporarily detaches render view host from this host. Must be followed by
+ // a call to ConnectRenderViewHost (may leak the host instance otherwise).
+ virtual void DisconnectRenderViewHost() = 0;
+
+ // Attaches render view host to this host.
+ virtual void ConnectRenderViewHost(RenderViewHost* rvh) = 0;
+
protected:
friend class base::RefCounted<DevToolsAgentHost>;
virtual ~DevToolsAgentHost() {}