OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/external_component_loader.h" | 5 #include "chrome/browser/extensions/external_component_loader.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/metrics/histogram.h" | |
8 #include "base/prefs/pref_change_registrar.h" | 9 #include "base/prefs/pref_change_registrar.h" |
9 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
10 #include "base/values.h" | 11 #include "base/values.h" |
11 #include "chrome/browser/bookmarks/enhanced_bookmarks_features.h" | 12 #include "chrome/browser/bookmarks/enhanced_bookmarks_features.h" |
12 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
13 #include "chrome/browser/extensions/external_provider_impl.h" | 14 #include "chrome/browser/extensions/external_provider_impl.h" |
14 #include "chrome/browser/search/hotword_service_factory.h" | 15 #include "chrome/browser/search/hotword_service_factory.h" |
16 #include "chrome/browser/signin/signin_manager_factory.h" | |
15 #include "chrome/common/chrome_switches.h" | 17 #include "chrome/common/chrome_switches.h" |
16 #include "chrome/common/extensions/extension_constants.h" | 18 #include "chrome/common/extensions/extension_constants.h" |
17 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
20 #include "components/signin/core/browser/signin_manager.h" | |
18 #include "components/sync_driver/pref_names.h" | 21 #include "components/sync_driver/pref_names.h" |
19 #include "components/user_prefs/pref_registry_syncable.h" | 22 #include "components/user_prefs/pref_registry_syncable.h" |
20 #include "content/public/browser/browser_thread.h" | 23 #include "content/public/browser/browser_thread.h" |
21 | 24 |
25 namespace { | |
26 | |
27 enum FinchBookmarksExperimentState { | |
28 kFinchBookmarksExperimentEnabled, | |
29 kFinchBookmarksExperimentEnabledUserSignedIn, | |
30 kFinchBookmarksExperimentEnabledUserOptOut, | |
31 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
| |
32 }; | |
33 | |
34 bool IsUserSignedin(Profile* profile) { | |
35 SigninManager* signin = SigninManagerFactory::GetForProfile(profile); | |
36 if (!signin) | |
37 return false; | |
38 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.
| |
39 } | |
40 | |
41 } // namespace | |
42 | |
22 namespace extensions { | 43 namespace extensions { |
23 | 44 |
24 ExternalComponentLoader::ExternalComponentLoader(Profile* profile) | 45 ExternalComponentLoader::ExternalComponentLoader(Profile* profile) |
25 : profile_(profile) { | 46 : profile_(profile) { |
26 } | 47 } |
27 | 48 |
28 ExternalComponentLoader::~ExternalComponentLoader() {} | 49 ExternalComponentLoader::~ExternalComponentLoader() {} |
29 | 50 |
30 void ExternalComponentLoader::StartLoading() { | 51 void ExternalComponentLoader::StartLoading() { |
31 prefs_.reset(new base::DictionaryValue()); | 52 prefs_.reset(new base::DictionaryValue()); |
32 std::string appId = extension_misc::kInAppPaymentsSupportAppId; | 53 std::string appId = extension_misc::kInAppPaymentsSupportAppId; |
33 prefs_->SetString(appId + ".external_update_url", | 54 prefs_->SetString(appId + ".external_update_url", |
34 extension_urls::GetWebstoreUpdateUrl().spec()); | 55 extension_urls::GetWebstoreUpdateUrl().spec()); |
35 | 56 |
36 if (HotwordServiceFactory::IsHotwordAllowed(profile_)) { | 57 if (HotwordServiceFactory::IsHotwordAllowed(profile_)) { |
37 std::string hotwordId = extension_misc::kHotwordExtensionId; | 58 std::string hotwordId = extension_misc::kHotwordExtensionId; |
38 prefs_->SetString(hotwordId + ".external_update_url", | 59 prefs_->SetString(hotwordId + ".external_update_url", |
39 extension_urls::GetWebstoreUpdateUrl().spec()); | 60 extension_urls::GetWebstoreUpdateUrl().spec()); |
40 } | 61 } |
41 | 62 |
42 BookmarksExperimentState bookmarks_experiment_state_before = | 63 BookmarksExperimentState bookmarks_experiment_state_before = |
43 static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger( | 64 static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger( |
44 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled)); | 65 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled)); |
45 if (bookmarks_experiment_state_before == kBookmarksExperimentEnabled) { | 66 // kEnhancedBookmarksExperiment flag could have values "", "1" and "0". |
46 // kEnhancedBookmarksExperiment flag could have values "", "1" and "0". | 67 // "0" - user opted out. |
47 // "0" - user opted out. | 68 bool opt_out = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
48 if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 69 switches::kEnhancedBookmarksExperiment) == "0"; |
49 switches::kEnhancedBookmarksExperiment) != "0") { | 70 |
71 bool enabled_from_finch = false; | |
72 if (IsEnhancedBookmarksExperimentEnabledFromFinch()) { | |
73 enabled_from_finch = !IsUserSignedin(profile_); | |
74 FinchBookmarksExperimentState state_to_report = | |
75 enabled_from_finch ? | |
76 (opt_out ? kFinchBookmarksExperimentEnabledUserOptOut : | |
77 kFinchBookmarksExperimentEnabled) : | |
78 kFinchBookmarksExperimentEnabledUserSignedIn; | |
79 UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.FinchExperimentState", | |
80 state_to_report, | |
81 kFinchBookmarksExperimentEnumSize); | |
82 } | |
83 | |
84 if (enabled_from_finch) { | |
85 if (opt_out) { | |
86 // Experiment enabled but user opted out. | |
87 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
| |
88 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, | |
89 kBookmarksExperimentOptoutFromFinch); | |
90 } else { | |
50 // Experiment enabled. | 91 // Experiment enabled. |
51 std::string ext_id = profile_->GetPrefs()->GetString( | 92 profile_->GetPrefs()->SetInteger( |
52 sync_driver::prefs::kEnhancedBookmarksExtensionId); | 93 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
94 kBookmarksExperimentEnabledFromFinch); | |
95 std::string ext_id = GetEnhancedBookmarksExtensionIdFromFinch(); | |
53 if (!ext_id.empty()) { | 96 if (!ext_id.empty()) { |
54 prefs_->SetString(ext_id + ".external_update_url", | 97 prefs_->SetString(ext_id + ".external_update_url", |
55 extension_urls::GetWebstoreUpdateUrl().spec()); | 98 extension_urls::GetWebstoreUpdateUrl().spec()); |
56 } | 99 } |
57 } else { | 100 } |
101 } else if (bookmarks_experiment_state_before == kBookmarksExperimentEnabled) { | |
102 if (opt_out) { | |
58 // Experiment enabled but user opted out. | 103 // Experiment enabled but user opted out. |
59 profile_->GetPrefs()->SetInteger( | 104 profile_->GetPrefs()->SetInteger( |
60 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, | 105 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
61 kBookmarksExperimentEnabledUserOptOut); | 106 kBookmarksExperimentEnabledUserOptOut); |
107 UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", | |
108 kBookmarksExperimentEnabledUserOptOut, | |
109 kBookmarksExperimentEnumSize); | |
110 } else { | |
111 // Experiment enabled. | |
112 std::string ext_id = profile_->GetPrefs()->GetString( | |
113 sync_driver::prefs::kEnhancedBookmarksExtensionId); | |
114 if (!ext_id.empty()) { | |
115 prefs_->SetString(ext_id + ".external_update_url", | |
116 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
| |
117 } | |
118 UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", | |
119 kBookmarksExperimentEnabled, | |
120 kBookmarksExperimentEnumSize); | |
62 } | 121 } |
63 } else if (bookmarks_experiment_state_before == | 122 } else if (bookmarks_experiment_state_before == |
64 kBookmarksExperimentEnabledUserOptOut) { | 123 kBookmarksExperimentEnabledUserOptOut) { |
65 if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 124 if (opt_out) { |
66 switches::kEnhancedBookmarksExperiment) != "0") { | 125 UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", |
126 kBookmarksExperimentEnabledUserOptOut, | |
127 kBookmarksExperimentEnumSize); | |
128 } else { | |
67 // User opted in again. | 129 // User opted in again. |
68 profile_->GetPrefs()->SetInteger( | 130 profile_->GetPrefs()->SetInteger( |
69 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, | 131 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled, |
70 kBookmarksExperimentEnabled); | 132 kBookmarksExperimentEnabled); |
71 std::string ext_id = profile_->GetPrefs()->GetString( | 133 std::string ext_id = profile_->GetPrefs()->GetString( |
72 sync_driver::prefs::kEnhancedBookmarksExtensionId); | 134 sync_driver::prefs::kEnhancedBookmarksExtensionId); |
73 if (!ext_id.empty()) { | 135 if (!ext_id.empty()) { |
74 prefs_->SetString(ext_id + ".external_update_url", | 136 prefs_->SetString(ext_id + ".external_update_url", |
75 extension_urls::GetWebstoreUpdateUrl().spec()); | 137 extension_urls::GetWebstoreUpdateUrl().spec()); |
76 } | 138 } |
139 UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", | |
140 kBookmarksExperimentEnabled, | |
141 kBookmarksExperimentEnumSize); | |
77 } | 142 } |
78 } else { | 143 } else { |
79 // Experiment disabled. | 144 // Experiment disabled. |
80 profile_->GetPrefs()->ClearPref( | 145 profile_->GetPrefs()->ClearPref( |
81 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled); | 146 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled); |
82 profile_->GetPrefs()->ClearPref( | 147 profile_->GetPrefs()->ClearPref( |
83 sync_driver::prefs::kEnhancedBookmarksExtensionId); | 148 sync_driver::prefs::kEnhancedBookmarksExtensionId); |
149 UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState", | |
150 kNoBookmarksExperiment, | |
151 kBookmarksExperimentEnumSize); | |
84 } | 152 } |
85 BookmarksExperimentState bookmarks_experiment_state = | 153 BookmarksExperimentState bookmarks_experiment_state = |
86 static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger( | 154 static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger( |
87 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled)); | 155 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled)); |
88 if (bookmarks_experiment_state_before != bookmarks_experiment_state) { | 156 if (bookmarks_experiment_state_before != bookmarks_experiment_state) { |
89 UpdateBookmarksExperiment(g_browser_process->local_state(), | 157 UpdateBookmarksExperiment(g_browser_process->local_state(), |
90 bookmarks_experiment_state); | 158 bookmarks_experiment_state); |
91 } | 159 } |
92 | 160 |
93 LoadFinished(); | 161 LoadFinished(); |
94 } | 162 } |
95 | 163 |
96 } // namespace extensions | 164 } // namespace extensions |
OLD | NEW |