Index: chrome/browser/extensions/external_component_loader.cc |
diff --git a/chrome/browser/extensions/external_component_loader.cc b/chrome/browser/extensions/external_component_loader.cc |
index 98e332171c3cb186b27b1fbd53ad093872b6d248..f5b775c6e91b7a982fcc7b70827ec1ac3d03fdea 100644 |
--- a/chrome/browser/extensions/external_component_loader.cc |
+++ b/chrome/browser/extensions/external_component_loader.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/extensions/external_component_loader.h" |
#include "base/command_line.h" |
+#include "base/metrics/histogram.h" |
#include "base/prefs/pref_change_registrar.h" |
#include "base/prefs/pref_service.h" |
#include "base/values.h" |
@@ -12,13 +13,33 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/extensions/external_provider_impl.h" |
#include "chrome/browser/search/hotword_service_factory.h" |
+#include "chrome/browser/signin/signin_manager_factory.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/extensions/extension_constants.h" |
#include "chrome/common/pref_names.h" |
+#include "components/signin/core/browser/signin_manager.h" |
#include "components/sync_driver/pref_names.h" |
#include "components/user_prefs/pref_registry_syncable.h" |
#include "content/public/browser/browser_thread.h" |
+namespace { |
+ |
+enum FinchBookmarksExperimentState { |
+ kFinchBookmarksExperimentEnabled, |
+ kFinchBookmarksExperimentEnabledUserSignedIn, |
+ kFinchBookmarksExperimentEnabledUserOptOut, |
+ kFinchBookmarksExperimentEnumSize |
not at google - send to devlin
2014/05/05 20:19:11
what is the difference between this and the simila
yefimt
2014/05/05 20:54:24
This one is used for UMA_HISTOGRAM_ENUMERATION onl
not at google - send to devlin
2014/05/05 21:25:19
Having it separately has the disadvantage of a rep
|
+}; |
+ |
+bool IsUserSignedin(Profile* profile) { |
+ SigninManager* signin = SigninManagerFactory::GetForProfile(profile); |
+ if (!signin) |
+ return false; |
+ return !signin->GetAuthenticatedUsername().empty(); |
not at google - send to devlin
2014/05/05 20:19:11
could phrase these last 3 lines as "return signin
yefimt
2014/05/05 20:54:24
Done.
|
+} |
+ |
+} // namespace |
+ |
namespace extensions { |
ExternalComponentLoader::ExternalComponentLoader(Profile* profile) |
@@ -42,28 +63,69 @@ void ExternalComponentLoader::StartLoading() { |
BookmarksExperimentState bookmarks_experiment_state_before = |
static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger( |
sync_driver::prefs::kEnhancedBookmarksExperimentEnabled)); |
- if (bookmarks_experiment_state_before == kBookmarksExperimentEnabled) { |
- // kEnhancedBookmarksExperiment flag could have values "", "1" and "0". |
- // "0" - user opted out. |
- if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
- switches::kEnhancedBookmarksExperiment) != "0") { |
+ // kEnhancedBookmarksExperiment flag could have values "", "1" and "0". |
+ // "0" - user opted out. |
+ bool opt_out = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
+ switches::kEnhancedBookmarksExperiment) == "0"; |
+ |
+ bool enabled_from_finch = false; |
+ if (IsEnhancedBookmarksExperimentEnabledFromFinch()) { |
+ enabled_from_finch = !IsUserSignedin(profile_); |
+ FinchBookmarksExperimentState state_to_report = |
+ enabled_from_finch ? |
+ (opt_out ? kFinchBookmarksExperimentEnabledUserOptOut : |
+ kFinchBookmarksExperimentEnabled) : |
+ kFinchBookmarksExperimentEnabledUserSignedIn; |
+ UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.FinchExperimentState", |
+ state_to_report, |
+ kFinchBookmarksExperimentEnumSize); |
+ } |
+ |
+ if (enabled_from_finch) { |
+ if (opt_out) { |
+ // Experiment enabled but user opted out. |
+ profile_->GetPrefs()->SetInteger( |
not at google - send to devlin
2014/05/05 20:19:11
why do you need to store whether the command line
yefimt
2014/05/05 20:54:24
In case of finch it not really necessary. Just it
|
+ sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
+ kBookmarksExperimentOptoutFromFinch); |
+ } else { |
// Experiment enabled. |
- std::string ext_id = profile_->GetPrefs()->GetString( |
- sync_driver::prefs::kEnhancedBookmarksExtensionId); |
+ profile_->GetPrefs()->SetInteger( |
+ sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
+ kBookmarksExperimentEnabledFromFinch); |
+ std::string ext_id = GetEnhancedBookmarksExtensionIdFromFinch(); |
if (!ext_id.empty()) { |
prefs_->SetString(ext_id + ".external_update_url", |
extension_urls::GetWebstoreUpdateUrl().spec()); |
} |
- } else { |
+ } |
+ } else if (bookmarks_experiment_state_before == kBookmarksExperimentEnabled) { |
+ if (opt_out) { |
// Experiment enabled but user opted out. |
profile_->GetPrefs()->SetInteger( |
- sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
- kBookmarksExperimentEnabledUserOptOut); |
+ sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
+ kBookmarksExperimentEnabledUserOptOut); |
+ UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", |
+ kBookmarksExperimentEnabledUserOptOut, |
+ kBookmarksExperimentEnumSize); |
+ } else { |
+ // Experiment enabled. |
+ std::string ext_id = profile_->GetPrefs()->GetString( |
+ sync_driver::prefs::kEnhancedBookmarksExtensionId); |
+ if (!ext_id.empty()) { |
+ prefs_->SetString(ext_id + ".external_update_url", |
+ extension_urls::GetWebstoreUpdateUrl().spec()); |
not at google - send to devlin
2014/05/05 20:19:11
I could say the same for finch actually. does pref
yefimt
2014/05/05 20:54:24
If you are talking about statement above, |prefs_|
not at google - send to devlin
2014/05/05 21:25:19
having prefs_ and GetPrefs() as totally different
|
+ } |
+ UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", |
+ kBookmarksExperimentEnabled, |
+ kBookmarksExperimentEnumSize); |
} |
} else if (bookmarks_experiment_state_before == |
kBookmarksExperimentEnabledUserOptOut) { |
- if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
- switches::kEnhancedBookmarksExperiment) != "0") { |
+ if (opt_out) { |
+ UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", |
+ kBookmarksExperimentEnabledUserOptOut, |
+ kBookmarksExperimentEnumSize); |
+ } else { |
// User opted in again. |
profile_->GetPrefs()->SetInteger( |
sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
@@ -74,6 +136,9 @@ void ExternalComponentLoader::StartLoading() { |
prefs_->SetString(ext_id + ".external_update_url", |
extension_urls::GetWebstoreUpdateUrl().spec()); |
} |
+ UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", |
+ kBookmarksExperimentEnabled, |
+ kBookmarksExperimentEnumSize); |
} |
} else { |
// Experiment disabled. |
@@ -81,6 +146,9 @@ void ExternalComponentLoader::StartLoading() { |
sync_driver::prefs::kEnhancedBookmarksExperimentEnabled); |
profile_->GetPrefs()->ClearPref( |
sync_driver::prefs::kEnhancedBookmarksExtensionId); |
+ UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", |
+ kNoBookmarksExperiment, |
+ kBookmarksExperimentEnumSize); |
} |
BookmarksExperimentState bookmarks_experiment_state = |
static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger( |