| Index: chrome/browser/prerender/prerender_manager.h
|
| diff --git a/chrome/browser/prerender/prerender_manager.h b/chrome/browser/prerender/prerender_manager.h
|
| index f50951b7fc57c4166738d89dbbbb51dd6a831e10..32650521650d3d1f50f2279b6384ad9011047d0d 100644
|
| --- a/chrome/browser/prerender/prerender_manager.h
|
| +++ b/chrome/browser/prerender/prerender_manager.h
|
| @@ -7,6 +7,7 @@
|
| #pragma once
|
|
|
| #include <list>
|
| +#include <map>
|
| #include <vector>
|
|
|
| #include "base/hash_tables.h"
|
| @@ -58,6 +59,11 @@ class PrerenderManager : public base::RefCounted<PrerenderManager> {
|
| bool AddPreload(const GURL& url, const std::vector<GURL>& alias_urls,
|
| const GURL& referrer);
|
|
|
| + void AddPendingPreload(const std::pair<int, int>& child_route_id_pair,
|
| + const GURL& url,
|
| + const std::vector<GURL>& alias_urls,
|
| + const GURL& referrer);
|
| +
|
| // For a given TabContents that wants to navigate to the URL supplied,
|
| // determines whether a preloaded version of the URL can be used,
|
| // and substitutes the prerendered RVH into the TabContents. Returns
|
| @@ -102,12 +108,16 @@ class PrerenderManager : public base::RefCounted<PrerenderManager> {
|
| bool WouldTabContentsBePrerendered(TabContents* tc) const;
|
|
|
| protected:
|
| + struct PendingContentsData;
|
| +
|
| virtual ~PrerenderManager();
|
|
|
| void SetPrerenderContentsFactory(
|
| PrerenderContents::Factory* prerender_contents_factory);
|
| bool rate_limit_enabled_;
|
|
|
| + PendingContentsData* FindPendingEntry(const GURL& url);
|
| +
|
| private:
|
| // Test that needs needs access to internal functions.
|
| friend class PrerenderBrowserTest;
|
| @@ -142,6 +152,10 @@ class PrerenderManager : public base::RefCounted<PrerenderManager> {
|
|
|
| static void RecordPrefetchTagObservedOnUIThread();
|
|
|
| + // Called when removing a preload to ensure we clean up any pending preloads
|
| + // that might remain in the map.
|
| + void RemovePendingPreload(PrerenderContents* entry);
|
| +
|
| bool DoesRateLimitAllowPrerender() const;
|
|
|
| Profile* profile_;
|
| @@ -159,6 +173,11 @@ class PrerenderManager : public base::RefCounted<PrerenderManager> {
|
| // (for the control group).
|
| base::hash_set<TabContents*> would_be_prerendered_tc_set_;
|
|
|
| + // Map of child/route id pairs to pending prerender data.
|
| + typedef std::map<std::pair<int, int>, std::vector<PendingContentsData> >
|
| + PendingPrerenderList;
|
| + PendingPrerenderList pending_prerender_list_;
|
| +
|
| // Default maximum permitted elements to prerender.
|
| static const unsigned int kDefaultMaxPrerenderElements = 1;
|
|
|
|
|