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

Side by Side Diff: chrome/browser/prerender/prerender_browsertest.cc

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
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <deque> 5 #include <deque>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 const content::Referrer& referrer, 335 const content::Referrer& referrer,
336 Origin origin, 336 Origin origin,
337 FinalStatus expected_final_status) 337 FinalStatus expected_final_status)
338 : PrerenderContents(prerender_manager, profile, url, 338 : PrerenderContents(prerender_manager, profile, url,
339 referrer, origin, PrerenderManager::kNoExperiment), 339 referrer, origin, PrerenderManager::kNoExperiment),
340 expected_final_status_(expected_final_status), 340 expected_final_status_(expected_final_status),
341 new_render_view_host_(NULL), 341 new_render_view_host_(NULL),
342 was_hidden_(false), 342 was_hidden_(false),
343 was_shown_(false), 343 was_shown_(false),
344 should_be_shown_(expected_final_status == FINAL_STATUS_USED), 344 should_be_shown_(expected_final_status == FINAL_STATUS_USED),
345 skip_final_checks_(false), 345 skip_final_checks_(false) {
346 expected_pending_prerenders_(0) {
347 } 346 }
348 347
349 virtual ~TestPrerenderContents() { 348 virtual ~TestPrerenderContents() {
350 if (skip_final_checks_) 349 if (skip_final_checks_)
351 return; 350 return;
352 351
353 if (expected_final_status_ == FINAL_STATUS_MAX) { 352 if (expected_final_status_ == FINAL_STATUS_MAX) {
354 EXPECT_EQ(match_complete_status(), MATCH_COMPLETE_REPLACEMENT); 353 EXPECT_EQ(MATCH_COMPLETE_REPLACEMENT, match_complete_status());
355 } else { 354 } else {
356 EXPECT_EQ(expected_final_status_, final_status()) << 355 EXPECT_EQ(expected_final_status_, final_status()) <<
357 " when testing URL " << prerender_url().path() << 356 " when testing URL " << prerender_url().path() <<
358 " (Expected: " << NameFromFinalStatus(expected_final_status_) << 357 " (Expected: " << NameFromFinalStatus(expected_final_status_) <<
359 ", Actual: " << NameFromFinalStatus(final_status()) << ")"; 358 ", Actual: " << NameFromFinalStatus(final_status()) << ")";
360 } 359 }
361 // Prerendering RenderViewHosts should be hidden before the first 360 // Prerendering RenderViewHosts should be hidden before the first
362 // navigation, so this should be happen for every PrerenderContents for 361 // navigation, so this should be happen for every PrerenderContents for
363 // which a RenderViewHost is created, regardless of whether or not it's 362 // which a RenderViewHost is created, regardless of whether or not it's
364 // used. 363 // used.
(...skipping 27 matching lines...) Expand all
392 } 391 }
393 392
394 virtual bool CheckURL(const GURL& url) OVERRIDE { 393 virtual bool CheckURL(const GURL& url) OVERRIDE {
395 // Prevent FINAL_STATUS_UNSUPPORTED_SCHEME when navigating to about:crash in 394 // Prevent FINAL_STATUS_UNSUPPORTED_SCHEME when navigating to about:crash in
396 // the PrerenderRendererCrash test. 395 // the PrerenderRendererCrash test.
397 if (url.spec() != content::kChromeUICrashURL) 396 if (url.spec() != content::kChromeUICrashURL)
398 return PrerenderContents::CheckURL(url); 397 return PrerenderContents::CheckURL(url);
399 return true; 398 return true;
400 } 399 }
401 400
402 virtual void AddPendingPrerender(
403 scoped_ptr<PendingPrerenderInfo> pending_prerender_info) OVERRIDE {
404 PrerenderContents::AddPendingPrerender(pending_prerender_info.Pass());
405 if (expected_pending_prerenders_ > 0 &&
406 pending_prerender_count() == expected_pending_prerenders_) {
407 base::MessageLoop::current()->Quit();
408 }
409 }
410
411 // Waits until the prerender has |expected_pending_prerenders| pending
412 // prerenders.
413 void WaitForPendingPrerenders(size_t expected_pending_prerenders) {
414 if (pending_prerender_count() < expected_pending_prerenders) {
415 expected_pending_prerenders_ = expected_pending_prerenders;
416 content::RunMessageLoop();
417 expected_pending_prerenders_ = 0;
418 }
419
420 EXPECT_EQ(expected_pending_prerenders, pending_prerender_count());
421 }
422
423 // For tests that open the prerender in a new background tab, the RenderView 401 // For tests that open the prerender in a new background tab, the RenderView
424 // will not have been made visible when the PrerenderContents is destroyed 402 // will not have been made visible when the PrerenderContents is destroyed
425 // even though it is used. 403 // even though it is used.
426 void set_should_be_shown(bool value) { should_be_shown_ = value; } 404 void set_should_be_shown(bool value) { should_be_shown_ = value; }
427 405
428 // For tests which do not know whether the prerender will be used. 406 // For tests which do not know whether the prerender will be used.
429 void set_skip_final_checks(bool value) { skip_final_checks_ = value; } 407 void set_skip_final_checks(bool value) { skip_final_checks_ = value; }
430 408
431 FinalStatus expected_final_status() const { return expected_final_status_; } 409 FinalStatus expected_final_status() const { return expected_final_status_; }
432 410
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 // Set to true when the prerendering RenderWidget is hidden. 452 // Set to true when the prerendering RenderWidget is hidden.
475 bool was_hidden_; 453 bool was_hidden_;
476 // Set to true when the prerendering RenderWidget is shown, after having been 454 // Set to true when the prerendering RenderWidget is shown, after having been
477 // hidden. 455 // hidden.
478 bool was_shown_; 456 bool was_shown_;
479 // Expected final value of was_shown_. Defaults to true for 457 // Expected final value of was_shown_. Defaults to true for
480 // FINAL_STATUS_USED, and false otherwise. 458 // FINAL_STATUS_USED, and false otherwise.
481 bool should_be_shown_; 459 bool should_be_shown_;
482 // If true, |expected_final_status_| and other shutdown checks are skipped. 460 // If true, |expected_final_status_| and other shutdown checks are skipped.
483 bool skip_final_checks_; 461 bool skip_final_checks_;
484
485 // Total number of pending prerenders we're currently waiting for. Zero
486 // indicates we currently aren't waiting for any.
487 size_t expected_pending_prerenders_;
488 }; 462 };
489 463
490 // A handle to a TestPrerenderContents whose lifetime is under the caller's 464 // A handle to a TestPrerenderContents whose lifetime is under the caller's
491 // control. A PrerenderContents may be destroyed at any point. This allows 465 // control. A PrerenderContents may be destroyed at any point. This allows
492 // tracking the final status, etc. 466 // tracking the final status, etc.
493 class TestPrerender : public PrerenderContents::Observer, 467 class TestPrerender : public PrerenderContents::Observer,
494 public base::SupportsWeakPtr<TestPrerender> { 468 public base::SupportsWeakPtr<TestPrerender> {
495 public: 469 public:
496 TestPrerender() 470 TestPrerender()
497 : contents_(NULL), 471 : contents_(NULL),
(...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after
1316 // removed from the PrerenderLinkManager when the prerender is canceled from 1290 // removed from the PrerenderLinkManager when the prerender is canceled from
1317 // the browser, when the prerenders are cancelled from the renderer process, 1291 // the browser, when the prerenders are cancelled from the renderer process,
1318 // or the channel for the renderer process is closed on the IO thread. In the 1292 // or the channel for the renderer process is closed on the IO thread. In the
1319 // last case, the code must be careful to wait for the channel to close, as it 1293 // last case, the code must be careful to wait for the channel to close, as it
1320 // is done asynchronously after swapping out the old process. See 1294 // is done asynchronously after swapping out the old process. See
1321 // ChannelDestructionWatcher. 1295 // ChannelDestructionWatcher.
1322 bool IsEmptyPrerenderLinkManager() const { 1296 bool IsEmptyPrerenderLinkManager() const {
1323 return GetPrerenderLinkManager()->IsEmpty(); 1297 return GetPrerenderLinkManager()->IsEmpty();
1324 } 1298 }
1325 1299
1300 size_t GetLinkPrerenderCount() const {
1301 return GetPrerenderLinkManager()->prerenders_.size();
1302 }
1303
1304 size_t GetRunningLinkPrerenderCount() const {
1305 return GetPrerenderLinkManager()->CountRunningPrerenders();
1306 }
1307
1326 // Returns length of |prerender_manager_|'s history, or -1 on failure. 1308 // Returns length of |prerender_manager_|'s history, or -1 on failure.
1327 int GetHistoryLength() const { 1309 int GetHistoryLength() const {
1328 scoped_ptr<base::DictionaryValue> prerender_dict( 1310 scoped_ptr<base::DictionaryValue> prerender_dict(
1329 static_cast<base::DictionaryValue*>( 1311 static_cast<base::DictionaryValue*>(
1330 GetPrerenderManager()->GetAsValue())); 1312 GetPrerenderManager()->GetAsValue()));
1331 if (!prerender_dict.get()) 1313 if (!prerender_dict.get())
1332 return -1; 1314 return -1;
1333 base::ListValue* history_list; 1315 base::ListValue* history_list;
1334 if (!prerender_dict->GetList("history", &history_list)) 1316 if (!prerender_dict->GetList("history", &history_list))
1335 return -1; 1317 return -1;
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 ChannelDestructionWatcher channel_close_watcher; 1560 ChannelDestructionWatcher channel_close_watcher;
1579 channel_close_watcher.WatchChannel( 1561 channel_close_watcher.WatchChannel(
1580 GetActiveWebContents()->GetRenderProcessHost()); 1562 GetActiveWebContents()->GetRenderProcessHost());
1581 NavigateToDestURL(); 1563 NavigateToDestURL();
1582 channel_close_watcher.WaitForChannelClose(); 1564 channel_close_watcher.WaitForChannelClose();
1583 1565
1584 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 1566 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
1585 } 1567 }
1586 1568
1587 // Checks that pending prerenders launch and receive proper event treatment. 1569 // Checks that pending prerenders launch and receive proper event treatment.
1588 // Disabled due to http://crbug.com/167792 1570 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) {
1589 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderPagePending) { 1571 scoped_ptr<TestPrerender> prerender =
1590 std::vector<FinalStatus> expected_final_status_queue; 1572 PrerenderTestURL("files/prerender/prerender_page_pending.html",
1591 expected_final_status_queue.push_back(FINAL_STATUS_USED); 1573 FINAL_STATUS_USED, 1);
1592 expected_final_status_queue.push_back(FINAL_STATUS_USED);
1593 PrerenderTestURL("files/prerender/prerender_page_pending.html",
1594 expected_final_status_queue, 1);
1595 1574
1596 ChannelDestructionWatcher first_channel_close_watcher; 1575 // Navigate to the prerender.
1576 scoped_ptr<TestPrerender> prerender2 = ExpectPrerender(FINAL_STATUS_USED);
1577 NavigateToDestURL();
1578 // Abort early if the original prerender didn't swap, so as not to hang.
1579 ASSERT_FALSE(prerender->contents());
1597 1580
1598 first_channel_close_watcher.WatchChannel( 1581 // Wait for the new prerender to be ready.
1599 GetActiveWebContents()->GetRenderProcessHost()); 1582 prerender2->WaitForStart();
1600 NavigateToDestURL(); 1583 prerender2->WaitForLoads(1);
1601 // NavigateToDestURL doesn't run a message loop. Normally that's fine, but in
1602 // this case, we need the pending prerenders to start.
1603 content::RunMessageLoop();
1604 first_channel_close_watcher.WaitForChannelClose();
1605 1584
1606 const GURL prerender_page_url = 1585 const GURL prerender_page_url =
1607 test_server()->GetURL("files/prerender/prerender_page.html"); 1586 test_server()->GetURL("files/prerender/prerender_page.html");
1608 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1587 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1609 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL), 1588 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL),
1610 GetPrerenderContentsFor(prerender_page_url)); 1589 GetPrerenderContentsFor(prerender_page_url));
1611 1590
1612 // Now navigate to our target page. 1591 // Now navigate to our target page.
1613 ChannelDestructionWatcher second_channel_close_watcher; 1592 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(),
1614 second_channel_close_watcher.WatchChannel( 1593 GetActiveWebContents());
1615 GetActiveWebContents()->GetRenderProcessHost());
1616 ui_test_utils::NavigateToURLWithDisposition( 1594 ui_test_utils::NavigateToURLWithDisposition(
1617 current_browser(), prerender_page_url, CURRENT_TAB, 1595 current_browser(), prerender_page_url, CURRENT_TAB,
1618 ui_test_utils::BROWSER_TEST_NONE); 1596 ui_test_utils::BROWSER_TEST_NONE);
1619 second_channel_close_watcher.WaitForChannelClose(); 1597 swap_observer.Wait();
1620 1598
1621 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1599 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1622 } 1600 }
1623 1601
1624 // Checks that pending prerenders which are canceled before they are launched 1602 // Checks that pending prerenders which are canceled before they are launched
1625 // never get started. 1603 // never get started.
1626 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) { 1604 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) {
1627 PrerenderTestURL("files/prerender/prerender_page_removes_pending.html", 1605 PrerenderTestURL("files/prerender/prerender_page_removes_pending.html",
1628 FINAL_STATUS_USED, 1); 1606 FINAL_STATUS_USED, 1);
1629 1607
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after
2203 2181
2204 // Checks shutdown code while a prerender is active. 2182 // Checks shutdown code while a prerender is active.
2205 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderQuickQuit) { 2183 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderQuickQuit) {
2206 DisableJavascriptCalls(); 2184 DisableJavascriptCalls();
2207 DisableLoadEventCheck(); 2185 DisableLoadEventCheck();
2208 PrerenderTestURL("files/prerender/prerender_page.html", 2186 PrerenderTestURL("files/prerender/prerender_page.html",
2209 FINAL_STATUS_APP_TERMINATING, 2187 FINAL_STATUS_APP_TERMINATING,
2210 0); 2188 0);
2211 } 2189 }
2212 2190
2213 // TODO(gavinp,sreeram): Fix http://crbug.com/145248 and deflake this test.
2214 // Checks that we don't prerender in an infinite loop. 2191 // Checks that we don't prerender in an infinite loop.
2215 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { 2192 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderInfiniteLoop) {
2216 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html"; 2193 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html";
2217 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html"; 2194 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html";
2218 2195
2219 std::vector<FinalStatus> expected_final_status_queue; 2196 std::vector<FinalStatus> expected_final_status_queue;
2220 expected_final_status_queue.push_back(FINAL_STATUS_USED); 2197 expected_final_status_queue.push_back(FINAL_STATUS_USED);
2221 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); 2198 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING);
2222 2199
2223 ScopedVector<TestPrerender> prerenders = 2200 ScopedVector<TestPrerender> prerenders =
2224 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); 2201 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1);
2225 ASSERT_TRUE(prerenders[0]->contents()); 2202 ASSERT_TRUE(prerenders[0]->contents());
2226 prerenders[0]->contents()->WaitForPendingPrerenders(1u); 2203 // Assert that the pending prerender is in there already. This relies on the
2204 // fact that the renderer sends out the AddLinkRelPrerender IPC before sending
2205 // the page load one.
2206 EXPECT_EQ(2U, GetLinkPrerenderCount());
2207 EXPECT_EQ(1U, GetRunningLinkPrerenderCount());
2227 2208
2228 // Next url should be in pending list but not an active entry. 2209 // Next url should be in pending list but not an active entry.
2229 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); 2210 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB));
2230 2211
2231 NavigateToDestURL(); 2212 NavigateToDestURL();
2232 2213
2233 // Make sure the PrerenderContents for the next url is now in the manager 2214 // Make sure the PrerenderContents for the next url is now in the manager and
2234 // and not pending. 2215 // not pending. This relies on pending prerenders being resolved in the same
2216 // event loop iteration as OnPrerenderStop.
2235 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB)); 2217 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB));
2218 EXPECT_EQ(1U, GetLinkPrerenderCount());
2219 EXPECT_EQ(1U, GetRunningLinkPrerenderCount());
2236 } 2220 }
2237 2221
2238 // TODO(gavinp,sreeram): Fix http://crbug.com/145248 and deflake this test.
2239 // Checks that we don't prerender in an infinite loop and multiple links are 2222 // Checks that we don't prerender in an infinite loop and multiple links are
2240 // handled correctly. 2223 // handled correctly.
2241 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2224 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2242 DISABLED_PrerenderInfiniteLoopMultiple) { 2225 PrerenderInfiniteLoopMultiple) {
2243 const char* const kHtmlFileA = 2226 const char* const kHtmlFileA =
2244 "files/prerender/prerender_infinite_a_multiple.html"; 2227 "files/prerender/prerender_infinite_a_multiple.html";
2245 const char* const kHtmlFileB = 2228 const char* const kHtmlFileB =
2246 "files/prerender/prerender_infinite_b_multiple.html"; 2229 "files/prerender/prerender_infinite_b_multiple.html";
2247 const char* const kHtmlFileC = 2230 const char* const kHtmlFileC =
2248 "files/prerender/prerender_infinite_c_multiple.html"; 2231 "files/prerender/prerender_infinite_c_multiple.html";
2249 2232
2250 // This test is conceptually simplest if concurrency is at two, since we 2233 // This test is conceptually simplest if concurrency is at two, since we
2251 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted. 2234 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted.
2252 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; 2235 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
2253 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; 2236 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
2254 2237
2255 std::vector<FinalStatus> expected_final_status_queue; 2238 std::vector<FinalStatus> expected_final_status_queue;
2256 expected_final_status_queue.push_back(FINAL_STATUS_USED); 2239 expected_final_status_queue.push_back(FINAL_STATUS_USED);
2257 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); 2240 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING);
2258 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); 2241 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING);
2259 2242
2260 ScopedVector<TestPrerender> prerenders = 2243 ScopedVector<TestPrerender> prerenders =
2261 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); 2244 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1);
2262 ASSERT_TRUE(prerenders[0]->contents()); 2245 ASSERT_TRUE(prerenders[0]->contents());
2263 prerenders[0]->contents()->WaitForPendingPrerenders(2u);
2264 2246
2265 // Next url should be in pending list but not an active entry. 2247 // Next url should be in pending list but not an active entry. This relies on
2248 // the fact that the renderer sends out the AddLinkRelPrerender IPC before
2249 // sending the page load one.
2250 EXPECT_EQ(3U, GetLinkPrerenderCount());
2251 EXPECT_EQ(1U, GetRunningLinkPrerenderCount());
2266 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); 2252 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB));
2267 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileC)); 2253 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileC));
2268 2254
2269 NavigateToDestURL(); 2255 NavigateToDestURL();
2270 2256
2271 // Make sure the PrerenderContents for the next urls are now in the manager 2257 // Make sure the PrerenderContents for the next urls are now in the manager
2272 // and not pending. One and only one of the URLs (the last seen) should be the 2258 // and not pending. One and only one of the URLs (the last seen) should be the
2273 // active entry. 2259 // active entry. This relies on pending prerenders being resolved in the same
2260 // event loop iteration as OnPrerenderStop.
2274 bool url_b_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileB); 2261 bool url_b_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileB);
2275 bool url_c_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileC); 2262 bool url_c_is_active_prerender = UrlIsInPrerenderManager(kHtmlFileC);
2276 EXPECT_TRUE(url_b_is_active_prerender && url_c_is_active_prerender); 2263 EXPECT_TRUE(url_b_is_active_prerender && url_c_is_active_prerender);
2264 EXPECT_EQ(2U, GetLinkPrerenderCount());
2265 EXPECT_EQ(2U, GetRunningLinkPrerenderCount());
2266 }
2267
2268 // Checks that pending prerenders are aborted (and never launched) when launched
2269 // by a prerender that itself gets aborted.
2270 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAbortPendingOnCancel) {
2271 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html";
2272 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html";
2273
2274 scoped_ptr<TestPrerender> prerender =
2275 PrerenderTestURL(kHtmlFileA, FINAL_STATUS_CANCELLED, 1);
2276 ASSERT_TRUE(prerender->contents());
2277 // Assert that the pending prerender is in there already. This relies on the
2278 // fact that the renderer sends out the AddLinkRelPrerender IPC before sending
2279 // the page load one.
2280 EXPECT_EQ(2U, GetLinkPrerenderCount());
2281 EXPECT_EQ(1U, GetRunningLinkPrerenderCount());
2282
2283 // Next url should be in pending list but not an active entry.
2284 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB));
2285
2286 // Cancel the prerender.
2287 GetPrerenderManager()->CancelAllPrerenders();
2288 prerender->WaitForStop();
2289
2290 // All prerenders are now gone.
2291 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
2277 } 2292 }
2278 2293
2279 // See crbug.com/131836. 2294 // See crbug.com/131836.
2280 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderTaskManager) { 2295 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderTaskManager) {
2281 // Show the task manager. This populates the model. 2296 // Show the task manager. This populates the model.
2282 chrome::OpenTaskManager(current_browser()); 2297 chrome::OpenTaskManager(current_browser());
2283 // Wait for the model of task manager to start. 2298 // Wait for the model of task manager to start.
2284 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); 2299 TaskManagerBrowserTestUtil::WaitForWebResourceChange(1);
2285 2300
2286 // Start with two resources. 2301 // Start with two resources.
(...skipping 1569 matching lines...) Expand 10 before | Expand all | Expand 10 after
3856 } 3871 }
3857 }; 3872 };
3858 3873
3859 // Checks that prerendering works in incognito mode. 3874 // Checks that prerendering works in incognito mode.
3860 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { 3875 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) {
3861 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 3876 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
3862 NavigateToDestURL(); 3877 NavigateToDestURL();
3863 } 3878 }
3864 3879
3865 } // namespace prerender 3880 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698