| 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; |
| 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 |
| OLD | NEW |