Commit 473bc7b0 authored by gavinp@chromium.org's avatar gavinp@chromium.org

Fix memory leak in PrerenderDispatcher.

Make the PrerenderingInterface into a scoped pointer.

BUG=127953


Review URL: https://chromiumcodereview.appspot.com/10391134

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138494 0039d316-1c4b-4281-b951-d872f2087c98
parent de500dad
...@@ -12,11 +12,14 @@ ...@@ -12,11 +12,14 @@
namespace prerender { namespace prerender {
PrerenderDispatcher::PrerenderDispatcher() { PrerenderDispatcher::PrerenderDispatcher()
WebKit::WebPrerenderingSupport::initialize(new PrerenderingSupport()); : prerendering_support_(new PrerenderingSupport()) {
WebKit::WebPrerenderingSupport::initialize(prerendering_support_.get());
} }
PrerenderDispatcher::~PrerenderDispatcher() { PrerenderDispatcher::~PrerenderDispatcher() {
if (prerendering_support_.get())
WebKit::WebPrerenderingSupport::shutdown();
} }
bool PrerenderDispatcher::IsPrerenderURL(const GURL& url) const { bool PrerenderDispatcher::IsPrerenderURL(const GURL& url) const {
......
...@@ -9,15 +9,20 @@ ...@@ -9,15 +9,20 @@
#include <map> #include <map>
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "content/public/renderer/render_process_observer.h" #include "content/public/renderer/render_process_observer.h"
class GURL; class GURL;
namespace prerender { namespace prerender {
class PrerenderingSupport;
// PrerenderDispatcher keeps track of which URLs are being prerendered. There // PrerenderDispatcher keeps track of which URLs are being prerendered. There
// is only one PrerenderDispatcher per render process, and it will only be // is only one PrerenderDispatcher per render process, and it will only be
// aware of prerenders that are triggered by this render process. // aware of prerenders that are triggered by this render process. As well,
// it holds on to other objects that must exist once per-renderer process,
// such as the PrerenderingSupport.
class PrerenderDispatcher : public content::RenderProcessObserver { class PrerenderDispatcher : public content::RenderProcessObserver {
public: public:
PrerenderDispatcher(); PrerenderDispatcher();
...@@ -34,6 +39,10 @@ class PrerenderDispatcher : public content::RenderProcessObserver { ...@@ -34,6 +39,10 @@ class PrerenderDispatcher : public content::RenderProcessObserver {
typedef std::map<GURL, int> PrerenderMap; typedef std::map<GURL, int> PrerenderMap;
PrerenderMap prerender_urls_; PrerenderMap prerender_urls_;
// There is one PrerenderingSupport object per renderer, and it provides
// the interface to prerendering to the WebKit platform.
scoped_ptr<PrerenderingSupport> prerendering_support_;
}; };
} // namespace prerender } // namespace prerender
......
...@@ -5753,14 +5753,6 @@ ...@@ -5753,14 +5753,6 @@
fun:_ZN3gfx9JPEGCodec6DecodeEPKhm fun:_ZN3gfx9JPEGCodec6DecodeEPKhm
fun:_ZN7history33HistoryBackendTest_DeleteAll_Test8TestBodyEv fun:_ZN7history33HistoryBackendTest_DeleteAll_Test8TestBodyEv
} }
{
bug_127953
Memcheck:Leak
fun:_Znw*
fun:_ZN9prerender19PrerenderDispatcherC1Ev
fun:_ZN6chrome27ChromeContentRendererClient19RenderThreadStartedEv
fun:_ZN16RenderThreadImpl4InitEv
}
{ {
bug_128145a bug_128145a
Memcheck:Leak Memcheck:Leak
......
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