| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include <set> | 5 #include <set> |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chrome/browser/prerender/prerender_manager.h" | 8 #include "chrome/browser/prerender/prerender_manager.h" |
| 9 #include "chrome/browser/prerender/prerender_tracker.h" | 9 #include "chrome/browser/prerender/prerender_tracker.h" |
| 10 #include "chrome/test/testing_browser_process.h" | 10 #include "chrome/test/testing_browser_process.h" |
| 11 #include "content/browser/browser_thread.h" | 11 #include "content/browser/browser_thread.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 13 |
| 14 namespace prerender { | 14 namespace prerender { |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 | 17 |
| 18 class TestPrerenderManager : public PrerenderManager { | 18 class TestPrerenderManager : public PrerenderManager { |
| 19 public: | 19 public: |
| 20 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) : | 20 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) : |
| 21 PrerenderManager(NULL, prerender_tracker) { | 21 PrerenderManager(NULL, prerender_tracker) { |
| 22 rate_limit_enabled_ = false; | 22 rate_limit_enabled_ = false; |
| 23 } | 23 } |
| 24 | 24 |
| 25 virtual void DestroyPreloadForChildRouteIdPair( | 25 virtual void DestroyPrerenderForChildRouteIdPair( |
| 26 const std::pair<int, int>& child_route_id_pair, | 26 const std::pair<int, int>& child_route_id_pair, |
| 27 FinalStatus final_status) OVERRIDE { | 27 FinalStatus final_status) OVERRIDE { |
| 28 cancelled_id_pairs_.insert(child_route_id_pair); | 28 cancelled_id_pairs_.insert(child_route_id_pair); |
| 29 } | 29 } |
| 30 | 30 |
| 31 bool WasPrerenderCancelled(int child_id, int route_id) { | 31 bool WasPrerenderCancelled(int child_id, int route_id) { |
| 32 std::pair<int, int> child_route_id_pair(child_id, route_id); | 32 std::pair<int, int> child_route_id_pair(child_id, route_id); |
| 33 return cancelled_id_pairs_.count(child_route_id_pair) != 0; | 33 return cancelled_id_pairs_.count(child_route_id_pair) != 0; |
| 34 } | 34 } |
| 35 | 35 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 // Display the prerendered RenderView. | 104 // Display the prerendered RenderView. |
| 105 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); | 105 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); |
| 106 | 106 |
| 107 // Make sure the page can't be destroyed or claim it was destroyed after | 107 // Make sure the page can't be destroyed or claim it was destroyed after |
| 108 // it's been used. | 108 // it's been used. |
| 109 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 109 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| 110 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 110 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( |
| 111 0, 0, FINAL_STATUS_TIMED_OUT)); | 111 0, 0, FINAL_STATUS_TIMED_OUT)); |
| 112 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 112 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); |
| 113 | 113 |
| 114 // This would call DestroyPreloadForChildRouteIdPair(), if the prerender were | 114 // This would call DestroyPrerenderForChildRouteIdPair(), if the prerender |
| 115 // cancelled. | 115 // were cancelled. |
| 116 RunEvents(); | 116 RunEvents(); |
| 117 | 117 |
| 118 // These functions should all behave as before. | 118 // These functions should all behave as before. |
| 119 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 119 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| 120 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 120 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( |
| 121 0, 0, FINAL_STATUS_TIMED_OUT)); | 121 0, 0, FINAL_STATUS_TIMED_OUT)); |
| 122 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 122 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); |
| 123 | 123 |
| 124 // This calls DestroyPreloadForChildRouteIdPair(). | 124 // This calls DestroyPrerenderForChildRouteIdPair(). |
| 125 prerender_tracker()->OnPrerenderingFinished(0, 0); | 125 prerender_tracker()->OnPrerenderingFinished(0, 0); |
| 126 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 126 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); |
| 127 | 127 |
| 128 // This calls RemovePrerenderOnIOThreadTask(). | 128 // This calls RemovePrerenderOnIOThreadTask(). |
| 129 RunEvents(); | 129 RunEvents(); |
| 130 | 130 |
| 131 FinalStatus final_status; | 131 FinalStatus final_status; |
| 132 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 132 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); |
| 133 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 133 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); |
| 134 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 134 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 145 | 145 |
| 146 // Cancel the prerender. | 146 // Cancel the prerender. |
| 147 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 147 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| 148 | 148 |
| 149 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 149 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); |
| 150 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 150 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); |
| 151 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 151 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
| 152 0, 0, FINAL_STATUS_TIMED_OUT)); | 152 0, 0, FINAL_STATUS_TIMED_OUT)); |
| 153 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 153 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); |
| 154 | 154 |
| 155 // This calls DestroyPreloadForChildRouteIdPair(). | 155 // This calls DestroyPrerenderForChildRouteIdPair(). |
| 156 RunEvents(); | 156 RunEvents(); |
| 157 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 157 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); |
| 158 | 158 |
| 159 // These should all work until the prerendering RenderViewHost is destroyed. | 159 // These should all work until the prerendering RenderViewHost is destroyed. |
| 160 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 160 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); |
| 161 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 161 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
| 162 0, 0, FINAL_STATUS_TIMED_OUT)); | 162 0, 0, FINAL_STATUS_TIMED_OUT)); |
| 163 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 163 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); |
| 164 | 164 |
| 165 prerender_tracker()->OnPrerenderingFinished(0, 0); | 165 prerender_tracker()->OnPrerenderingFinished(0, 0); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 185 // Cancel the prerender. | 185 // Cancel the prerender. |
| 186 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 186 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
| 187 0, 0, FINAL_STATUS_TIMED_OUT)); | 187 0, 0, FINAL_STATUS_TIMED_OUT)); |
| 188 | 188 |
| 189 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 189 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); |
| 190 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 190 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| 191 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 191 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
| 192 0, 0, FINAL_STATUS_HTTPS)); | 192 0, 0, FINAL_STATUS_HTTPS)); |
| 193 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); | 193 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); |
| 194 | 194 |
| 195 // This calls DestroyPreloadForChildRouteIdPair(). | 195 // This calls DestroyPrerenderForChildRouteIdPair(). |
| 196 RunEvents(); | 196 RunEvents(); |
| 197 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 197 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); |
| 198 | 198 |
| 199 // These should all work until the prerendering RenderViewHost is destroyed. | 199 // These should all work until the prerendering RenderViewHost is destroyed. |
| 200 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 200 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| 201 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 201 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
| 202 0, 0, FINAL_STATUS_HTTPS)); | 202 0, 0, FINAL_STATUS_HTTPS)); |
| 203 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); | 203 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); |
| 204 | 204 |
| 205 prerender_tracker()->OnPrerenderingFinished(0, 0); | 205 prerender_tracker()->OnPrerenderingFinished(0, 0); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 217 // handled correctly. | 217 // handled correctly. |
| 218 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledFast) { | 218 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledFast) { |
| 219 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); | 219 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); |
| 220 // Cancel the prerender. | 220 // Cancel the prerender. |
| 221 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 221 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| 222 | 222 |
| 223 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 223 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); |
| 224 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 224 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); |
| 225 | 225 |
| 226 // This calls AddPrerenderOnIOThreadTask() and | 226 // This calls AddPrerenderOnIOThreadTask() and |
| 227 // DestroyPreloadForChildRouteIdPair(). | 227 // DestroyPrerenderForChildRouteIdPair(). |
| 228 RunEvents(); | 228 RunEvents(); |
| 229 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 229 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); |
| 230 | 230 |
| 231 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 231 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
| 232 0, 0, FINAL_STATUS_TIMED_OUT)); | 232 0, 0, FINAL_STATUS_TIMED_OUT)); |
| 233 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 233 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); |
| 234 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 234 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); |
| 235 | 235 |
| 236 prerender_tracker()->OnPrerenderingFinished(0, 0); | 236 prerender_tracker()->OnPrerenderingFinished(0, 0); |
| 237 | 237 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 268 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 268 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( |
| 269 1, 2, FINAL_STATUS_HTTPS)); | 269 1, 2, FINAL_STATUS_HTTPS)); |
| 270 | 270 |
| 271 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 271 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); |
| 272 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 272 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); |
| 273 | 273 |
| 274 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); | 274 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); |
| 275 EXPECT_TRUE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); | 275 EXPECT_TRUE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); |
| 276 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(1, 2)); | 276 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(1, 2)); |
| 277 | 277 |
| 278 // This calls DestroyPreloadForChildRouteIdPair(). | 278 // This calls DestroyPrerenderForChildRouteIdPair(). |
| 279 RunEvents(); | 279 RunEvents(); |
| 280 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 280 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); |
| 281 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(1, 2)); | 281 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(1, 2)); |
| 282 | 282 |
| 283 prerender_tracker()->OnPrerenderingFinished(0, 0); | 283 prerender_tracker()->OnPrerenderingFinished(0, 0); |
| 284 prerender_tracker()->OnPrerenderingFinished(1, 2); | 284 prerender_tracker()->OnPrerenderingFinished(1, 2); |
| 285 | 285 |
| 286 // This calls RemovePrerenderOnIOThreadTask(). | 286 // This calls RemovePrerenderOnIOThreadTask(). |
| 287 RunEvents(); | 287 RunEvents(); |
| 288 | 288 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 | 329 |
| 330 remove_urls.clear(); | 330 remove_urls.clear(); |
| 331 remove_urls.push_back(example_url); | 331 remove_urls.push_back(example_url); |
| 332 remove_urls.push_back(example_url); | 332 remove_urls.push_back(example_url); |
| 333 url_counter.RemoveURLs(remove_urls); | 333 url_counter.RemoveURLs(remove_urls); |
| 334 EXPECT_FALSE(url_counter.MatchesURL(example_url)); | 334 EXPECT_FALSE(url_counter.MatchesURL(example_url)); |
| 335 EXPECT_FALSE(url_counter.MatchesURL(gmail_url)); | 335 EXPECT_FALSE(url_counter.MatchesURL(gmail_url)); |
| 336 } | 336 } |
| 337 | 337 |
| 338 } // namespace prerender | 338 } // namespace prerender |
| OLD | NEW |