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 8795f0a5737c63b95548a2f56055f0cf7ef060e6..a881485cc038f0d546841bd955dffd5b78633a36 100644 |
--- a/chrome/browser/prerender/prerender_link_manager.h |
+++ b/chrome/browser/prerender/prerender_link_manager.h |
@@ -5,10 +5,10 @@ |
#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ |
#define CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ |
-#include <map> |
-#include <utility> |
+#include <list> |
#include "base/basictypes.h" |
+#include "base/time.h" |
#include "chrome/browser/prerender/prerender_handle.h" |
#include "chrome/browser/profiles/profile_keyed_service.h" |
#include "googleurl/src/gurl.h" |
@@ -41,16 +41,12 @@ class PrerenderLinkManager : public ProfileKeyedService, |
// A <link rel=prerender ...> element has been inserted into the document. |
// The |prerender_id| must be unique per |child_id|, and is assigned by the |
// WebPrerendererClient. |
- // Returns true if the prerender was accepted by the prerender manager, |
- // and false if not. In either case, the |prerender_id| is usable for |
- // future OnCancelPrerender and OnAbandonPrerender calls. |
- bool OnAddPrerender( |
- int child_id, |
- int prerender_id, |
- const GURL& url, |
- const content::Referrer& referrer, |
- const gfx::Size& size, |
- int render_view_route_id); |
+ void OnAddPrerender(int child_id, |
+ int prerender_id, |
+ const GURL& url, |
+ const content::Referrer& referrer, |
+ const gfx::Size& size, |
+ int render_view_route_id); |
// A <link rel=prerender ...> element has been explicitly removed from a |
// document. |
@@ -70,17 +66,50 @@ class PrerenderLinkManager : public ProfileKeyedService, |
friend class PrerenderBrowserTest; |
friend class PrerenderTest; |
- typedef std::pair<int, int> ChildAndPrerenderIdPair; |
- typedef std::map<ChildAndPrerenderIdPair, PrerenderHandle*> |
- IdPairToPrerenderHandleMap; |
- |
- void RemovePrerender( |
- const IdPairToPrerenderHandleMap::iterator& id_to_handle_iter); |
+ struct LinkPrerender { |
+ LinkPrerender(int launcher_child_id, |
+ int prerender_id, |
+ const GURL& url, |
+ const content::Referrer& referrer, |
+ const gfx::Size& size, |
+ int render_view_route_id, |
+ base::TimeTicks creation_time); |
+ ~LinkPrerender(); |
+ |
+ // Parameters from PrerenderLinkManager::OnAddPrerender(): |
+ int launcher_child_id; |
+ int prerender_id; |
+ GURL url; |
+ content::Referrer referrer; |
+ gfx::Size size; |
+ int render_view_route_id; |
+ |
+ // The time at which this Prerender was added to PrerenderLinkManager. |
+ base::TimeTicks creation_time; |
+ |
+ // 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; |
+ }; |
bool IsEmpty() const; |
- IdPairToPrerenderHandleMap::iterator FindPrerenderHandle( |
- PrerenderHandle* prerender_handle); |
+ // Returns a count of currently running prerenders. |
+ size_t CountRunningPrerenders() const; |
+ |
+ // Start any prerenders that can be started, respecting concurrency limits for |
+ // the system and per launcher. |
+ void StartPrerenders(); |
+ |
+ LinkPrerender* FindByLauncherChildIdAndPrerenderId(int child_id, |
+ int prerender_id); |
+ |
+ LinkPrerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle); |
+ |
+ void RemovePrerender(LinkPrerender* prerender); |
+ |
+ // From ProfileKeyedService: |
+ virtual void Shutdown() OVERRIDE; |
// From PrerenderHandle::Observer: |
virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE; |
@@ -88,12 +117,14 @@ class PrerenderLinkManager : public ProfileKeyedService, |
virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle, |
const GURL& alias_url) OVERRIDE; |
+ bool has_shutdown_; |
+ |
PrerenderManager* manager_; |
- // A map from child process id and prerender id to PrerenderHandles. We map |
- // from this pair because the prerender ids are only unique within their |
- // renderer process. |
- IdPairToPrerenderHandleMap ids_to_handle_map_; |
+ // All prerenders known to this PrerenderLinkManager. Insertions are always |
+ // made at the back, so the oldest prerender is at the front, and the youngest |
+ // at the back. |
+ std::list<LinkPrerender> prerenders_; |
DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); |
}; |