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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ 5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
6 #define CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
7 7
8 #include <map> 8 #include <list>
9 #include <utility>
10 9
11 #include "base/basictypes.h" 10 #include "base/basictypes.h"
12 #include "chrome/browser/prerender/prerender_handle.h" 11 #include "chrome/browser/prerender/prerender_handle.h"
13 #include "chrome/browser/profiles/profile_keyed_service.h" 12 #include "chrome/browser/profiles/profile_keyed_service.h"
14 #include "googleurl/src/gurl.h" 13 #include "googleurl/src/gurl.h"
15 14
16 class Profile; 15 class Profile;
17 16
18 namespace content { 17 namespace content {
19 struct Referrer; 18 struct Referrer;
(...skipping 14 matching lines...) Expand all
34 // and controls the PrerenderManager accordingly. 33 // and controls the PrerenderManager accordingly.
35 class PrerenderLinkManager : public ProfileKeyedService, 34 class PrerenderLinkManager : public ProfileKeyedService,
36 public PrerenderHandle::Observer { 35 public PrerenderHandle::Observer {
37 public: 36 public:
38 explicit PrerenderLinkManager(PrerenderManager* manager); 37 explicit PrerenderLinkManager(PrerenderManager* manager);
39 virtual ~PrerenderLinkManager(); 38 virtual ~PrerenderLinkManager();
40 39
41 // A <link rel=prerender ...> element has been inserted into the document. 40 // A <link rel=prerender ...> element has been inserted into the document.
42 // The |prerender_id| must be unique per |child_id|, and is assigned by the 41 // The |prerender_id| must be unique per |child_id|, and is assigned by the
43 // WebPrerendererClient. 42 // WebPrerendererClient.
44 // Returns true if the prerender was accepted by the prerender manager, 43 void OnAddPrerender(int child_id,
45 // and false if not. In either case, the |prerender_id| is usable for 44 int prerender_id,
46 // future OnCancelPrerender and OnAbandonPrerender calls. 45 const GURL& url,
47 bool OnAddPrerender( 46 const content::Referrer& referrer,
48 int child_id, 47 const gfx::Size& size,
49 int prerender_id, 48 int render_view_route_id);
50 const GURL& url,
51 const content::Referrer& referrer,
52 const gfx::Size& size,
53 int render_view_route_id);
54 49
55 // A <link rel=prerender ...> element has been explicitly removed from a 50 // A <link rel=prerender ...> element has been explicitly removed from a
56 // document. 51 // document.
57 void OnCancelPrerender(int child_id, int prerender_id); 52 void OnCancelPrerender(int child_id, int prerender_id);
58 53
59 // A renderer launching <link rel=prerender ...> has navigated away from the 54 // A renderer launching <link rel=prerender ...> has navigated away from the
60 // launching page, the launching renderer process has crashed, or perhaps the 55 // launching page, the launching renderer process has crashed, or perhaps the
61 // renderer process was fast-closed when the last render view in it was 56 // renderer process was fast-closed when the last render view in it was
62 // closed. 57 // closed.
63 void OnAbandonPrerender(int child_id, int prerender_id); 58 void OnAbandonPrerender(int child_id, int prerender_id);
64 59
65 // If a renderer channel closes (crash, fast exit, etc...), that's effectively 60 // If a renderer channel closes (crash, fast exit, etc...), that's effectively
66 // an abandon of any prerenders launched by that child. 61 // an abandon of any prerenders launched by that child.
67 void OnChannelClosing(int child_id); 62 void OnChannelClosing(int child_id);
68 63
69 private: 64 private:
70 friend class PrerenderBrowserTest; 65 friend class PrerenderBrowserTest;
71 friend class PrerenderTest; 66 friend class PrerenderTest;
72 67
73 typedef std::pair<int, int> ChildAndPrerenderIdPair; 68 struct Prerender {
74 typedef std::map<ChildAndPrerenderIdPair, PrerenderHandle*> 69 Prerender(int launcher_child_id,
75 IdPairToPrerenderHandleMap; 70 int prerender_id,
71 const GURL& url,
72 const content::Referrer& referrer,
73 const gfx::Size& size,
74 int render_view_route_id);
75 ~Prerender();
76 76
77 void RemovePrerender( 77 // Parameters from PrerenderLinkManager::OnAddPrerender():
78 const IdPairToPrerenderHandleMap::iterator& id_to_handle_iter); 78 int launcher_child_id;
79 int prerender_id;
80 GURL url;
81 content::Referrer referrer;
82 gfx::Size size;
83 int render_view_route_id;
84
85 // Initially NULL, |handle| is set once we start this prerender. It is owned
86 // by this struct, and must be deleted before destructing this struct.
87 PrerenderHandle* handle;
88 };
79 89
80 bool IsEmpty() const; 90 bool IsEmpty() const;
81 91
82 IdPairToPrerenderHandleMap::iterator FindPrerenderHandle( 92 // Returns a count of currently running prerenders.
83 PrerenderHandle* prerender_handle); 93 size_t CountRunningPrerenders() const;
94
95 // Start any prerenders that can be started, respecting concurrency limits for
96 // the system and per launcher.
97 void StartPrerenders();
98
99 Prerender* FindByLauncherChildIdAndPrerenderId(int child_id,
100 int prerender_id);
101
102 Prerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle);
103
104 void RemovePrerender(Prerender* prerender);
105
106 // From ProfileKeyedService:
107 virtual void Shutdown() OVERRIDE;
84 108
85 // From PrerenderHandle::Observer: 109 // From PrerenderHandle::Observer:
86 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE; 110 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
87 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE; 111 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE;
88 virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle, 112 virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle,
89 const GURL& alias_url) OVERRIDE; 113 const GURL& alias_url) OVERRIDE;
90 114
115 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.
116
91 PrerenderManager* manager_; 117 PrerenderManager* manager_;
92 118
93 // A map from child process id and prerender id to PrerenderHandles. We map 119 // All prerenders known to this PrerenderLinkManager. Insertions are always
94 // from this pair because the prerender ids are only unique within their 120 // made at the back, so the oldest prerender is at the front, and the youngest
95 // renderer process. 121 // 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.
96 IdPairToPrerenderHandleMap ids_to_handle_map_; 122 std::list<Prerender> prerenders_;
97 123
98 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); 124 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager);
99 }; 125 };
100 126
101 } // namespace prerender 127 } // namespace prerender
102 128
103 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ 129 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
104 130
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698