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

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

Issue 2754003006: Prerender: omnibox and instant field trial parameters. (Closed)
Patch Set: comments Created 3 years, 9 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
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <map> 8 #include <map>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/format_macros.h" 12 #include "base/format_macros.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "base/metrics/field_trial.h" 16 #include "base/metrics/field_trial.h"
17 #include "base/metrics/field_trial_param_associator.h" 17 #include "base/metrics/field_trial_param_associator.h"
18 #include "base/metrics/field_trial_params.h"
18 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
19 #include "base/test/histogram_tester.h" 20 #include "base/test/histogram_tester.h"
20 #include "base/test/scoped_feature_list.h" 21 #include "base/test/scoped_feature_list.h"
21 #include "base/test/simple_test_clock.h" 22 #include "base/test/simple_test_clock.h"
22 #include "base/test/simple_test_tick_clock.h" 23 #include "base/test/simple_test_tick_clock.h"
23 #include "base/time/time.h" 24 #include "base/time/time.h"
24 #include "chrome/browser/net/prediction_options.h" 25 #include "chrome/browser/net/prediction_options.h"
25 #include "chrome/browser/prerender/prerender_contents.h" 26 #include "chrome/browser/prerender/prerender_contents.h"
26 #include "chrome/browser/prerender/prerender_field_trial.h" 27 #include "chrome/browser/prerender/prerender_field_trial.h"
27 #include "chrome/browser/prerender/prerender_handle.h" 28 #include "chrome/browser/prerender/prerender_handle.h"
28 #include "chrome/browser/prerender/prerender_link_manager.h" 29 #include "chrome/browser/prerender/prerender_link_manager.h"
29 #include "chrome/browser/prerender/prerender_manager.h" 30 #include "chrome/browser/prerender/prerender_manager.h"
30 #include "chrome/browser/prerender/prerender_origin.h" 31 #include "chrome/browser/prerender/prerender_origin.h"
32 #include "chrome/browser/prerender/prerender_test_utils.h"
31 #include "chrome/common/chrome_switches.h" 33 #include "chrome/common/chrome_switches.h"
32 #include "chrome/common/pref_names.h" 34 #include "chrome/common/pref_names.h"
33 #include "chrome/common/prerender_types.h" 35 #include "chrome/common/prerender_types.h"
34 #include "chrome/test/base/testing_browser_process.h" 36 #include "chrome/test/base/testing_browser_process.h"
35 #include "chrome/test/base/testing_profile.h" 37 #include "chrome/test/base/testing_profile.h"
36 #include "components/content_settings/core/common/pref_names.h" 38 #include "components/content_settings/core/common/pref_names.h"
37 #include "components/prefs/pref_service.h" 39 #include "components/prefs/pref_service.h"
38 #include "components/variations/variations_associated_data.h"
39 #include "content/public/browser/render_view_host.h" 40 #include "content/public/browser/render_view_host.h"
40 #include "content/public/test/test_browser_thread.h" 41 #include "content/public/test/test_browser_thread.h"
41 #include "net/base/network_change_notifier.h" 42 #include "net/base/network_change_notifier.h"
42 #include "net/http/http_cache.h" 43 #include "net/http/http_cache.h"
43 #include "testing/gtest/include/gtest/gtest.h" 44 #include "testing/gtest/include/gtest/gtest.h"
44 #include "ui/gfx/geometry/rect.h" 45 #include "ui/gfx/geometry/rect.h"
45 #include "ui/gfx/geometry/size.h" 46 #include "ui/gfx/geometry/size.h"
46 #include "url/gurl.h" 47 #include "url/gurl.h"
47 48
48 using base::Time; 49 using base::Time;
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 // Maintain a map from route pairs to PrerenderContents for 281 // Maintain a map from route pairs to PrerenderContents for
281 // GetPrerenderContentsForRoute. 282 // GetPrerenderContentsForRoute.
282 using PrerenderContentsMap = 283 using PrerenderContentsMap =
283 std::map<std::pair<int, int>, PrerenderContents*>; 284 std::map<std::pair<int, int>, PrerenderContents*>;
284 PrerenderContentsMap prerender_contents_map_; 285 PrerenderContentsMap prerender_contents_map_;
285 286
286 std::unique_ptr<PrerenderContents> next_prerender_contents_; 287 std::unique_ptr<PrerenderContents> next_prerender_contents_;
287 bool is_low_end_device_; 288 bool is_low_end_device_;
288 }; 289 };
289 290
290 class RestorePrerenderMode {
291 public:
292 RestorePrerenderMode() : prev_mode_(PrerenderManager::GetMode()) {
293 }
294
295 ~RestorePrerenderMode() { PrerenderManager::SetMode(prev_mode_); }
296
297 private:
298 PrerenderManager::PrerenderManagerMode prev_mode_;
299 };
300
301 class MockNetworkChangeNotifier4G : public net::NetworkChangeNotifier { 291 class MockNetworkChangeNotifier4G : public net::NetworkChangeNotifier {
302 public: 292 public:
303 ConnectionType GetCurrentConnectionType() const override { 293 ConnectionType GetCurrentConnectionType() const override {
304 return NetworkChangeNotifier::CONNECTION_4G; 294 return NetworkChangeNotifier::CONNECTION_4G;
305 } 295 }
306 }; 296 };
307 297
308 DummyPrerenderContents::DummyPrerenderContents( 298 DummyPrerenderContents::DummyPrerenderContents(
309 UnitTestPrerenderManager* test_prerender_manager, 299 UnitTestPrerenderManager* test_prerender_manager,
310 const GURL& url, 300 const GURL& url,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 switches::kPrerenderFromOmnibox, 342 switches::kPrerenderFromOmnibox,
353 switches::kPrerenderFromOmniboxSwitchValueEnabled); 343 switches::kPrerenderFromOmniboxSwitchValueEnabled);
354 } 344 }
355 345
356 ~PrerenderTest() override { 346 ~PrerenderTest() override {
357 prerender_link_manager_->OnChannelClosing(kDefaultChildId); 347 prerender_link_manager_->OnChannelClosing(kDefaultChildId);
358 prerender_link_manager_->Shutdown(); 348 prerender_link_manager_->Shutdown();
359 prerender_manager_->Shutdown(); 349 prerender_manager_->Shutdown();
360 } 350 }
361 351
352 void TearDown() override {
353 base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting();
354 }
355
362 UnitTestPrerenderManager* prerender_manager() { 356 UnitTestPrerenderManager* prerender_manager() {
363 return prerender_manager_.get(); 357 return prerender_manager_.get();
364 } 358 }
365 359
366 PrerenderLinkManager* prerender_link_manager() { 360 PrerenderLinkManager* prerender_link_manager() {
367 return prerender_link_manager_.get(); 361 return prerender_link_manager_.get();
368 } 362 }
369 363
370 Profile* profile() { return &profile_; } 364 Profile* profile() { return &profile_; }
371 365
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 prefs::kNetworkPredictionOptions, 412 prefs::kNetworkPredictionOptions,
419 chrome_browser_net::NETWORK_PREDICTION_NEVER); 413 chrome_browser_net::NETWORK_PREDICTION_NEVER);
420 } 414 }
421 415
422 void EnablePrerender() { 416 void EnablePrerender() {
423 profile_.GetPrefs()->SetInteger( 417 profile_.GetPrefs()->SetInteger(
424 prefs::kNetworkPredictionOptions, 418 prefs::kNetworkPredictionOptions,
425 chrome_browser_net::NETWORK_PREDICTION_ALWAYS); 419 chrome_browser_net::NETWORK_PREDICTION_ALWAYS);
426 } 420 }
427 421
422 void SetUpFieldTrial(const std::map<std::string, std::string>& params,
423 base::test::ScopedFeatureList* scoped_feature_list) {
424 // Set up the prerender mode through a field trial.
425 std::string kTrialName = "name";
426 std::string kTrialGroup = "group";
427 base::FieldTrial* trial =
428 base::FieldTrialList::CreateFieldTrial(kTrialName, kTrialGroup);
429 ASSERT_TRUE(
430 base::FieldTrialParamAssociator::GetInstance()
431 ->AssociateFieldTrialParams(kTrialName, kTrialGroup, params));
432
433 std::unique_ptr<base::FeatureList> feature_list =
434 base::MakeUnique<base::FeatureList>();
435 feature_list->RegisterFieldTrialOverride(
436 kNoStatePrefetchFeature.name,
437 base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial);
438
439 scoped_feature_list->InitWithFeatureList(std::move(feature_list));
440
441 ASSERT_EQ(base::FeatureList::GetFieldTrial(kNoStatePrefetchFeature), trial);
442
443 std::map<std::string, std::string> actual_params;
444 ASSERT_TRUE(base::GetFieldTrialParamsByFeature(kNoStatePrefetchFeature,
445 &actual_params));
446 ASSERT_EQ(params, actual_params);
447 }
448
428 const base::HistogramTester& histogram_tester() { return histogram_tester_; } 449 const base::HistogramTester& histogram_tester() { return histogram_tester_; }
429 450
430 private: 451 private:
431 // Needed to pass PrerenderManager's DCHECKs. 452 // Needed to pass PrerenderManager's DCHECKs.
432 base::MessageLoop message_loop_; 453 base::MessageLoop message_loop_;
433 content::TestBrowserThread ui_thread_; 454 content::TestBrowserThread ui_thread_;
434 455
435 TestingProfile profile_; 456 TestingProfile profile_;
436 std::unique_ptr<UnitTestPrerenderManager> prerender_manager_; 457 std::unique_ptr<UnitTestPrerenderManager> prerender_manager_;
437 std::unique_ptr<PrerenderLinkManager> prerender_link_manager_; 458 std::unique_ptr<PrerenderLinkManager> prerender_link_manager_;
438 int last_prerender_id_; 459 int last_prerender_id_;
460 base::HistogramTester histogram_tester_;
461
462 // An instance of base::FieldTrialList is necessary in order to initialize
463 // global state.
439 base::FieldTrialList field_trial_list_; 464 base::FieldTrialList field_trial_list_;
440 base::HistogramTester histogram_tester_;
441 }; 465 };
442 466
443 TEST_F(PrerenderTest, PrerenderRespectsDisableFlag) { 467 TEST_F(PrerenderTest, PrerenderRespectsDisableFlag) {
444 RestorePrerenderMode restore_prerender_mode; 468 test_utils::RestorePrerenderMode restore_prerender_mode;
445 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); 469 ASSERT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
446 ASSERT_EQ(PrerenderManager::PRERENDER_MODE_ENABLED, 470 ASSERT_EQ(PrerenderManager::PRERENDER_MODE_ENABLED,
447 PrerenderManager::GetMode()); 471 PrerenderManager::GetMode(ORIGIN_NONE));
448 472
449 { 473 {
450 base::test::ScopedFeatureList scoped_feature_list; 474 base::test::ScopedFeatureList scoped_feature_list;
451 scoped_feature_list.InitAndDisableFeature(kNoStatePrefetchFeature); 475 scoped_feature_list.InitAndDisableFeature(kNoStatePrefetchFeature);
452 prerender::ConfigurePrerender(); 476 prerender::ConfigurePrerender();
477 EXPECT_FALSE(PrerenderManager::IsAnyPrerenderingPossible());
453 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED, 478 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
454 PrerenderManager::GetMode()); 479 PrerenderManager::GetMode(ORIGIN_NONE));
455 EXPECT_FALSE(PrerenderManager::IsPrerenderingPossible()); 480 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
481 PrerenderManager::GetMode(ORIGIN_OMNIBOX));
482 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
483 PrerenderManager::GetMode(ORIGIN_INSTANT));
456 } 484 }
457 } 485 }
458 486
459 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParameters) { 487 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParameters) {
460 RestorePrerenderMode restore_prerender_mode; 488 test_utils::RestorePrerenderMode restore_prerender_mode;
461
462 // Set up the prerender mode through a field trial.
463 std::string kTrialName = "name";
464 std::string kTrialGroup = "group";
465 base::FieldTrial* trial =
466 base::FieldTrialList::CreateFieldTrial(kTrialName, kTrialGroup);
467 std::map<std::string, std::string> params = {
468 {kNoStatePrefetchFeatureModeParameterName,
469 kNoStatePrefetchFeatureModeParameterSimpleLoad}};
470 ASSERT_TRUE(
471 variations::AssociateVariationParams(kTrialName, kTrialGroup, params));
472
473 std::unique_ptr<base::FeatureList> feature_list =
474 base::MakeUnique<base::FeatureList>();
475 feature_list->RegisterFieldTrialOverride(
476 kNoStatePrefetchFeature.name, base::FeatureList::OVERRIDE_ENABLE_FEATURE,
477 trial);
478 489
479 base::test::ScopedFeatureList scoped_feature_list; 490 base::test::ScopedFeatureList scoped_feature_list;
480 scoped_feature_list.InitWithFeatureList(std::move(feature_list)); 491 SetUpFieldTrial({{kNoStatePrefetchFeatureModeParameterName,
481 492 kNoStatePrefetchFeatureModeParameterSimpleLoad}},
482 EXPECT_EQ(base::FeatureList::GetFieldTrial(kNoStatePrefetchFeature), trial); 493 &scoped_feature_list);
483
484 std::map<std::string, std::string> actual_params;
485 EXPECT_TRUE(variations::GetVariationParamsByFeature(kNoStatePrefetchFeature,
486 &actual_params));
487 EXPECT_EQ(params, actual_params);
488 494
489 prerender::ConfigurePrerender(); 495 prerender::ConfigurePrerender();
490 EXPECT_TRUE(PrerenderManager::IsPrerenderingPossible()); 496 EXPECT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
491 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT, 497 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT,
492 PrerenderManager::GetMode()); 498 PrerenderManager::GetMode(ORIGIN_NONE));
499 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT,
500 PrerenderManager::GetMode(ORIGIN_OMNIBOX));
501 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT,
502 PrerenderManager::GetMode(ORIGIN_INSTANT));
503 }
504
505 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParametersPrefetchInstant) {
506 test_utils::RestorePrerenderMode restore_prerender_mode;
507
508 base::test::ScopedFeatureList scoped_feature_list;
509 SetUpFieldTrial({{kNoStatePrefetchFeatureModeParameterName,
510 kNoStatePrefetchFeatureModeParameterSimpleLoad},
511 {kNoStatePrefetchFeatureInstantModeParameterName,
512 kNoStatePrefetchFeatureModeParameterPrefetch}},
513 &scoped_feature_list);
514
515 prerender::ConfigurePrerender();
516 EXPECT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
517 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT,
518 PrerenderManager::GetMode(ORIGIN_NONE));
519 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT,
520 PrerenderManager::GetMode(ORIGIN_OMNIBOX));
521 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH,
522 PrerenderManager::GetMode(ORIGIN_INSTANT));
523 }
524
525 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParametersPrefetchOmnibox) {
526 test_utils::RestorePrerenderMode restore_prerender_mode;
527
528 base::test::ScopedFeatureList scoped_feature_list;
529 SetUpFieldTrial({{kNoStatePrefetchFeatureModeParameterName,
530 kNoStatePrefetchFeatureModeParameterSimpleLoad},
531 {kNoStatePrefetchFeatureOmniboxModeParameterName,
532 kNoStatePrefetchFeatureModeParameterPrefetch}},
533 &scoped_feature_list);
534
535 prerender::ConfigurePrerender();
536 EXPECT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
537 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT,
538 PrerenderManager::GetMode(ORIGIN_NONE));
539 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH,
540 PrerenderManager::GetMode(ORIGIN_OMNIBOX));
541 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT,
542 PrerenderManager::GetMode(ORIGIN_INSTANT));
543 }
544
545 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParametersNoneButInstant) {
546 test_utils::RestorePrerenderMode restore_prerender_mode;
547
548 base::test::ScopedFeatureList scoped_feature_list;
549 SetUpFieldTrial({{kNoStatePrefetchFeatureModeParameterName,
550 kNoStatePrefetchFeatureModeParameterDisabled},
551 {kNoStatePrefetchFeatureInstantModeParameterName,
552 kNoStatePrefetchFeatureModeParameterPrerender},
553 {kNoStatePrefetchFeatureOmniboxModeParameterName,
554 kNoStatePrefetchFeatureModeParameterDisabled}},
555 &scoped_feature_list);
556
557 prerender::ConfigurePrerender();
558 EXPECT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
559 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
560 PrerenderManager::GetMode(ORIGIN_NONE));
561 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
562 PrerenderManager::GetMode(ORIGIN_OMNIBOX));
563 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_ENABLED,
564 PrerenderManager::GetMode(ORIGIN_INSTANT));
565 }
566
567 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParametersNoneAtAll) {
568 test_utils::RestorePrerenderMode restore_prerender_mode;
569
570 base::test::ScopedFeatureList scoped_feature_list;
571 SetUpFieldTrial({{kNoStatePrefetchFeatureModeParameterName,
572 kNoStatePrefetchFeatureModeParameterDisabled},
573 {kNoStatePrefetchFeatureOmniboxModeParameterName,
574 kNoStatePrefetchFeatureModeParameterDisabled},
575 {kNoStatePrefetchFeatureInstantModeParameterName,
576 kNoStatePrefetchFeatureModeParameterDisabled}},
577 &scoped_feature_list);
578
579 prerender::ConfigurePrerender();
580 EXPECT_FALSE(PrerenderManager::IsAnyPrerenderingPossible());
581 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
582 PrerenderManager::GetMode(ORIGIN_NONE));
583 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
584 PrerenderManager::GetMode(ORIGIN_OMNIBOX));
585 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
586 PrerenderManager::GetMode(ORIGIN_INSTANT));
587 }
588
589 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParametersDefaultNone) {
590 test_utils::RestorePrerenderMode restore_prerender_mode;
591
592 base::test::ScopedFeatureList scoped_feature_list;
593 SetUpFieldTrial({{kNoStatePrefetchFeatureModeParameterName,
594 kNoStatePrefetchFeatureModeParameterDisabled}},
595 &scoped_feature_list);
596
597 prerender::ConfigurePrerender();
598 EXPECT_FALSE(PrerenderManager::IsAnyPrerenderingPossible());
599 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
600 PrerenderManager::GetMode(ORIGIN_NONE));
601 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
602 PrerenderManager::GetMode(ORIGIN_OMNIBOX));
603 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED,
604 PrerenderManager::GetMode(ORIGIN_INSTANT));
493 } 605 }
494 606
495 TEST_F(PrerenderTest, PrerenderRespectsThirdPartyCookiesPref) { 607 TEST_F(PrerenderTest, PrerenderRespectsThirdPartyCookiesPref) {
496 GURL url("http://www.google.com/"); 608 GURL url("http://www.google.com/");
497 RestorePrerenderMode restore_prerender_mode; 609 test_utils::RestorePrerenderMode restore_prerender_mode;
498 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); 610 ASSERT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
499 611
500 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); 612 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
501 EXPECT_FALSE(AddSimplePrerender(url)); 613 EXPECT_FALSE(AddSimplePrerender(url));
502 histogram_tester().ExpectUniqueSample( 614 histogram_tester().ExpectUniqueSample(
503 "Prerender.FinalStatus", FINAL_STATUS_BLOCK_THIRD_PARTY_COOKIES, 1); 615 "Prerender.FinalStatus", FINAL_STATUS_BLOCK_THIRD_PARTY_COOKIES, 1);
504 } 616 }
505 617
506 TEST_F(PrerenderTest, OfflinePrerenderIgnoresThirdPartyCookiesPref) { 618 TEST_F(PrerenderTest, OfflinePrerenderIgnoresThirdPartyCookiesPref) {
507 GURL url("http://www.google.com/"); 619 GURL url("http://www.google.com/");
508 RestorePrerenderMode restore_prerender_mode; 620 test_utils::RestorePrerenderMode restore_prerender_mode;
509 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); 621 ASSERT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
510 622
511 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); 623 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
512 DummyPrerenderContents* prerender_contents = 624 DummyPrerenderContents* prerender_contents =
513 prerender_manager()->CreateNextPrerenderContents( 625 prerender_manager()->CreateNextPrerenderContents(
514 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); 626 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN);
515 std::unique_ptr<PrerenderHandle> prerender_handle( 627 std::unique_ptr<PrerenderHandle> prerender_handle(
516 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize)); 628 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize));
517 EXPECT_TRUE(prerender_handle); 629 EXPECT_TRUE(prerender_handle);
518 EXPECT_TRUE(prerender_handle->IsPrerendering()); 630 EXPECT_TRUE(prerender_handle->IsPrerendering());
519 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 631 EXPECT_TRUE(prerender_contents->prerendering_has_started());
520 EXPECT_EQ(prerender_contents, prerender_handle->contents()); 632 EXPECT_EQ(prerender_contents, prerender_handle->contents());
521 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin()); 633 EXPECT_EQ(ORIGIN_OFFLINE, prerender_handle->contents()->origin());
522 } 634 }
523 635
524 // Checks that the prerender mode affects "normal" origins such as omnibox, but 636 // Checks that the prerender mode affects "normal" origins such as omnibox, but
525 // not offline origin. 637 // not offline origin.
526 TEST_F(PrerenderTest, PrerenderModePerOrigin) { 638 TEST_F(PrerenderTest, PrerenderModePerOrigin) {
527 RestorePrerenderMode restore_prerender_mode; 639 test_utils::RestorePrerenderMode restore_prerender_mode;
528 640
529 prerender_manager()->SetMode( 641 prerender_manager()->SetMode(
530 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); 642 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
531 EXPECT_TRUE(PrerenderManager::IsPrerenderingPossible()); 643 prerender_manager()->SetOmniboxMode(
644 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
645 EXPECT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
646 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OFFLINE));
647 EXPECT_TRUE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OMNIBOX));
648 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_INSTANT));
649 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OFFLINE));
650 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OMNIBOX));
651
652 prerender_manager()->SetMode(PrerenderManager::PRERENDER_MODE_ENABLED);
653 EXPECT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
532 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OFFLINE)); 654 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OFFLINE));
533 EXPECT_TRUE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OMNIBOX)); 655 EXPECT_TRUE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OMNIBOX));
534 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OFFLINE)); 656 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OFFLINE));
535 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OMNIBOX)); 657 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OMNIBOX));
536 658
537 prerender_manager()->SetMode(PrerenderManager::PRERENDER_MODE_ENABLED); 659 prerender_manager()->SetMode(PrerenderManager::PRERENDER_MODE_DISABLED);
538 EXPECT_TRUE(PrerenderManager::IsPrerenderingPossible()); 660 prerender_manager()->SetInstantMode(
661 PrerenderManager::PRERENDER_MODE_DISABLED);
662 prerender_manager()->SetOmniboxMode(
663 PrerenderManager::PRERENDER_MODE_DISABLED);
664 EXPECT_FALSE(PrerenderManager::IsAnyPrerenderingPossible());
665
666 prerender_manager()->SetMode(
667 PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT);
668 prerender_manager()->SetInstantMode(
669 PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT);
670 EXPECT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
539 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OFFLINE)); 671 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OFFLINE));
540 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OMNIBOX)); 672 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OMNIBOX));
541 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OFFLINE)); 673 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OFFLINE));
542 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OMNIBOX)); 674 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OMNIBOX));
543 675 EXPECT_TRUE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_INSTANT));
544 prerender_manager()->SetMode(PrerenderManager::PRERENDER_MODE_DISABLED);
545 EXPECT_FALSE(PrerenderManager::IsPrerenderingPossible());
546
547 prerender_manager()->SetMode(
548 PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT);
549 EXPECT_TRUE(PrerenderManager::IsPrerenderingPossible());
550 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OFFLINE));
551 EXPECT_FALSE(PrerenderManager::IsNoStatePrefetch(ORIGIN_OMNIBOX));
552 EXPECT_FALSE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OFFLINE));
553 EXPECT_TRUE(PrerenderManager::IsSimpleLoadExperiment(ORIGIN_OMNIBOX));
554 } 676 }
555 677
556 TEST_F(PrerenderTest, PrerenderRespectsPrerenderModeNoStatePrefetch) { 678 TEST_F(PrerenderTest, PrerenderRespectsPrerenderModeNoStatePrefetch) {
557 GURL url("http://www.google.com/"); 679 GURL url("http://www.google.com/");
558 RestorePrerenderMode restore_prerender_mode; 680 test_utils::RestorePrerenderMode restore_prerender_mode;
559 681
560 prerender_manager()->SetMode( 682 prerender_manager()->SetMode(
561 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); 683 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
562 684
563 DummyPrerenderContents* prerender_contents = 685 DummyPrerenderContents* prerender_contents =
564 prerender_manager()->CreateNextPrerenderContents( 686 prerender_manager()->CreateNextPrerenderContents(
565 url, FINAL_STATUS_MANAGER_SHUTDOWN); 687 url, FINAL_STATUS_MANAGER_SHUTDOWN);
566 EXPECT_TRUE(AddSimplePrerender(url)); 688 EXPECT_TRUE(AddSimplePrerender(url));
567 EXPECT_EQ(PREFETCH_ONLY, prerender_contents->prerender_mode()); 689 EXPECT_EQ(PREFETCH_ONLY, prerender_contents->prerender_mode());
568 } 690 }
569 691
570 TEST_F(PrerenderTest, PrerenderRespectsPrerenderModeSimpleLoad) { 692 TEST_F(PrerenderTest, PrerenderRespectsPrerenderModeSimpleLoad) {
571 GURL url("http://www.google.com/"); 693 GURL url("http://www.google.com/");
572 RestorePrerenderMode restore_prerender_mode; 694 test_utils::RestorePrerenderMode restore_prerender_mode;
573 695
574 prerender_manager()->SetMode( 696 prerender_manager()->SetMode(
575 PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT); 697 PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT);
576 EXPECT_FALSE(AddSimplePrerender(url)); 698 EXPECT_FALSE(AddSimplePrerender(url));
577 } 699 }
578 700
579 // Checks that a full prerender happens in offline mode, even if no-state 701 // Checks that a full prerender happens in offline mode, even if no-state
580 // prefetch is enabled. 702 // prefetch is enabled.
581 TEST_F(PrerenderTest, OfflinePrerenderIgnoresPrerenderMode) { 703 TEST_F(PrerenderTest, OfflinePrerenderIgnoresPrerenderMode) {
582 GURL url("http://www.google.com/"); 704 GURL url("http://www.google.com/");
583 RestorePrerenderMode restore_prerender_mode; 705 test_utils::RestorePrerenderMode restore_prerender_mode;
584 706
585 prerender_manager()->SetMode( 707 prerender_manager()->SetMode(
586 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); 708 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
587 709
588 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); 710 ASSERT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
589 711
590 DummyPrerenderContents* prerender_contents = 712 DummyPrerenderContents* prerender_contents =
591 prerender_manager()->CreateNextPrerenderContents( 713 prerender_manager()->CreateNextPrerenderContents(
592 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); 714 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN);
593 std::unique_ptr<PrerenderHandle> prerender_handle( 715 std::unique_ptr<PrerenderHandle> prerender_handle(
594 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize)); 716 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize));
595 EXPECT_EQ(FULL_PRERENDER, prerender_contents->prerender_mode()); 717 EXPECT_EQ(FULL_PRERENDER, prerender_contents->prerender_mode());
596 } 718 }
597 719
598 TEST_F(PrerenderTest, PrerenderDisabledOnLowEndDevice) { 720 TEST_F(PrerenderTest, PrerenderDisabledOnLowEndDevice) {
599 GURL url("http://www.google.com/"); 721 GURL url("http://www.google.com/");
600 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); 722 ASSERT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
601 prerender_manager()->SetIsLowEndDevice(true); 723 prerender_manager()->SetIsLowEndDevice(true);
602 EXPECT_FALSE(AddSimplePrerender(url)); 724 EXPECT_FALSE(AddSimplePrerender(url));
603 histogram_tester().ExpectUniqueSample("Prerender.FinalStatus", 725 histogram_tester().ExpectUniqueSample("Prerender.FinalStatus",
604 FINAL_STATUS_LOW_END_DEVICE, 1); 726 FINAL_STATUS_LOW_END_DEVICE, 1);
605 } 727 }
606 728
607 TEST_F(PrerenderTest, OfflinePrerenderPossibleOnLowEndDevice) { 729 TEST_F(PrerenderTest, OfflinePrerenderPossibleOnLowEndDevice) {
608 GURL url("http://www.google.com/"); 730 GURL url("http://www.google.com/");
609 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); 731 ASSERT_TRUE(PrerenderManager::IsAnyPrerenderingPossible());
610 732
611 prerender_manager()->SetIsLowEndDevice(true); 733 prerender_manager()->SetIsLowEndDevice(true);
612 734
613 DummyPrerenderContents* prerender_contents = 735 DummyPrerenderContents* prerender_contents =
614 prerender_manager()->CreateNextPrerenderContents( 736 prerender_manager()->CreateNextPrerenderContents(
615 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN); 737 url, ORIGIN_OFFLINE, FINAL_STATUS_MANAGER_SHUTDOWN);
616 std::unique_ptr<PrerenderHandle> prerender_handle( 738 std::unique_ptr<PrerenderHandle> prerender_handle(
617 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize)); 739 prerender_manager()->AddPrerenderForOffline(url, nullptr, kSize));
618 EXPECT_TRUE(prerender_handle); 740 EXPECT_TRUE(prerender_handle);
619 EXPECT_TRUE(prerender_handle->IsPrerendering()); 741 EXPECT_TRUE(prerender_handle->IsPrerendering());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 std::unique_ptr<PrerenderContents> entry = 794 std::unique_ptr<PrerenderContents> entry =
673 prerender_manager()->FindAndUseEntry(url); 795 prerender_manager()->FindAndUseEntry(url);
674 ASSERT_EQ(prerender_contents, entry.get()); 796 ASSERT_EQ(prerender_contents, entry.get());
675 } 797 }
676 798
677 // Make sure that if queue a request, and a second prerender request for the 799 // Make sure that if queue a request, and a second prerender request for the
678 // same URL comes in, that the second request attaches to the first prerender, 800 // same URL comes in, that the second request attaches to the first prerender,
679 // and we don't use the second prerender contents. 801 // and we don't use the second prerender contents.
680 // This test is the same as the "DuplicateTest" above, but for NoStatePrefetch. 802 // This test is the same as the "DuplicateTest" above, but for NoStatePrefetch.
681 TEST_F(PrerenderTest, DuplicateTest_NoStatePrefetch) { 803 TEST_F(PrerenderTest, DuplicateTest_NoStatePrefetch) {
682 RestorePrerenderMode restore_prerender_mode; 804 test_utils::RestorePrerenderMode restore_prerender_mode;
683 prerender_manager()->SetMode( 805 prerender_manager()->SetMode(
684 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); 806 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
685 807
686 SetConcurrency(2); 808 SetConcurrency(2);
687 GURL url("http://www.google.com/"); 809 GURL url("http://www.google.com/");
688 DummyPrerenderContents* prerender_contents = 810 DummyPrerenderContents* prerender_contents =
689 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED); 811 prerender_manager()->CreateNextPrerenderContents(url, FINAL_STATUS_USED);
690 EXPECT_TRUE(AddSimplePrerender(url)); 812 EXPECT_TRUE(AddSimplePrerender(url));
691 EXPECT_FALSE(prerender_manager()->next_prerender_contents()); 813 EXPECT_FALSE(prerender_manager()->next_prerender_contents());
692 EXPECT_TRUE(prerender_contents->prerendering_has_started()); 814 EXPECT_TRUE(prerender_contents->prerendering_has_started());
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 EXPECT_TRUE(AddSimplePrerender(second_url)); 964 EXPECT_TRUE(AddSimplePrerender(second_url));
843 EXPECT_EQ(second_prerender_contents, 965 EXPECT_EQ(second_prerender_contents,
844 prerender_manager()->FindEntry(second_url)); 966 prerender_manager()->FindEntry(second_url));
845 } 967 }
846 968
847 // Prefetching the same URL twice during |time_to_live| results in a duplicate 969 // Prefetching the same URL twice during |time_to_live| results in a duplicate
848 // and is aborted. 970 // and is aborted.
849 TEST_F(PrerenderTest, NoStatePrefetchDuplicate) { 971 TEST_F(PrerenderTest, NoStatePrefetchDuplicate) {
850 const GURL kUrl("http://www.google.com/"); 972 const GURL kUrl("http://www.google.com/");
851 973
852 RestorePrerenderMode restore_prerender_mode; 974 test_utils::RestorePrerenderMode restore_prerender_mode;
853 prerender_manager()->SetMode( 975 prerender_manager()->SetMode(
854 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); 976 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
977 prerender_manager()->SetOmniboxMode(
978 PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH);
855 base::SimpleTestTickClock* tick_clock = 979 base::SimpleTestTickClock* tick_clock =
856 OverridePrerenderManagerTimeTicks(prerender_manager()); 980 OverridePrerenderManagerTimeTicks(prerender_manager());
857 981
858 // Prefetch the url once. 982 // Prefetch the url once.
859 prerender_manager()->CreateNextPrerenderContents(kUrl, ORIGIN_OMNIBOX, 983 prerender_manager()->CreateNextPrerenderContents(kUrl, ORIGIN_OMNIBOX,
860 FINAL_STATUS_CANCELLED); 984 FINAL_STATUS_CANCELLED);
861 EXPECT_TRUE( 985 EXPECT_TRUE(
862 prerender_manager()->AddPrerenderFromOmnibox(kUrl, nullptr, gfx::Size())); 986 prerender_manager()->AddPrerenderFromOmnibox(kUrl, nullptr, gfx::Size()));
863 // Cancel the prerender so that it is not reused. 987 // Cancel the prerender so that it is not reused.
864 prerender_manager()->CancelAllPrerenders(); 988 prerender_manager()->CancelAllPrerenders();
(...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after
2033 2157
2034 TestNetworkBytesChangedObserver observer; 2158 TestNetworkBytesChangedObserver observer;
2035 prerender_handle->SetObserver(&observer); 2159 prerender_handle->SetObserver(&observer);
2036 2160
2037 prerender_contents->AddNetworkBytes(12); 2161 prerender_contents->AddNetworkBytes(12);
2038 EXPECT_TRUE(observer.network_bytes_changed()); 2162 EXPECT_TRUE(observer.network_bytes_changed());
2039 EXPECT_EQ(12, prerender_contents->network_bytes()); 2163 EXPECT_EQ(12, prerender_contents->network_bytes());
2040 } 2164 }
2041 2165
2042 } // namespace prerender 2166 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_test_utils.h ('k') | chrome/browser/ui/login/login_handler_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698