OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/rlz/rlz.h" | 5 #include "chrome/browser/rlz/rlz.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/test/test_reg_util_win.h" | 10 #include "base/test/test_reg_util_win.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 | 30 |
31 namespace { | 31 namespace { |
32 | 32 |
33 // Registry path to overridden hive. | 33 // Registry path to overridden hive. |
34 const wchar_t kRlzTempHkcu[] = L"rlz_hkcu"; | 34 const wchar_t kRlzTempHkcu[] = L"rlz_hkcu"; |
35 const wchar_t kRlzTempHklm[] = L"rlz_hklm"; | 35 const wchar_t kRlzTempHklm[] = L"rlz_hklm"; |
36 | 36 |
37 // Dummy RLZ string for the access points. | 37 // Dummy RLZ string for the access points. |
38 const char kOmniboxRlzString[] = "test_omnibox"; | 38 const char kOmniboxRlzString[] = "test_omnibox"; |
39 const char kHomepageRlzString[] = "test_homepage"; | 39 const char kHomepageRlzString[] = "test_homepage"; |
| 40 const char kNewOmniboxRlzString[] = "new_omnibox"; |
| 41 const char kNewHomepageRlzString[] = "new_homepage"; |
40 | 42 |
41 // Some helper macros to test it a string contains/does not contain a substring. | 43 // Some helper macros to test it a string contains/does not contain a substring. |
42 | 44 |
43 AssertionResult CmpHelperSTRC(const char* str_expression, | 45 AssertionResult CmpHelperSTRC(const char* str_expression, |
44 const char* substr_expression, | 46 const char* substr_expression, |
45 const char* str, | 47 const char* str, |
46 const char* substr) { | 48 const char* substr) { |
47 if (NULL != strstr(str, substr)) { | 49 if (NULL != strstr(str, substr)) { |
48 return AssertionSuccess(); | 50 return AssertionSuccess(); |
49 } | 51 } |
(...skipping 24 matching lines...) Expand all Loading... |
74 | 76 |
75 } // namespace | 77 } // namespace |
76 | 78 |
77 // Test class for RLZ tracker. Makes some member functions public and | 79 // Test class for RLZ tracker. Makes some member functions public and |
78 // overrides others to make it easier to test. | 80 // overrides others to make it easier to test. |
79 class TestRLZTracker : public RLZTracker { | 81 class TestRLZTracker : public RLZTracker { |
80 public: | 82 public: |
81 using RLZTracker::DelayedInit; | 83 using RLZTracker::DelayedInit; |
82 using RLZTracker::Observe; | 84 using RLZTracker::Observe; |
83 | 85 |
84 TestRLZTracker() : pingnow_called_(false), assume_io_thread_(false) { | 86 TestRLZTracker() : pingnow_called_(false), assume_not_ui_thread_(false) { |
85 set_tracker(this); | 87 set_tracker(this); |
86 } | 88 } |
87 | 89 |
88 virtual ~TestRLZTracker() { | 90 virtual ~TestRLZTracker() { |
89 set_tracker(NULL); | 91 set_tracker(NULL); |
90 } | 92 } |
91 | 93 |
92 bool pingnow_called() const { | 94 bool pingnow_called() const { |
93 return pingnow_called_; | 95 return pingnow_called_; |
94 } | 96 } |
95 | 97 |
96 bool assume_io_thread() const { | 98 void set_assume_not_ui_thread(bool assume_not_ui_thread) { |
97 return assume_io_thread_; | 99 assume_not_ui_thread_ = assume_not_ui_thread; |
98 } | |
99 | |
100 void set_assume_io_thread(bool assume_io_thread) { | |
101 assume_io_thread_ = assume_io_thread; | |
102 } | 100 } |
103 | 101 |
104 private: | 102 private: |
105 virtual void ScheduleDelayedInit(int delay) OVERRIDE { | 103 virtual void ScheduleDelayedInit(int delay) OVERRIDE { |
106 // If the delay is 0, invoke the delayed init now. Otherwise, | 104 // If the delay is 0, invoke the delayed init now. Otherwise, |
107 // don't schedule anything, it will be manually called during tests. | 105 // don't schedule anything, it will be manually called during tests. |
108 if (delay == 0) | 106 if (delay == 0) |
109 DelayedInit(); | 107 DelayedInit(); |
110 } | 108 } |
111 | 109 |
112 virtual void ScheduleFinancialPing() OVERRIDE { | 110 virtual void ScheduleFinancialPing() OVERRIDE { |
113 PingNow(this); | 111 PingNow(this); |
114 } | 112 } |
115 | 113 |
116 virtual bool ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) OVERRIDE { | 114 virtual bool ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) OVERRIDE { |
117 return !assume_io_thread_; | 115 return !assume_not_ui_thread_; |
118 } | 116 } |
119 | 117 |
120 virtual bool SendFinancialPing(const std::wstring& brand, | 118 virtual bool SendFinancialPing(const std::wstring& brand, |
121 const std::wstring& lang, | 119 const std::wstring& lang, |
122 const std::wstring& referral, | 120 const std::wstring& referral, |
123 bool exclude_id) OVERRIDE { | 121 bool exclude_id) OVERRIDE { |
124 // Don't ping the server during tests. | 122 // Don't ping the server during tests. |
125 pingnow_called_ = true; | 123 pingnow_called_ = true; |
| 124 |
| 125 // Set new access points RLZ string, like the actual server ping would have |
| 126 // done. |
| 127 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kNewOmniboxRlzString); |
| 128 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, |
| 129 kNewHomepageRlzString); |
126 return true; | 130 return true; |
127 } | 131 } |
128 | 132 |
129 bool pingnow_called_; | 133 bool pingnow_called_; |
130 bool assume_io_thread_; | 134 bool assume_not_ui_thread_; |
131 | 135 |
132 DISALLOW_COPY_AND_ASSIGN(TestRLZTracker); | 136 DISALLOW_COPY_AND_ASSIGN(TestRLZTracker); |
133 }; | 137 }; |
134 | 138 |
135 class RlzLibTest : public testing::Test { | 139 class RlzLibTest : public testing::Test { |
136 virtual void SetUp() OVERRIDE; | 140 virtual void SetUp() OVERRIDE; |
137 virtual void TearDown() OVERRIDE; | 141 virtual void TearDown() OVERRIDE; |
138 | 142 |
139 protected: | 143 protected: |
140 void SimulateOmniboxUsage(); | 144 void SimulateOmniboxUsage(); |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 | 462 |
459 ExpectRlzPingSent(false); | 463 ExpectRlzPingSent(false); |
460 } | 464 } |
461 | 465 |
462 TEST_F(RlzLibTest, GetAccessPointRlzOnIoThread) { | 466 TEST_F(RlzLibTest, GetAccessPointRlzOnIoThread) { |
463 // Set dummy RLZ string. | 467 // Set dummy RLZ string. |
464 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); | 468 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); |
465 | 469 |
466 std::wstring rlz; | 470 std::wstring rlz; |
467 | 471 |
468 tracker_.set_assume_io_thread(true); | 472 tracker_.set_assume_not_ui_thread(true); |
469 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 473 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
470 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); | 474 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); |
471 } | 475 } |
472 | 476 |
473 TEST_F(RlzLibTest, GetAccessPointRlzNotOnIoThread) { | 477 TEST_F(RlzLibTest, GetAccessPointRlzNotOnIoThread) { |
474 // Set dummy RLZ string. | 478 // Set dummy RLZ string. |
475 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); | 479 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); |
476 | 480 |
477 std::wstring rlz; | 481 std::wstring rlz; |
478 | 482 |
479 tracker_.set_assume_io_thread(false); | 483 tracker_.set_assume_not_ui_thread(false); |
480 EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 484 EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
481 } | 485 } |
482 | 486 |
483 TEST_F(RlzLibTest, GetAccessPointRlzIsCached) { | 487 TEST_F(RlzLibTest, GetAccessPointRlzIsCached) { |
484 // Set dummy RLZ string. | 488 // Set dummy RLZ string. |
485 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); | 489 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); |
486 | 490 |
487 std::wstring rlz; | 491 std::wstring rlz; |
488 | 492 |
489 tracker_.set_assume_io_thread(false); | 493 tracker_.set_assume_not_ui_thread(false); |
490 EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 494 EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
491 | 495 |
492 tracker_.set_assume_io_thread(true); | 496 tracker_.set_assume_not_ui_thread(true); |
493 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 497 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
494 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); | 498 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); |
495 | 499 |
496 tracker_.set_assume_io_thread(false); | 500 tracker_.set_assume_not_ui_thread(false); |
497 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 501 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
498 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); | 502 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); |
499 } | 503 } |
500 | 504 |
501 TEST_F(RlzLibTest, PingInvalidatesRlzCache) { | 505 TEST_F(RlzLibTest, PingUpdatesRlzCache) { |
502 // Set dummy RLZ string. | 506 // Set dummy RLZ string. |
503 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); | 507 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); |
| 508 rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, kHomepageRlzString); |
504 | 509 |
505 std::wstring rlz; | 510 std::wstring rlz; |
506 | 511 |
507 // Prime the cache. | 512 // Prime the cache. |
508 tracker_.set_assume_io_thread(true); | 513 tracker_.set_assume_not_ui_thread(true); |
| 514 |
509 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 515 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
510 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); | 516 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); |
| 517 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz)); |
| 518 EXPECT_STREQ(kHomepageRlzString, WideToUTF8(rlz).c_str()); |
511 | 519 |
512 // Make sure cache is valid. | 520 // Make sure cache is valid. |
513 tracker_.set_assume_io_thread(false); | 521 tracker_.set_assume_not_ui_thread(false); |
| 522 |
514 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 523 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
515 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); | 524 EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); |
| 525 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz)); |
| 526 EXPECT_STREQ(kHomepageRlzString, WideToUTF8(rlz).c_str()); |
516 | 527 |
517 // Perform ping. | 528 // Perform ping. |
| 529 tracker_.set_assume_not_ui_thread(true); |
518 RLZTracker::InitRlzDelayed(true, 20, true, true); | 530 RLZTracker::InitRlzDelayed(true, 20, true, true); |
519 InvokeDelayedInit(); | 531 InvokeDelayedInit(); |
520 ExpectRlzPingSent(true); | 532 ExpectRlzPingSent(true); |
521 | 533 |
522 // Make sure cache is now invalid. | 534 // Make sure cache is now updated. |
523 EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); | 535 tracker_.set_assume_not_ui_thread(false); |
| 536 |
| 537 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); |
| 538 EXPECT_STREQ(kNewOmniboxRlzString, WideToUTF8(rlz).c_str()); |
| 539 EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz)); |
| 540 EXPECT_STREQ(kNewHomepageRlzString, WideToUTF8(rlz).c_str()); |
524 } | 541 } |
525 | 542 |
526 TEST_F(RlzLibTest, ObserveHandlesBadArgs) { | 543 TEST_F(RlzLibTest, ObserveHandlesBadArgs) { |
527 NavigationEntry entry(NULL, 0, GURL(), GURL(), string16(), | 544 NavigationEntry entry(NULL, 0, GURL(), GURL(), string16(), |
528 PageTransition::LINK); | 545 PageTransition::LINK); |
529 tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, | 546 tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, |
530 NotificationService::AllSources(), | 547 NotificationService::AllSources(), |
531 Details<NavigationEntry>(NULL)); | 548 Details<NavigationEntry>(NULL)); |
532 tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, | 549 tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, |
533 NotificationService::AllSources(), | 550 NotificationService::AllSources(), |
534 Details<NavigationEntry>(&entry)); | 551 Details<NavigationEntry>(&entry)); |
535 } | 552 } |
OLD | NEW |