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

Side by Side Diff: chrome/browser/prerender/prerender_link_manager.h

Issue 146983002: Move pending prerender logic into PrerenderLinkManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 10 months 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 <list> 8 #include <list>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 10 matching lines...) Expand all
21 } 21 }
22 22
23 namespace gfx { 23 namespace gfx {
24 class Size; 24 class Size;
25 } 25 }
26 26
27 FORWARD_DECLARE_TEST(WebViewTest, NoPrerenderer); 27 FORWARD_DECLARE_TEST(WebViewTest, NoPrerenderer);
28 28
29 namespace prerender { 29 namespace prerender {
30 30
31 class PrerenderHandle; 31 class PrerenderContents;
32 class PrerenderManager; 32 class PrerenderManager;
33 33
34 // PrerenderLinkManager implements the API on Link elements for all documents 34 // PrerenderLinkManager implements the API on Link elements for all documents
35 // being rendered in this chrome instance. It receives messages from the 35 // being rendered in this chrome instance. It receives messages from the
36 // renderer indicating addition, cancelation and abandonment of link elements, 36 // renderer indicating addition, cancelation and abandonment of link elements,
37 // and controls the PrerenderManager accordingly. 37 // and controls the PrerenderManager accordingly.
38 class PrerenderLinkManager : public BrowserContextKeyedService, 38 class PrerenderLinkManager : public BrowserContextKeyedService,
39 public PrerenderHandle::Observer { 39 public PrerenderHandle::Observer {
40 public: 40 public:
41 explicit PrerenderLinkManager(PrerenderManager* manager); 41 explicit PrerenderLinkManager(PrerenderManager* manager);
(...skipping 29 matching lines...) Expand all
71 // WebViewTest.NoPrerenderer needs to access the private IsEmpty() method. 71 // WebViewTest.NoPrerenderer needs to access the private IsEmpty() method.
72 FRIEND_TEST_ALL_PREFIXES(::WebViewTest, NoPrerenderer); 72 FRIEND_TEST_ALL_PREFIXES(::WebViewTest, NoPrerenderer);
73 73
74 struct LinkPrerender { 74 struct LinkPrerender {
75 LinkPrerender(int launcher_child_id, 75 LinkPrerender(int launcher_child_id,
76 int prerender_id, 76 int prerender_id,
77 const GURL& url, 77 const GURL& url,
78 const content::Referrer& referrer, 78 const content::Referrer& referrer,
79 const gfx::Size& size, 79 const gfx::Size& size,
80 int render_view_route_id, 80 int render_view_route_id,
81 base::TimeTicks creation_time); 81 base::TimeTicks creation_time,
82 PrerenderContents* deferred_launcher);
82 ~LinkPrerender(); 83 ~LinkPrerender();
83 84
84 // Parameters from PrerenderLinkManager::OnAddPrerender(): 85 // Parameters from PrerenderLinkManager::OnAddPrerender():
85 int launcher_child_id; 86 int launcher_child_id;
86 int prerender_id; 87 int prerender_id;
87 GURL url; 88 GURL url;
88 content::Referrer referrer; 89 content::Referrer referrer;
89 gfx::Size size; 90 gfx::Size size;
90 int render_view_route_id; 91 int render_view_route_id;
91 92
92 // The time at which this Prerender was added to PrerenderLinkManager. 93 // The time at which this Prerender was added to PrerenderLinkManager.
93 base::TimeTicks creation_time; 94 base::TimeTicks creation_time;
94 95
96 // If non-NULL, this link prerender was launched by an unswapped prerender,
97 // |deferred_launcher|. When |deferred_launcher| is swapped in, the field is
98 // set to NULL.
99 PrerenderContents* deferred_launcher;
100
95 // Initially NULL, |handle| is set once we start this prerender. It is owned 101 // Initially NULL, |handle| is set once we start this prerender. It is owned
96 // by this struct, and must be deleted before destructing this struct. 102 // by this struct, and must be deleted before destructing this struct.
97 PrerenderHandle* handle; 103 PrerenderHandle* handle;
98 104
99 // True if this prerender has become a MatchComplete replacement. This state 105 // True if this prerender has become a MatchComplete replacement. This state
100 // is maintained so the renderer is not notified of a stop twice. 106 // is maintained so the renderer is not notified of a stop twice.
101 bool is_match_complete_replacement; 107 bool is_match_complete_replacement;
102 108
103 // True if this prerender has been abandoned by its launcher. 109 // True if this prerender has been abandoned by its launcher.
104 bool has_been_abandoned; 110 bool has_been_abandoned;
105 }; 111 };
106 112
113 class PendingPrerenderManager;
114
107 bool IsEmpty() const; 115 bool IsEmpty() const;
108 116
109 // Returns a count of currently running prerenders. 117 // Returns a count of currently running prerenders.
110 size_t CountRunningPrerenders() const; 118 size_t CountRunningPrerenders() const;
111 119
112 // Start any prerenders that can be started, respecting concurrency limits for 120 // Start any prerenders that can be started, respecting concurrency limits for
113 // the system and per launcher. 121 // the system and per launcher.
114 void StartPrerenders(); 122 void StartPrerenders();
115 123
116 LinkPrerender* FindByLauncherChildIdAndPrerenderId(int child_id, 124 LinkPrerender* FindByLauncherChildIdAndPrerenderId(int child_id,
117 int prerender_id); 125 int prerender_id);
118 126
119 LinkPrerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle); 127 LinkPrerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle);
120 128
121 // Removes |prerender| from the the prerender link manager. Deletes the 129 // Removes |prerender| from the the prerender link manager. Deletes the
122 // PrerenderHandle as needed. 130 // PrerenderHandle as needed.
123 void RemovePrerender(LinkPrerender* prerender); 131 void RemovePrerender(LinkPrerender* prerender);
124 132
125 // Cancels |prerender| and removes |prerender| from the prerender link 133 // Cancels |prerender| and removes |prerender| from the prerender link
126 // manager. 134 // manager.
127 void CancelPrerender(LinkPrerender* prerender); 135 void CancelPrerender(LinkPrerender* prerender);
128 136
137 // Called when |launcher| is swapped in.
138 void StartPendingPrerendersForLauncher(PrerenderContents* launcher);
139
140 // Called when |launcher| is aborted.
141 void CancelPendingPrerendersForLauncher(PrerenderContents* launcher);
142
129 // From BrowserContextKeyedService: 143 // From BrowserContextKeyedService:
130 virtual void Shutdown() OVERRIDE; 144 virtual void Shutdown() OVERRIDE;
131 145
132 // From PrerenderHandle::Observer: 146 // From PrerenderHandle::Observer:
133 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE; 147 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
134 virtual void OnPrerenderStopLoading(PrerenderHandle* prerender_handle) 148 virtual void OnPrerenderStopLoading(PrerenderHandle* prerender_handle)
135 OVERRIDE; 149 OVERRIDE;
136 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE; 150 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE;
137 virtual void OnPrerenderCreatedMatchCompleteReplacement( 151 virtual void OnPrerenderCreatedMatchCompleteReplacement(
138 PrerenderHandle* handle) OVERRIDE; 152 PrerenderHandle* handle) OVERRIDE;
139 153
140 bool has_shutdown_; 154 bool has_shutdown_;
141 155
142 PrerenderManager* manager_; 156 PrerenderManager* manager_;
143 157
144 // All prerenders known to this PrerenderLinkManager. Insertions are always 158 // All prerenders known to this PrerenderLinkManager. Insertions are always
145 // made at the back, so the oldest prerender is at the front, and the youngest 159 // made at the back, so the oldest prerender is at the front, and the youngest
146 // at the back. 160 // at the back.
147 std::list<LinkPrerender> prerenders_; 161 std::list<LinkPrerender> prerenders_;
148 162
163 // Helper object to manage prerenders which are launched by other prerenders
164 // and must be deferred until the launcher is swapped in.
165 scoped_ptr<PendingPrerenderManager> pending_prerender_manager_;
166
149 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); 167 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager);
150 }; 168 };
151 169
152 } // namespace prerender 170 } // namespace prerender
153 171
154 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ 172 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
155 173
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_contents.cc ('k') | chrome/browser/prerender/prerender_link_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698