diff options
author | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-24 13:19:27 +0000 |
---|---|---|
committer | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-24 13:19:27 +0000 |
commit | a9a064bff8415c30fb4f25ceac2cd6d61e44da54 (patch) | |
tree | d8517e4a9d250098bc010dde2484d06c974d2893 | |
parent | 00566949c27fbf8df8085c9826404f6446b3cb80 (diff) | |
download | chromium_src-a9a064bff8415c30fb4f25ceac2cd6d61e44da54.zip chromium_src-a9a064bff8415c30fb4f25ceac2cd6d61e44da54.tar.gz chromium_src-a9a064bff8415c30fb4f25ceac2cd6d61e44da54.tar.bz2 |
[cros] Clear RLZ data when switching RLZ enabled/disabled state.
BUG=167425
Review URL: https://chromiumcodereview.appspot.com/11649038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174575 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/login/login_utils.cc | 6 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/wizard_controller.cc | 1 | ||||
-rw-r--r-- | chrome/browser/rlz/rlz.cc | 34 | ||||
-rw-r--r-- | chrome/browser/rlz/rlz.h | 15 | ||||
-rw-r--r-- | chrome/browser/rlz/rlz_unittest.cc | 17 | ||||
-rw-r--r-- | chrome/common/pref_names.cc | 2 | ||||
-rw-r--r-- | chrome/common/pref_names.h | 1 |
7 files changed, 72 insertions, 4 deletions
diff --git a/chrome/browser/chromeos/login/login_utils.cc b/chrome/browser/chromeos/login/login_utils.cc index 0ba1056..483528f 100644 --- a/chrome/browser/chromeos/login/login_utils.cc +++ b/chrome/browser/chromeos/login/login_utils.cc @@ -655,10 +655,16 @@ void LoginUtilsImpl::InitRlzDelayed(Profile* user_profile) { void LoginUtilsImpl::InitRlz(Profile* user_profile, bool disabled) { #if defined(ENABLE_RLZ) + PrefService* local_state = g_browser_process->local_state(); if (disabled) { // Empty brand code turns financial pings off. google_util::chromeos::ClearBrandForCurrentSession(); } + if (disabled != local_state->GetBoolean(prefs::kRLZDisabled)) { + // When switching to RLZ enabled/disabled state, clear all recorded events. + RLZTracker::ClearRlzState(); + local_state->SetBoolean(prefs::kRLZDisabled, disabled); + } // Init the RLZ library. int ping_delay = user_profile->GetPrefs()->GetInteger( first_run::GetPingDelayPrefName().c_str()); diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc index 2f494c3..a14b262 100644 --- a/chrome/browser/chromeos/login/wizard_controller.cc +++ b/chrome/browser/chromeos/login/wizard_controller.cc @@ -405,6 +405,7 @@ void WizardController::RegisterPrefs(PrefServiceSimple* local_state) { local_state->RegisterBooleanPref(prefs::kOwnerTapToClickEnabled, true); local_state->RegisterBooleanPref(prefs::kFactoryResetRequested, false); local_state->RegisterStringPref(prefs::kRLZBrand, std::string()); + local_state->RegisterBooleanPref(prefs::kRLZDisabled, false); } /////////////////////////////////////////////////////////////////////////////// diff --git a/chrome/browser/rlz/rlz.cc b/chrome/browser/rlz/rlz.cc index 31a8316..4ed0f05 100644 --- a/chrome/browser/rlz/rlz.cc +++ b/chrome/browser/rlz/rlz.cc @@ -331,10 +331,6 @@ void RLZTracker::DelayedInit() { ScheduleFinancialPing(); } -void RLZTracker::EnableZeroDelayForTesting() { - GetInstance()->min_delay_ = 0; -} - void RLZTracker::ScheduleFinancialPing() { BrowserThread::GetBlockingPool()->PostSequencedWorkerTask( worker_pool_token_, @@ -544,8 +540,38 @@ bool RLZTracker::ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) { return true; } +#if defined(OS_CHROMEOS) +// static +void RLZTracker::ClearRlzState() { + GetInstance()->ClearRlzStateImpl(); +} + +void RLZTracker::ClearRlzStateImpl() { + if (ScheduleClearRlzState()) + return; + rlz_lib::ClearAllProductEvents(rlz_lib::CHROME); +} + +bool RLZTracker::ScheduleClearRlzState() { + if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) + return false; + + BrowserThread::GetBlockingPool()->PostSequencedWorkerTask( + worker_pool_token_, + FROM_HERE, + base::Bind(&RLZTracker::ClearRlzStateImpl, + base::Unretained(this))); + return true; +} +#endif + // static void RLZTracker::CleanupRlz() { GetInstance()->rlz_cache_.clear(); GetInstance()->registrar_.RemoveAll(); } + +// static +void RLZTracker::EnableZeroDelayForTesting() { + GetInstance()->min_delay_ = 0; +} diff --git a/chrome/browser/rlz/rlz.h b/chrome/browser/rlz/rlz.h index 3c1733e..6d719c3 100644 --- a/chrome/browser/rlz/rlz.h +++ b/chrome/browser/rlz/rlz.h @@ -72,6 +72,12 @@ class RLZTracker : public content::NotificationObserver { // Invoked during shutdown to clean up any state created by RLZTracker. static void CleanupRlz(); +#if defined(OS_CHROMEOS) + // Clears all product state. Should be called when turning RLZ off. On other + // platforms, this is done by product uninstaller. + static void ClearRlzState(); +#endif + // This method is public for use by the Singleton class. static RLZTracker* GetInstance(); @@ -163,6 +169,15 @@ class RLZTracker : public content::NotificationObserver { const string16& lang, const string16& referral); +#if defined(OS_CHROMEOS) + // Implementation called from ClearRlzState static method. + void ClearRlzStateImpl(); + + // Schedules a call to ClearRlzStateImpl(). This method is virtual + // to allow tests to override how the scheduling is done. + virtual bool ScheduleClearRlzState(); +#endif + // Tracker used for testing purposes only. If this value is non-NULL, it // will be returned from GetInstance() instead of the regular singleton. static RLZTracker* tracker_; diff --git a/chrome/browser/rlz/rlz_unittest.cc b/chrome/browser/rlz/rlz_unittest.cc index 8693091..f844a8c 100644 --- a/chrome/browser/rlz/rlz_unittest.cc +++ b/chrome/browser/rlz/rlz_unittest.cc @@ -142,6 +142,10 @@ class TestRLZTracker : public RLZTracker { return !assume_not_ui_thread_; } + virtual bool ScheduleClearRlzState() OVERRIDE { + return !assume_not_ui_thread_; + } + virtual bool SendFinancialPing(const std::string& brand, const string16& lang, const string16& referral) OVERRIDE { @@ -772,3 +776,16 @@ TEST_F(RlzLibTest, ReactivationOrganicOrganic) { ExpectReactivationRlzPingSent(false); } #endif // defined(OS_WIN) + +#if defined(OS_CHROMEOS) +TEST_F(RlzLibTest, ClearRlzState) { + RLZTracker::RecordProductEvent(rlz_lib::CHROME, RLZTracker::CHROME_OMNIBOX, + rlz_lib::FIRST_SEARCH); + + ExpectEventRecorded(kOmniboxFirstSearch, true); + + RLZTracker::ClearRlzState(); + + ExpectEventRecorded(kOmniboxFirstSearch, false); +} +#endif // defined(OS_CHROMEOS) diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 1a7397e..1e3d7f8 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc @@ -2210,6 +2210,8 @@ const char kLastPolicyStatisticsUpdate[] = "policy.last_statistics_update"; #if defined(OS_CHROMEOS) // The RLZ brand code, if enabled. const char kRLZBrand[] = "rlz.brand"; +// Whether RLZ pings are disabled. +const char kRLZDisabled[] = "rlz.disabled"; #endif } // namespace prefs diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index af53c6b..d5f77ee 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h @@ -813,6 +813,7 @@ extern const char kLastPolicyStatisticsUpdate[]; #if defined(OS_CHROMEOS) extern const char kRLZBrand[]; +extern const char kRLZDisabled[]; #endif } // namespace prefs |