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

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

Powered by Google App Engine
This is Rietveld 408576698