OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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/extension_permission_set.h" | 5 #include "chrome/common/extensions/extension_permission_set.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 ExtensionPermissionMessage ExtensionAPIPermission::GetMessage() const { | 153 ExtensionPermissionMessage ExtensionAPIPermission::GetMessage() const { |
154 return ExtensionPermissionMessage( | 154 return ExtensionPermissionMessage( |
155 message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); | 155 message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); |
156 } | 156 } |
157 | 157 |
158 ExtensionAPIPermission::ExtensionAPIPermission( | 158 ExtensionAPIPermission::ExtensionAPIPermission( |
159 ID id, | 159 ID id, |
160 const char* name, | 160 const char* name, |
161 int l10n_message_id, | 161 int l10n_message_id, |
162 ExtensionPermissionMessage::ID message_id, | 162 ExtensionPermissionMessage::ID message_id, |
163 int flags) | 163 int flags, |
| 164 int type_restrictions) |
164 : id_(id), | 165 : id_(id), |
165 name_(name), | 166 name_(name), |
166 flags_(flags), | 167 flags_(flags), |
| 168 type_restrictions_(type_restrictions), |
167 l10n_message_id_(l10n_message_id), | 169 l10n_message_id_(l10n_message_id), |
168 message_id_(message_id) { | 170 message_id_(message_id) {} |
169 } | |
170 | 171 |
171 ExtensionAPIPermission::~ExtensionAPIPermission() { | 172 ExtensionAPIPermission::~ExtensionAPIPermission() {} |
| 173 |
| 174 // static |
| 175 void ExtensionAPIPermission::RegisterAllPermissions( |
| 176 ExtensionPermissionsInfo* info) { |
| 177 |
| 178 // Register hosted app permissions. |
| 179 info->RegisterPermission( |
| 180 kBackground, "background", 0, |
| 181 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeAll); |
| 182 info->RegisterPermission( |
| 183 kClipboardRead, "clipboardRead", IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD, |
| 184 ExtensionPermissionMessage::kClipboard, kFlagSupportsOptional, kTypeAll); |
| 185 info->RegisterPermission( |
| 186 kClipboardWrite, "clipboardWrite", 0, |
| 187 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeAll); |
| 188 info->RegisterPermission( |
| 189 kChromePrivate, "chromePrivate", 0, |
| 190 ExtensionPermissionMessage::kNone, kFlagNone, |
| 191 kTypeAll - kTypePlatformApp); |
| 192 info->RegisterPermission( |
| 193 kExperimental, "experimental", 0, |
| 194 ExtensionPermissionMessage::kNone, kFlagNone, kTypeAll); |
| 195 info->RegisterPermission( |
| 196 kGeolocation, "geolocation", IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION, |
| 197 ExtensionPermissionMessage::kGeolocation, kFlagNone, kTypeAll); |
| 198 info->RegisterPermission( |
| 199 kNotification, "notifications", 0, |
| 200 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeAll); |
| 201 info->RegisterPermission( |
| 202 kUnlimitedStorage, "unlimitedStorage", 0, |
| 203 ExtensionPermissionMessage::kNone, kFlagNone, kTypeAll); |
| 204 |
| 205 // Hosted app and private permissions. |
| 206 info->RegisterPermission( |
| 207 kChromeAuthPrivate, "chromeAuthPrivate", 0, |
| 208 ExtensionPermissionMessage::kNone, kFlagComponentOnly, |
| 209 kTypeAll - kTypePlatformApp); |
| 210 info->RegisterPermission( |
| 211 kWebstorePrivate, "webstorePrivate", 0, |
| 212 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeAll); |
| 213 |
| 214 // Register extension permissions. |
| 215 info->RegisterPermission( |
| 216 kBookmark, "bookmarks", IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS, |
| 217 ExtensionPermissionMessage::kBookmarks, |
| 218 kFlagSupportsOptional, kTypeDefault); |
| 219 info->RegisterPermission( |
| 220 kContentSettings, "contentSettings", |
| 221 IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS, |
| 222 ExtensionPermissionMessage::kContentSettings, kFlagNone, kTypeDefault); |
| 223 info->RegisterPermission( |
| 224 kContextMenus, "contextMenus", 0, |
| 225 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeDefault); |
| 226 info->RegisterPermission( |
| 227 kCookie, "cookies", 0, |
| 228 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, |
| 229 kTypeDefault - kTypePlatformApp); |
| 230 info->RegisterPermission( |
| 231 kDebugger, "debugger", IDS_EXTENSION_PROMPT_WARNING_DEBUGGER, |
| 232 ExtensionPermissionMessage::kDebugger, |
| 233 kFlagSupportsOptional, kTypeDefault); |
| 234 info->RegisterPermission( |
| 235 kFileBrowserHandler, "fileBrowserHandler", 0, |
| 236 ExtensionPermissionMessage::kNone, kFlagNone, kTypeDefault); |
| 237 info->RegisterPermission( |
| 238 kHistory, "history", IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY, |
| 239 ExtensionPermissionMessage::kBrowsingHistory, |
| 240 kFlagSupportsOptional, kTypeDefault); |
| 241 info->RegisterPermission( |
| 242 kIdle, "idle", 0, ExtensionPermissionMessage::kNone, |
| 243 kFlagSupportsOptional, kTypeDefault); |
| 244 info->RegisterPermission( |
| 245 kInputMethodPrivate, "inputMethodPrivate", 0, |
| 246 ExtensionPermissionMessage::kNone, kFlagNone, kTypeDefault); |
| 247 info->RegisterPermission( |
| 248 kManagement, "management", IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT, |
| 249 ExtensionPermissionMessage::kManagement, |
| 250 kFlagSupportsOptional, kTypeDefault); |
| 251 info->RegisterPermission( |
| 252 kPageCapture, "pageCapture", |
| 253 IDS_EXTENSION_PROMPT_WARNING_ALL_PAGES_CONTENT, |
| 254 ExtensionPermissionMessage::kAllPageContent, kFlagNone, kTypeDefault); |
| 255 info->RegisterPermission( |
| 256 kTab, "tabs", IDS_EXTENSION_PROMPT_WARNING_TABS, |
| 257 ExtensionPermissionMessage::kTabs, kFlagSupportsOptional, |
| 258 kTypeDefault - kTypePlatformApp); |
| 259 info->RegisterPermission( |
| 260 kTts, "tts", 0, |
| 261 ExtensionPermissionMessage::kNone, kFlagNone, kTypeDefault); |
| 262 info->RegisterPermission( |
| 263 kTtsEngine, "ttsEngine", IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE, |
| 264 ExtensionPermissionMessage::kTtsEngine, kFlagNone, kTypeDefault); |
| 265 info->RegisterPermission( |
| 266 kWebNavigation, "webNavigation", 0, |
| 267 ExtensionPermissionMessage::kNone, kFlagNone, |
| 268 kTypeDefault - kTypePlatformApp); |
| 269 info->RegisterPermission( |
| 270 kWebRequest, "webRequest", 0, |
| 271 ExtensionPermissionMessage::kNone, kFlagNone, |
| 272 kTypeDefault - kTypePlatformApp); |
| 273 info->RegisterPermission( |
| 274 kWebRequestBlocking, "webRequestBlocking", 0, |
| 275 ExtensionPermissionMessage::kNone, kFlagNone, |
| 276 kTypeDefault - kTypePlatformApp); |
| 277 info->RegisterPermission( |
| 278 kWebSocketProxyPrivate, "webSocketProxyPrivate", 0, |
| 279 ExtensionPermissionMessage::kNone, kFlagNone, |
| 280 kTypeDefault - kTypePlatformApp); |
| 281 |
| 282 // Register private permissions. |
| 283 info->RegisterPermission( |
| 284 kChromeosInfoPrivate, "chromeosInfoPrivate", 0, |
| 285 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault); |
| 286 info->RegisterPermission( |
| 287 kFileBrowserPrivate, "fileBrowserPrivate", 0, |
| 288 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault); |
| 289 info->RegisterPermission( |
| 290 kMediaPlayerPrivate, "mediaPlayerPrivate", 0, |
| 291 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault); |
| 292 info->RegisterPermission( |
| 293 kMetricsPrivate, "metricsPrivate", 0, |
| 294 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault); |
| 295 |
| 296 // Full url access permissions. |
| 297 info->RegisterPermission( |
| 298 kProxy, "proxy", 0, ExtensionPermissionMessage::kNone, |
| 299 kFlagImpliesFullURLAccess, kTypeDefault); |
| 300 |
| 301 info->RegisterPermission( |
| 302 kDevtools, "devtools", 0, ExtensionPermissionMessage::kNone, |
| 303 kFlagImpliesFullURLAccess, kTypeDefault); |
| 304 |
| 305 info->RegisterPermission( |
| 306 kPlugin, "plugin", IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, |
| 307 ExtensionPermissionMessage::kFullAccess, |
| 308 kFlagImpliesFullURLAccess | kFlagImpliesFullAccess, kTypeDefault); |
| 309 |
| 310 // Platform-app permissions. |
| 311 info->RegisterPermission( |
| 312 kSocket, "socket", 0, |
| 313 ExtensionPermissionMessage::kNone, kFlagNone, kTypePlatformApp); |
| 314 |
| 315 // Register aliases. |
| 316 info->RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission); |
| 317 info->RegisterAlias("tabs", kWindowsPermission); |
172 } | 318 } |
173 | 319 |
174 // | 320 // |
175 // ExtensionPermissionsInfo | 321 // ExtensionPermissionsInfo |
176 // | 322 // |
177 | 323 |
178 // static | 324 // static |
179 ExtensionPermissionsInfo* ExtensionPermissionsInfo::GetInstance() { | 325 ExtensionPermissionsInfo* ExtensionPermissionsInfo::GetInstance() { |
180 return Singleton<ExtensionPermissionsInfo>::get(); | 326 return Singleton<ExtensionPermissionsInfo>::get(); |
181 } | 327 } |
(...skipping 29 matching lines...) Expand all Loading... |
211 } | 357 } |
212 | 358 |
213 ExtensionPermissionsInfo::~ExtensionPermissionsInfo() { | 359 ExtensionPermissionsInfo::~ExtensionPermissionsInfo() { |
214 for (IDMap::iterator i = id_map_.begin(); i != id_map_.end(); ++i) | 360 for (IDMap::iterator i = id_map_.begin(); i != id_map_.end(); ++i) |
215 delete i->second; | 361 delete i->second; |
216 } | 362 } |
217 | 363 |
218 ExtensionPermissionsInfo::ExtensionPermissionsInfo() | 364 ExtensionPermissionsInfo::ExtensionPermissionsInfo() |
219 : hosted_app_permission_count_(0), | 365 : hosted_app_permission_count_(0), |
220 permission_count_(0) { | 366 permission_count_(0) { |
221 // Map the permissions flags to shorter names for convenience. | 367 ExtensionAPIPermission::RegisterAllPermissions(this); |
222 int none = ExtensionAPIPermission::kFlagNone; | |
223 int hosted_app = ExtensionAPIPermission::kFlagHostedApp; | |
224 int component_only = ExtensionAPIPermission::kFlagComponentOnly; | |
225 int full_access = ExtensionAPIPermission::kFlagImpliesFullAccess; | |
226 int all_urls = ExtensionAPIPermission::kFlagImpliesFullURLAccess; | |
227 int platform_app_only = ExtensionAPIPermission::kFlagPlatformAppOnly; | |
228 | |
229 // Note: please update the permissions API documentation when modifying which | |
230 // permissions can be specified as optional. | |
231 int optional = ExtensionAPIPermission::kFlagSupportsOptional; | |
232 | |
233 // Hosted app permissions | |
234 RegisterPermission( | |
235 ExtensionAPIPermission::kBackground, "background", 0, | |
236 ExtensionPermissionMessage::kNone, hosted_app | optional); | |
237 RegisterPermission( | |
238 ExtensionAPIPermission::kClipboardRead, "clipboardRead", | |
239 IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD, | |
240 ExtensionPermissionMessage::kClipboard, hosted_app | optional); | |
241 RegisterPermission( | |
242 ExtensionAPIPermission::kClipboardWrite, "clipboardWrite", 0, | |
243 ExtensionPermissionMessage::kNone, hosted_app | optional); | |
244 RegisterPermission( | |
245 ExtensionAPIPermission::kChromePrivate, "chromePrivate", 0, | |
246 ExtensionPermissionMessage::kNone, hosted_app); | |
247 RegisterPermission( | |
248 ExtensionAPIPermission::kExperimental, "experimental", 0, | |
249 ExtensionPermissionMessage::kNone, hosted_app); | |
250 RegisterPermission( | |
251 ExtensionAPIPermission::kGeolocation, "geolocation", | |
252 IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION, | |
253 ExtensionPermissionMessage::kGeolocation, hosted_app); | |
254 RegisterPermission( | |
255 ExtensionAPIPermission::kNotification, "notifications", 0, | |
256 ExtensionPermissionMessage::kNone, hosted_app | optional); | |
257 RegisterPermission( | |
258 ExtensionAPIPermission::kUnlimitedStorage, "unlimitedStorage", 0, | |
259 ExtensionPermissionMessage::kNone, hosted_app); | |
260 | |
261 // Hosted app and private permissions. | |
262 RegisterPermission( | |
263 ExtensionAPIPermission::kChromeAuthPrivate, "chromeAuthPrivate", 0, | |
264 ExtensionPermissionMessage::kNone, hosted_app | component_only); | |
265 RegisterPermission( | |
266 ExtensionAPIPermission::kWebstorePrivate, "webstorePrivate", 0, | |
267 ExtensionPermissionMessage::kNone, hosted_app | component_only); | |
268 | |
269 // Extension permissions. | |
270 RegisterPermission( | |
271 ExtensionAPIPermission::kBookmark, "bookmarks", | |
272 IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS, | |
273 ExtensionPermissionMessage::kBookmarks, optional); | |
274 RegisterPermission( | |
275 ExtensionAPIPermission::kContentSettings, "contentSettings", | |
276 IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS, | |
277 ExtensionPermissionMessage::kContentSettings, none); | |
278 RegisterPermission( | |
279 ExtensionAPIPermission::kContextMenus, "contextMenus", 0, | |
280 ExtensionPermissionMessage::kNone, optional); | |
281 RegisterPermission( | |
282 ExtensionAPIPermission::kCookie, "cookies", 0, | |
283 ExtensionPermissionMessage::kNone, optional); | |
284 RegisterPermission( | |
285 ExtensionAPIPermission::kDebugger, "debugger", | |
286 IDS_EXTENSION_PROMPT_WARNING_DEBUGGER, | |
287 ExtensionPermissionMessage::kDebugger, optional); | |
288 RegisterPermission( | |
289 ExtensionAPIPermission::kFileBrowserHandler, "fileBrowserHandler", 0, | |
290 ExtensionPermissionMessage::kNone, none); | |
291 RegisterPermission( | |
292 ExtensionAPIPermission::kHistory, "history", | |
293 IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY, | |
294 ExtensionPermissionMessage::kBrowsingHistory, optional); | |
295 RegisterPermission( | |
296 ExtensionAPIPermission::kIdle, "idle", 0, | |
297 ExtensionPermissionMessage::kNone, optional); | |
298 RegisterPermission( | |
299 ExtensionAPIPermission::kInputMethodPrivate, "inputMethodPrivate", 0, | |
300 ExtensionPermissionMessage::kNone, none); | |
301 RegisterPermission( | |
302 ExtensionAPIPermission::kManagement, "management", | |
303 IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT, | |
304 ExtensionPermissionMessage::kManagement, optional); | |
305 RegisterPermission( | |
306 ExtensionAPIPermission::kPageCapture, "pageCapture", | |
307 IDS_EXTENSION_PROMPT_WARNING_ALL_PAGES_CONTENT, | |
308 ExtensionPermissionMessage::kAllPageContent, none); | |
309 RegisterPermission( | |
310 ExtensionAPIPermission::kTab, "tabs", | |
311 IDS_EXTENSION_PROMPT_WARNING_TABS, | |
312 ExtensionPermissionMessage::kTabs, optional); | |
313 RegisterPermission( | |
314 ExtensionAPIPermission::kTts, "tts", 0, | |
315 ExtensionPermissionMessage::kNone, none); | |
316 RegisterPermission( | |
317 ExtensionAPIPermission::kTtsEngine, "ttsEngine", | |
318 IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE, | |
319 ExtensionPermissionMessage::kTtsEngine, none); | |
320 RegisterPermission( | |
321 ExtensionAPIPermission::kWebNavigation, "webNavigation", 0, | |
322 ExtensionPermissionMessage::kNone, none); | |
323 RegisterPermission( | |
324 ExtensionAPIPermission::kWebRequest, "webRequest", 0, | |
325 ExtensionPermissionMessage::kNone, none); | |
326 RegisterPermission( | |
327 ExtensionAPIPermission::kWebRequestBlocking, "webRequestBlocking", 0, | |
328 ExtensionPermissionMessage::kNone, none); | |
329 RegisterPermission( | |
330 ExtensionAPIPermission::kWebSocketProxyPrivate, | |
331 "webSocketProxyPrivate", 0, | |
332 ExtensionPermissionMessage::kNone, none); | |
333 | |
334 // Private permissions | |
335 RegisterPermission( | |
336 ExtensionAPIPermission::kChromeosInfoPrivate, "chromeosInfoPrivate", 0, | |
337 ExtensionPermissionMessage::kNone, component_only); | |
338 RegisterPermission( | |
339 ExtensionAPIPermission::kFileBrowserPrivate, "fileBrowserPrivate", 0, | |
340 ExtensionPermissionMessage::kNone, component_only); | |
341 RegisterPermission( | |
342 ExtensionAPIPermission::kMediaPlayerPrivate, "mediaPlayerPrivate", 0, | |
343 ExtensionPermissionMessage::kNone, component_only); | |
344 RegisterPermission( | |
345 ExtensionAPIPermission::kMetricsPrivate, "metricsPrivate", 0, | |
346 ExtensionPermissionMessage::kNone, component_only); | |
347 | |
348 // Full url access permissions. | |
349 RegisterPermission( | |
350 ExtensionAPIPermission::kProxy, "proxy", 0, | |
351 ExtensionPermissionMessage::kNone, all_urls); | |
352 | |
353 RegisterPermission( | |
354 ExtensionAPIPermission::kDevtools, "devtools", 0, | |
355 ExtensionPermissionMessage::kNone, all_urls); | |
356 | |
357 RegisterPermission( | |
358 ExtensionAPIPermission::kPlugin, "plugin", | |
359 IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, | |
360 ExtensionPermissionMessage::kFullAccess, all_urls | full_access); | |
361 | |
362 // Platform-app permissions | |
363 RegisterPermission( | |
364 ExtensionAPIPermission::kSocket, "socket", 0, | |
365 ExtensionPermissionMessage::kNone, platform_app_only); | |
366 | |
367 // Register Aliases | |
368 RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission); | |
369 RegisterAlias("tabs", kWindowsPermission); | |
370 } | 368 } |
371 | 369 |
372 void ExtensionPermissionsInfo::RegisterAlias( | 370 void ExtensionPermissionsInfo::RegisterAlias( |
373 const char* name, const char* alias) { | 371 const char* name, const char* alias) { |
374 DCHECK(name_map_.find(name) != name_map_.end()); | 372 DCHECK(name_map_.find(name) != name_map_.end()); |
375 DCHECK(name_map_.find(alias) == name_map_.end()); | 373 DCHECK(name_map_.find(alias) == name_map_.end()); |
376 name_map_[alias] = name_map_[name]; | 374 name_map_[alias] = name_map_[name]; |
377 } | 375 } |
378 | 376 |
379 void ExtensionPermissionsInfo::RegisterPermission( | 377 void ExtensionPermissionsInfo::RegisterPermission( |
380 ExtensionAPIPermission::ID id, | 378 ExtensionAPIPermission::ID id, |
381 const char* name, | 379 const char* name, |
382 int l10n_message_id, | 380 int l10n_message_id, |
383 ExtensionPermissionMessage::ID message_id, | 381 ExtensionPermissionMessage::ID message_id, |
384 int flags) { | 382 int flags, |
| 383 int type_restrictions) { |
385 DCHECK(id_map_.find(id) == id_map_.end()); | 384 DCHECK(id_map_.find(id) == id_map_.end()); |
386 DCHECK(name_map_.find(name) == name_map_.end()); | 385 DCHECK(name_map_.find(name) == name_map_.end()); |
387 | 386 |
388 ExtensionAPIPermission* permission = | 387 ExtensionAPIPermission* permission = new ExtensionAPIPermission( |
389 new ExtensionAPIPermission(id, name, l10n_message_id, message_id, flags); | 388 id, name, l10n_message_id, message_id, flags, type_restrictions); |
390 | 389 |
391 id_map_[id] = permission; | 390 id_map_[id] = permission; |
392 name_map_[name] = permission; | 391 name_map_[name] = permission; |
393 | 392 |
394 permission_count_++; | 393 permission_count_++; |
395 if (permission->is_hosted_app()) | |
396 hosted_app_permission_count_++; | |
397 } | 394 } |
398 | 395 |
399 // | 396 // |
400 // ExtensionPermissionSet | 397 // ExtensionPermissionSet |
401 // | 398 // |
402 | 399 |
403 ExtensionPermissionSet::ExtensionPermissionSet() { | 400 ExtensionPermissionSet::ExtensionPermissionSet() { |
404 } | 401 } |
405 | 402 |
406 ExtensionPermissionSet::ExtensionPermissionSet( | 403 ExtensionPermissionSet::ExtensionPermissionSet( |
(...skipping 10 matching lines...) Expand all Loading... |
417 ExtensionPermissionSet::ExtensionPermissionSet( | 414 ExtensionPermissionSet::ExtensionPermissionSet( |
418 const ExtensionAPIPermissionSet& apis, | 415 const ExtensionAPIPermissionSet& apis, |
419 const URLPatternSet& explicit_hosts, | 416 const URLPatternSet& explicit_hosts, |
420 const URLPatternSet& scriptable_hosts) | 417 const URLPatternSet& scriptable_hosts) |
421 : apis_(apis), | 418 : apis_(apis), |
422 scriptable_hosts_(scriptable_hosts) { | 419 scriptable_hosts_(scriptable_hosts) { |
423 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); | 420 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); |
424 InitEffectiveHosts(); | 421 InitEffectiveHosts(); |
425 } | 422 } |
426 | 423 |
427 ExtensionPermissionSet::~ExtensionPermissionSet() { | 424 ExtensionPermissionSet::~ExtensionPermissionSet() {} |
428 } | |
429 | 425 |
430 // static | 426 // static |
431 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( | 427 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( |
432 const ExtensionPermissionSet* set1, | 428 const ExtensionPermissionSet* set1, |
433 const ExtensionPermissionSet* set2) { | 429 const ExtensionPermissionSet* set2) { |
434 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); | 430 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); |
435 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; | 431 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; |
436 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; | 432 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
437 | 433 |
438 ExtensionAPIPermissionSet apis; | 434 ExtensionAPIPermissionSet apis; |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); | 681 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); |
686 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); | 682 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); |
687 i != apis_.end(); ++i) { | 683 i != apis_.end(); ++i) { |
688 ExtensionAPIPermission* permission = info->GetByID(*i); | 684 ExtensionAPIPermission* permission = info->GetByID(*i); |
689 if (permission && permission->is_component_only()) | 685 if (permission && permission->is_component_only()) |
690 return true; | 686 return true; |
691 } | 687 } |
692 return false; | 688 return false; |
693 } | 689 } |
694 | 690 |
695 bool ExtensionPermissionSet::HasPlatformAppPermissions() const { | |
696 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); | |
697 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); | |
698 i != apis_.end(); ++i) { | |
699 ExtensionAPIPermission* permission = info->GetByID(*i); | |
700 if (permission && permission->is_platform_app_only()) | |
701 return true; | |
702 } | |
703 return false; | |
704 } | |
705 | |
706 bool ExtensionPermissionSet::HasLessPrivilegesThan( | 691 bool ExtensionPermissionSet::HasLessPrivilegesThan( |
707 const ExtensionPermissionSet* permissions) const { | 692 const ExtensionPermissionSet* permissions) const { |
708 // Things can't get worse than native code access. | 693 // Things can't get worse than native code access. |
709 if (HasEffectiveFullAccess()) | 694 if (HasEffectiveFullAccess()) |
710 return false; | 695 return false; |
711 | 696 |
712 // Otherwise, it's a privilege increase if the new one has full access. | 697 // Otherwise, it's a privilege increase if the new one has full access. |
713 if (permissions->HasEffectiveFullAccess()) | 698 if (permissions->HasEffectiveFullAccess()) |
714 return true; | 699 return true; |
715 | 700 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 std::set<std::string> new_hosts_set(GetDistinctHosts(new_list, false, false)); | 847 std::set<std::string> new_hosts_set(GetDistinctHosts(new_list, false, false)); |
863 std::set<std::string> old_hosts_set(GetDistinctHosts(old_list, false, false)); | 848 std::set<std::string> old_hosts_set(GetDistinctHosts(old_list, false, false)); |
864 std::set<std::string> new_hosts_only; | 849 std::set<std::string> new_hosts_only; |
865 | 850 |
866 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), | 851 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), |
867 old_hosts_set.begin(), old_hosts_set.end(), | 852 old_hosts_set.begin(), old_hosts_set.end(), |
868 std::inserter(new_hosts_only, new_hosts_only.begin())); | 853 std::inserter(new_hosts_only, new_hosts_only.begin())); |
869 | 854 |
870 return !new_hosts_only.empty(); | 855 return !new_hosts_only.empty(); |
871 } | 856 } |
OLD | NEW |