Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: chrome/browser/bookmarks/enhanced_bookmarks_features.cc

Issue 265843009: Restored an option to enable enhanced bookmarks experiment from Finch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: one more unit test fix Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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/bookmarks/enhanced_bookmarks_features.h" 5 #include "chrome/browser/bookmarks/enhanced_bookmarks_features.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_service.h" 9 #include "base/prefs/pref_service.h"
9 #include "base/prefs/scoped_user_pref_update.h" 10 #include "base/prefs/scoped_user_pref_update.h"
10 #include "base/sha1.h" 11 #include "base/sha1.h"
11 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
12 #include "chrome/common/chrome_switches.h" 13 #include "chrome/common/chrome_switches.h"
13 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
15 #include "components/sync_driver/pref_names.h"
14 #include "components/variations/variations_associated_data.h" 16 #include "components/variations/variations_associated_data.h"
15 #include "extensions/common/features/feature.h" 17 #include "extensions/common/features/feature.h"
16 #include "extensions/common/features/feature_provider.h" 18 #include "extensions/common/features/feature_provider.h"
17 19
18 namespace { 20 namespace {
19 21
20 const char kFieldTrialName[] = "EnhancedBookmarks"; 22 const char kFieldTrialName[] = "EnhancedBookmarks";
21 23
24 // Get extension id from Finch EnhancedBookmarks group parameters.
25 std::string GetEnhancedBookmarksExtensionIdFromFinch() {
26 return chrome_variations::GetVariationParamValue(kFieldTrialName, "id");
27 }
28
29 // Returns true if enhanced bookmarks experiment is enabled from Finch.
30 bool IsEnhancedBookmarksExperimentEnabledFromFinch() {
31 std::string ext_id = GetEnhancedBookmarksExtensionIdFromFinch();
32 extensions::FeatureProvider* feature_provider =
33 extensions::FeatureProvider::GetPermissionFeatures();
34 extensions::Feature* feature = feature_provider->GetFeature("metricsPrivate");
35 return feature && feature->IsIdInWhitelist(ext_id);
36 }
37
22 }; // namespace 38 }; // namespace
23 39
24 void UpdateBookmarksExperiment( 40 bool GetBookmarksExperimentExtensionID(const PrefService* user_prefs,
41 std::string* extension_id) {
42 BookmarksExperimentState bookmarks_experiment_state =
43 static_cast<BookmarksExperimentState>(user_prefs->GetInteger(
44 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled));
45 if (bookmarks_experiment_state == kBookmarksExperimentEnabledFromFinch) {
46 *extension_id = GetEnhancedBookmarksExtensionIdFromFinch();
47 return !extension_id->empty();
48 }
49 if (bookmarks_experiment_state == kBookmarksExperimentEnabled) {
50 *extension_id = user_prefs->GetString(
51 sync_driver::prefs::kEnhancedBookmarksExtensionId);
52 return !extension_id->empty();
53 }
54
55 return false;
56 }
57
58 void UpdateBookmarksExperimentState(const PrefService* user_prefs,
59 PrefService* local_state,
60 bool user_signed_in) {
61 BookmarksExperimentState bookmarks_experiment_state_before =
62 static_cast<BookmarksExperimentState>(user_prefs->GetInteger(
63 sync_driver::prefs::kEnhancedBookmarksExperimentEnabled));
64 // If user signed out, clear possible previous state.
65 if (!user_signed_in) {
66 bookmarks_experiment_state_before = kNoBookmarksExperiment;
67 ForceFinchBookmarkExperimentIfNeeded(local_state, kNoBookmarksExperiment);
68 }
69
70 // kEnhancedBookmarksExperiment flag could have values "", "1" and "0".
71 // "0" - user opted out.
72 bool opt_out = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
73 switches::kEnhancedBookmarksExperiment) == "0";
74
75 BookmarksExperimentState bookmarks_experiment_new_state =
76 kNoBookmarksExperiment;
77 bool enabled_from_finch = false;
78 if (IsEnhancedBookmarksExperimentEnabledFromFinch()) {
79 enabled_from_finch = !user_signed_in;
80 if (user_signed_in) {
81 bookmarks_experiment_new_state =
82 kBookmarksExperimentEnabledFromFinchUserSignedIn;
83 }
84 }
85
86 if (enabled_from_finch) {
87 if (opt_out) {
88 // Experiment enabled but user opted out.
89 bookmarks_experiment_new_state = kBookmarksExperimentOptOutFromFinch;
90 } else {
91 // Experiment enabled.
92 bookmarks_experiment_new_state = kBookmarksExperimentEnabledFromFinch;
93 }
94 } else if (bookmarks_experiment_state_before == kBookmarksExperimentEnabled) {
95 if (opt_out) {
96 // Experiment enabled but user opted out.
97 bookmarks_experiment_new_state = kBookmarksExperimentEnabledUserOptOut;
98 } else {
99 bookmarks_experiment_new_state = kBookmarksExperimentEnabled;
100 }
101 } else if (bookmarks_experiment_state_before ==
102 kBookmarksExperimentEnabledUserOptOut) {
103 if (opt_out) {
104 bookmarks_experiment_new_state = kBookmarksExperimentEnabledUserOptOut;
105 } else {
106 // User opted in again.
107 bookmarks_experiment_new_state = kBookmarksExperimentEnabled;
108 }
109 }
110
111 UMA_HISTOGRAM_ENUMERATION("EnhancedBookmarks.SyncExperimentState",
112 bookmarks_experiment_new_state,
113 kBookmarksExperimentEnumSize);
114 if (bookmarks_experiment_state_before != bookmarks_experiment_new_state)
115 ForceFinchBookmarkExperimentIfNeeded(local_state,
116 bookmarks_experiment_new_state);
117 }
118
119 void ForceFinchBookmarkExperimentIfNeeded(
25 PrefService* local_state, 120 PrefService* local_state,
26 BookmarksExperimentState bookmarks_experiment_state) { 121 BookmarksExperimentState bookmarks_experiment_state) {
122 // Chrome OS doesnt use local storage for experiments flags.
123 #if !defined(OS_CHROMEOS)
124 if (!local_state)
125 return;
27 ListPrefUpdate update(local_state, prefs::kEnabledLabsExperiments); 126 ListPrefUpdate update(local_state, prefs::kEnabledLabsExperiments);
28 base::ListValue* experiments_list = update.Get(); 127 base::ListValue* experiments_list = update.Get();
128 if (!experiments_list)
129 return;
29 size_t index; 130 size_t index;
30 if (bookmarks_experiment_state == kNoBookmarksExperiment) { 131 if (bookmarks_experiment_state == kNoBookmarksExperiment) {
31 experiments_list->Remove( 132 experiments_list->Remove(
32 base::StringValue(switches::kManualEnhancedBookmarks), &index); 133 base::StringValue(switches::kManualEnhancedBookmarks), &index);
33 experiments_list->Remove( 134 experiments_list->Remove(
34 base::StringValue(switches::kManualEnhancedBookmarksOptout), &index); 135 base::StringValue(switches::kManualEnhancedBookmarksOptout), &index);
35 } else if (bookmarks_experiment_state == kBookmarksExperimentEnabled) { 136 } else if (bookmarks_experiment_state == kBookmarksExperimentEnabled) {
36 experiments_list->Remove( 137 experiments_list->Remove(
37 base::StringValue(switches::kManualEnhancedBookmarksOptout), &index); 138 base::StringValue(switches::kManualEnhancedBookmarksOptout), &index);
38 experiments_list->AppendIfNotPresent( 139 experiments_list->AppendIfNotPresent(
39 new base::StringValue(switches::kManualEnhancedBookmarks)); 140 new base::StringValue(switches::kManualEnhancedBookmarks));
40 } else if (bookmarks_experiment_state == 141 } else if (bookmarks_experiment_state ==
41 kBookmarksExperimentEnabledUserOptOut) { 142 kBookmarksExperimentEnabledUserOptOut) {
42 experiments_list->Remove( 143 experiments_list->Remove(
43 base::StringValue(switches::kManualEnhancedBookmarks), &index); 144 base::StringValue(switches::kManualEnhancedBookmarks), &index);
44 experiments_list->AppendIfNotPresent( 145 experiments_list->AppendIfNotPresent(
45 new base::StringValue(switches::kManualEnhancedBookmarksOptout)); 146 new base::StringValue(switches::kManualEnhancedBookmarksOptout));
46 } 147 }
148 #endif
47 } 149 }
48 150
49 bool IsEnhancedBookmarksExperimentEnabled() { 151 bool IsEnhancedBookmarksExperimentEnabled() {
50 CommandLine* command_line = CommandLine::ForCurrentProcess(); 152 CommandLine* command_line = CommandLine::ForCurrentProcess();
51 if (command_line->HasSwitch(switches::kManualEnhancedBookmarks) || 153 if (command_line->HasSwitch(switches::kManualEnhancedBookmarks) ||
52 command_line->HasSwitch(switches::kManualEnhancedBookmarksOptout)) { 154 command_line->HasSwitch(switches::kManualEnhancedBookmarksOptout)) {
53 return true; 155 return true;
54 } 156 }
55 157
56 std::string ext_id = GetEnhancedBookmarksExtensionIdFromFinch(); 158 return IsEnhancedBookmarksExperimentEnabledFromFinch();
57 extensions::FeatureProvider* feature_provider =
58 extensions::FeatureProvider::GetPermissionFeatures();
59 extensions::Feature* feature = feature_provider->GetFeature("metricsPrivate");
60 return feature && feature->IsIdInWhitelist(ext_id);
61 } 159 }
62 160
63 bool IsEnableDomDistillerSet() { 161 bool IsEnableDomDistillerSet() {
64 if (CommandLine::ForCurrentProcess()-> 162 if (CommandLine::ForCurrentProcess()->
65 HasSwitch(switches::kEnableDomDistiller)) { 163 HasSwitch(switches::kEnableDomDistiller)) {
66 return true; 164 return true;
67 } 165 }
68 if (chrome_variations::GetVariationParamValue( 166 if (chrome_variations::GetVariationParamValue(
69 kFieldTrialName, "enable-dom-distiller") == "1") 167 kFieldTrialName, "enable-dom-distiller") == "1")
70 return true; 168 return true;
71 169
72 return false; 170 return false;
73 } 171 }
74 172
75 bool IsEnableSyncArticlesSet() { 173 bool IsEnableSyncArticlesSet() {
76 if (CommandLine::ForCurrentProcess()-> 174 if (CommandLine::ForCurrentProcess()->
77 HasSwitch(switches::kEnableSyncArticles)) { 175 HasSwitch(switches::kEnableSyncArticles)) {
78 return true; 176 return true;
79 } 177 }
80 if (chrome_variations::GetVariationParamValue( 178 if (chrome_variations::GetVariationParamValue(
81 kFieldTrialName, "enable-sync-articles") == "1") 179 kFieldTrialName, "enable-sync-articles") == "1")
82 return true; 180 return true;
83 181
84 return false; 182 return false;
85 } 183 }
86
87 std::string GetEnhancedBookmarksExtensionIdFromFinch() {
88 return chrome_variations::GetVariationParamValue(kFieldTrialName, "id");
89 }
OLDNEW
« no previous file with comments | « chrome/browser/bookmarks/enhanced_bookmarks_features.h ('k') | chrome/browser/extensions/external_component_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698