OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/notifications/notifications_prefs_cache.h" | 5 #include "chrome/browser/notifications/notifications_prefs_cache.h" |
6 | 6 |
7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "chrome/browser/chrome_thread.h" | 9 #include "chrome/browser/chrome_thread.h" |
10 #include "chrome/browser/pref_service.h" | 10 #include "chrome/browser/pref_service.h" |
11 #include "third_party/WebKit/WebKit/chromium/public/WebNotificationPresenter.h" | 11 #include "third_party/WebKit/WebKit/chromium/public/WebNotificationPresenter.h" |
12 | 12 |
13 NotificationsPrefsCache::NotificationsPrefsCache( | 13 NotificationsPrefsCache::NotificationsPrefsCache() |
14 const ListValue* allowed, const ListValue* denied) | |
15 : is_initialized_(false) { | 14 : is_initialized_(false) { |
16 ListValue::const_iterator i; | |
17 std::wstring origin; | |
18 if (allowed) { | |
19 for (i = allowed->begin(); i != allowed->end(); ++i) { | |
20 (*i)->GetAsString(&origin); | |
21 allowed_origins_.insert(GURL(WideToUTF8(origin))); | |
22 } | |
23 } | |
24 if (denied) { | |
25 for (i = denied->begin(); i != denied->end(); ++i) { | |
26 (*i)->GetAsString(&origin); | |
27 denied_origins_.insert(GURL(WideToUTF8(origin))); | |
28 } | |
29 } | |
30 } | 15 } |
31 | 16 |
32 void NotificationsPrefsCache::CacheAllowedOrigin( | 17 void NotificationsPrefsCache::CacheAllowedOrigin( |
33 const GURL& origin) { | 18 const GURL& origin) { |
34 CheckThreadAccess(); | 19 CheckThreadAccess(); |
35 std::set<GURL>::iterator iter; | 20 std::set<GURL>::iterator iter; |
36 allowed_origins_.insert(origin); | 21 allowed_origins_.insert(origin); |
37 if ((iter = denied_origins_.find(origin)) != denied_origins_.end()) | 22 if ((iter = denied_origins_.find(origin)) != denied_origins_.end()) |
38 denied_origins_.erase(iter); | 23 denied_origins_.erase(iter); |
39 } | 24 } |
40 | 25 |
41 void NotificationsPrefsCache::CacheDeniedOrigin( | 26 void NotificationsPrefsCache::CacheDeniedOrigin( |
42 const GURL& origin) { | 27 const GURL& origin) { |
43 CheckThreadAccess(); | 28 CheckThreadAccess(); |
44 std::set<GURL>::iterator iter; | 29 std::set<GURL>::iterator iter; |
45 denied_origins_.insert(origin); | 30 denied_origins_.insert(origin); |
46 if ((iter = allowed_origins_.find(origin)) != allowed_origins_.end()) | 31 if ((iter = allowed_origins_.find(origin)) != allowed_origins_.end()) |
47 allowed_origins_.erase(iter); | 32 allowed_origins_.erase(iter); |
48 } | 33 } |
49 | 34 |
| 35 void NotificationsPrefsCache::SetCacheAllowedOrigins( |
| 36 const std::vector<GURL>& allowed) { |
| 37 allowed_origins_.clear(); |
| 38 allowed_origins_.insert(allowed.begin(), allowed.end()); |
| 39 } |
| 40 |
| 41 void NotificationsPrefsCache::SetCacheDeniedOrigins( |
| 42 const std::vector<GURL>& denied) { |
| 43 denied_origins_.clear(); |
| 44 denied_origins_.insert(denied.begin(), denied.end()); |
| 45 } |
| 46 |
| 47 // static |
| 48 void NotificationsPrefsCache::ListValueToGurlVector( |
| 49 const ListValue& origin_list, |
| 50 std::vector<GURL>* origin_vector) { |
| 51 ListValue::const_iterator i; |
| 52 std::wstring origin; |
| 53 for (i = origin_list.begin(); i != origin_list.end(); ++i) { |
| 54 (*i)->GetAsString(&origin); |
| 55 origin_vector->push_back(GURL(WideToUTF8(origin))); |
| 56 } |
| 57 } |
| 58 |
50 int NotificationsPrefsCache::HasPermission(const GURL& origin) { | 59 int NotificationsPrefsCache::HasPermission(const GURL& origin) { |
51 if (IsOriginAllowed(origin)) | 60 if (IsOriginAllowed(origin)) |
52 return WebKit::WebNotificationPresenter::PermissionAllowed; | 61 return WebKit::WebNotificationPresenter::PermissionAllowed; |
53 if (IsOriginDenied(origin)) | 62 if (IsOriginDenied(origin)) |
54 return WebKit::WebNotificationPresenter::PermissionDenied; | 63 return WebKit::WebNotificationPresenter::PermissionDenied; |
55 return WebKit::WebNotificationPresenter::PermissionNotAllowed; | 64 return WebKit::WebNotificationPresenter::PermissionNotAllowed; |
56 } | 65 } |
57 | 66 |
58 bool NotificationsPrefsCache::IsOriginAllowed( | 67 bool NotificationsPrefsCache::IsOriginAllowed( |
59 const GURL& origin) { | 68 const GURL& origin) { |
60 CheckThreadAccess(); | 69 CheckThreadAccess(); |
61 return (allowed_origins_.find(origin) != allowed_origins_.end()); | 70 return (allowed_origins_.find(origin) != allowed_origins_.end()); |
62 } | 71 } |
63 | 72 |
64 bool NotificationsPrefsCache::IsOriginDenied( | 73 bool NotificationsPrefsCache::IsOriginDenied( |
65 const GURL& origin) { | 74 const GURL& origin) { |
66 CheckThreadAccess(); | 75 CheckThreadAccess(); |
67 return (denied_origins_.find(origin) != denied_origins_.end()); | 76 return (denied_origins_.find(origin) != denied_origins_.end()); |
68 } | 77 } |
69 | 78 |
70 void NotificationsPrefsCache::CheckThreadAccess() { | 79 void NotificationsPrefsCache::CheckThreadAccess() { |
71 if (is_initialized_) { | 80 if (is_initialized_) { |
72 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); | 81 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
73 } else { | 82 } else { |
74 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); | 83 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); |
75 } | 84 } |
76 } | 85 } |
OLD | NEW |