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

Side by Side Diff: chrome/browser/geolocation/geolocation_content_settings_map.h

Issue 1033004: Adds GeolocationContentSettingsMap. (Closed)
Patch Set: Uses "RequestingOriginSettings" and allows empty embedder as a wildcard. Created 10 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 // Maps [requesting_origin, embedder] to content settings. Written on the UI
6 // thread and read on any thread. One instance per profile. This is based on
7 // HostContentSettingsMap but differs significantly in two aspects:
8 // - It maps [requesting_origin.GetOrigin(), embedder.GetOrigin()] => setting
9 // rather than host => setting.
10 // - It manages only Geolocation.
11
12 #ifndef CHROME_BROWSER_GEOLOCATION_GEOLOCATION_CONTENT_SETTINGS_MAP_H_
13 #define CHROME_BROWSER_GEOLOCATION_GEOLOCATION_CONTENT_SETTINGS_MAP_H_
14
15 #include <map>
16 #include <string>
17 #include <utility>
18 #include <vector>
19
20 #include "base/basictypes.h"
21 #include "base/lock.h"
22 #include "base/ref_counted.h"
23 #include "chrome/common/content_settings.h"
24 #include "googleurl/src/gurl.h"
25
26 class DictionaryValue;
27 class PrefService;
28 class Profile;
29
30 class GeolocationContentSettingsMap
31 : public base::RefCountedThreadSafe<GeolocationContentSettingsMap> {
32 public:
33
34 typedef std::map<GURL, ContentSetting> EmbedderSettings;
35 typedef std::map<GURL, EmbedderSettings> RequestingOriginSettings;
36
37 explicit GeolocationContentSettingsMap(Profile* profile);
38
39 static void RegisterUserPrefs(PrefService* prefs);
40
41 // Returns the default setting.
42 //
43 // This may be called on any thread.
44 ContentSetting GetDefaultContentSetting() const;
45
46 // Returns a single ContentSetting which applies to the given
47 // |requesting_origin| when embedded in a page of |embedder|.
48 // Note: if |requesting_origin| is a top-level page, it's the same as
Peter Kasting 2010/03/18 20:59:20 Nit: Better wording might be: "Note: To determine
49 // |embedder|.
50 //
51 // This may be called on any thread.
52 ContentSetting GetContentSetting(const GURL& embedder,
Peter Kasting 2010/03/18 20:59:20 Nit: I think it would make sense to swap these arg
53 const GURL& requesting_origin) const;
54
55 // Returns all origins with a non-default setting, mapped to their embedder
56 // settings.
57 //
58 // This may be called on any thread.
59 const RequestingOriginSettings& requesting_origin_settings() const;
Peter Kasting 2010/03/18 20:59:20 I'm a bit uncomfortable with returning a const ref
Peter Kasting 2010/03/18 21:53:30 Actually, since we have to perform a deep copy any
60
61 // Sets the default setting.
62 //
63 // This should only be called on the UI thread.
64 void SetDefaultContentSetting(ContentSetting setting);
65
66 // Sets the content setting for a particular |embedder| and
67 // |requesting_origin|.
68 // Setting the value to CONTENT_SETTING_DEFAULT causes the default setting
69 // to be used when loading pages from this |embedder| and |requesting_origin|.
70 // An empty |embedder| is considered a wildcard for any embedder, that is,
Peter Kasting 2010/03/18 20:59:20 Nit: "any embedder except the origin itself"
71 // it will be used by GetContentSetting() when there's no specific setting for
72 // |requesting_origin| and |embedder|.
Peter Kasting 2010/03/18 20:59:20 Nit: "when |embedder| != |requesting_origin| and t
73 // |requesting_origin| must be is_valid().
Peter Kasting 2010/03/18 20:59:20 Nit: "must be a valid GURL."
74 //
75 //
76 // This should only be called on the UI thread.
77 void SetContentSetting(const GURL& embedder,
Peter Kasting 2010/03/18 20:59:20 Nit: As above, I'd reverse these first two args.
78 const GURL& requesting_origin,
79 ContentSetting setting);
80
81 // Resets all settings levels.
82 //
83 // This should only be called on the UI thread.
84 void ResetToDefault();
85
86 private:
87 friend class base::RefCountedThreadSafe<GeolocationContentSettingsMap>;
88
89 // The name to use with dictionary prefs.
90 static const wchar_t* kTypeName;
91
92 // The default setting.
93 static const ContentSetting kDefaultSetting;
94
95 ~GeolocationContentSettingsMap();
96
97 // Sets the fields of |embedder_settings| based on the values in |dictionary|.
98 static void GetEmbedderSettingsFromDictionary(
99 const DictionaryValue* dictionary, EmbedderSettings* embedder_settings);
100
101 static ContentSetting ConvertToContentSetting(int content_setting);
Peter Kasting 2010/03/18 20:59:20 If we want this, it should live in content_setting
102
103 // The profile we're associated with.
104 Profile* profile_;
105
106 // Copies of the pref data, so that we can read it on the IO thread.
107 ContentSetting default_content_setting_;
108 RequestingOriginSettings requesting_origin_settings_;
109
110 // Used around accesses to the settings objects to guarantee thread safety.
111 mutable Lock lock_;
112
113 DISALLOW_COPY_AND_ASSIGN(GeolocationContentSettingsMap);
114 };
115
116 #endif // CHROME_BROWSER_GEOLOCATION_GEOLOCATION_CONTENT_SETTINGS_MAP_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698