| 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::RegisterPermissions( |
| 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 kTab, "tabs", IDS_EXTENSION_PROMPT_WARNING_TABS, |
| 253 ExtensionPermissionMessage::kTabs, kFlagSupportsOptional, |
| 254 kTypeDefault - kTypePlatformApp); |
| 255 info->RegisterPermission( |
| 256 kTts, "tts", 0, |
| 257 ExtensionPermissionMessage::kNone, kFlagNone, kTypeDefault); |
| 258 info->RegisterPermission( |
| 259 kTtsEngine, "ttsEngine", IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE, |
| 260 ExtensionPermissionMessage::kTtsEngine, kFlagNone, kTypeDefault); |
| 261 info->RegisterPermission( |
| 262 kWebNavigation, "webNavigation", 0, |
| 263 ExtensionPermissionMessage::kNone, kFlagNone, |
| 264 kTypeDefault - kTypePlatformApp); |
| 265 info->RegisterPermission( |
| 266 kWebRequest, "webRequest", 0, |
| 267 ExtensionPermissionMessage::kNone, kFlagNone, |
| 268 kTypeDefault - kTypePlatformApp); |
| 269 info->RegisterPermission( |
| 270 kWebSocketProxyPrivate, "webSocketProxyPrivate", 0, |
| 271 ExtensionPermissionMessage::kNone, kFlagNone, |
| 272 kTypeDefault - kTypePlatformApp); |
| 273 |
| 274 // Register private permissions. |
| 275 info->RegisterPermission( |
| 276 kChromeosInfoPrivate, "chromeosInfoPrivate", 0, |
| 277 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault); |
| 278 info->RegisterPermission( |
| 279 kFileBrowserPrivate, "fileBrowserPrivate", 0, |
| 280 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault); |
| 281 info->RegisterPermission( |
| 282 kMediaPlayerPrivate, "mediaPlayerPrivate", 0, |
| 283 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault); |
| 284 |
| 285 // Full url access permissions. |
| 286 info->RegisterPermission( |
| 287 kProxy, "proxy", 0, ExtensionPermissionMessage::kNone, |
| 288 kFlagImpliesFullURLAccess, kTypeDefault); |
| 289 |
| 290 info->RegisterPermission( |
| 291 kDevtools, "devtools", 0, ExtensionPermissionMessage::kNone, |
| 292 kFlagImpliesFullURLAccess, kTypeDefault); |
| 293 |
| 294 info->RegisterPermission( |
| 295 kPlugin, "plugin", IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, |
| 296 ExtensionPermissionMessage::kFullAccess, |
| 297 kFlagImpliesFullURLAccess | kFlagImpliesFullAccess, kTypeDefault); |
| 298 |
| 299 // Register aliases. |
| 300 info->RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission); |
| 301 info->RegisterAlias("tabs", kWindowsPermission); |
| 172 } | 302 } |
| 173 | 303 |
| 174 // | 304 // |
| 175 // ExtensionPermissionsInfo | 305 // ExtensionPermissionsInfo |
| 176 // | 306 // |
| 177 | 307 |
| 178 // static | 308 // static |
| 179 ExtensionPermissionsInfo* ExtensionPermissionsInfo::GetInstance() { | 309 ExtensionPermissionsInfo* ExtensionPermissionsInfo::GetInstance() { |
| 180 return Singleton<ExtensionPermissionsInfo>::get(); | 310 return Singleton<ExtensionPermissionsInfo>::get(); |
| 181 } | 311 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 211 } | 341 } |
| 212 | 342 |
| 213 ExtensionPermissionsInfo::~ExtensionPermissionsInfo() { | 343 ExtensionPermissionsInfo::~ExtensionPermissionsInfo() { |
| 214 for (IDMap::iterator i = id_map_.begin(); i != id_map_.end(); ++i) | 344 for (IDMap::iterator i = id_map_.begin(); i != id_map_.end(); ++i) |
| 215 delete i->second; | 345 delete i->second; |
| 216 } | 346 } |
| 217 | 347 |
| 218 ExtensionPermissionsInfo::ExtensionPermissionsInfo() | 348 ExtensionPermissionsInfo::ExtensionPermissionsInfo() |
| 219 : hosted_app_permission_count_(0), | 349 : hosted_app_permission_count_(0), |
| 220 permission_count_(0) { | 350 permission_count_(0) { |
| 221 // Map the permissions flags to shorter names for convenience. | 351 ExtensionAPIPermission::RegisterPermissions(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 | |
| 228 // Note: please update the permissions API documentation when modifying which | |
| 229 // permissions can be specified as optional. | |
| 230 int optional = ExtensionAPIPermission::kFlagSupportsOptional; | |
| 231 | |
| 232 // Hosted app permissions | |
| 233 RegisterPermission( | |
| 234 ExtensionAPIPermission::kBackground, "background", 0, | |
| 235 ExtensionPermissionMessage::kNone, hosted_app | optional); | |
| 236 RegisterPermission( | |
| 237 ExtensionAPIPermission::kClipboardRead, "clipboardRead", | |
| 238 IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD, | |
| 239 ExtensionPermissionMessage::kClipboard, hosted_app | optional); | |
| 240 RegisterPermission( | |
| 241 ExtensionAPIPermission::kClipboardWrite, "clipboardWrite", 0, | |
| 242 ExtensionPermissionMessage::kNone, hosted_app | optional); | |
| 243 RegisterPermission( | |
| 244 ExtensionAPIPermission::kChromePrivate, "chromePrivate", 0, | |
| 245 ExtensionPermissionMessage::kNone, hosted_app); | |
| 246 RegisterPermission( | |
| 247 ExtensionAPIPermission::kExperimental, "experimental", 0, | |
| 248 ExtensionPermissionMessage::kNone, hosted_app); | |
| 249 RegisterPermission( | |
| 250 ExtensionAPIPermission::kGeolocation, "geolocation", | |
| 251 IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION, | |
| 252 ExtensionPermissionMessage::kGeolocation, hosted_app); | |
| 253 RegisterPermission( | |
| 254 ExtensionAPIPermission::kNotification, "notifications", 0, | |
| 255 ExtensionPermissionMessage::kNone, hosted_app | optional); | |
| 256 RegisterPermission( | |
| 257 ExtensionAPIPermission::kUnlimitedStorage, "unlimitedStorage", 0, | |
| 258 ExtensionPermissionMessage::kNone, hosted_app); | |
| 259 | |
| 260 // Hosted app and private permissions. | |
| 261 RegisterPermission( | |
| 262 ExtensionAPIPermission::kChromeAuthPrivate, "chromeAuthPrivate", 0, | |
| 263 ExtensionPermissionMessage::kNone, hosted_app | component_only); | |
| 264 RegisterPermission( | |
| 265 ExtensionAPIPermission::kWebstorePrivate, "webstorePrivate", 0, | |
| 266 ExtensionPermissionMessage::kNone, hosted_app | component_only); | |
| 267 | |
| 268 // Extension permissions. | |
| 269 RegisterPermission( | |
| 270 ExtensionAPIPermission::kBookmark, "bookmarks", | |
| 271 IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS, | |
| 272 ExtensionPermissionMessage::kBookmarks, optional); | |
| 273 RegisterPermission( | |
| 274 ExtensionAPIPermission::kContentSettings, "contentSettings", | |
| 275 IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS, | |
| 276 ExtensionPermissionMessage::kContentSettings, none); | |
| 277 RegisterPermission( | |
| 278 ExtensionAPIPermission::kContextMenus, "contextMenus", 0, | |
| 279 ExtensionPermissionMessage::kNone, optional); | |
| 280 RegisterPermission( | |
| 281 ExtensionAPIPermission::kCookie, "cookies", 0, | |
| 282 ExtensionPermissionMessage::kNone, optional); | |
| 283 RegisterPermission( | |
| 284 ExtensionAPIPermission::kDebugger, "debugger", | |
| 285 IDS_EXTENSION_PROMPT_WARNING_DEBUGGER, | |
| 286 ExtensionPermissionMessage::kDebugger, optional); | |
| 287 RegisterPermission( | |
| 288 ExtensionAPIPermission::kFileBrowserHandler, "fileBrowserHandler", 0, | |
| 289 ExtensionPermissionMessage::kNone, none); | |
| 290 RegisterPermission( | |
| 291 ExtensionAPIPermission::kHistory, "history", | |
| 292 IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY, | |
| 293 ExtensionPermissionMessage::kBrowsingHistory, optional); | |
| 294 RegisterPermission( | |
| 295 ExtensionAPIPermission::kIdle, "idle", 0, | |
| 296 ExtensionPermissionMessage::kNone, optional); | |
| 297 RegisterPermission( | |
| 298 ExtensionAPIPermission::kInputMethodPrivate, "inputMethodPrivate", 0, | |
| 299 ExtensionPermissionMessage::kNone, none); | |
| 300 RegisterPermission( | |
| 301 ExtensionAPIPermission::kManagement, "management", | |
| 302 IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT, | |
| 303 ExtensionPermissionMessage::kManagement, optional); | |
| 304 RegisterPermission( | |
| 305 ExtensionAPIPermission::kTab, "tabs", | |
| 306 IDS_EXTENSION_PROMPT_WARNING_TABS, | |
| 307 ExtensionPermissionMessage::kTabs, optional); | |
| 308 RegisterPermission( | |
| 309 ExtensionAPIPermission::kTts, "tts", 0, | |
| 310 ExtensionPermissionMessage::kNone, none); | |
| 311 RegisterPermission( | |
| 312 ExtensionAPIPermission::kTtsEngine, "ttsEngine", | |
| 313 IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE, | |
| 314 ExtensionPermissionMessage::kTtsEngine, none); | |
| 315 RegisterPermission( | |
| 316 ExtensionAPIPermission::kWebNavigation, "webNavigation", 0, | |
| 317 ExtensionPermissionMessage::kNone, none); | |
| 318 RegisterPermission( | |
| 319 ExtensionAPIPermission::kWebRequest, "webRequest", 0, | |
| 320 ExtensionPermissionMessage::kNone, none); | |
| 321 RegisterPermission( | |
| 322 ExtensionAPIPermission::kWebSocketProxyPrivate, | |
| 323 "webSocketProxyPrivate", 0, | |
| 324 ExtensionPermissionMessage::kNone, none); | |
| 325 | |
| 326 // Private permissions | |
| 327 RegisterPermission( | |
| 328 ExtensionAPIPermission::kChromeosInfoPrivate, "chromeosInfoPrivate", 0, | |
| 329 ExtensionPermissionMessage::kNone, component_only); | |
| 330 RegisterPermission( | |
| 331 ExtensionAPIPermission::kFileBrowserPrivate, "fileBrowserPrivate", 0, | |
| 332 ExtensionPermissionMessage::kNone, component_only); | |
| 333 RegisterPermission( | |
| 334 ExtensionAPIPermission::kMediaPlayerPrivate, "mediaPlayerPrivate", 0, | |
| 335 ExtensionPermissionMessage::kNone, component_only); | |
| 336 | |
| 337 // Full url access permissions. | |
| 338 RegisterPermission( | |
| 339 ExtensionAPIPermission::kProxy, "proxy", 0, | |
| 340 ExtensionPermissionMessage::kNone, all_urls); | |
| 341 | |
| 342 RegisterPermission( | |
| 343 ExtensionAPIPermission::kDevtools, "devtools", 0, | |
| 344 ExtensionPermissionMessage::kNone, all_urls); | |
| 345 | |
| 346 RegisterPermission( | |
| 347 ExtensionAPIPermission::kPlugin, "plugin", | |
| 348 IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, | |
| 349 ExtensionPermissionMessage::kFullAccess, all_urls | full_access); | |
| 350 | |
| 351 // Register Aliases | |
| 352 RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission); | |
| 353 RegisterAlias("tabs", kWindowsPermission); | |
| 354 } | 352 } |
| 355 | 353 |
| 356 void ExtensionPermissionsInfo::RegisterAlias( | 354 void ExtensionPermissionsInfo::RegisterAlias( |
| 357 const char* name, const char* alias) { | 355 const char* name, const char* alias) { |
| 358 DCHECK(name_map_.find(name) != name_map_.end()); | 356 DCHECK(name_map_.find(name) != name_map_.end()); |
| 359 DCHECK(name_map_.find(alias) == name_map_.end()); | 357 DCHECK(name_map_.find(alias) == name_map_.end()); |
| 360 name_map_[alias] = name_map_[name]; | 358 name_map_[alias] = name_map_[name]; |
| 361 } | 359 } |
| 362 | 360 |
| 363 void ExtensionPermissionsInfo::RegisterPermission( | 361 void ExtensionPermissionsInfo::RegisterPermission( |
| 364 ExtensionAPIPermission::ID id, | 362 ExtensionAPIPermission::ID id, |
| 365 const char* name, | 363 const char* name, |
| 366 int l10n_message_id, | 364 int l10n_message_id, |
| 367 ExtensionPermissionMessage::ID message_id, | 365 ExtensionPermissionMessage::ID message_id, |
| 368 int flags) { | 366 int flags, |
| 367 int type_restrictions) { |
| 369 DCHECK(id_map_.find(id) == id_map_.end()); | 368 DCHECK(id_map_.find(id) == id_map_.end()); |
| 370 DCHECK(name_map_.find(name) == name_map_.end()); | 369 DCHECK(name_map_.find(name) == name_map_.end()); |
| 371 | 370 |
| 372 ExtensionAPIPermission* permission = | 371 ExtensionAPIPermission* permission = new ExtensionAPIPermission( |
| 373 new ExtensionAPIPermission(id, name, l10n_message_id, message_id, flags); | 372 id, name, l10n_message_id, message_id, flags, type_restrictions); |
| 374 | 373 |
| 375 id_map_[id] = permission; | 374 id_map_[id] = permission; |
| 376 name_map_[name] = permission; | 375 name_map_[name] = permission; |
| 377 | 376 |
| 378 permission_count_++; | 377 permission_count_++; |
| 379 if (permission->is_hosted_app()) | |
| 380 hosted_app_permission_count_++; | |
| 381 } | 378 } |
| 382 | 379 |
| 383 // | 380 // |
| 384 // ExtensionPermissionSet | 381 // ExtensionPermissionSet |
| 385 // | 382 // |
| 386 | 383 |
| 387 ExtensionPermissionSet::ExtensionPermissionSet() { | 384 ExtensionPermissionSet::ExtensionPermissionSet() { |
| 388 } | 385 } |
| 389 | 386 |
| 390 ExtensionPermissionSet::ExtensionPermissionSet( | 387 ExtensionPermissionSet::ExtensionPermissionSet( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 401 ExtensionPermissionSet::ExtensionPermissionSet( | 398 ExtensionPermissionSet::ExtensionPermissionSet( |
| 402 const ExtensionAPIPermissionSet& apis, | 399 const ExtensionAPIPermissionSet& apis, |
| 403 const URLPatternSet& explicit_hosts, | 400 const URLPatternSet& explicit_hosts, |
| 404 const URLPatternSet& scriptable_hosts) | 401 const URLPatternSet& scriptable_hosts) |
| 405 : apis_(apis), | 402 : apis_(apis), |
| 406 scriptable_hosts_(scriptable_hosts) { | 403 scriptable_hosts_(scriptable_hosts) { |
| 407 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); | 404 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); |
| 408 InitEffectiveHosts(); | 405 InitEffectiveHosts(); |
| 409 } | 406 } |
| 410 | 407 |
| 411 ExtensionPermissionSet::~ExtensionPermissionSet() { | 408 ExtensionPermissionSet::~ExtensionPermissionSet() {} |
| 412 } | |
| 413 | 409 |
| 414 // static | 410 // static |
| 415 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( | 411 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( |
| 416 const ExtensionPermissionSet* set1, | 412 const ExtensionPermissionSet* set1, |
| 417 const ExtensionPermissionSet* set2) { | 413 const ExtensionPermissionSet* set2) { |
| 418 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); | 414 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); |
| 419 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; | 415 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; |
| 420 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; | 416 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
| 421 | 417 |
| 422 ExtensionAPIPermissionSet apis; | 418 ExtensionAPIPermissionSet apis; |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 std::set<std::string> new_hosts_set(GetDistinctHosts(new_list, false, false)); | 831 std::set<std::string> new_hosts_set(GetDistinctHosts(new_list, false, false)); |
| 836 std::set<std::string> old_hosts_set(GetDistinctHosts(old_list, false, false)); | 832 std::set<std::string> old_hosts_set(GetDistinctHosts(old_list, false, false)); |
| 837 std::set<std::string> new_hosts_only; | 833 std::set<std::string> new_hosts_only; |
| 838 | 834 |
| 839 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), | 835 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), |
| 840 old_hosts_set.begin(), old_hosts_set.end(), | 836 old_hosts_set.begin(), old_hosts_set.end(), |
| 841 std::inserter(new_hosts_only, new_hosts_only.begin())); | 837 std::inserter(new_hosts_only, new_hosts_only.begin())); |
| 842 | 838 |
| 843 return !new_hosts_only.empty(); | 839 return !new_hosts_only.empty(); |
| 844 } | 840 } |
| OLD | NEW |