diff options
author | kaznacheev@chromium.org <kaznacheev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-10 09:26:09 +0000 |
---|---|---|
committer | kaznacheev@chromium.org <kaznacheev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-10 09:26:09 +0000 |
commit | 04ea1bb6a3f58e23f26dd925c481fd7a65f7602e (patch) | |
tree | c39cf59339f9b3d3cecff0b1aa0ce29a4dee6cbf | |
parent | cacf4e2d364d72ac9b58279c22a8fa9f279e35ba (diff) | |
download | chromium_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
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() {} |