Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / prerender / prerender_link_manager.h
index 0047a4d..0aea1bf 100644 (file)
@@ -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
@@ -47,6 +47,7 @@ class PrerenderLinkManager : public BrowserContextKeyedService,
   void OnAddPrerender(int child_id,
                       int prerender_id,
                       const GURL& url,
+                      uint32 rel_types,
                       const content::Referrer& referrer,
                       const gfx::Size& size,
                       int render_view_route_id);
@@ -75,16 +76,19 @@ class PrerenderLinkManager : public BrowserContextKeyedService,
     LinkPrerender(int launcher_child_id,
                   int prerender_id,
                   const GURL& url,
+                  uint32 rel_types,
                   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():
     int launcher_child_id;
     int prerender_id;
     GURL url;
+    uint32 rel_types;
     content::Referrer referrer;
     gfx::Size size;
     int render_view_route_id;
@@ -92,6 +96,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 +113,8 @@ class PrerenderLinkManager : public BrowserContextKeyedService,
     bool has_been_abandoned;
   };
 
+  class PendingPrerenderManager;
+
   bool IsEmpty() const;
 
   // Returns a count of currently running prerenders.
@@ -126,6 +137,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;
 
@@ -133,6 +150,8 @@ class PrerenderLinkManager : public BrowserContextKeyedService,
   virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
   virtual void OnPrerenderStopLoading(PrerenderHandle* prerender_handle)
       OVERRIDE;
+  virtual void OnPrerenderDomContentLoaded(PrerenderHandle* prerender_handle)
+      OVERRIDE;
   virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE;
   virtual void OnPrerenderCreatedMatchCompleteReplacement(
       PrerenderHandle* handle) OVERRIDE;
@@ -146,10 +165,13 @@ 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);
 };
 
 }  // namespace prerender
 
 #endif  // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
-