Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(333)

Unified Diff: chrome/browser/prerender/prerender_link_manager.h

Issue 11551003: Change multi-prerender API to include per launcher slots. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: guh Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..56e06063ff16caacf69d5bfe07c38e63bc16138e 100644
--- a/chrome/browser/prerender/prerender_link_manager.h
+++ b/chrome/browser/prerender/prerender_link_manager.h
@@ -5,8 +5,7 @@
#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 "chrome/browser/prerender/prerender_handle.h"
@@ -41,16 +40,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 +65,46 @@ 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 Prerender {
+ Prerender(int launcher_child_id,
+ int prerender_id,
+ const GURL& url,
+ const content::Referrer& referrer,
+ const gfx::Size& size,
+ int render_view_route_id);
+ ~Prerender();
+
+ // Parameters from PrerenderLinkManager::OnAddPrerender():
+ int launcher_child_id;
+ int prerender_id;
+ GURL url;
+ content::Referrer referrer;
+ gfx::Size size;
+ int render_view_route_id;
+
+ // 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();
+
+ Prerender* FindByLauncherChildIdAndPrerenderId(int child_id,
+ int prerender_id);
+
+ Prerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle);
+
+ void RemovePrerender(Prerender* prerender);
+
+ // From ProfileKeyedService:
+ virtual void Shutdown() OVERRIDE;
// From PrerenderHandle::Observer:
virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
@@ -88,12 +112,14 @@ class PrerenderLinkManager : public ProfileKeyedService,
virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle,
const GURL& alias_url) OVERRIDE;
+ bool is_shutdown_;
mmenke 2012/12/18 17:15:15 |has_shutdown_| may be clearer, since is_shutdown
gavinp 2012/12/18 20:15:12 Done.
+
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 front.
mmenke 2012/12/18 17:15:15 Youngest prerender is at the back.
gavinp 2012/12/18 20:15:12 Ya, the other front. Done.
+ std::list<Prerender> prerenders_;
DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager);
};

Powered by Google App Engine
This is Rietveld 408576698