Commit 2d4c1aed authored by Tina Wang's avatar Tina Wang Committed by Commit Bot

[SettingsUI] Support when default search engine is enabled by policy

Set prefs::kDefaultSearchProviderEnabled to policy map to flag that the default search engine is enabled by policy.

Clarify the pref setting logic by removing the loop and setting the pref one by one.

Check prefs::kDefaultSearchProviderEnabled to decide whether to show the managed UI.

Bug: 1103663
Change-Id: I05fc781056e1014db437d1c5882d1b0775ca0a32
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2305829
Commit-Queue: Tina Wang <tinazwang@chromium.org>
Reviewed-by: default avatarCait Phillips <caitkp@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Reviewed-by: default avatarTommy Li <tommycli@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790913}
parent 34ce32cb
......@@ -70,7 +70,8 @@ void SetBooleanInPref(const PolicyMap& policies,
} // namespace
// List of policy types to preference names, for policies affecting the default
// search provider.
// search provider. Please update ApplyPolicySettings() when add or remove
// items.
const PolicyToPreferenceMapEntry kDefaultSearchPolicyDataMap[] = {
{key::kDefaultSearchProviderEnabled, prefs::kDefaultSearchProviderEnabled,
base::Value::Type::BOOLEAN},
......@@ -164,35 +165,43 @@ void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
return;
std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
for (size_t i = 0; i < base::size(kDefaultSearchPolicyDataMap); ++i) {
const char* policy_name = kDefaultSearchPolicyDataMap[i].policy_name;
// kDefaultSearchProviderEnabled has already been handled.
if (policy_name == key::kDefaultSearchProviderEnabled)
continue;
switch (kDefaultSearchPolicyDataMap[i].value_type) {
case base::Value::Type::STRING:
SetStringInPref(policies,
policy_name,
kDefaultSearchPolicyDataMap[i].preference_path,
dict.get());
break;
case base::Value::Type::LIST:
SetListInPref(policies,
policy_name,
kDefaultSearchPolicyDataMap[i].preference_path,
dict.get());
break;
case base::Value::Type::BOOLEAN:
SetBooleanInPref(policies, policy_name,
kDefaultSearchPolicyDataMap[i].preference_path,
dict.get());
break;
default:
NOTREACHED();
break;
}
}
// Set pref values for policies affecting the default
// search provider, which are listed in kDefaultSearchPolicyDataMap.
// Set or remove pref accordingly when kDefaultSearchPolicyDataMap has a
// change, then revise the number in the check below to be correct.
SetBooleanInPref(policies, key::kDefaultSearchProviderEnabled,
prefs::kDefaultSearchProviderEnabled, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderName,
DefaultSearchManager::kShortName, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderKeyword,
DefaultSearchManager::kKeyword, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderSearchURL,
DefaultSearchManager::kURL, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderSuggestURL,
DefaultSearchManager::kSuggestionsURL, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderIconURL,
DefaultSearchManager::kFaviconURL, dict.get());
SetListInPref(policies, key::kDefaultSearchProviderEncodings,
DefaultSearchManager::kInputEncodings, dict.get());
SetListInPref(policies, key::kDefaultSearchProviderAlternateURLs,
DefaultSearchManager::kAlternateURLs, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderImageURL,
DefaultSearchManager::kImageURL, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderNewTabURL,
DefaultSearchManager::kNewTabURL, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderSearchURLPostParams,
DefaultSearchManager::kSearchURLPostParams, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderSuggestURLPostParams,
DefaultSearchManager::kSuggestionsURLPostParams, dict.get());
SetStringInPref(policies, key::kDefaultSearchProviderImageURLPostParams,
DefaultSearchManager::kImageURLPostParams, dict.get());
SetBooleanInPref(
policies, key::kDefaultSearchProviderContextMenuAccessAllowed,
prefs::kDefaultSearchProviderContextMenuAccessAllowed, dict.get());
size_t policyCount = 14;
CHECK_EQ(policyCount, base::size(kDefaultSearchPolicyDataMap));
// Set the fields which are not specified by the policy to default values.
dict->SetString(DefaultSearchManager::kID,
......
......@@ -403,10 +403,8 @@ NSString* kDevViewSourceKey = @"DevViewSource";
// Basics section
[model addSectionWithIdentifier:SectionIdentifierBasics];
// Show managed UI if default search engine is managed by policy.
// TODO(crbug.com/1103663): support the UI when default search engine is
// enabled by policy.
if (base::FeatureList::IsEnabled(kEnableIOSManagedSettingsUI) &&
[self isDefaultSearchEngineDisabledByPolicy]) {
[self isDefaultSearchEngineManagedByPolicy]) {
[model addItem:[self managedSearchEngineItem]
toSectionWithIdentifier:SectionIdentifierBasics];
} else {
......@@ -541,8 +539,21 @@ NSString* kDevViewSourceKey = @"DevViewSource";
managedDefaultSearchEngineItem.text =
l10n_util::GetNSString(IDS_IOS_SEARCH_ENGINE_SETTING_TITLE);
managedDefaultSearchEngineItem.iconImageName = kSettingsSearchEngineImageName;
managedDefaultSearchEngineItem.statusText =
l10n_util::GetNSString(IDS_IOS_SEARCH_ENGINE_SETTING_DISABLED_STATUS);
const base::DictionaryValue* dict = _browserState->GetPrefs()->GetDictionary(
DefaultSearchManager::kDefaultSearchProviderDataPrefName);
if (dict->FindBoolPath(DefaultSearchManager::kDisabledByPolicy)) {
// Default search engine is disabled by policy.
managedDefaultSearchEngineItem.statusText =
l10n_util::GetNSString(IDS_IOS_SEARCH_ENGINE_SETTING_DISABLED_STATUS);
} else {
// Default search engine is enabled and set by policy.
const std::string* status =
dict->FindStringPath(DefaultSearchManager::kShortName);
managedDefaultSearchEngineItem.statusText =
base::SysUTF8ToNSString(*status);
}
managedDefaultSearchEngineItem.accessibilityIdentifier =
kSettingsManagedSearchEngineCellId;
return managedDefaultSearchEngineItem;
......@@ -1163,14 +1174,15 @@ NSString* kDevViewSourceKey = @"DevViewSource";
[self reconfigureCellsForItems:@[ googleServicesItem ]];
}
// Check if the default search engine is disabled by policy.
- (BOOL)isDefaultSearchEngineDisabledByPolicy {
// Check if the default search engine is managed by policy.
- (BOOL)isDefaultSearchEngineManagedByPolicy {
const base::DictionaryValue* dict = _browserState->GetPrefs()->GetDictionary(
DefaultSearchManager::kDefaultSearchProviderDataPrefName);
base::Optional<bool> disabledByPolicy =
dict->FindBoolPath(DefaultSearchManager::kDisabledByPolicy);
if (disabledByPolicy) {
return YES;
if (dict) {
if (dict->FindBoolPath(DefaultSearchManager::kDisabledByPolicy) ||
dict->FindBoolPath(prefs::kDefaultSearchProviderEnabled))
return YES;
}
return NO;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment