OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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; |
(...skipping 14 matching lines...) Expand all Loading... | |
119 LinkPrerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle); | 125 LinkPrerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle); |
120 | 126 |
121 // Removes |prerender| from the the prerender link manager. Deletes the | 127 // Removes |prerender| from the the prerender link manager. Deletes the |
122 // PrerenderHandle as needed. | 128 // PrerenderHandle as needed. |
123 void RemovePrerender(LinkPrerender* prerender); | 129 void RemovePrerender(LinkPrerender* prerender); |
124 | 130 |
125 // Cancels |prerender| and removes |prerender| from the prerender link | 131 // Cancels |prerender| and removes |prerender| from the prerender link |
126 // manager. | 132 // manager. |
127 void CancelPrerender(LinkPrerender* prerender); | 133 void CancelPrerender(LinkPrerender* prerender); |
128 | 134 |
135 // Called when |launcher| is swapped in. | |
136 void StartPendingPrerendersForLauncher(PrerenderContents* launcher); | |
137 | |
138 // Called when |launcher| is aborted. | |
139 void CancelPendingPrerendersForLauncher(PrerenderContents* launcher); | |
140 | |
129 // From BrowserContextKeyedService: | 141 // From BrowserContextKeyedService: |
130 virtual void Shutdown() OVERRIDE; | 142 virtual void Shutdown() OVERRIDE; |
131 | 143 |
132 // From PrerenderHandle::Observer: | 144 // From PrerenderHandle::Observer: |
133 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE; | 145 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE; |
134 virtual void OnPrerenderStopLoading(PrerenderHandle* prerender_handle) | 146 virtual void OnPrerenderStopLoading(PrerenderHandle* prerender_handle) |
135 OVERRIDE; | 147 OVERRIDE; |
136 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE; | 148 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE; |
137 virtual void OnPrerenderCreatedMatchCompleteReplacement( | 149 virtual void OnPrerenderCreatedMatchCompleteReplacement( |
138 PrerenderHandle* handle) OVERRIDE; | 150 PrerenderHandle* handle) OVERRIDE; |
139 | 151 |
140 bool has_shutdown_; | 152 bool has_shutdown_; |
141 | 153 |
142 PrerenderManager* manager_; | 154 PrerenderManager* manager_; |
143 | 155 |
144 // All prerenders known to this PrerenderLinkManager. Insertions are always | 156 // 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 | 157 // made at the back, so the oldest prerender is at the front, and the youngest |
146 // at the back. | 158 // at the back. |
147 std::list<LinkPrerender> prerenders_; | 159 std::list<LinkPrerender> prerenders_; |
148 | 160 |
161 // Helper class to manage prerenders which are launched by other prerenders | |
162 // and must be deferred until the launcher is swapped in. | |
163 class PendingPrerenderManager; | |
gavinp
2014/01/30 19:58:49
Our declaration order rule doesn't indicate where
davidben
2014/01/30 21:01:51
Done.
| |
164 scoped_ptr<PendingPrerenderManager> pending_prerender_manager_; | |
165 | |
149 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); | 166 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); |
150 }; | 167 }; |
151 | 168 |
152 } // namespace prerender | 169 } // namespace prerender |
153 | 170 |
154 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ | 171 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ |
155 | 172 |
OLD | NEW |