• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_NOTIFICATIONS_NOTIFICATIONS_PREFS_CACHE_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATIONS_PREFS_CACHE_H_
7 #pragma once
8 
9 #include <set>
10 #include <vector>
11 
12 #include "base/memory/ref_counted.h"
13 #include "chrome/common/content_settings.h"
14 #include "googleurl/src/gurl.h"
15 
16 class ListValue;
17 
18 // Class which caches notification preferences.
19 // Construction occurs on the UI thread when the contents
20 // of the profile preferences are initialized.  Once is_initialized() is set,
21 // access can only be done from the IO thread.
22 class NotificationsPrefsCache
23     : public base::RefCountedThreadSafe<NotificationsPrefsCache> {
24  public:
25   NotificationsPrefsCache();
26 
27   // Once is_initialized() is set, all accesses must happen on the IO thread.
28   // Before that, all accesses need to happen on the UI thread.
set_is_initialized(bool val)29   void set_is_initialized(bool val) { is_initialized_ = val; }
is_initialized()30   bool is_initialized() { return is_initialized_; }
31 
32   // Checks to see if a given origin has permission to create desktop
33   // notifications.  Returns a constant from WebNotificationPresenter
34   // class.
35   int HasPermission(const GURL& origin);
36 
37   // Updates the cache with a new origin allowed or denied.
38   void CacheAllowedOrigin(const GURL& origin);
39   void CacheDeniedOrigin(const GURL& origin);
40 
41   // Set the cache to the supplied values.  This clears the current
42   // contents of the cache.
43   void SetCacheAllowedOrigins(const std::vector<GURL>& allowed);
44   void SetCacheDeniedOrigins(const std::vector<GURL>& denied);
45   void SetCacheDefaultContentSetting(ContentSetting setting);
46 
47   static void ListValueToGurlVector(const ListValue& origin_list,
48                                     std::vector<GURL>* origin_vector);
49 
50   // Exposed for testing.
CachedDefaultContentSetting()51   ContentSetting CachedDefaultContentSetting() {
52     return default_content_setting_;
53   }
54 
55  private:
56   friend class base::RefCountedThreadSafe<NotificationsPrefsCache>;
57 
58   virtual ~NotificationsPrefsCache();
59 
60   // Helper functions which read preferences.
61   bool IsOriginAllowed(const GURL& origin);
62   bool IsOriginDenied(const GURL& origin);
63 
64   // Helper that ensures we are running on the expected thread.
65   void CheckThreadAccess();
66 
67   // Storage of the actual preferences.
68   std::set<GURL> allowed_origins_;
69   std::set<GURL> denied_origins_;
70 
71   // The default setting, used for origins that are neither in
72   // |allowed_origins_| nor |denied_origins_|.
73   ContentSetting default_content_setting_;
74 
75   // Set to true once the initial cached settings have been completely read.
76   // Once this is done, the class can no longer be accessed on the UI thread.
77   bool is_initialized_;
78 
79   DISALLOW_COPY_AND_ASSIGN(NotificationsPrefsCache);
80 };
81 
82 #endif  // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATIONS_PREFS_CACHE_H_
83