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

Side by Side Diff: chrome/browser/previews/previews_infobar_delegate_unittest.cc

Issue 2952343004: Adding previews information to PLM UKM (Closed)
Patch Set: comment on BroadcastEventToObservers Created 3 years, 5 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "chrome/browser/previews/previews_infobar_delegate.h" 5 #include "chrome/browser/previews/previews_infobar_delegate.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/feature_list.h" 13 #include "base/feature_list.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/metrics/field_trial.h" 15 #include "base/metrics/field_trial.h"
16 #include "base/metrics/field_trial_param_associator.h" 16 #include "base/metrics/field_trial_param_associator.h"
17 #include "base/metrics/field_trial_params.h" 17 #include "base/metrics/field_trial_params.h"
18 #include "base/optional.h" 18 #include "base/optional.h"
19 #include "base/strings/string16.h" 19 #include "base/strings/string16.h"
20 #include "base/test/histogram_tester.h" 20 #include "base/test/histogram_tester.h"
21 #include "base/test/scoped_feature_list.h" 21 #include "base/test/scoped_feature_list.h"
22 #include "base/threading/thread_task_runner_handle.h" 22 #include "base/threading/thread_task_runner_handle.h"
23 #include "base/time/time.h" 23 #include "base/time/time.h"
24 #include "chrome/browser/android/android_theme_resources.h" 24 #include "chrome/browser/android/android_theme_resources.h"
25 #include "chrome/browser/infobars/infobar_service.h" 25 #include "chrome/browser/infobars/infobar_service.h"
26 #include "chrome/browser/loader/chrome_navigation_data.h" 26 #include "chrome/browser/loader/chrome_navigation_data.h"
27 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" 27 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
28 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact ory.h" 28 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact ory.h"
29 #include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_ test_harness.h"
29 #include "chrome/browser/previews/previews_infobar_tab_helper.h" 30 #include "chrome/browser/previews/previews_infobar_tab_helper.h"
30 #include "chrome/grit/generated_resources.h" 31 #include "chrome/grit/generated_resources.h"
31 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 32 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
32 #include "chrome/test/base/testing_browser_process.h" 33 #include "chrome/test/base/testing_browser_process.h"
33 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf ig_test_utils.h" 34 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf ig_test_utils.h"
34 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data .h" 35 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data .h"
35 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_ping back_client.h" 36 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_ping back_client.h"
36 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_serv ice.h" 37 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_serv ice.h"
37 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_sett ings.h" 38 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_sett ings.h"
38 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test _utils.h" 39 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test _utils.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 113
113 void set_should_have_page_id(bool should_have_page_id) { 114 void set_should_have_page_id(bool should_have_page_id) {
114 should_have_page_id_ = should_have_page_id; 115 should_have_page_id_ = should_have_page_id;
115 } 116 }
116 117
117 private: 118 private:
118 content::ReloadType last_navigation_reload_type_; 119 content::ReloadType last_navigation_reload_type_;
119 bool should_have_page_id_; 120 bool should_have_page_id_;
120 }; 121 };
121 122
123 class TestOptOutObserver : public page_load_metrics::PageLoadMetricsObserver {
124 public:
125 explicit TestOptOutObserver(const base::Callback<void()>& callback)
126 : callback_(callback) {}
127 ~TestOptOutObserver() override {}
128
129 void OnEventOccurred(const void* const event_key) override {
130 if (PreviewsInfoBarDelegate::OptOutEventKey() == event_key)
131 callback_.Run();
132 }
133
134 base::Callback<void()> callback_;
135 };
136
122 } // namespace 137 } // namespace
123 138
124 DEFINE_WEB_CONTENTS_USER_DATA_KEY(TestPreviewsWebContentsObserver); 139 DEFINE_WEB_CONTENTS_USER_DATA_KEY(TestPreviewsWebContentsObserver);
125 140
126 class PreviewsInfoBarDelegateUnitTest : public ChromeRenderViewHostTestHarness { 141 class PreviewsInfoBarDelegateUnitTest
142 : public page_load_metrics::PageLoadMetricsObserverTestHarness {
127 protected: 143 protected:
128 PreviewsInfoBarDelegateUnitTest() 144 PreviewsInfoBarDelegateUnitTest()
129 : field_trial_list_(new base::FieldTrialList(nullptr)), 145 : field_trial_list_(new base::FieldTrialList(nullptr)),
130 tester_(new base::HistogramTester()) {} 146 tester_(new base::HistogramTester()) {}
131 147
132 void SetUp() override { 148 void SetUp() override {
133 ChromeRenderViewHostTestHarness::SetUp(); 149 PageLoadMetricsObserverTestHarness::SetUp();
134 InfoBarService::CreateForWebContents(web_contents()); 150 InfoBarService::CreateForWebContents(web_contents());
135 PreviewsInfoBarTabHelper::CreateForWebContents(web_contents()); 151 PreviewsInfoBarTabHelper::CreateForWebContents(web_contents());
136 TestPreviewsWebContentsObserver::CreateForWebContents(web_contents()); 152 TestPreviewsWebContentsObserver::CreateForWebContents(web_contents());
137 153
138 drp_test_context_ = 154 drp_test_context_ =
139 data_reduction_proxy::DataReductionProxyTestContext::Builder() 155 data_reduction_proxy::DataReductionProxyTestContext::Builder()
140 .WithMockConfig() 156 .WithMockConfig()
141 .SkipSettingsInitialization() 157 .SkipSettingsInitialization()
142 .Build(); 158 .Build();
143 159
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 } 241 }
226 242
227 void OnDismissPreviewsInfobar(bool user_opt_out) { 243 void OnDismissPreviewsInfobar(bool user_opt_out) {
228 user_opt_out_ = user_opt_out; 244 user_opt_out_ = user_opt_out;
229 } 245 }
230 246
231 InfoBarService* infobar_service() { 247 InfoBarService* infobar_service() {
232 return InfoBarService::FromWebContents(web_contents()); 248 return InfoBarService::FromWebContents(web_contents());
233 } 249 }
234 250
251 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
252 tracker->AddObserver(base::MakeUnique<TestOptOutObserver>(base::Bind(
253 &PreviewsInfoBarDelegateUnitTest::OptOut, base::Unretained(this))));
254 }
255
256 void OptOut() { opt_out_called_ = true; }
257
258 bool opt_out_called_ = false;
tbansal1 2017/07/12 21:58:46 nit: It's somewhat confusing to have both ctor ini
RyanSturm 2017/07/17 18:48:30 Done.
259
235 std::unique_ptr<data_reduction_proxy::DataReductionProxyTestContext> 260 std::unique_ptr<data_reduction_proxy::DataReductionProxyTestContext>
236 drp_test_context_; 261 drp_test_context_;
237 262
238 base::Optional<bool> user_opt_out_; 263 base::Optional<bool> user_opt_out_;
239 std::unique_ptr<base::FieldTrialList> field_trial_list_; 264 std::unique_ptr<base::FieldTrialList> field_trial_list_;
240 base::test::ScopedFeatureList scoped_feature_list_; 265 base::test::ScopedFeatureList scoped_feature_list_;
241 std::unique_ptr<base::HistogramTester> tester_; 266 std::unique_ptr<base::HistogramTester> tester_;
242 }; 267 };
243 268
244 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestNavigationDismissal) { 269 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestNavigationDismissal) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 EXPECT_EQ(0, drp_test_context_->pref_service()->GetInteger( 321 EXPECT_EQ(0, drp_test_context_->pref_service()->GetInteger(
297 data_reduction_proxy::prefs::kLoFiLoadImagesPerSession)); 322 data_reduction_proxy::prefs::kLoFiLoadImagesPerSession));
298 323
299 auto* data_reduction_proxy_settings = 324 auto* data_reduction_proxy_settings =
300 DataReductionProxyChromeSettingsFactory::GetForBrowserContext( 325 DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
301 web_contents()->GetBrowserContext()); 326 web_contents()->GetBrowserContext());
302 327
303 EXPECT_EQ(0u, data_reduction_proxy_settings->data_reduction_proxy_service() 328 EXPECT_EQ(0u, data_reduction_proxy_settings->data_reduction_proxy_service()
304 ->pingback_client() 329 ->pingback_client()
305 ->OptOutsSizeForTesting()); 330 ->OptOutsSizeForTesting());
331
332 EXPECT_FALSE(opt_out_called_);
306 } 333 }
307 334
308 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestUserDismissal) { 335 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestUserDismissal) {
309 ConfirmInfoBarDelegate* infobar = 336 ConfirmInfoBarDelegate* infobar =
310 CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), 337 CreateInfoBar(previews::PreviewsType::LOFI, base::Time(),
311 true /* is_data_saver_user */, false /* is_reload */); 338 true /* is_data_saver_user */, false /* is_reload */);
312 339
313 // Simulate dismissing the infobar. 340 // Simulate dismissing the infobar.
314 infobar->InfoBarDismissed(); 341 infobar->InfoBarDismissed();
315 infobar_service()->infobar_at(0)->RemoveSelf(); 342 infobar_service()->infobar_at(0)->RemoveSelf();
(...skipping 24 matching lines...) Expand all
340 } 367 }
341 368
342 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLoFi) { 369 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLoFi) {
343 NavigateAndCommit(GURL(kTestUrl)); 370 NavigateAndCommit(GURL(kTestUrl));
344 const struct { 371 const struct {
345 bool using_previews_blacklist; 372 bool using_previews_blacklist;
346 } tests[] = { 373 } tests[] = {
347 {true}, {false}, 374 {true}, {false},
348 }; 375 };
349 for (const auto test : tests) { 376 for (const auto test : tests) {
377 opt_out_called_ = false;
350 tester_.reset(new base::HistogramTester()); 378 tester_.reset(new base::HistogramTester());
351 drp_test_context_->config()->ResetLoFiStatusForTest(); 379 drp_test_context_->config()->ResetLoFiStatusForTest();
352 field_trial_list_.reset(); 380 field_trial_list_.reset();
353 field_trial_list_.reset(new base::FieldTrialList(nullptr)); 381 field_trial_list_.reset(new base::FieldTrialList(nullptr));
354 if (test.using_previews_blacklist) { 382 if (test.using_previews_blacklist) {
355 base::FieldTrialList::CreateFieldTrial( 383 base::FieldTrialList::CreateFieldTrial(
356 "DataReductionProxyPreviewsBlackListTransition", "Enabled_"); 384 "DataReductionProxyPreviewsBlackListTransition", "Enabled_");
357 } 385 }
358 386
359 // Call Reload and CommitPendingNavigation to force DidFinishNavigation. 387 // Call Reload and CommitPendingNavigation to force DidFinishNavigation.
(...skipping 16 matching lines...) Expand all
376 drp_test_context_->pref_service()->GetInteger( 404 drp_test_context_->pref_service()->GetInteger(
377 data_reduction_proxy::prefs::kLoFiLoadImagesPerSession)); 405 data_reduction_proxy::prefs::kLoFiLoadImagesPerSession));
378 EXPECT_TRUE(user_opt_out_.value()); 406 EXPECT_TRUE(user_opt_out_.value());
379 407
380 auto* data_reduction_proxy_settings = 408 auto* data_reduction_proxy_settings =
381 DataReductionProxyChromeSettingsFactory::GetForBrowserContext( 409 DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
382 web_contents()->GetBrowserContext()); 410 web_contents()->GetBrowserContext());
383 EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service() 411 EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service()
384 ->pingback_client() 412 ->pingback_client()
385 ->OptOutsSizeForTesting()); 413 ->OptOutsSizeForTesting());
414 EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service()
415 ->pingback_client()
416 ->OptOutsSizeForTesting());
417
418 EXPECT_TRUE(opt_out_called_);
386 } 419 }
387 } 420 }
388 421
389 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLitePage) { 422 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestClickLinkLitePage) {
390 NavigateAndCommit(GURL(kTestUrl)); 423 NavigateAndCommit(GURL(kTestUrl));
391
392 ConfirmInfoBarDelegate* infobar = 424 ConfirmInfoBarDelegate* infobar =
393 CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(), 425 CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(),
394 true /* is_data_saver_user */, false /* is_reload */); 426 true /* is_data_saver_user */, false /* is_reload */);
395 427
396 // Simulate clicking the infobar link. 428 // Simulate clicking the infobar link.
397 if (infobar->LinkClicked(WindowOpenDisposition::CURRENT_TAB)) 429 if (infobar->LinkClicked(WindowOpenDisposition::CURRENT_TAB))
398 infobar_service()->infobar_at(0)->RemoveSelf(); 430 infobar_service()->infobar_at(0)->RemoveSelf();
399 EXPECT_EQ(0U, infobar_service()->infobar_count()); 431 EXPECT_EQ(0U, infobar_service()->infobar_count());
400 432
401 tester_->ExpectBucketCount( 433 tester_->ExpectBucketCount(
402 kUMAPreviewsInfoBarActionLitePage, 434 kUMAPreviewsInfoBarActionLitePage,
403 PreviewsInfoBarDelegate::INFOBAR_LOAD_ORIGINAL_CLICKED, 1); 435 PreviewsInfoBarDelegate::INFOBAR_LOAD_ORIGINAL_CLICKED, 1);
404 436
405 content::WebContentsTester::For(web_contents())->CommitPendingNavigation(); 437 content::WebContentsTester::For(web_contents())->CommitPendingNavigation();
406 438
407 EXPECT_EQ(content::ReloadType::DISABLE_LOFI_MODE, 439 EXPECT_EQ(content::ReloadType::DISABLE_LOFI_MODE,
408 TestPreviewsWebContentsObserver::FromWebContents(web_contents()) 440 TestPreviewsWebContentsObserver::FromWebContents(web_contents())
409 ->last_navigation_reload_type()); 441 ->last_navigation_reload_type());
410 442
411 auto* data_reduction_proxy_settings = 443 auto* data_reduction_proxy_settings =
412 DataReductionProxyChromeSettingsFactory::GetForBrowserContext( 444 DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
413 web_contents()->GetBrowserContext()); 445 web_contents()->GetBrowserContext());
414 446
415 EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service() 447 EXPECT_EQ(1u, data_reduction_proxy_settings->data_reduction_proxy_service()
416 ->pingback_client() 448 ->pingback_client()
417 ->OptOutsSizeForTesting()); 449 ->OptOutsSizeForTesting());
450 EXPECT_TRUE(opt_out_called_);
418 } 451 }
419 452
420 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestShownOncePerNavigation) { 453 TEST_F(PreviewsInfoBarDelegateUnitTest, InfobarTestShownOncePerNavigation) {
421 ConfirmInfoBarDelegate* infobar = 454 ConfirmInfoBarDelegate* infobar =
422 CreateInfoBar(previews::PreviewsType::LOFI, base::Time(), 455 CreateInfoBar(previews::PreviewsType::LOFI, base::Time(),
423 true /* is_data_saver_user */, false /* is_reload */); 456 true /* is_data_saver_user */, false /* is_reload */);
424 457
425 // Simulate dismissing the infobar. 458 // Simulate dismissing the infobar.
426 infobar->InfoBarDismissed(); 459 infobar->InfoBarDismissed();
427 infobar_service()->infobar_at(0)->RemoveSelf(); 460 infobar_service()->infobar_at(0)->RemoveSelf();
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 TestPreviewsWebContentsObserver::FromWebContents(web_contents()) 593 TestPreviewsWebContentsObserver::FromWebContents(web_contents())
561 ->last_navigation_reload_type()); 594 ->last_navigation_reload_type());
562 595
563 auto* data_reduction_proxy_settings = 596 auto* data_reduction_proxy_settings =
564 DataReductionProxyChromeSettingsFactory::GetForBrowserContext( 597 DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
565 web_contents()->GetBrowserContext()); 598 web_contents()->GetBrowserContext());
566 599
567 EXPECT_EQ(0u, data_reduction_proxy_settings->data_reduction_proxy_service() 600 EXPECT_EQ(0u, data_reduction_proxy_settings->data_reduction_proxy_service()
568 ->pingback_client() 601 ->pingback_client()
569 ->OptOutsSizeForTesting()); 602 ->OptOutsSizeForTesting());
603
604 EXPECT_TRUE(opt_out_called_);
570 } 605 }
571 606
572 TEST_F(PreviewsInfoBarDelegateUnitTest, PingbackClientClearedTabClosed) { 607 TEST_F(PreviewsInfoBarDelegateUnitTest, PingbackClientClearedTabClosed) {
573 NavigateAndCommit(GURL(kTestUrl)); 608 NavigateAndCommit(GURL(kTestUrl));
574 609
575 ConfirmInfoBarDelegate* infobar = 610 ConfirmInfoBarDelegate* infobar =
576 CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(), 611 CreateInfoBar(previews::PreviewsType::LITE_PAGE, base::Time(),
577 true /* is_data_saver_user */, false /* is_reload */); 612 true /* is_data_saver_user */, false /* is_reload */);
578 613
579 // Simulate clicking the infobar link. 614 // Simulate clicking the infobar link.
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 l10n_util::GetStringFUTF16(IDS_PREVIEWS_INFOBAR_TIMESTAMP_MINUTES, 735 l10n_util::GetStringFUTF16(IDS_PREVIEWS_INFOBAR_TIMESTAMP_MINUTES,
701 base::IntToString16(staleness_in_minutes)), 736 base::IntToString16(staleness_in_minutes)),
702 PreviewsInfoBarDelegate::TIMESTAMP_SHOWN); 737 PreviewsInfoBarDelegate::TIMESTAMP_SHOWN);
703 738
704 staleness_in_minutes = 1; 739 staleness_in_minutes = 1;
705 TestStalePreviews( 740 TestStalePreviews(
706 staleness_in_minutes, true /* is_reload */, 741 staleness_in_minutes, true /* is_reload */,
707 l10n_util::GetStringUTF16(IDS_PREVIEWS_INFOBAR_TIMESTAMP_UPDATED_NOW), 742 l10n_util::GetStringUTF16(IDS_PREVIEWS_INFOBAR_TIMESTAMP_UPDATED_NOW),
708 PreviewsInfoBarDelegate::TIMESTAMP_UPDATED_NOW_SHOWN); 743 PreviewsInfoBarDelegate::TIMESTAMP_UPDATED_NOW_SHOWN);
709 } 744 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698