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

Side by Side Diff: chrome/common/extensions/permissions/api_permission.cc

Issue 10692160: Support socket endpoint permissions for AppsV2 Socket API. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase and fix a unit test Created 8 years, 4 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/common/extensions/permissions/api_permission.h" 5 #include "chrome/common/extensions/permissions/api_permission.h"
6 6
7 #include "chrome/common/extensions/permissions/permissions_info.h" 7 #include "chrome/common/extensions/permissions/permissions_info.h"
8 #include "chrome/common/extensions/permissions/socket_permission.h"
8 #include "grit/generated_resources.h" 9 #include "grit/generated_resources.h"
9 #include "ui/base/l10n/l10n_util.h" 10 #include "ui/base/l10n/l10n_util.h"
10 11
11 namespace { 12 namespace {
12 13
14 using extensions::APIPermission;
15 using extensions::APIPermissionDetail;
16
13 const char kOldUnlimitedStoragePermission[] = "unlimited_storage"; 17 const char kOldUnlimitedStoragePermission[] = "unlimited_storage";
14 const char kWindowsPermission[] = "windows"; 18 const char kWindowsPermission[] = "windows";
15 19
20 class SimpleDetail : public APIPermissionDetail {
21 public:
22 explicit SimpleDetail(const APIPermission* permission)
23 : APIPermissionDetail(permission) { }
24
25 virtual bool FromValue(const base::Value* value) OVERRIDE {
26 if (value)
27 return false;
28 return true;
29 }
30
31 virtual void ToValue(base::Value** value) const OVERRIDE {
32 *value = NULL;
33 }
34
35 virtual bool Check(
36 const APIPermissionDetail::CheckParam* param) const OVERRIDE {
37 return !param;
38 }
39
40 virtual bool Equal(const APIPermissionDetail* detail) const OVERRIDE {
41 if (this == detail)
42 return true;
43 CHECK(permission() == detail->permission());
44 return true;
45 }
46
47 virtual APIPermissionDetail* Clone() const OVERRIDE {
48 return new SimpleDetail(permission());
49 }
50
51 virtual APIPermissionDetail* Diff(
52 const APIPermissionDetail* detail) const OVERRIDE {
53 CHECK(permission() == detail->permission());
54 return NULL;
55 }
56
57 virtual APIPermissionDetail* Union(
58 const APIPermissionDetail* detail) const OVERRIDE {
59 CHECK(permission() == detail->permission());
60 return new SimpleDetail(permission());
61 }
62
63 virtual APIPermissionDetail* Intersect(
64 const APIPermissionDetail* detail) const OVERRIDE {
65 CHECK(permission() == detail->permission());
66 return new SimpleDetail(permission());
67 }
68
69 virtual bool Contains(const APIPermissionDetail* detail) const OVERRIDE {
70 CHECK(permission() == detail->permission());
71 return true;
72 }
73
74 virtual void Write(IPC::Message* m) const OVERRIDE { }
75
76 virtual bool Read(const IPC::Message* m, PickleIterator* iter) OVERRIDE {
77 return true;
78 }
79
80 virtual void Log(std::string* log) const OVERRIDE { }
81
82 protected:
83 friend class extensions::APIPermissionDetail;
84 virtual ~SimpleDetail() { }
85 };
86
87 template<typename T>
88 APIPermissionDetail* CreatePermissionDetail(const APIPermission* permission) {
89 return new T(permission);
90 }
91
16 } // namespace 92 } // namespace
17 93
18 namespace extensions { 94 namespace extensions {
19 95
20 // 96 //
21 // APIPermission 97 // APIPermission
22 // 98 //
23 99
24 APIPermission::~APIPermission() {} 100 APIPermission::~APIPermission() {}
25 101
102 scoped_refptr<APIPermissionDetail> APIPermission::CreateDetail() const {
103 scoped_refptr<APIPermissionDetail> p;
104 if (detail_constructor_)
105 p = detail_constructor_(this);
106 if (!p.get())
107 p = new SimpleDetail(this);
108 return p;
109 }
110
26 PermissionMessage APIPermission::GetMessage_() const { 111 PermissionMessage APIPermission::GetMessage_() const {
27 return PermissionMessage( 112 return PermissionMessage(
28 message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); 113 message_id_, l10n_util::GetStringUTF16(l10n_message_id_));
29 } 114 }
30 115
31 APIPermission::APIPermission( 116 APIPermission::APIPermission(
32 ID id, 117 ID id,
33 const char* name, 118 const char* name,
34 int l10n_message_id, 119 int l10n_message_id,
35 PermissionMessage::ID message_id, 120 PermissionMessage::ID message_id,
36 int flags) 121 int flags,
122 DetailConstructor detail_constructor)
37 : id_(id), 123 : id_(id),
38 name_(name), 124 name_(name),
39 flags_(flags), 125 flags_(flags),
40 l10n_message_id_(l10n_message_id), 126 l10n_message_id_(l10n_message_id),
41 message_id_(message_id) {} 127 message_id_(message_id),
128 detail_constructor_(detail_constructor) { }
42 129
43 // static 130 // static
44 void APIPermission::RegisterAllPermissions( 131 void APIPermission::RegisterAllPermissions(
45 PermissionsInfo* info) { 132 PermissionsInfo* info) {
46 133
47 struct PermissionRegistration { 134 struct PermissionRegistration {
48 APIPermission::ID id; 135 APIPermission::ID id;
49 const char* name; 136 const char* name;
50 int flags; 137 int flags;
51 int l10n_message_id; 138 int l10n_message_id;
52 PermissionMessage::ID message_id; 139 PermissionMessage::ID message_id;
140 DetailConstructor detail_constructor;
53 } PermissionsToRegister[] = { 141 } PermissionsToRegister[] = {
54 // Register permissions for all extension types. 142 // Register permissions for all extension types.
55 { kBackground, "background" }, 143 { kBackground, "background" },
56 { kClipboardRead, "clipboardRead", kFlagNone, 144 { kClipboardRead, "clipboardRead", kFlagNone,
57 IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD, 145 IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD,
58 PermissionMessage::kClipboard }, 146 PermissionMessage::kClipboard },
59 { kClipboardWrite, "clipboardWrite" }, 147 { kClipboardWrite, "clipboardWrite" },
60 { kDeclarativeWebRequest, "declarativeWebRequest" }, 148 { kDeclarativeWebRequest, "declarativeWebRequest" },
61 { kDownloads, "downloads", kFlagNone, 149 { kDownloads, "downloads", kFlagNone,
62 IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS, 150 IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 { kDevtools, "devtools", 235 { kDevtools, "devtools",
148 kFlagImpliesFullURLAccess | kFlagCannotBeOptional }, 236 kFlagImpliesFullURLAccess | kFlagCannotBeOptional },
149 { kPlugin, "plugin", 237 { kPlugin, "plugin",
150 kFlagImpliesFullURLAccess | kFlagImpliesFullAccess | 238 kFlagImpliesFullURLAccess | kFlagImpliesFullAccess |
151 kFlagCannotBeOptional, 239 kFlagCannotBeOptional,
152 IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, 240 IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
153 PermissionMessage::kFullAccess }, 241 PermissionMessage::kFullAccess },
154 242
155 // Platform-app permissions. 243 // Platform-app permissions.
156 { kSerial, "serial", kFlagCannotBeOptional }, 244 { kSerial, "serial", kFlagCannotBeOptional },
157 { kSocket, "socket", kFlagCannotBeOptional }, 245 { kSocket, "socket", kFlagCannotBeOptional, 0, PermissionMessage::kNone,
246 &CreatePermissionDetail<SocketPermission> },
158 { kAppRuntime, "app.runtime" }, 247 { kAppRuntime, "app.runtime" },
159 { kAppWindow, "app.window" }, 248 { kAppWindow, "app.window" },
160 { kAudioCapture, "audioCapture", kFlagNone, 249 { kAudioCapture, "audioCapture", kFlagNone,
161 IDS_EXTENSION_PROMPT_WARNING_AUDIO_CAPTURE, 250 IDS_EXTENSION_PROMPT_WARNING_AUDIO_CAPTURE,
162 PermissionMessage::kAudioCapture }, 251 PermissionMessage::kAudioCapture },
163 { kVideoCapture, "videoCapture", kFlagNone, 252 { kVideoCapture, "videoCapture", kFlagNone,
164 IDS_EXTENSION_PROMPT_WARNING_VIDEO_CAPTURE, 253 IDS_EXTENSION_PROMPT_WARNING_VIDEO_CAPTURE,
165 PermissionMessage::kVideoCapture }, 254 PermissionMessage::kVideoCapture },
166 // "fileSystem" has no permission string because read-only access is only 255 // "fileSystem" has no permission string because read-only access is only
167 // granted after the user has been shown a file chooser dialog and selected 256 // granted after the user has been shown a file chooser dialog and selected
168 // a file. Selecting the file is considered consent to read it. 257 // a file. Selecting the file is considered consent to read it.
169 { kFileSystem, "fileSystem" }, 258 { kFileSystem, "fileSystem" },
170 { kFileSystemWrite, "fileSystemWrite", kFlagNone, 259 { kFileSystemWrite, "fileSystemWrite", kFlagNone,
171 IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE, 260 IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE,
172 PermissionMessage::kFileSystemWrite }, 261 PermissionMessage::kFileSystemWrite },
173 { kMediaGalleriesAllGalleries, "mediaGalleriesAllGalleries", 262 { kMediaGalleriesAllGalleries, "mediaGalleriesAllGalleries",
174 kFlagCannotBeOptional, 263 kFlagCannotBeOptional,
175 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_ALL_GALLERIES, 264 IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_ALL_GALLERIES,
176 PermissionMessage::kMediaGalleriesAllGalleries }, 265 PermissionMessage::kMediaGalleriesAllGalleries },
177 }; 266 };
178 267
179 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(PermissionsToRegister); ++i) { 268 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(PermissionsToRegister); ++i) {
180 const PermissionRegistration& pr = PermissionsToRegister[i]; 269 const PermissionRegistration& pr = PermissionsToRegister[i];
181 info->RegisterPermission( 270 info->RegisterPermission(
182 pr.id, pr.name, pr.l10n_message_id, 271 pr.id, pr.name, pr.l10n_message_id,
183 pr.message_id ? pr.message_id : PermissionMessage::kNone, 272 pr.message_id ? pr.message_id : PermissionMessage::kNone,
184 pr.flags); 273 pr.flags,
274 pr.detail_constructor);
185 } 275 }
186 276
187 // Register aliases. 277 // Register aliases.
188 info->RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission); 278 info->RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission);
189 info->RegisterAlias("tabs", kWindowsPermission); 279 info->RegisterAlias("tabs", kWindowsPermission);
190 } 280 }
191 281
282 APIPermissionDetail::~APIPermissionDetail() {
283 }
284
192 } // namespace extensions 285 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/common/extensions/permissions/api_permission.h ('k') | chrome/common/extensions/permissions/api_permission_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698