1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/apps/intent_helper/intent_chip_display_prefs.h"
#include "base/values.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "components/content_settings/core/common/content_settings_utils.h"
namespace {
// Show the Intent Chip as collapsed after it has been shown expanded
// |kIntentChipCollapseThreshold| times.
constexpr int kIntentChipCollapseThreshold = 3;
constexpr char kIntentChipCountKey[] = "intent_chip_display_count";
// Retrieves or creates a new dictionary for the specific |url|.
base::Value GetAutoDisplayDictForSettings(
const HostContentSettingsMap* settings,
const GURL& url) {
if (!settings) {
return base::Value(base::Value::Type::DICT);
}
base::Value value = settings->GetWebsiteSetting(
url, url, ContentSettingsType::INTENT_PICKER_DISPLAY, /*info=*/nullptr);
if (value.type() != base::Value::Type::DICT) {
return base::Value(base::Value::Type::DICT);
}
// Remove obsolete keys, if they are found. These keys were recorded on CrOS
// until M108.
value.GetDict().Remove("picker_platform_key");
value.GetDict().Remove("picker_auto_display_key");
return value;
}
} // namespace
// static
IntentChipDisplayPrefs::ChipState
IntentChipDisplayPrefs::GetChipStateAndIncrementCounter(Profile* profile,
const GURL& url) {
auto* settings_map = HostContentSettingsMapFactory::GetForProfile(profile);
base::Value pref_dict = GetAutoDisplayDictForSettings(settings_map, url);
int display_count =
pref_dict.GetDict().FindInt(kIntentChipCountKey).value_or(0);
if (display_count >= kIntentChipCollapseThreshold) {
// Exit before updating the counter so we don't keep counting indefinitely.
return ChipState::kCollapsed;
}
pref_dict.GetDict().Set(kIntentChipCountKey, ++display_count);
settings_map->SetWebsiteSettingDefaultScope(
url, url, ContentSettingsType::INTENT_PICKER_DISPLAY,
std::move(pref_dict));
return ChipState::kExpanded;
}
// static
void IntentChipDisplayPrefs::ResetIntentChipCounter(Profile* profile,
const GURL& url) {
auto* settings_map = HostContentSettingsMapFactory::GetForProfile(profile);
base::Value pref_dict = GetAutoDisplayDictForSettings(settings_map, url);
pref_dict.GetDict().Set(kIntentChipCountKey, 0);
settings_map->SetWebsiteSettingDefaultScope(
url, url, ContentSettingsType::INTENT_PICKER_DISPLAY,
std::move(pref_dict));
}
|