| 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 |