Chromium Code Reviews| Index: chrome/browser/previews/previews_infobar_delegate_unittest.cc |
| diff --git a/chrome/browser/previews/previews_infobar_delegate_unittest.cc b/chrome/browser/previews/previews_infobar_delegate_unittest.cc |
| index d18bee15841fef558567358cf141515c517c853c..107da1d9e9a50ab2046207a4a3e93e6cc09aefa6 100644 |
| --- a/chrome/browser/previews/previews_infobar_delegate_unittest.cc |
| +++ b/chrome/browser/previews/previews_infobar_delegate_unittest.cc |
| @@ -9,11 +9,15 @@ |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| +#include "base/feature_list.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/metrics/field_trial.h" |
| +#include "base/metrics/field_trial_params.h" |
| #include "base/optional.h" |
| #include "base/test/histogram_tester.h" |
| +#include "base/test/scoped_feature_list.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| +#include "base/time/time.h" |
| #include "chrome/browser/android/android_theme_resources.h" |
| #include "chrome/browser/infobars/infobar_service.h" |
| #include "chrome/browser/loader/chrome_navigation_data.h" |
| @@ -22,6 +26,7 @@ |
| #include "chrome/browser/previews/previews_infobar_tab_helper.h" |
| #include "chrome/grit/generated_resources.h" |
| #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| +#include "chrome/test/base/testing_browser_process.h" |
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h" |
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h" |
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.h" |
| @@ -32,9 +37,12 @@ |
| #include "components/infobars/core/confirm_infobar_delegate.h" |
| #include "components/infobars/core/infobar.h" |
| #include "components/infobars/core/infobar_delegate.h" |
| +#include "components/network_time/network_time_test_utils.h" |
| #include "components/prefs/pref_registry_simple.h" |
| #include "components/previews/core/previews_experiments.h" |
| +#include "components/previews/core/previews_features.h" |
| #include "components/proxy_config/proxy_config_pref_names.h" |
| +#include "components/variations/variations_associated_data.h" |
| #include "content/public/browser/navigation_entry.h" |
| #include "content/public/browser/navigation_handle.h" |
| #include "content/public/browser/reload_type.h" |
| @@ -111,6 +119,9 @@ DEFINE_WEB_CONTENTS_USER_DATA_KEY(TestPreviewsWebContentsObserver); |
| class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness { |
| protected: |
| + PreviewsInfoBarDelegateUnitTest() |
| + : field_trial_list_(new base::FieldTrialList(nullptr)) {} |
| + |
| void SetUp() override { |
| ChromeRenderViewHostTestHarness::SetUp(); |
| InfoBarService::CreateForWebContents(web_contents()); |
| @@ -139,17 +150,23 @@ class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness { |
| base::WrapUnique(new data_reduction_proxy::DataStore()), |
| base::ThreadTaskRunnerHandle::Get(), |
| base::ThreadTaskRunnerHandle::Get()); |
| + |
| + TestingBrowserProcess::GetGlobal()->SetLocalState( |
| + drp_test_context_->pref_service()); |
| + network_time::NetworkTimeTracker::RegisterPrefs(registry); |
| } |
| void TearDown() override { |
| drp_test_context_->DestroySettings(); |
| ChromeRenderViewHostTestHarness::TearDown(); |
| + TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr); |
| } |
| - ConfirmInfoBarDelegate* CreateInfoBar(previews::PreviewsType type, |
| - bool is_data_saver_user) { |
| + PreviewsInfoBarDelegate* CreateInfoBar(previews::PreviewsType type, |
| + base::Time previews_freshness, |
| + bool is_data_saver_user) { |
| PreviewsInfoBarDelegate::Create( |
| - web_contents(), type, is_data_saver_user, |
| + web_contents(), type, previews_freshness, is_data_saver_user, |
| base::Bind(&PreviewsInfoBarDelegateUnitTest::OnDismissPreviewsInfobar, |
| base::Unretained(this))); |
| @@ -157,9 +174,27 @@ class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness { |
| InfoBarService::FromWebContents(web_contents()); |
| EXPECT_EQ(1U, infobar_service->infobar_count()); |
| - return infobar_service->infobar_at(0) |
| - ->delegate() |
| - ->AsConfirmInfoBarDelegate(); |
| + return static_cast<PreviewsInfoBarDelegate*>( |
| + infobar_service->infobar_at(0)->delegate()); |
| + } |
| + |
| + void EnableStalePreviewsTimestamp() { |
| + const std::string kTrialName = "TrialName"; |
| + const std::string kGroupName = "GroupName"; |
| + |
| + std::map<std::string, std::string> variation_params; |
| + variation_params["min_staleness_in_minutes"] = "2"; |
| + variation_params["max_staleness_in_minutes"] = "1440"; |
| + |
| + base::AssociateFieldTrialParams(kTrialName, kGroupName, variation_params); |
| + base::FieldTrial* field_trial = |
| + base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); |
| + |
| + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| + feature_list->RegisterFieldTrialOverride( |
| + previews::features::kStalePreviewsTimestamp.name, |
| + base::FeatureList::OVERRIDE_ENABLE_FEATURE, field_trial); |
| + scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); |
| } |
| void OnDismissPreviewsInfobar(bool user_opt_out) { |
| @@ -174,18 +209,21 @@ class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness { |
| drp_test_context_; |
| base::Optional<bool> user_opt_out_; |
| + std::unique_ptr<base::FieldTrialList> field_trial_list_; |
| + base::test::ScopedFeatureList scoped_feature_list_; |
| }; |
| TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestNavigationDismissal) { |
| base::HistogramTester tester; |
| - CreateInfoBar(previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| // Try showing a second infobar. Another should not be shown since the page |
| // has not navigated. |
| PreviewsInfoBarDelegate::Create( |
| web_contents(), previews::PreviewsType::LOFI, |
| - true /* is_data_saver_user */, |
| + base::Time() /* previews_freshness */, true /* is_data_saver_user */, |
| PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback()); |
| EXPECT_EQ(1U, infobar_service()->infobar_count()); |
| @@ -207,13 +245,14 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestReloadDismissal) { |
| // Navigate to test URL, so we can reload later. |
| NavigateAndCommit(GURL(kTestUrl)); |
| - CreateInfoBar(previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| // Try showing a second infobar. Another should not be shown since the page |
| // has not navigated. |
| PreviewsInfoBarDelegate::Create( |
| web_contents(), previews::PreviewsType::LOFI, |
| - true /* is_data_saver_user */, |
| + base::Time() /* previews_freshness */, true /* is_data_saver_user */, |
| PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback()); |
| EXPECT_EQ(1U, infobar_service()->infobar_count()); |
| @@ -243,8 +282,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestReloadDismissal) { |
| TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestUserDismissal) { |
| base::HistogramTester tester; |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + ConfirmInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| // Simulate dismissing the infobar. |
| infobar->InfoBarDismissed(); |
| @@ -262,7 +302,8 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestUserDismissal) { |
| TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestTabClosedDismissal) { |
| base::HistogramTester tester; |
| - CreateInfoBar(previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| // Delete the infobar without any other infobar actions. |
| infobar_service()->infobar_at(0)->RemoveSelf(); |
| @@ -285,7 +326,8 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLoFi) { |
| }; |
| for (const auto test : tests) { |
| drp_test_context_->config()->ResetLoFiStatusForTest(); |
| - base::FieldTrialList field_trial_list(nullptr); |
| + field_trial_list_.reset(); |
| + field_trial_list_.reset(new base::FieldTrialList(nullptr)); |
| if (test.using_previews_blacklist) { |
| base::FieldTrialList::CreateFieldTrial( |
| "DataReductionProxyPreviewsBlackListTransition", "Enabled_"); |
| @@ -295,8 +337,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLoFi) { |
| web_contents()->GetController().Reload(content::ReloadType::NORMAL, true); |
| content::WebContentsTester::For(web_contents())->CommitPendingNavigation(); |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + ConfirmInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| // Simulate clicking the infobar link. |
| if (infobar->LinkClicked(WindowOpenDisposition::CURRENT_TAB)) |
| @@ -325,8 +368,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLitePage) { |
| NavigateAndCommit(GURL(kTestUrl)); |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::LITE_PAGE, true /* is_data_saver_user */); |
| + ConfirmInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(), |
| + true /* is_data_saver_user */); |
| // Simulate clicking the infobar link. |
| if (infobar->LinkClicked(WindowOpenDisposition::CURRENT_TAB)) |
| @@ -353,8 +397,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLitePage) { |
| } |
| TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestShownOncePerNavigation) { |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + ConfirmInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| // Simulate dismissing the infobar. |
| infobar->InfoBarDismissed(); |
| @@ -363,7 +408,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestShownOncePerNavigation) { |
| PreviewsInfoBarDelegate::Create( |
| web_contents(), previews::PreviewsType::LOFI, |
| - true /* is_data_saver_user */, |
| + base::Time() /* previews_freshness */, true /* is_data_saver_user */, |
| PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback()); |
| // Infobar should not be shown again since a navigation hasn't happened. |
| @@ -371,14 +416,16 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestShownOncePerNavigation) { |
| // Navigate and show infobar again. |
| NavigateAndCommit(GURL(kTestUrl)); |
| - CreateInfoBar(previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| } |
| TEST_F(PreviewsInfoBarDelegateUnitTest, LoFiInfobarTest) { |
| base::HistogramTester tester; |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::LOFI, true /* is_data_saver_user */); |
| + ConfirmInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), |
| + true /* is_data_saver_user */); |
| tester.ExpectUniqueSample(kUMAPreviewsInfoBarActionLoFi, |
| PreviewsInfoBarDelegate::INFOBAR_SHOWN, 1); |
| @@ -400,8 +447,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, LoFiInfobarTest) { |
| TEST_F(PreviewsInfoBarDelegateUnitTest, PreviewInfobarTest) { |
| base::HistogramTester tester; |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::LITE_PAGE, true /* is_data_saver_user */); |
| + PreviewsInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(), |
| + true /* is_data_saver_user */); |
| tester.ExpectUniqueSample(kUMAPreviewsInfoBarActionLitePage, |
| PreviewsInfoBarDelegate::INFOBAR_SHOWN, 1); |
| @@ -414,6 +462,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, PreviewInfobarTest) { |
| infobar->GetMessageText()); |
| ASSERT_EQ(l10n_util::GetStringUTF16(IDS_PREVIEWS_INFOBAR_LINK), |
| infobar->GetLinkText()); |
| + ASSERT_EQ(base::string16(), infobar->GetTimestampText()); |
| #if defined(OS_ANDROID) |
| ASSERT_EQ(IDR_ANDROID_INFOBAR_PREVIEWS, infobar->GetIconId()); |
| #else |
| @@ -424,8 +473,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, PreviewInfobarTest) { |
| TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarNonDataSaverUserTest) { |
| base::HistogramTester tester; |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::OFFLINE, false /* is_data_saver_user */); |
| + PreviewsInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::OFFLINE, base::Time(), |
| + false /* is_data_saver_user */); |
| tester.ExpectUniqueSample(kUMAPreviewsInfoBarActionOffline, |
| PreviewsInfoBarDelegate::INFOBAR_SHOWN, 1); |
| @@ -438,6 +488,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarNonDataSaverUserTest) { |
| infobar->GetMessageText()); |
| ASSERT_EQ(l10n_util::GetStringUTF16(IDS_PREVIEWS_INFOBAR_LINK), |
| infobar->GetLinkText()); |
| + ASSERT_EQ(base::string16(), infobar->GetTimestampText()); |
| #if defined(OS_ANDROID) |
| ASSERT_EQ(IDR_ANDROID_INFOBAR_PREVIEWS, infobar->GetIconId()); |
| #else |
| @@ -448,8 +499,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarNonDataSaverUserTest) { |
| TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarDataSaverUserTest) { |
| base::HistogramTester tester; |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::OFFLINE, true /* is_data_saver_user */); |
| + PreviewsInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::OFFLINE, base::Time(), |
| + true /* is_data_saver_user */); |
| tester.ExpectUniqueSample(kUMAPreviewsInfoBarActionOffline, |
| PreviewsInfoBarDelegate::INFOBAR_SHOWN, 1); |
| @@ -462,6 +514,7 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarDataSaverUserTest) { |
| infobar->GetMessageText()); |
| ASSERT_EQ(l10n_util::GetStringUTF16(IDS_PREVIEWS_INFOBAR_LINK), |
| infobar->GetLinkText()); |
| + ASSERT_EQ(base::string16(), infobar->GetTimestampText()); |
| #if defined(OS_ANDROID) |
| ASSERT_EQ(IDR_ANDROID_INFOBAR_PREVIEWS, infobar->GetIconId()); |
| #else |
| @@ -477,8 +530,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, OfflineInfobarDisablesLoFi) { |
| NavigateAndCommit(GURL(kTestUrl)); |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::OFFLINE, true /* is_data_saver_user */); |
| + ConfirmInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::OFFLINE, base::Time(), |
| + true /* is_data_saver_user */); |
| tester.ExpectUniqueSample(kUMAPreviewsInfoBarActionOffline, |
| PreviewsInfoBarDelegate::INFOBAR_SHOWN, 1); |
| @@ -508,8 +562,9 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, PingbackClientClearedTabClosed) { |
| NavigateAndCommit(GURL(kTestUrl)); |
| - ConfirmInfoBarDelegate* infobar = CreateInfoBar( |
| - previews::PreviewsType::LITE_PAGE, true /* is_data_saver_user */); |
| + ConfirmInfoBarDelegate* infobar = |
| + CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(), |
| + true /* is_data_saver_user */); |
| // Simulate clicking the infobar link. |
| if (infobar->LinkClicked(WindowOpenDisposition::CURRENT_TAB)) |
| @@ -552,3 +607,48 @@ TEST_F(PreviewsInfoBarDelegateUnitTest, PingbackClientClearedTabClosed) { |
| ->pingback_client() |
| ->OptOutsSizeForTesting()); |
| } |
| + |
| +TEST_F(PreviewsInfoBarDelegateUnitTest, PreviewInfobarTimestampMintuesTest) { |
| + EnableStalePreviewsTimestamp(); |
| + |
| + int staleness_in_minutes = 5; |
| + |
| + PreviewsInfoBarDelegate* infobar = CreateInfoBar( |
| + previews::PreviewsType::LITE_PAGE, |
| + base::Time::Now() - base::TimeDelta::FromMinutes(staleness_in_minutes), |
| + true /* is_data_saver_user */); |
| + |
| + ASSERT_EQ( |
| + l10n_util::GetStringFUTF16(IDS_PREVIEWS_INFOBAR_TIMESTAMP_MINUTES, |
| + base::IntToString16(staleness_in_minutes)), |
| + infobar->GetTimestampText()); |
|
tbansal1
2017/06/19 20:52:29
For my own understanding:
Should not infobar->GetT
megjablon
2017/06/20 18:42:12
No, GetTimestampText() only returns the timestamp
|
| +} |
| + |
| +TEST_F(PreviewsInfoBarDelegateUnitTest, PreviewInfobarTimestampHourTest) { |
| + EnableStalePreviewsTimestamp(); |
| + |
| + int staleness_in_minutes = 65; |
| + |
| + PreviewsInfoBarDelegate* infobar = CreateInfoBar( |
| + previews::PreviewsType::LITE_PAGE, |
| + base::Time::Now() - base::TimeDelta::FromMinutes(staleness_in_minutes), |
| + true /* is_data_saver_user */); |
| + |
| + ASSERT_EQ(l10n_util::GetStringUTF16(IDS_PREVIEWS_INFOBAR_TIMESTAMP_ONE_HOUR), |
| + infobar->GetTimestampText()); |
| +} |
| + |
| +TEST_F(PreviewsInfoBarDelegateUnitTest, PreviewInfobarTimestampHoursTest) { |
| + EnableStalePreviewsTimestamp(); |
| + |
| + int staleness_in_hours = 2; |
| + |
| + PreviewsInfoBarDelegate* infobar = CreateInfoBar( |
| + previews::PreviewsType::LITE_PAGE, |
| + base::Time::Now() - base::TimeDelta::FromHours(staleness_in_hours), |
| + true /* is_data_saver_user */); |
| + |
| + ASSERT_EQ(l10n_util::GetStringFUTF16(IDS_PREVIEWS_INFOBAR_TIMESTAMP_HOURS, |
| + base::IntToString16(staleness_in_hours)), |
| + infobar->GetTimestampText()); |
| +} |