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