diff options
author | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-12 20:00:29 +0000 |
---|---|---|
committer | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-12 20:00:29 +0000 |
commit | 035e748c7a4615f83beb7e97f4a5e0ca83f48aa9 (patch) | |
tree | 34c531c0b428c560003fb514346bc4632d1e64d8 /chrome/browser/prerender/prerender_manager.h | |
parent | 5846e5f9563a1d344e1225aa0f690fc6eb1a05ec (diff) | |
download | chromium_src-035e748c7a4615f83beb7e97f4a5e0ca83f48aa9.zip chromium_src-035e748c7a4615f83beb7e97f4a5e0ca83f48aa9.tar.gz chromium_src-035e748c7a4615f83beb7e97f4a5e0ca83f48aa9.tar.bz2 |
Only commit cookie changes in prerenders after a prerender is shown
Will create a PrerenderCookieStore for each prerender, retaining all cookie
operations of a prerender until the prerender is shown to the user.
Forces prerenders to be in a new render process by themselves for this to work.
BUG=371003
This is a resubmission of https://codereview.chromium.org/233353003, which had
to be reverted due to build breaks. See LGTM's there.
Review URL: https://codereview.chromium.org/278403003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269855 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_manager.h')
-rw-r--r-- | chrome/browser/prerender/prerender_manager.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/chrome/browser/prerender/prerender_manager.h b/chrome/browser/prerender/prerender_manager.h index 6861b7b..c91322d 100644 --- a/chrome/browser/prerender/prerender_manager.h +++ b/chrome/browser/prerender/prerender_manager.h @@ -31,6 +31,7 @@ #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" +#include "content/public/browser/render_process_host_observer.h" #include "content/public/browser/session_storage_namespace.h" #include "content/public/browser/web_contents_observer.h" #include "net/cookies/canonical_cookie.h" @@ -74,6 +75,7 @@ class PrerenderLocalPredictor; class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, public base::NonThreadSafe, public content::NotificationObserver, + public content::RenderProcessHostObserver, public KeyedService, public MediaCaptureDevicesDispatcher::Observer { public: @@ -295,6 +297,8 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, PrerenderTracker* prerender_tracker() { return prerender_tracker_; } + bool cookie_store_loaded() { return cookie_store_loaded_; } + // Adds a condition. This is owned by the PrerenderManager. void AddCondition(const PrerenderCondition* condition); @@ -360,6 +364,25 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, // profile if prerendering is currently enabled. void AddProfileNetworkBytesIfEnabled(int64 bytes); + // Registers a new ProcessHost performing a prerender. Called by + // PrerenderContents. + void AddPrerenderProcessHost(content::RenderProcessHost* process_host); + + bool IsProcessPrerendering(content::RenderProcessHost* process_host); + + // content::RenderProcessHostObserver implementation. + virtual void RenderProcessHostDestroyed( + content::RenderProcessHost* host) OVERRIDE; + + // To be called once the cookie store for this profile has been loaded. + void OnCookieStoreLoaded(); + + // For testing purposes. Issues a callback once the cookie store has been + // loaded. + void set_on_cookie_store_loaded_cb_for_testing(base::Closure cb) { + on_cookie_store_loaded_cb_for_testing_ = cb; + } + protected: class PendingSwap; class PrerenderData : public base::SupportsWeakPtr<PrerenderData> { @@ -510,6 +533,11 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, // shorten the TTL of the prerendered page. void SourceNavigatedAway(PrerenderData* prerender_data); + // Gets the request context for the profile. + // For unit tests, this will be overriden to return NULL, since it is not + // needed. + virtual net::URLRequestContextGetter* GetURLRequestContext(); + private: friend class ::InstantSearchPrerendererTest; friend class PrerenderBrowserTest; @@ -719,6 +747,15 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, // The value of profile_network_bytes_ that was last recorded. int64 last_recorded_profile_network_bytes_; + // Set of process hosts being prerendered. + typedef std::set<content::RenderProcessHost*> PrerenderProcessSet; + PrerenderProcessSet prerender_process_hosts_; + + // Indicates whether the cookie store for this profile has fully loaded yet. + bool cookie_store_loaded_; + + base::Closure on_cookie_store_loaded_cb_for_testing_; + DISALLOW_COPY_AND_ASSIGN(PrerenderManager); }; |