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

Unified Diff: chrome/browser/android/banners/app_banner_settings_helper.cc

Issue 884373002: Update content setting for app banners to store more information. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mac test failure Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/banners/app_banner_settings_helper.cc
diff --git a/chrome/browser/android/banners/app_banner_settings_helper.cc b/chrome/browser/android/banners/app_banner_settings_helper.cc
deleted file mode 100644
index ed3298ccbb948de4c283d71f759ae221b8c7b62f..0000000000000000000000000000000000000000
--- a/chrome/browser/android/banners/app_banner_settings_helper.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/android/banners/app_banner_settings_helper.h"
-
-#include <algorithm>
-#include <string>
-
-#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_pattern.h"
-#include "content/public/browser/web_contents.h"
-#include "url/gurl.h"
-
-namespace {
-std::string SanitizePackageName(std::string package_name) {
- // DictionaryValue doesn't allow '.' in the keys. Replace them with ' '
- // because you can't have a package name with a ' ' in it.
- std::replace(package_name.begin(), package_name.end(), '.', ' ');
- return package_name;
-}
-
-// Max number of apps that a particular site may show a banner for.
-const size_t kMaxAppsPerSite = 3;
-} // namespace
-
-bool AppBannerSettingsHelper::IsAllowed(content::WebContents* web_contents,
- const GURL& origin_url,
- const std::string& package_name) {
- std::string sanitized_package_name = SanitizePackageName(package_name);
- Profile* profile =
- Profile::FromBrowserContext(web_contents->GetBrowserContext());
- if (profile->IsOffTheRecord() || web_contents->GetURL() != origin_url ||
- sanitized_package_name.empty()) {
- return false;
- }
-
- // Check if this combination has been previously disabled.
- HostContentSettingsMap* settings = profile->GetHostContentSettingsMap();
- if (!settings)
- return false;
- scoped_ptr<base::Value> value =
- settings->GetWebsiteSetting(origin_url,
- origin_url,
- CONTENT_SETTINGS_TYPE_APP_BANNER,
- std::string(),
- NULL);
- if (!value.get()) {
- // We've never blocked a banner on this site.
- return true;
- } else if (value->IsType(base::Value::TYPE_DICTIONARY)) {
- // We expect to get a Dictionary back, where the keys are the package names.
- base::DictionaryValue* banner_dict =
- static_cast<base::DictionaryValue*>(value.get());
- bool is_allowed = false;
- if (banner_dict->GetBoolean(sanitized_package_name, &is_allowed)) {
- return is_allowed;
- } else {
- return banner_dict->size() < ::kMaxAppsPerSite;
- }
- } else {
- // Somehow the value we got back is not a dictionary (e.g. the settings were
- // corrupted by malware). Try to clear it out.
- ContentSettingsPattern pattern(ContentSettingsPattern::FromURL(origin_url));
- if (pattern.IsValid()) {
- settings->SetWebsiteSetting(pattern,
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_APP_BANNER,
- std::string(),
- NULL);
- return true;
- }
- }
-
- return false;
-}
-
-void AppBannerSettingsHelper::Block(content::WebContents* web_contents,
- const GURL& origin_url,
- const std::string& package_name) {
- std::string sanitized_package_name = SanitizePackageName(package_name);
- DCHECK(!sanitized_package_name.empty());
-
- Profile* profile =
- Profile::FromBrowserContext(web_contents->GetBrowserContext());
- HostContentSettingsMap* settings = profile->GetHostContentSettingsMap();
- ContentSettingsPattern pattern(ContentSettingsPattern::FromURL(origin_url));
- if (!settings || !pattern.IsValid())
- return;
-
- scoped_ptr<base::Value> value =
- settings->GetWebsiteSetting(origin_url,
- origin_url,
- CONTENT_SETTINGS_TYPE_APP_BANNER,
- std::string(),
- NULL);
- base::DictionaryValue* banner_dict = NULL;
- if (value.get() && value->IsType(base::Value::TYPE_DICTIONARY)) {
- banner_dict = static_cast<base::DictionaryValue*>(value.release());
- } else {
- banner_dict = new base::DictionaryValue();
- }
-
- // Update the setting and save it back.
- banner_dict->SetBoolean(sanitized_package_name, false);
- settings->SetWebsiteSetting(pattern,
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_APP_BANNER,
- std::string(),
- banner_dict);
-}

Powered by Google App Engine
This is Rietveld 408576698