rlz_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/rlz/rlz.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google/google_util.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/omnibox/omnibox_log.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/browser_distribution.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_update_constants.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "rlz/test/rlz_test_helpers.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/registry.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AssertionResult; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AssertionSuccess; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::AssertionFailure; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::win::RegKey; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dummy RLZ string for the access points. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kOmniboxRlzString[] = "test_omnibox"; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kHomepageRlzString[] = "test_homepage"; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kNewOmniboxRlzString[] = "new_omnibox"; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kNewHomepageRlzString[] = "new_homepage"; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Some helper macros to test it a string contains/does not contain a substring. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AssertionResult CmpHelperSTRC(const char* str_expression, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* substr_expression, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* str, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* substr) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (NULL != strstr(str, substr)) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return AssertionSuccess(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return AssertionFailure() << "Expected: (" << substr_expression << ") in (" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << str_expression << "), actual: '" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << substr << "' not in '" << str << "'"; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AssertionResult CmpHelperSTRNC(const char* str_expression, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* substr_expression, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* str, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* substr) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (NULL == strstr(str, substr)) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return AssertionSuccess(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return AssertionFailure() << "Expected: (" << substr_expression 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ") not in (" << str_expression << "), actual: '" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << substr << "' in '" << str << "'"; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_STR_CONTAINS(str, substr) \ 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(CmpHelperSTRC, str, substr) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_STR_NOT_CONTAIN(str, substr) \ 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(CmpHelperSTRNC, str, substr) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Test class for RLZ tracker. Makes some member functions public and 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// overrides others to make it easier to test. 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TestRLZTracker : public RLZTracker { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) using RLZTracker::InitRlzDelayed; 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) using RLZTracker::DelayedInit; 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) using RLZTracker::Observe; 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker() : assume_not_ui_thread_(true) { 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) set_tracker(this); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TestRLZTracker() { 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) set_tracker(NULL); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool was_ping_sent_for_brand(const std::string& brand) const { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pinged_brands_.count(brand) > 0; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void set_assume_not_ui_thread(bool assume_not_ui_thread) { 1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) assume_not_ui_thread_ = assume_not_ui_thread; 1011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ScheduleDelayedInit(base::TimeDelta delay) OVERRIDE { 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If the delay is 0, invoke the delayed init now. Otherwise, 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // don't schedule anything, it will be manually called during tests. 1071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (delay == base::TimeDelta()) 1081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DelayedInit(); 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ScheduleFinancialPing() OVERRIDE { 1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PingNowImpl(); 1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual bool ScheduleRecordProductEvent(rlz_lib::Product product, 1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) rlz_lib::AccessPoint point, 1171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) rlz_lib::Event event_id) OVERRIDE { 1181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return !assume_not_ui_thread_; 1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual bool ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) OVERRIDE { 1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return !assume_not_ui_thread_; 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual bool ScheduleRecordFirstSearch(rlz_lib::AccessPoint point) OVERRIDE { 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return !assume_not_ui_thread_; 1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_CHROMEOS) 1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual bool ScheduleClearRlzState() OVERRIDE { 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return !assume_not_ui_thread_; 1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SendFinancialPing(const std::string& brand, 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& lang, 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& referral) OVERRIDE { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't ping the server during tests, just pretend as if we did. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(brand.empty()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pinged_brands_.insert(brand); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set new access points RLZ string, like the actual server ping would have 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // done. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kNewOmniboxRlzString); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_HOME_PAGE, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kNewHomepageRlzString); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> pinged_brands_; 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool assume_not_ui_thread_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestRLZTracker); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class RlzLibTest : public RlzLibTestNoMachineState { 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetMainBrand(const char* brand); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetReactivationBrand(const char* brand); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetRegistryBrandValue(const wchar_t* name, const char* brand); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SimulateOmniboxUsage(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SimulateHomepageUsage(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InvokeDelayedInit(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectEventRecorded(const char* event_name, bool expected); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectRlzPingSent(bool expected); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectReactivationRlzPingSent(bool expected); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker tracker_; 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_POSIX) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<google_util::BrandForTesting> brand_override_; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::SetUp() { 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RlzLibTestNoMachineState::SetUp(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure a non-organic brand code is set in the registry or the RLZTracker 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is pretty much a no-op. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetMainBrand("TEST"); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetReactivationBrand(""); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::SetMainBrand(const char* brand) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRegistryBrandValue(google_update::kRegRLZBrandField, brand); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_POSIX) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) brand_override_.reset(new google_util::BrandForTesting(brand)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string check_brand; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) google_util::GetBrand(&check_brand); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brand, check_brand); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::SetReactivationBrand(const char* brand) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(thakis): Reactivation doesn't exist on Mac yet. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRegistryBrandValue(google_update::kRegRLZReactivationBrandField, brand); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string check_brand; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) google_util::GetReactivationBrand(&check_brand); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brand, check_brand); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::SetRegistryBrandValue(const wchar_t* name, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* brand) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 reg_path = dist->GetStateKey(); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key(HKEY_CURRENT_USER, reg_path.c_str(), KEY_SET_VALUE); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (*brand == 0) { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LONG result = key.DeleteValue(name); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ERROR_SUCCESS == result || ERROR_FILE_NOT_FOUND == result); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 brand16 = base::ASCIIToUTF16(brand); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(name, brand16.c_str())); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::SimulateOmniboxUsage() { 2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.Observe(chrome::NOTIFICATION_OMNIBOX_OPENED_URL, 2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::NotificationService::AllSources(), 2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::Details<OmniboxLog>(NULL)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::SimulateHomepageUsage() { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<NavigationEntry> entry(NavigationEntry::Create()); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->SetPageID(0); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->SetTransitionType(content::PAGE_TRANSITION_HOME_PAGE); 2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::NotificationService::AllSources(), 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::Details<NavigationEntry>(entry.get())); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::InvokeDelayedInit() { 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.DelayedInit(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::ExpectEventRecorded(const char* event_name, bool expected) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi[rlz_lib::kMaxCgiLength]; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProductEventsAsCgi(rlz_lib::CHROME, cgi, arraysize(cgi)); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STR_CONTAINS(cgi, event_name); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STR_NOT_CONTAIN(cgi, event_name); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::ExpectRlzPingSent(bool expected) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string brand; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) google_util::GetBrand(&brand); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected, tracker_.was_ping_sent_for_brand(brand.c_str())); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RlzLibTest::ExpectReactivationRlzPingSent(bool expected) { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string brand; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) google_util::GetReactivationBrand(&brand); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected, tracker_.was_ping_sent_for_brand(brand.c_str())); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The events that affect the different RLZ scenarios are the following: 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A: the user starts chrome for the first time 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// B: the user stops chrome 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C: the user start a subsequent time 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// D: the user stops chrome again 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// I: the RLZTracker::DelayedInit() method is invoked 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// X: the user performs a search using the omnibox 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Y: the user performs a search using the home page 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The events A to D happen in chronological order, but the other events 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// may happen at any point between A-B or C-D, in no particular order. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The visible results of the scenarios on Win are: 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C1I event is recorded 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C2I event is recorded 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C1F event is recorded 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C2F event is recorded 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C1S event is recorded 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// C2S event is recorded 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RLZ ping sent 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Mac, C5 / C6 are sent instead of C1 / C2. 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// On ChromeOS, CA / CB are sent, respectively. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Variations on the above scenarios: 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - if the delay specified to InitRlzDelayed() is negative, then the RLZ 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ping should be sent out at the time of event X and not wait for I 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Also want to test that pre-warming the RLZ string cache works correctly. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxInstall[] = "C1I"; 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxSetToGoogle[] = "C1S"; 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxFirstSearch[] = "C1F"; 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageInstall[] = "C2I"; 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageSetToGoogle[] = "C2S"; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageFirstSeach[] = "C2F"; 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_MACOSX) 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxInstall[] = "C5I"; 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxSetToGoogle[] = "C5S"; 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxFirstSearch[] = "C5F"; 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageInstall[] = "C6I"; 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageSetToGoogle[] = "C6S"; 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageFirstSeach[] = "C6F"; 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_CHROMEOS) 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxInstall[] = "CAI"; 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxSetToGoogle[] = "CAS"; 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kOmniboxFirstSearch[] = "CAF"; 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageInstall[] = "CBI"; 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageSetToGoogle[] = "CBS"; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kHomepageFirstSeach[] = "CBF"; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::TimeDelta kDelay = base::TimeDelta::FromMilliseconds(20); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, RecordProductEvent) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RLZTracker::RecordProductEvent(rlz_lib::CHROME, RLZTracker::CHROME_OMNIBOX, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::FIRST_SEARCH); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, true); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, QuickStopAfterStart) { 3371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, true); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, false); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, false); 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, false); 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, false); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(false); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, DelayedInitOnly) { 3531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, true); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, true); 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, false); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, DelayedInitOnlyGoogleAsStartup) { 3701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, false, false, true); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, true); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, DelayedInitOnlyNoFirstRunNoRlzStrings) { 3871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(false, false, kDelay, true, true, false); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, true); 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, true); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, false); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, DelayedInitOnlyNoFirstRunNoRlzStringsGoogleAsStartup) { 4041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(false, false, kDelay, false, false, true); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, true); 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, DelayedInitOnlyNoFirstRun) { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set some dummy RLZ strings to simulate that we already ran before and 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // performed a successful ping to the RLZ server. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, kOmniboxRlzString); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_HOME_PAGE, kHomepageRlzString); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(false, false, kDelay, true, true, true); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, false); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, DelayedInitOnlyNoGoogleDefaultSearchOrHomepageOrStartup) { 4431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, false, false, false); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, false); 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, false); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, OmniboxUsageOnly) { 4601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateOmniboxUsage(); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, false); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, true); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, false); 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, false); 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, false); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(false); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, HomepageUsageOnly) { 4771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateHomepageUsage(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, false); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, false); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, false); 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(false); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, UsageBeforeDelayedInit) { 4941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateOmniboxUsage(); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateHomepageUsage(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, true); 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, true); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, true); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, OmniboxUsageAfterDelayedInit) { 5131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateOmniboxUsage(); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateHomepageUsage(); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, true); 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, true); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, true); 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(RlzLibTest, OmniboxUsageSendsPingWhenSendPingImmediately) { 5321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, true, kDelay, true, true, false); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateOmniboxUsage(); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, true); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, true); 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, true); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, true); 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, true); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, false); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(RlzLibTest, HomepageUsageDoesNotSendPingWhenSendPingImmediately) { 5491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, true, kDelay, true, true, false); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateHomepageUsage(); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, false); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, false); 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, false); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(false); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(RlzLibTest, StartupUsageDoesNotSendPingWhenSendPingImmediately) { 5661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, true, kDelay, true, false, true); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SimulateHomepageUsage(); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Omnibox events. 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxInstall, false); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxSetToGoogle, false); 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Home page events. 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageInstall, false); 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageSetToGoogle, false); 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kHomepageFirstSeach, true); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(false); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RlzLibTest, GetAccessPointRlzOnIoThread) { 5831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set dummy RLZ string. 5841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, kOmniboxRlzString); 5851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 rlz; 5871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(true); 5891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kOmniboxRlzString, base::UTF16ToUTF8(rlz).c_str()); 5911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(RlzLibTest, GetAccessPointRlzNotOnIoThread) { 5941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set dummy RLZ string. 5951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, kOmniboxRlzString); 5961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 597a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 rlz; 5981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(false); 6001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 6011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 6021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, GetAccessPointRlzIsCached) { 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set dummy RLZ string. 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, kOmniboxRlzString); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 607a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 rlz; 6081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(false); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 6111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(true); 6131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kOmniboxRlzString, base::UTF16ToUTF8(rlz).c_str()); 6151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(false); 6171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kOmniboxRlzString, base::UTF16ToUTF8(rlz).c_str()); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, PingUpdatesRlzCache) { 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set dummy RLZ string. 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, kOmniboxRlzString); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetAccessPointRlz(RLZTracker::CHROME_HOME_PAGE, kHomepageRlzString); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 626a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 rlz; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prime the cache. 6291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(true); 6304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kOmniboxRlzString, base::UTF16ToUTF8(rlz).c_str()); 6331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz( 6341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RLZTracker::CHROME_HOME_PAGE, &rlz)); 6355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kHomepageRlzString, base::UTF16ToUTF8(rlz).c_str()); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure cache is valid. 6381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(false); 6391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 6415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kOmniboxRlzString, base::UTF16ToUTF8(rlz).c_str()); 6421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz( 6431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RLZTracker::CHROME_HOME_PAGE, &rlz)); 6445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kHomepageRlzString, base::UTF16ToUTF8(rlz).c_str()); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Perform ping. 6471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(true); 6481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure cache is now updated. 6531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.set_assume_not_ui_thread(false); 6541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &rlz)); 6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kNewOmniboxRlzString, base::UTF16ToUTF8(rlz).c_str()); 6571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(RLZTracker::GetAccessPointRlz( 6581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RLZTracker::CHROME_HOME_PAGE, &rlz)); 6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_STREQ(kNewHomepageRlzString, base::UTF16ToUTF8(rlz).c_str()); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ObserveHandlesBadArgs) { 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<NavigationEntry> entry(NavigationEntry::Create()); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->SetPageID(0); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->SetTransitionType(content::PAGE_TRANSITION_LINK); 6661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, 6671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::NotificationService::AllSources(), 6681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::Details<NavigationEntry>(NULL)); 6691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, 6701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::NotificationService::AllSources(), 6711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::Details<NavigationEntry>(entry.get())); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(thakis): Reactivation doesn't exist on Mac yet. 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ReactivationNonOrganicNonOrganic) { 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetReactivationBrand("REAC"); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectReactivationRlzPingSent(true); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ReactivationOrganicNonOrganic) { 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetMainBrand("GGLS"); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetReactivationBrand("REAC"); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(false); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectReactivationRlzPingSent(true); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ReactivationNonOrganicOrganic) { 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetMainBrand("TEST"); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetReactivationBrand("GGLS"); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(true); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectReactivationRlzPingSent(false); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ReactivationOrganicOrganic) { 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetMainBrand("GGLS"); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetReactivationBrand("GGRS"); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestRLZTracker::InitRlzDelayed(true, false, kDelay, true, true, false); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeDelayedInit(); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRlzPingSent(false); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectReactivationRlzPingSent(false); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(RlzLibTest, ClearRlzState) { 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RLZTracker::RecordProductEvent(rlz_lib::CHROME, RLZTracker::CHROME_OMNIBOX, 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rlz_lib::FIRST_SEARCH); 7241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, true); 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RLZTracker::ClearRlzState(); 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectEventRecorded(kOmniboxFirstSearch, false); 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_CHROMEOS) 732