profile_management_switches.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/metrics/field_trial.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "build/build_config.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/signin_switches.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kNewProfileManagementFieldTrialName[] = "NewProfileManagement"; 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Different state of new profile management/identity consistency. The code 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// below assumes the order of the values in this enum. That is, new profile 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// management is included in consistent identity. 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)enum State { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) STATE_NONE, 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) STATE_NEW_PROFILE_MANAGEMENT, 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) STATE_ACCOUNT_CONSISTENCY 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)State GetProcessState() { 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Get the full name of the field trial so that the underlying mechanism 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // is properly initialized. 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string trial_type = 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FieldTrialList::FindFullName(kNewProfileManagementFieldTrialName); 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Find the state of both command line args. 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_new_profile_management = 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CommandLine::ForCurrentProcess()->HasSwitch( 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kEnableNewProfileManagement); 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_consistent_identity = 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CommandLine::ForCurrentProcess()->HasSwitch( 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableAccountConsistency); 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool not_new_profile_management = 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandLine::ForCurrentProcess()->HasSwitch( 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kDisableNewProfileManagement); 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool not_consistent_identity = 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandLine::ForCurrentProcess()->HasSwitch( 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kDisableAccountConsistency); 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int count_args = (is_new_profile_management ? 1 : 0) + 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (is_consistent_identity ? 1 : 0) + 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (not_new_profile_management ? 1 : 0) + 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (not_consistent_identity ? 1 : 0); 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool invalid_commandline = count_args > 1; 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // At most only one of the command line args should be specified, otherwise 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the finch group assignment is undefined. If this is the case, disable 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the field trial so that data is not collected in the wrong group. 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (invalid_commandline) { 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FieldTrial* field_trial = 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::FieldTrialList::Find(kNewProfileManagementFieldTrialName); 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (field_trial) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) field_trial->Disable(); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) trial_type.clear(); 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Enable command line args take precedent over disable command line args. 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Consistent identity args take precedent over new profile management args. 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (is_consistent_identity) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return STATE_ACCOUNT_CONSISTENCY; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (is_new_profile_management) { 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return STATE_NEW_PROFILE_MANAGEMENT; 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (not_new_profile_management) { 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return STATE_NONE; 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else if (not_consistent_identity) { 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return STATE_NEW_PROFILE_MANAGEMENT; 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_ANDROID) 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) State state = STATE_ACCOUNT_CONSISTENCY; 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) State state = STATE_NONE; 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!trial_type.empty()) { 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (trial_type == "Enabled") { 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) state = STATE_NEW_PROFILE_MANAGEMENT; 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (trial_type == "AccountConsistency") { 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) state = STATE_ACCOUNT_CONSISTENCY; 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } else { 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) state = STATE_NONE; 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return state; 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool CheckFlag(std::string command_switch, State min_state) { 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Individiual flag settings take precedence. 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(command_switch)) 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return true; 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return GetProcessState() >= min_state; 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace switches { 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool IsEnableAccountConsistency() { 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return GetProcessState() >= STATE_ACCOUNT_CONSISTENCY; 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool IsEnableWebBasedSignin() { 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return CommandLine::ForCurrentProcess()->HasSwitch( 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switches::kEnableWebBasedSignin) && !IsNewProfileManagement(); 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool IsExtensionsMultiAccount() { 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return CheckFlag(switches::kExtensionsMultiAccount, 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) STATE_NEW_PROFILE_MANAGEMENT); 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochbool IsFastUserSwitching() { 1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool use_mirror_promo_menu = 1210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu) && 1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch !IsNewProfileManagement(); 1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return CommandLine::ForCurrentProcess()->HasSwitch( 1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch switches::kFastUserSwitching) || use_mirror_promo_menu; 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochbool IsGoogleProfileInfo() { 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return CheckFlag(switches::kGoogleProfileInfo, 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) STATE_NEW_PROFILE_MANAGEMENT); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool IsNewAvatarMenu() { 133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_new_avatar_menu = 134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu); 135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return is_new_avatar_menu || IsNewProfileManagement(); 136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochbool IsNewProfileManagement() { 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return GetProcessState() >= STATE_NEW_PROFILE_MANAGEMENT; 1400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 1410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 142a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool IsNewProfileManagementPreviewEnabled() { 143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_new_avatar_menu = 144a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu); 145a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return is_new_avatar_menu && IsNewProfileManagement(); 146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 147a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void EnableNewProfileManagementForTesting(base::CommandLine* command_line) { 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableNewProfileManagement); 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(!command_line->HasSwitch(switches::kDisableNewProfileManagement)); 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void EnableAccountConsistencyForTesting(base::CommandLine* command_line) { 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line->AppendSwitch(switches::kEnableAccountConsistency); 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(!command_line->HasSwitch(switches::kDisableAccountConsistency)); 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace switches 159