Index: chrome/browser/prerender/prerender_link_manager.h |
diff --git a/chrome/browser/prerender/prerender_link_manager.h b/chrome/browser/prerender/prerender_link_manager.h |
index 0047a4d429c81fd7735f5f58995b515c07a18843..ec8dbf68b5e74c7dd86d1e5ff19bca719671de75 100644 |
--- a/chrome/browser/prerender/prerender_link_manager.h |
+++ b/chrome/browser/prerender/prerender_link_manager.h |
@@ -28,7 +28,7 @@ FORWARD_DECLARE_TEST(WebViewTest, NoPrerenderer); |
namespace prerender { |
-class PrerenderHandle; |
+class PrerenderContents; |
class PrerenderManager; |
// PrerenderLinkManager implements the API on Link elements for all documents |
@@ -78,7 +78,8 @@ class PrerenderLinkManager : public BrowserContextKeyedService, |
const content::Referrer& referrer, |
const gfx::Size& size, |
int render_view_route_id, |
- base::TimeTicks creation_time); |
+ base::TimeTicks creation_time, |
+ PrerenderContents* deferred_launcher); |
~LinkPrerender(); |
// Parameters from PrerenderLinkManager::OnAddPrerender(): |
@@ -92,6 +93,11 @@ class PrerenderLinkManager : public BrowserContextKeyedService, |
// The time at which this Prerender was added to PrerenderLinkManager. |
base::TimeTicks creation_time; |
+ // If non-NULL, this link prerender was launched by an unswapped prerender, |
+ // |deferred_launcher|. When |deferred_launcher| is swapped in, the field is |
+ // set to NULL. |
+ PrerenderContents* deferred_launcher; |
+ |
// Initially NULL, |handle| is set once we start this prerender. It is owned |
// by this struct, and must be deleted before destructing this struct. |
PrerenderHandle* handle; |
@@ -104,6 +110,8 @@ class PrerenderLinkManager : public BrowserContextKeyedService, |
bool has_been_abandoned; |
}; |
+ class PendingPrerenderManager; |
+ |
bool IsEmpty() const; |
// Returns a count of currently running prerenders. |
@@ -126,6 +134,12 @@ class PrerenderLinkManager : public BrowserContextKeyedService, |
// manager. |
void CancelPrerender(LinkPrerender* prerender); |
+ // Called when |launcher| is swapped in. |
+ void StartPendingPrerendersForLauncher(PrerenderContents* launcher); |
+ |
+ // Called when |launcher| is aborted. |
+ void CancelPendingPrerendersForLauncher(PrerenderContents* launcher); |
+ |
// From BrowserContextKeyedService: |
virtual void Shutdown() OVERRIDE; |
@@ -146,6 +160,10 @@ class PrerenderLinkManager : public BrowserContextKeyedService, |
// at the back. |
std::list<LinkPrerender> prerenders_; |
+ // Helper object to manage prerenders which are launched by other prerenders |
+ // and must be deferred until the launcher is swapped in. |
+ scoped_ptr<PendingPrerenderManager> pending_prerender_manager_; |
+ |
DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); |
}; |