| // Copyright (c) 2010 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/notifications/notifications_prefs_cache.h" |
| |
| #include <string> |
| |
| #include "base/string_util.h" |
| #include "base/values.h" |
| #include "base/utf_string_conversions.h" |
| #include "content/browser/browser_thread.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebNotificationPresenter.h" |
| |
| NotificationsPrefsCache::NotificationsPrefsCache() |
| : default_content_setting_(CONTENT_SETTING_DEFAULT), |
| is_initialized_(false) { |
| } |
| |
| void NotificationsPrefsCache::CacheAllowedOrigin( |
| const GURL& origin) { |
| CheckThreadAccess(); |
| std::set<GURL>::iterator iter; |
| allowed_origins_.insert(origin); |
| if ((iter = denied_origins_.find(origin)) != denied_origins_.end()) |
| denied_origins_.erase(iter); |
| } |
| |
| void NotificationsPrefsCache::CacheDeniedOrigin( |
| const GURL& origin) { |
| CheckThreadAccess(); |
| std::set<GURL>::iterator iter; |
| denied_origins_.insert(origin); |
| if ((iter = allowed_origins_.find(origin)) != allowed_origins_.end()) |
| allowed_origins_.erase(iter); |
| } |
| |
| void NotificationsPrefsCache::SetCacheAllowedOrigins( |
| const std::vector<GURL>& allowed) { |
| allowed_origins_.clear(); |
| allowed_origins_.insert(allowed.begin(), allowed.end()); |
| } |
| |
| void NotificationsPrefsCache::SetCacheDeniedOrigins( |
| const std::vector<GURL>& denied) { |
| denied_origins_.clear(); |
| denied_origins_.insert(denied.begin(), denied.end()); |
| } |
| |
| void NotificationsPrefsCache::SetCacheDefaultContentSetting( |
| ContentSetting setting) { |
| default_content_setting_ = setting; |
| } |
| |
| // static |
| void NotificationsPrefsCache::ListValueToGurlVector( |
| const ListValue& origin_list, |
| std::vector<GURL>* origin_vector) { |
| ListValue::const_iterator i; |
| std::string origin; |
| for (i = origin_list.begin(); i != origin_list.end(); ++i) { |
| (*i)->GetAsString(&origin); |
| origin_vector->push_back(GURL(origin)); |
| } |
| } |
| |
| int NotificationsPrefsCache::HasPermission(const GURL& origin) { |
| if (IsOriginAllowed(origin)) |
| return WebKit::WebNotificationPresenter::PermissionAllowed; |
| if (IsOriginDenied(origin)) |
| return WebKit::WebNotificationPresenter::PermissionDenied; |
| switch (default_content_setting_) { |
| case CONTENT_SETTING_ALLOW: |
| return WebKit::WebNotificationPresenter::PermissionAllowed; |
| case CONTENT_SETTING_BLOCK: |
| return WebKit::WebNotificationPresenter::PermissionDenied; |
| case CONTENT_SETTING_ASK: |
| case CONTENT_SETTING_DEFAULT: |
| default: // Make gcc happy. |
| return WebKit::WebNotificationPresenter::PermissionNotAllowed; |
| } |
| } |
| |
| NotificationsPrefsCache::~NotificationsPrefsCache() {} |
| |
| bool NotificationsPrefsCache::IsOriginAllowed( |
| const GURL& origin) { |
| CheckThreadAccess(); |
| return allowed_origins_.find(origin) != allowed_origins_.end(); |
| } |
| |
| bool NotificationsPrefsCache::IsOriginDenied( |
| const GURL& origin) { |
| CheckThreadAccess(); |
| return denied_origins_.find(origin) != denied_origins_.end(); |
| } |
| |
| void NotificationsPrefsCache::CheckThreadAccess() { |
| if (is_initialized_) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| } else { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| } |
| } |