| Index: chrome/browser/prerender/prerender_tracker.h
|
| ===================================================================
|
| --- chrome/browser/prerender/prerender_tracker.h (revision 265252)
|
| +++ chrome/browser/prerender/prerender_tracker.h (working copy)
|
| @@ -6,17 +6,27 @@
|
| #define CHROME_BROWSER_PRERENDER_PRERENDER_TRACKER_H_
|
|
|
| #include <map>
|
| +#include <set>
|
| #include <utility>
|
|
|
| +#include "base/containers/hash_tables.h"
|
| +#include "base/memory/ref_counted.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "base/synchronization/lock.h"
|
| +#include "chrome/browser/prerender/prerender_cookie_store.h"
|
| +#include "content/public/browser/render_process_host_observer.h"
|
| #include "url/gurl.h"
|
|
|
| +namespace net {
|
| +class URLRequestContextGetter;
|
| +}
|
| +
|
| namespace prerender {
|
|
|
| class PrerenderPendingSwapThrottle;
|
|
|
| // Global object for maintaining prerender state on the IO thread.
|
| -class PrerenderTracker {
|
| +class PrerenderTracker : public content::RenderProcessHostObserver {
|
| public:
|
| typedef std::pair<int, int> ChildRouteIdPair;
|
|
|
| @@ -46,6 +56,31 @@
|
| const ChildRouteIdPair& render_frame_route_id_pair,
|
| bool swap_successful);
|
|
|
| + // Gets the Prerender Cookie Store for a specific render process, if it
|
| + // is a prerender. Only to be called from the IO thread.
|
| + scoped_refptr<PrerenderCookieStore> GetPrerenderCookieStoreForRenderProcess(
|
| + int process_id);
|
| +
|
| + bool IsProcessPrerendering(content::RenderProcessHost* process_host);
|
| +
|
| + // Called when a given render process has changed a cookie for |url|.
|
| + // Only to be called from the IO thread.
|
| + void OnCookieChangedForURL(int process_id, const GURL& url);
|
| +
|
| + // Adds a prerender and creates a corresponding prerender cookie store.
|
| + // Must be called on the UI thread.
|
| + void AddPrerender(content::RenderProcessHost* host,
|
| + net::URLRequestContextGetter* request_context,
|
| + const base::Closure& cookie_conflict_cb);
|
| +
|
| + // Called when a prerender was successfully swapped and shown.
|
| + // The corresponding prerender cookie store will be set to forwarding mode.
|
| + void OnPrerenderSwapped(content::RenderProcessHost* host);
|
| +
|
| + // content::RenderProcessHostObserver implementation.
|
| + virtual void RenderProcessHostDestroyed(
|
| + content::RenderProcessHost* host) OVERRIDE;
|
| +
|
| private:
|
| // Add/remove prerenders pending swap on the IO Thread.
|
| void AddPrerenderPendingSwapOnIOThread(
|
| @@ -54,6 +89,14 @@
|
| const ChildRouteIdPair& render_frame_route_id_pair,
|
| bool swap_successful);
|
|
|
| + void AddPrerenderCookieStoreOnIOThread(
|
| + int process_id,
|
| + scoped_refptr<net::URLRequestContextGetter> request_context,
|
| + const base::Closure& cookie_conflict_cb);
|
| +
|
| + // Removes a prerender cookie store on the IO thread.
|
| + void RemovePrerenderCookieStoreOnIOThread(int process_id, bool was_swapped);
|
| +
|
| struct PendingSwapThrottleData {
|
| explicit PendingSwapThrottleData(const GURL& swap_url);
|
| ~PendingSwapThrottleData();
|
| @@ -68,6 +111,16 @@
|
| PendingSwapThrottleMap;
|
| PendingSwapThrottleMap pending_swap_throttle_map_;
|
|
|
| + // Map of prerendering render process ids to PrerenderCookieStore used for
|
| + // the prerender. Only to be used on the IO thread.
|
| + typedef base::hash_map<int, scoped_refptr<PrerenderCookieStore> >
|
| + PrerenderCookieStoreMap;
|
| + PrerenderCookieStoreMap prerender_cookie_store_map_;
|
| +
|
| + // Set of process hosts being prerendered, maintained on the UI thread.
|
| + typedef std::set<content::RenderProcessHost*> PrerenderProcessSet;
|
| + PrerenderProcessSet prerender_process_hosts_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(PrerenderTracker);
|
| };
|
|
|
|
|