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

Side by Side Diff: chrome/browser/extensions/extension_special_storage_policy.cc

Issue 6810037: File API changes needed for safely passing user selected file entities from the file browser comp... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 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 | Annotate | Revision Log
OLDNEW
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/browser/extensions/extension_special_storage_policy.h" 5 #include "chrome/browser/extensions/extension_special_storage_policy.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/common/extensions/extension.h" 8 #include "chrome/common/extensions/extension.h"
9 #include "chrome/common/url_constants.h" 9 #include "chrome/common/url_constants.h"
10 10
11 ExtensionSpecialStoragePolicy::ExtensionSpecialStoragePolicy() {} 11 ExtensionSpecialStoragePolicy::ExtensionSpecialStoragePolicy() {}
12 12
13 ExtensionSpecialStoragePolicy::~ExtensionSpecialStoragePolicy() {} 13 ExtensionSpecialStoragePolicy::~ExtensionSpecialStoragePolicy() {}
14 14
15 bool ExtensionSpecialStoragePolicy::IsStorageProtected(const GURL& origin) { 15 bool ExtensionSpecialStoragePolicy::IsStorageProtected(const GURL& origin) {
16 if (origin.SchemeIs(chrome::kExtensionScheme)) 16 if (origin.SchemeIs(chrome::kExtensionScheme))
17 return true; 17 return true;
18 base::AutoLock locker(lock_); 18 base::AutoLock locker(lock_);
19 return protected_apps_.Contains(origin); 19 return protected_apps_.Contains(origin);
20 } 20 }
21 21
22 bool ExtensionSpecialStoragePolicy::IsStorageUnlimited(const GURL& origin) { 22 bool ExtensionSpecialStoragePolicy::IsStorageUnlimited(const GURL& origin) {
23 base::AutoLock locker(lock_); 23 base::AutoLock locker(lock_);
24 return unlimited_extensions_.Contains(origin); 24 return unlimited_extensions_.Contains(origin);
25 } 25 }
26 26
27 bool ExtensionSpecialStoragePolicy::IsLocalFileSystemAccessAllowed( 27 bool ExtensionSpecialStoragePolicy::IsFileHandler(
28 const GURL& origin) { 28 const std::string& extension_id) {
29 base::AutoLock locker(lock_); 29 base::AutoLock locker(lock_);
30 return local_filesystem_extensions_.Contains(origin); 30 return file_handler_extensions_.ContainsExtension(extension_id);
31 } 31 }
32 32
33 void ExtensionSpecialStoragePolicy::GrantRightsForExtension( 33 void ExtensionSpecialStoragePolicy::GrantRightsForExtension(
34 const Extension* extension) { 34 const Extension* extension) {
35 DCHECK(extension); 35 DCHECK(extension);
36 if (!extension->is_hosted_app() && 36 if (!extension->is_hosted_app() &&
37 !extension->HasApiPermission(Extension::kUnlimitedStoragePermission) && 37 !extension->HasApiPermission(Extension::kUnlimitedStoragePermission) &&
38 !extension->HasApiPermission(Extension::kFileSystemPermission)) { 38 !extension->HasApiPermission(Extension::kFileBrowserHandlerPermission)) {
39 return; 39 return;
40 } 40 }
41 base::AutoLock locker(lock_); 41 base::AutoLock locker(lock_);
42 if (extension->is_hosted_app()) 42 if (extension->is_hosted_app())
43 protected_apps_.Add(extension); 43 protected_apps_.Add(extension);
44 if (extension->HasApiPermission(Extension::kUnlimitedStoragePermission)) 44 if (extension->HasApiPermission(Extension::kUnlimitedStoragePermission))
45 unlimited_extensions_.Add(extension); 45 unlimited_extensions_.Add(extension);
46 if (extension->HasApiPermission(Extension::kFileSystemPermission)) 46 if (extension->HasApiPermission(Extension::kFileBrowserHandlerPermission))
47 local_filesystem_extensions_.Add(extension); 47 file_handler_extensions_.Add(extension);
48 } 48 }
49 49
50 void ExtensionSpecialStoragePolicy::RevokeRightsForExtension( 50 void ExtensionSpecialStoragePolicy::RevokeRightsForExtension(
51 const Extension* extension) { 51 const Extension* extension) {
52 DCHECK(extension); 52 DCHECK(extension);
53 if (!extension->is_hosted_app() && 53 if (!extension->is_hosted_app() &&
54 !extension->HasApiPermission(Extension::kUnlimitedStoragePermission) && 54 !extension->HasApiPermission(Extension::kUnlimitedStoragePermission) &&
55 !extension->HasApiPermission(Extension::kFileSystemPermission)) { 55 !extension->HasApiPermission(Extension::kFileBrowserHandlerPermission)) {
56 return; 56 return;
57 } 57 }
58 base::AutoLock locker(lock_); 58 base::AutoLock locker(lock_);
59 if (extension->is_hosted_app()) 59 if (extension->is_hosted_app())
60 protected_apps_.Remove(extension); 60 protected_apps_.Remove(extension);
61 if (extension->HasApiPermission(Extension::kUnlimitedStoragePermission)) 61 if (extension->HasApiPermission(Extension::kUnlimitedStoragePermission))
62 unlimited_extensions_.Remove(extension); 62 unlimited_extensions_.Remove(extension);
63 if (extension->HasApiPermission(Extension::kFileSystemPermission)) 63 if (extension->HasApiPermission(Extension::kFileBrowserHandlerPermission))
64 local_filesystem_extensions_.Remove(extension); 64 file_handler_extensions_.Remove(extension);
65 } 65 }
66 66
67 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() { 67 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() {
68 base::AutoLock locker(lock_); 68 base::AutoLock locker(lock_);
69 protected_apps_.Clear(); 69 protected_apps_.Clear();
70 unlimited_extensions_.Clear(); 70 unlimited_extensions_.Clear();
71 local_filesystem_extensions_.Clear(); 71 file_handler_extensions_.Clear();
72 } 72 }
73 73
74 //----------------------------------------------------------------------------- 74 //-----------------------------------------------------------------------------
75 // SpecialCollection helper class 75 // SpecialCollection helper class
76 //----------------------------------------------------------------------------- 76 //-----------------------------------------------------------------------------
77 77
78 ExtensionSpecialStoragePolicy::SpecialCollection::SpecialCollection() {} 78 ExtensionSpecialStoragePolicy::SpecialCollection::SpecialCollection() {}
79 79
80 ExtensionSpecialStoragePolicy::SpecialCollection::~SpecialCollection() {} 80 ExtensionSpecialStoragePolicy::SpecialCollection::~SpecialCollection() {}
81 81
82 bool ExtensionSpecialStoragePolicy::SpecialCollection::Contains( 82 bool ExtensionSpecialStoragePolicy::SpecialCollection::Contains(
83 const GURL& origin) { 83 const GURL& origin) {
84 CachedResults::const_iterator found = cached_resuts_.find(origin); 84 CachedResults::const_iterator found = cached_results_.find(origin);
85 if (found != cached_resuts_.end()) 85 if (found != cached_results_.end())
86 return found->second; 86 return found->second;
87 87
88 for (Extensions::const_iterator iter = extensions_.begin(); 88 for (Extensions::const_iterator iter = extensions_.begin();
89 iter != extensions_.end(); ++iter) { 89 iter != extensions_.end(); ++iter) {
90 if (iter->second->OverlapsWithOrigin(origin)) { 90 if (iter->second->OverlapsWithOrigin(origin)) {
91 cached_resuts_[origin] = true; 91 cached_results_[origin] = true;
92 return true; 92 return true;
93 } 93 }
94 } 94 }
95 cached_resuts_[origin] = false; 95 cached_results_[origin] = false;
96 return false; 96 return false;
97 } 97 }
98 98
99 bool ExtensionSpecialStoragePolicy::SpecialCollection::ContainsExtension(
100 const std::string& extension_id) {
101 return extensions_.find(extension_id) != extensions_.end();
102 }
103
99 void ExtensionSpecialStoragePolicy::SpecialCollection::Add( 104 void ExtensionSpecialStoragePolicy::SpecialCollection::Add(
100 const Extension* extension) { 105 const Extension* extension) {
101 cached_resuts_.clear(); 106 cached_results_.clear();
102 extensions_[extension->id()] = extension; 107 extensions_[extension->id()] = extension;
103 } 108 }
104 109
105 void ExtensionSpecialStoragePolicy::SpecialCollection::Remove( 110 void ExtensionSpecialStoragePolicy::SpecialCollection::Remove(
106 const Extension* extension) { 111 const Extension* extension) {
107 cached_resuts_.clear(); 112 cached_results_.clear();
108 extensions_.erase(extension->id()); 113 extensions_.erase(extension->id());
109 } 114 }
110 115
111 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() { 116 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() {
112 cached_resuts_.clear(); 117 cached_results_.clear();
113 extensions_.clear(); 118 extensions_.clear();
114 } 119 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698