summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_manager.h
diff options
context:
space:
mode:
authortburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-12 20:00:29 +0000
committertburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-12 20:00:29 +0000
commit035e748c7a4615f83beb7e97f4a5e0ca83f48aa9 (patch)
tree34c531c0b428c560003fb514346bc4632d1e64d8 /chrome/browser/prerender/prerender_manager.h
parent5846e5f9563a1d344e1225aa0f690fc6eb1a05ec (diff)
downloadchromium_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.h37
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);
};