enhanced_bookmarks_features.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 3// found in the LICENSE file. 4 5#include "chrome/browser/bookmarks/enhanced_bookmarks_features.h" 6 7#include "base/command_line.h" 8#include "base/prefs/pref_service.h" 9#include "base/prefs/scoped_user_pref_update.h" 10#include "base/sha1.h" 11#include "base/strings/string_number_conversions.h" 12#include "chrome/common/chrome_switches.h" 13#include "chrome/common/pref_names.h" 14#include "components/variations/variations_associated_data.h" 15#include "extensions/common/features/feature.h" 16#include "extensions/common/features/feature_provider.h" 17 18namespace { 19 20const char kFieldTrialName[] = "EnhancedBookmarks"; 21 22bool IsBookmarksExtensionHash(const std::string& sha1_hex) { 23 return sha1_hex == "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2" || 24 sha1_hex == "D57DE394F36DC1C3220E7604C575D29C51A6C495"; 25} 26 27}; // namespace 28 29bool IsBookmarksExtensionInstalled( 30 const extensions::ExtensionIdSet& extension_ids) { 31 // Compare installed extension ids with ones we expect. 32 for (extensions::ExtensionIdSet::const_iterator iter = extension_ids.begin(); 33 iter != extension_ids.end(); ++iter) { 34 const std::string id_hash = base::SHA1HashString(*iter); 35 DCHECK_EQ(id_hash.length(), base::kSHA1Length); 36 std::string hash = base::HexEncode(id_hash.c_str(), id_hash.length()); 37 38 if (IsBookmarksExtensionHash(hash)) 39 return true; 40 } 41 return false; 42} 43 44void UpdateBookmarksExperiment( 45 PrefService* local_state, 46 BookmarksExperimentState bookmarks_experiment_state) { 47 ListPrefUpdate update(local_state, prefs::kEnabledLabsExperiments); 48 base::ListValue* experiments_list = update.Get(); 49 size_t index; 50 if (bookmarks_experiment_state == kNoBookmarksExperiment) { 51 experiments_list->Remove( 52 base::StringValue(switches::kManualEnhancedBookmarks), &index); 53 experiments_list->Remove( 54 base::StringValue(switches::kManualEnhancedBookmarksOptout), &index); 55 } else if (bookmarks_experiment_state == kBookmarksExperimentEnabled) { 56 experiments_list->Remove( 57 base::StringValue(switches::kManualEnhancedBookmarksOptout), &index); 58 experiments_list->AppendIfNotPresent( 59 new base::StringValue(switches::kManualEnhancedBookmarks)); 60 } else if (bookmarks_experiment_state == 61 kBookmarksExperimentEnabledUserOptOut) { 62 experiments_list->Remove( 63 base::StringValue(switches::kManualEnhancedBookmarks), &index); 64 experiments_list->AppendIfNotPresent( 65 new base::StringValue(switches::kManualEnhancedBookmarksOptout)); 66 } 67} 68 69bool IsEnhancedBookmarksExperimentEnabled() { 70 CommandLine* command_line = CommandLine::ForCurrentProcess(); 71 if (command_line->HasSwitch(switches::kManualEnhancedBookmarks) || 72 command_line->HasSwitch(switches::kManualEnhancedBookmarksOptout)) { 73 return true; 74 } 75 76 std::string ext_id = GetEnhancedBookmarksExtensionIdFromFinch(); 77 extensions::FeatureProvider* feature_provider = 78 extensions::FeatureProvider::GetPermissionFeatures(); 79 extensions::Feature* feature = feature_provider->GetFeature("metricsPrivate"); 80 return feature && feature->IsIdInWhitelist(ext_id); 81} 82 83bool IsEnableDomDistillerSet() { 84 if (CommandLine::ForCurrentProcess()-> 85 HasSwitch(switches::kEnableDomDistiller)) { 86 return true; 87 } 88 if (chrome_variations::GetVariationParamValue( 89 kFieldTrialName, "enable-dom-distiller") == "1") 90 return true; 91 92 return false; 93} 94 95bool IsEnableSyncArticlesSet() { 96 if (CommandLine::ForCurrentProcess()-> 97 HasSwitch(switches::kEnableSyncArticles)) { 98 return true; 99 } 100 if (chrome_variations::GetVariationParamValue( 101 kFieldTrialName, "enable-sync-articles") == "1") 102 return true; 103 104 return false; 105} 106 107std::string GetEnhancedBookmarksExtensionIdFromFinch() { 108 return chrome_variations::GetVariationParamValue(kFieldTrialName, "id"); 109} 110