 Chromium Code Reviews
 Chromium Code Reviews Issue 11348357:
  Add observer interface to PrerenderContents.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 11348357:
  Add observer interface to PrerenderContents.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| 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 #include <set> | 5 #include <set> | 
| 6 #include <utility> | |
| 6 | 7 | 
| 7 #include "base/logging.h" | 8 #include "base/logging.h" | 
| 8 #include "base/message_loop.h" | 9 #include "base/message_loop.h" | 
| 10 #include "chrome/browser/prerender/prerender_contents.h" | |
| 9 #include "chrome/browser/prerender/prerender_manager.h" | 11 #include "chrome/browser/prerender/prerender_manager.h" | 
| 10 #include "chrome/browser/prerender/prerender_tracker.h" | 12 #include "chrome/browser/prerender/prerender_tracker.h" | 
| 11 #include "chrome/test/base/testing_browser_process.h" | 13 #include "chrome/test/base/testing_browser_process.h" | 
| 12 #include "content/public/test/test_browser_thread.h" | 14 #include "content/public/test/test_browser_thread.h" | 
| 13 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" | 
| 14 | 16 | 
| 15 using content::BrowserThread; | 17 using content::BrowserThread; | 
| 16 | 18 | 
| 17 namespace prerender { | 19 namespace prerender { | 
| 18 | 20 | 
| 19 namespace { | 21 namespace { | 
| 20 | 22 | 
| 23 class TestPrerenderContents : public PrerenderContents { | |
| 24 public: | |
| 25 TestPrerenderContents(PrerenderManager* prerender_manager, | |
| 26 int child_id, int route_id) | |
| 27 : PrerenderContents(prerender_manager, NULL, GURL(), content::Referrer(), | |
| 
mmenke
2012/12/03 20:02:47
Suggest a comment that the NULL is the profile arg
 
gavinp
2012/12/04 18:04:48
Done, but I used a static_cast<> as the comment.
 | |
| 28 ORIGIN_NONE, PrerenderManager::kNoExperiment), | |
| 29 child_id_(child_id), | |
| 30 route_id_(route_id) { | |
| 31 } | |
| 32 | |
| 33 ~TestPrerenderContents() { | |
| 34 set_final_status(FINAL_STATUS_USED); | |
| 35 } | |
| 36 | |
| 37 virtual bool GetChildId(int* child_id) const OVERRIDE { | |
| 38 *child_id = child_id_; | |
| 39 return true; | |
| 40 } | |
| 41 | |
| 42 virtual bool GetRouteId(int* route_id) const OVERRIDE { | |
| 43 *route_id = route_id_; | |
| 44 return true; | |
| 45 } | |
| 46 | |
| 47 private: | |
| 48 int child_id_; | |
| 49 int route_id_; | |
| 50 }; | |
| 51 | |
| 21 class TestPrerenderManager : public PrerenderManager { | 52 class TestPrerenderManager : public PrerenderManager { | 
| 22 public: | 53 public: | 
| 23 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) : | 54 explicit TestPrerenderManager(PrerenderTracker* prerender_tracker) : | 
| 24 PrerenderManager(NULL, prerender_tracker) { | 55 PrerenderManager(NULL, prerender_tracker) { | 
| 25 mutable_config().rate_limit_enabled = false; | 56 mutable_config().rate_limit_enabled = false; | 
| 26 } | 57 } | 
| 27 | 58 | 
| 28 virtual void DestroyPrerenderForRenderView( | 59 virtual void DestroyPrerenderForRenderView( | 
| 29 int process_id, int view_id, FinalStatus final_status) OVERRIDE { | 60 int process_id, int view_id, FinalStatus final_status) OVERRIDE { | 
| 30 cancelled_id_pairs_.insert(std::make_pair(process_id, view_id)); | 61 cancelled_id_pairs_.insert(std::make_pair(process_id, view_id)); | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 private: | 105 private: | 
| 75 MessageLoop message_loop_; | 106 MessageLoop message_loop_; | 
| 76 content::TestBrowserThread ui_thread_; | 107 content::TestBrowserThread ui_thread_; | 
| 77 content::TestBrowserThread io_thread_; | 108 content::TestBrowserThread io_thread_; | 
| 78 | 109 | 
| 79 scoped_ptr<TestPrerenderManager> prerender_manager_; | 110 scoped_ptr<TestPrerenderManager> prerender_manager_; | 
| 80 }; | 111 }; | 
| 81 | 112 | 
| 82 // Check that a non-existant RenderView is handled correctly. | 113 // Check that a non-existant RenderView is handled correctly. | 
| 83 TEST_F(PrerenderTrackerTest, PrerenderTrackerNull) { | 114 TEST_F(PrerenderTrackerTest, PrerenderTrackerNull) { | 
| 84 FinalStatus final_status; | 115 FinalStatus final_status; | 
| 
mmenke
2012/12/03 20:02:47
While you're here, could you move it to just above
 
gavinp
2012/12/04 18:04:48
Done.
 | |
| 116 TestPrerenderContents test_contents(prerender_manager(), 0, 0); | |
| 85 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 117 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 
| 86 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 118 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 87 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 119 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 
| 88 0, 0, FINAL_STATUS_HTTPS)); | 120 0, 0, FINAL_STATUS_HTTPS)); | 
| 89 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 121 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 90 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 122 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 
| 91 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 123 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 
| 92 } | 124 } | 
| 93 | 125 | 
| 94 // Check that a page that is used is handled correctly. | 126 // Check that a page that is used is handled correctly. | 
| 95 TEST_F(PrerenderTrackerTest, PrerenderTrackerUsed) { | 127 TEST_F(PrerenderTrackerTest, PrerenderTrackerUsed) { | 
| 96 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); | 128 TestPrerenderContents test_contents(prerender_manager(), 0, 0); | 
| 
mmenke
2012/12/03 20:02:47
optional:  Could just toss this in the test framew
 
gavinp
2012/12/04 18:04:48
Done. I also got rid of all the magic numbers, at
 | |
| 129 | |
| 130 prerender_tracker()->OnPrerenderStart(&test_contents); | |
| 97 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 131 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 
| 98 | 132 | 
| 99 // This calls AddPrerenderOnIOThreadTask(). | 133 // This calls AddPrerenderOnIOThreadTask(). | 
| 100 RunEvents(); | 134 RunEvents(); | 
| 101 | 135 | 
| 102 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 136 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 103 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 137 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 
| 104 | 138 | 
| 105 // Display the prerendered RenderView. | 139 // Display the prerendered RenderView. | 
| 106 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); | 140 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); | 
| 107 | 141 | 
| 108 // Make sure the page can't be destroyed or claim it was destroyed after | 142 // Make sure the page can't be destroyed or claim it was destroyed after | 
| 109 // it's been used. | 143 // it's been used. | 
| 110 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 144 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 111 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 145 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 
| 112 0, 0, FINAL_STATUS_TIMED_OUT)); | 146 0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 113 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 147 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 
| 114 | 148 | 
| 115 // This would call DestroyPrerenderForChildRouteIdPair(), if the prerender | 149 // This would call DestroyPrerenderForChildRouteIdPair(), if the prerender | 
| 116 // were cancelled. | 150 // were cancelled. | 
| 117 RunEvents(); | 151 RunEvents(); | 
| 118 | 152 | 
| 119 // These functions should all behave as before. | 153 // These functions should all behave as before. | 
| 120 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 154 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 121 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 155 EXPECT_FALSE(prerender_tracker()->TryCancelOnIOThread( | 
| 122 0, 0, FINAL_STATUS_TIMED_OUT)); | 156 0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 123 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 157 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 
| 124 | 158 | 
| 125 // This calls DestroyPrerenderForChildRouteIdPair(). | 159 // This calls DestroyPrerenderForChildRouteIdPair(). | 
| 126 prerender_tracker()->OnPrerenderingFinished(0, 0); | 160 prerender_tracker()->OnPrerenderStop(&test_contents); | 
| 127 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 161 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 128 | 162 | 
| 129 // This calls RemovePrerenderOnIOThreadTask(). | 163 // This calls RemovePrerenderOnIOThreadTask(). | 
| 130 RunEvents(); | 164 RunEvents(); | 
| 131 | 165 | 
| 132 FinalStatus final_status; | 166 FinalStatus final_status; | 
| 133 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 167 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 
| 134 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 168 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 135 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 169 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 136 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 170 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 
| 137 } | 171 } | 
| 138 | 172 | 
| 139 // Check that a prerendered page cancelled by TryCancel() is handled correctly. | 173 // Check that a prerendered page cancelled by TryCancel() is handled correctly. | 
| 140 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelled) { | 174 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelled) { | 
| 141 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); | 175 TestPrerenderContents test_contents(prerender_manager(), 0, 0); | 
| 176 | |
| 177 prerender_tracker()->OnPrerenderStart(&test_contents); | |
| 142 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 178 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 
| 143 | 179 | 
| 144 // This calls AddPrerenderOnIOThreadTask(). | 180 // This calls AddPrerenderOnIOThreadTask(). | 
| 145 RunEvents(); | 181 RunEvents(); | 
| 146 | 182 | 
| 147 // Cancel the prerender. | 183 // Cancel the prerender. | 
| 148 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 184 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 149 | 185 | 
| 150 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 186 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 
| 151 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 187 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 152 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 188 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 
| 153 0, 0, FINAL_STATUS_TIMED_OUT)); | 189 0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 154 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 190 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 
| 155 | 191 | 
| 156 // This calls DestroyPrerenderForChildRouteIdPair(). | 192 // This calls DestroyPrerenderForChildRouteIdPair(). | 
| 157 RunEvents(); | 193 RunEvents(); | 
| 158 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 194 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 
| 159 | 195 | 
| 160 // These should all work until the prerendering RenderViewHost is destroyed. | 196 // These should all work until the prerendering RenderViewHost is destroyed. | 
| 161 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 197 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 162 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 198 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 
| 163 0, 0, FINAL_STATUS_TIMED_OUT)); | 199 0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 164 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 200 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 
| 165 | 201 | 
| 166 prerender_tracker()->OnPrerenderingFinished(0, 0); | 202 prerender_tracker()->OnPrerenderStop(&test_contents); | 
| 167 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 203 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 168 | 204 | 
| 169 // This calls RemovePrerenderOnIOThreadTask(). | 205 // This calls RemovePrerenderOnIOThreadTask(). | 
| 170 RunEvents(); | 206 RunEvents(); | 
| 171 | 207 | 
| 172 FinalStatus final_status; | 208 FinalStatus final_status; | 
| 173 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 209 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 
| 174 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 210 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 175 } | 211 } | 
| 176 | 212 | 
| 177 // Check that a prerendered page cancelled on the IO thread by | 213 // Check that a prerendered page cancelled on the IO thread by | 
| 178 // TryCancelOnIOThread() is handled correctly. | 214 // TryCancelOnIOThread() is handled correctly. | 
| 179 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledOnIO) { | 215 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledOnIO) { | 
| 180 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); | 216 TestPrerenderContents test_contents(prerender_manager(), 0, 0); | 
| 217 | |
| 218 prerender_tracker()->OnPrerenderStart(&test_contents); | |
| 181 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 219 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(0, 0)); | 
| 182 | 220 | 
| 183 // This calls AddPrerenderOnIOThreadTask(). | 221 // This calls AddPrerenderOnIOThreadTask(). | 
| 184 RunEvents(); | 222 RunEvents(); | 
| 185 | 223 | 
| 186 // Cancel the prerender. | 224 // Cancel the prerender. | 
| 187 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 225 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 
| 188 0, 0, FINAL_STATUS_TIMED_OUT)); | 226 0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 189 | 227 | 
| 190 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 228 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 
| 191 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 229 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 192 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 230 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 
| 193 0, 0, FINAL_STATUS_HTTPS)); | 231 0, 0, FINAL_STATUS_HTTPS)); | 
| 194 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); | 232 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); | 
| 195 | 233 | 
| 196 // This calls DestroyPrerenderForChildRouteIdPair(). | 234 // This calls DestroyPrerenderForChildRouteIdPair(). | 
| 197 RunEvents(); | 235 RunEvents(); | 
| 198 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 236 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 
| 199 | 237 | 
| 200 // These should all work until the prerendering RenderViewHost is destroyed. | 238 // These should all work until the prerendering RenderViewHost is destroyed. | 
| 201 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 239 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 202 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 240 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 
| 203 0, 0, FINAL_STATUS_HTTPS)); | 241 0, 0, FINAL_STATUS_HTTPS)); | 
| 204 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); | 242 EXPECT_EQ(FINAL_STATUS_TIMED_OUT, GetCurrentStatus(0, 0)); | 
| 205 | 243 | 
| 206 prerender_tracker()->OnPrerenderingFinished(0, 0); | 244 prerender_tracker()->OnPrerenderStop(&test_contents); | 
| 207 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 245 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 208 | 246 | 
| 209 // This calls RemovePrerenderOnIOThreadTask(). | 247 // This calls RemovePrerenderOnIOThreadTask(). | 
| 210 RunEvents(); | 248 RunEvents(); | 
| 211 | 249 | 
| 212 FinalStatus final_status; | 250 FinalStatus final_status; | 
| 213 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 251 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 
| 214 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 252 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 215 } | 253 } | 
| 216 | 254 | 
| 217 // Check that a prerendered page cancelled before it reaches the IO thread is | 255 // Check that a prerendered page cancelled before it reaches the IO thread is | 
| 218 // handled correctly. | 256 // handled correctly. | 
| 219 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledFast) { | 257 TEST_F(PrerenderTrackerTest, PrerenderTrackerCancelledFast) { | 
| 220 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); | 258 TestPrerenderContents test_contents(prerender_manager(), 0, 0); | 
| 259 | |
| 260 prerender_tracker()->OnPrerenderStart(&test_contents); | |
| 261 | |
| 221 // Cancel the prerender. | 262 // Cancel the prerender. | 
| 222 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 263 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 223 | 264 | 
| 224 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 265 EXPECT_FALSE(prerender_tracker()->TryUse(0, 0)); | 
| 225 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 266 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 226 | 267 | 
| 227 // This calls AddPrerenderOnIOThreadTask() and | 268 // This calls AddPrerenderOnIOThreadTask() and | 
| 228 // DestroyPrerenderForChildRouteIdPair(). | 269 // DestroyPrerenderForChildRouteIdPair(). | 
| 229 RunEvents(); | 270 RunEvents(); | 
| 230 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 271 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 
| 231 | 272 | 
| 232 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 273 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 
| 233 0, 0, FINAL_STATUS_TIMED_OUT)); | 274 0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 234 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 275 EXPECT_TRUE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_TIMED_OUT)); | 
| 235 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 276 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(0, 0)); | 
| 236 | 277 | 
| 237 prerender_tracker()->OnPrerenderingFinished(0, 0); | 278 prerender_tracker()->OnPrerenderStop(&test_contents); | 
| 238 | 279 | 
| 239 // This calls RemovePrerenderOnIOThreadTask(). | 280 // This calls RemovePrerenderOnIOThreadTask(). | 
| 240 RunEvents(); | 281 RunEvents(); | 
| 241 | 282 | 
| 242 FinalStatus final_status; | 283 FinalStatus final_status; | 
| 243 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 284 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 
| 244 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 285 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 245 } | 286 } | 
| 246 | 287 | 
| 247 // Check that handling two pages at once works. | 288 // Check that handling two pages at once works. | 
| 248 TEST_F(PrerenderTrackerTest, PrerenderTrackerMultiple) { | 289 TEST_F(PrerenderTrackerTest, PrerenderTrackerMultiple) { | 
| 249 prerender_tracker()->OnPrerenderingStarted(0, 0, prerender_manager()); | 290 TestPrerenderContents first_test_contents(prerender_manager(), 0, 0); | 
| 291 prerender_tracker()->OnPrerenderStart(&first_test_contents); | |
| 250 | 292 | 
| 251 // This calls AddPrerenderOnIOThreadTask(). | 293 // This calls AddPrerenderOnIOThreadTask(). | 
| 252 RunEvents(); | 294 RunEvents(); | 
| 253 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 295 EXPECT_TRUE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 254 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(1, 2)); | 296 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(1, 2)); | 
| 255 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); | 297 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); | 
| 256 EXPECT_FALSE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); | 298 EXPECT_FALSE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); | 
| 257 | 299 | 
| 258 // Start second prerender. | 300 // Start second prerender. | 
| 259 prerender_tracker()->OnPrerenderingStarted(1, 2, prerender_manager()); | 301 TestPrerenderContents second_test_contents(prerender_manager(), 1, 2); | 
| 302 prerender_tracker()->OnPrerenderStart(&second_test_contents); | |
| 260 // This calls AddPrerenderOnIOThreadTask(). | 303 // This calls AddPrerenderOnIOThreadTask(). | 
| 261 RunEvents(); | 304 RunEvents(); | 
| 262 | 305 | 
| 263 // Use (0, 0). | 306 // Use (0, 0). | 
| 264 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); | 307 EXPECT_TRUE(prerender_tracker()->TryUse(0, 0)); | 
| 265 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 308 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 
| 266 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(1, 2)); | 309 EXPECT_EQ(FINAL_STATUS_MAX, GetCurrentStatus(1, 2)); | 
| 267 | 310 | 
| 268 // Cancel (1, 2). | 311 // Cancel (1, 2). | 
| 269 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 312 EXPECT_TRUE(prerender_tracker()->TryCancelOnIOThread( | 
| 270 1, 2, FINAL_STATUS_HTTPS)); | 313 1, 2, FINAL_STATUS_HTTPS)); | 
| 271 | 314 | 
| 272 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 315 EXPECT_FALSE(prerender_tracker()->TryCancel(0, 0, FINAL_STATUS_HTTPS)); | 
| 273 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 316 EXPECT_EQ(FINAL_STATUS_USED, GetCurrentStatus(0, 0)); | 
| 274 | 317 | 
| 275 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); | 318 EXPECT_FALSE(prerender_tracker()->TryUse(1, 2)); | 
| 276 EXPECT_TRUE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); | 319 EXPECT_TRUE(prerender_tracker()->TryCancel(1, 2, FINAL_STATUS_HTTPS)); | 
| 277 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(1, 2)); | 320 EXPECT_EQ(FINAL_STATUS_HTTPS, GetCurrentStatus(1, 2)); | 
| 278 | 321 | 
| 279 // This calls DestroyPrerenderForChildRouteIdPair(). | 322 // This calls DestroyPrerenderForChildRouteIdPair(). | 
| 280 RunEvents(); | 323 RunEvents(); | 
| 281 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 324 EXPECT_FALSE(prerender_manager()->WasPrerenderCancelled(0, 0)); | 
| 282 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(1, 2)); | 325 EXPECT_TRUE(prerender_manager()->WasPrerenderCancelled(1, 2)); | 
| 283 | 326 | 
| 284 prerender_tracker()->OnPrerenderingFinished(0, 0); | 327 prerender_tracker()->OnPrerenderStop(&first_test_contents); | 
| 285 prerender_tracker()->OnPrerenderingFinished(1, 2); | 328 prerender_tracker()->OnPrerenderStop(&second_test_contents); | 
| 286 | 329 | 
| 287 // This calls RemovePrerenderOnIOThreadTask(). | 330 // This calls RemovePrerenderOnIOThreadTask(). | 
| 288 RunEvents(); | 331 RunEvents(); | 
| 289 | 332 | 
| 290 FinalStatus final_status; | 333 FinalStatus final_status; | 
| 291 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 334 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(0, 0, &final_status)); | 
| 292 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 335 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(0, 0)); | 
| 293 | 336 | 
| 294 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(1, 2, &final_status)); | 337 EXPECT_FALSE(prerender_tracker()->GetFinalStatus(1, 2, &final_status)); | 
| 295 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(1, 2)); | 338 EXPECT_FALSE(prerender_tracker()->IsPrerenderingOnIOThread(1, 2)); | 
| 296 } | 339 } | 
| 297 | 340 | 
| 298 } // namespace prerender | 341 } // namespace prerender | 
| OLD | NEW |