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

Side by Side Diff: chrome/browser/extensions/extension_prefs.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/browser/extensions/extension_prefs.h" 5 #include "chrome/browser/extensions/extension_prefs.h"
6 6
7 #include "base/string_number_conversions.h" 7 #include "base/string_number_conversions.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/extensions/admin_policy.h" 10 #include "chrome/browser/extensions/admin_policy.h"
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 const URLPatternSet& new_value) { 502 const URLPatternSet& new_value) {
503 UpdateExtensionPref(extension_id, pref_key, new_value.ToValue().release()); 503 UpdateExtensionPref(extension_id, pref_key, new_value.ToValue().release());
504 } 504 }
505 505
506 PermissionSet* ExtensionPrefs::ReadExtensionPrefPermissionSet( 506 PermissionSet* ExtensionPrefs::ReadExtensionPrefPermissionSet(
507 const std::string& extension_id, 507 const std::string& extension_id,
508 const std::string& pref_key) { 508 const std::string& pref_key) {
509 if (!GetExtensionPref(extension_id)) 509 if (!GetExtensionPref(extension_id))
510 return NULL; 510 return NULL;
511 511
512 // Retrieve the API permissions. 512 // Retrieve the API permissions. Please refer SetExtensionPrefPermissionSet()
513 // for api_values format.
513 APIPermissionSet apis; 514 APIPermissionSet apis;
514 const ListValue* api_values = NULL; 515 const ListValue* api_values = NULL;
515 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs); 516 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs);
516 if (ReadExtensionPrefList(extension_id, api_pref, &api_values)) { 517 if (ReadExtensionPrefList(extension_id, api_pref, &api_values)) {
517 PermissionsInfo* info = PermissionsInfo::GetInstance(); 518 PermissionsInfo* info = PermissionsInfo::GetInstance();
518 for (size_t i = 0; i < api_values->GetSize(); ++i) { 519 for (size_t i = 0; i < api_values->GetSize(); ++i) {
520 const DictionaryValue* permission_dict = NULL;
519 std::string permission_name; 521 std::string permission_name;
520 if (api_values->GetString(i, &permission_name)) { 522 if (!api_values->GetString(i, &permission_name) &&
521 APIPermission *permission = info->GetByName(permission_name); 523 !api_values->GetDictionary(i, &permission_dict)) {
522 if (permission) 524 NOTREACHED() << "Permission is not a string or dict. ";
523 apis.insert(permission->id()); 525 continue;
524 } 526 }
527
528 const base::Value *permission_detail = NULL;
529 if (permission_dict) {
530 if (permission_dict->size() != 1u) {
531 NOTREACHED() << "Permission is not a single key dict.";
532 continue;
533 }
534 base::DictionaryValue::Iterator it(*permission_dict);
535 permission_name = it.key();
536 permission_detail = &it.value();
537 }
538
539 APIPermission *permission = info->GetByName(permission_name);
540 if (!permission) {
541 NOTREACHED() << "Unknown permission[" << permission_name << "].";
542 continue;
543 }
544
545 scoped_refptr<APIPermissionDetail> detail = permission->CreateDetail();
546 if (!detail->FromValue(permission_detail)) {
547 NOTREACHED() << "Parse permission detail failed.";
548 continue;
549 }
550 apis.insert(detail);
525 } 551 }
526 } 552 }
527 553
528 // Retrieve the explicit host permissions. 554 // Retrieve the explicit host permissions.
529 URLPatternSet explicit_hosts; 555 URLPatternSet explicit_hosts;
530 ReadExtensionPrefURLPatternSet( 556 ReadExtensionPrefURLPatternSet(
531 extension_id, JoinPrefs(pref_key, kPrefExplicitHosts), 557 extension_id, JoinPrefs(pref_key, kPrefExplicitHosts),
532 &explicit_hosts, Extension::kValidHostPermissionSchemes); 558 &explicit_hosts, Extension::kValidHostPermissionSchemes);
533 559
534 // Retrieve the scriptable host permissions. 560 // Retrieve the scriptable host permissions.
535 URLPatternSet scriptable_hosts; 561 URLPatternSet scriptable_hosts;
536 ReadExtensionPrefURLPatternSet( 562 ReadExtensionPrefURLPatternSet(
537 extension_id, JoinPrefs(pref_key, kPrefScriptableHosts), 563 extension_id, JoinPrefs(pref_key, kPrefScriptableHosts),
538 &scriptable_hosts, UserScript::kValidUserScriptSchemes); 564 &scriptable_hosts, UserScript::kValidUserScriptSchemes);
539 565
540 return new PermissionSet(apis, explicit_hosts, scriptable_hosts); 566 return new PermissionSet(apis, explicit_hosts, scriptable_hosts);
541 } 567 }
542 568
543 void ExtensionPrefs::SetExtensionPrefPermissionSet( 569 void ExtensionPrefs::SetExtensionPrefPermissionSet(
544 const std::string& extension_id, 570 const std::string& extension_id,
545 const std::string& pref_key, 571 const std::string& pref_key,
546 const PermissionSet* new_value) { 572 const PermissionSet* new_value) {
547 // Set the API permissions. 573 // Set the API permissions.
574 // The format of api_values is:
575 // [ "permission_name1", // permissions do not support detail.
576 // "permission_name2",
577 // {"permission_name3": value },
578 // // permission supports detail, permission detail will be stored in value.
579 // ...
580 // ]
548 ListValue* api_values = new ListValue(); 581 ListValue* api_values = new ListValue();
549 APIPermissionSet apis = new_value->apis(); 582 APIPermissionSet apis = new_value->apis();
550 PermissionsInfo* info = PermissionsInfo::GetInstance();
551 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs); 583 std::string api_pref = JoinPrefs(pref_key, kPrefAPIs);
552 for (APIPermissionSet::const_iterator i = apis.begin(); 584 for (APIPermissionSet::const_iterator i = apis.begin();
553 i != apis.end(); ++i) { 585 i != apis.end(); ++i) {
554 APIPermission* perm = info->GetByID(*i); 586 Value* detail = NULL;
555 if (perm) 587 i->ToValue(&detail);
556 api_values->Append(Value::CreateStringValue(perm->name())); 588 if (detail) {
589 DictionaryValue* tmp = new DictionaryValue();
590 tmp->Set(i->name(), detail);
591 api_values->Append(tmp);
592 } else {
593 api_values->Append(Value::CreateStringValue(i->name()));
594 }
557 } 595 }
558 UpdateExtensionPref(extension_id, api_pref, api_values); 596 UpdateExtensionPref(extension_id, api_pref, api_values);
559 597
560 // Set the explicit host permissions. 598 // Set the explicit host permissions.
561 if (!new_value->explicit_hosts().is_empty()) { 599 if (!new_value->explicit_hosts().is_empty()) {
562 SetExtensionPrefURLPatternSet(extension_id, 600 SetExtensionPrefURLPatternSet(extension_id,
563 JoinPrefs(pref_key, kPrefExplicitHosts), 601 JoinPrefs(pref_key, kPrefExplicitHosts),
564 new_value->explicit_hosts()); 602 new_value->explicit_hosts());
565 } 603 }
566 604
(...skipping 1581 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 const ExtensionIdSet& strings) { 2186 const ExtensionIdSet& strings) {
2149 ListPrefUpdate update(prefs_, pref); 2187 ListPrefUpdate update(prefs_, pref);
2150 ListValue* list_of_values = update.Get(); 2188 ListValue* list_of_values = update.Get();
2151 list_of_values->Clear(); 2189 list_of_values->Clear();
2152 for (ExtensionIdSet::const_iterator iter = strings.begin(); 2190 for (ExtensionIdSet::const_iterator iter = strings.begin();
2153 iter != strings.end(); ++iter) 2191 iter != strings.end(); ++iter)
2154 list_of_values->Append(new StringValue(*iter)); 2192 list_of_values->Append(new StringValue(*iter));
2155 } 2193 }
2156 2194
2157 } // namespace extensions 2195 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/socket/udp_socket.cc ('k') | chrome/browser/extensions/extension_prefs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698