OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/storage/local_value_store_cache.h" | 5 #include "extensions/browser/api/storage/local_value_store_cache.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 | 10 |
11 #include "content/public/browser/browser_thread.h" | 11 #include "content/public/browser/browser_thread.h" |
| 12 #include "extensions/browser/api/storage/backend_task_runner.h" |
12 #include "extensions/browser/api/storage/weak_unlimited_settings_storage.h" | 13 #include "extensions/browser/api/storage/weak_unlimited_settings_storage.h" |
13 #include "extensions/browser/value_store/value_store_factory.h" | 14 #include "extensions/browser/value_store/value_store_factory.h" |
14 #include "extensions/common/api/storage.h" | 15 #include "extensions/common/api/storage.h" |
15 #include "extensions/common/extension.h" | 16 #include "extensions/common/extension.h" |
16 #include "extensions/common/permissions/permissions_data.h" | 17 #include "extensions/common/permissions/permissions_data.h" |
17 | 18 |
18 using content::BrowserThread; | 19 using content::BrowserThread; |
19 | 20 |
20 namespace extensions { | 21 namespace extensions { |
21 | 22 |
(...skipping 10 matching lines...) Expand all Loading... |
32 | 33 |
33 } // namespace | 34 } // namespace |
34 | 35 |
35 LocalValueStoreCache::LocalValueStoreCache( | 36 LocalValueStoreCache::LocalValueStoreCache( |
36 const scoped_refptr<ValueStoreFactory>& factory) | 37 const scoped_refptr<ValueStoreFactory>& factory) |
37 : storage_factory_(factory), quota_(GetLocalQuotaLimits()) { | 38 : storage_factory_(factory), quota_(GetLocalQuotaLimits()) { |
38 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 39 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
39 } | 40 } |
40 | 41 |
41 LocalValueStoreCache::~LocalValueStoreCache() { | 42 LocalValueStoreCache::~LocalValueStoreCache() { |
42 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 43 DCHECK(IsOnBackendSequence()); |
43 } | 44 } |
44 | 45 |
45 void LocalValueStoreCache::RunWithValueStoreForExtension( | 46 void LocalValueStoreCache::RunWithValueStoreForExtension( |
46 const StorageCallback& callback, | 47 const StorageCallback& callback, |
47 scoped_refptr<const Extension> extension) { | 48 scoped_refptr<const Extension> extension) { |
48 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 49 DCHECK(IsOnBackendSequence()); |
49 | 50 |
50 ValueStore* storage = GetStorage(extension.get()); | 51 ValueStore* storage = GetStorage(extension.get()); |
51 | 52 |
52 // A neat way to implement unlimited storage; if the extension has the | 53 // A neat way to implement unlimited storage; if the extension has the |
53 // unlimited storage permission, force through all calls to Set(). | 54 // unlimited storage permission, force through all calls to Set(). |
54 if (extension->permissions_data()->HasAPIPermission( | 55 if (extension->permissions_data()->HasAPIPermission( |
55 APIPermission::kUnlimitedStorage)) { | 56 APIPermission::kUnlimitedStorage)) { |
56 WeakUnlimitedSettingsStorage unlimited_storage(storage); | 57 WeakUnlimitedSettingsStorage unlimited_storage(storage); |
57 callback.Run(&unlimited_storage); | 58 callback.Run(&unlimited_storage); |
58 } else { | 59 } else { |
59 callback.Run(storage); | 60 callback.Run(storage); |
60 } | 61 } |
61 } | 62 } |
62 | 63 |
63 void LocalValueStoreCache::DeleteStorageSoon(const std::string& extension_id) { | 64 void LocalValueStoreCache::DeleteStorageSoon(const std::string& extension_id) { |
64 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 65 DCHECK(IsOnBackendSequence()); |
65 storage_map_.erase(extension_id); | 66 storage_map_.erase(extension_id); |
66 storage_factory_->DeleteSettings(settings_namespace::LOCAL, | 67 storage_factory_->DeleteSettings(settings_namespace::LOCAL, |
67 ValueStoreFactory::ModelType::APP, | 68 ValueStoreFactory::ModelType::APP, |
68 extension_id); | 69 extension_id); |
69 storage_factory_->DeleteSettings(settings_namespace::LOCAL, | 70 storage_factory_->DeleteSettings(settings_namespace::LOCAL, |
70 ValueStoreFactory::ModelType::EXTENSION, | 71 ValueStoreFactory::ModelType::EXTENSION, |
71 extension_id); | 72 extension_id); |
72 } | 73 } |
73 | 74 |
74 ValueStore* LocalValueStoreCache::GetStorage(const Extension* extension) { | 75 ValueStore* LocalValueStoreCache::GetStorage(const Extension* extension) { |
75 StorageMap::iterator iter = storage_map_.find(extension->id()); | 76 StorageMap::iterator iter = storage_map_.find(extension->id()); |
76 if (iter != storage_map_.end()) | 77 if (iter != storage_map_.end()) |
77 return iter->second.get(); | 78 return iter->second.get(); |
78 | 79 |
79 ValueStoreFactory::ModelType model_type = | 80 ValueStoreFactory::ModelType model_type = |
80 extension->is_app() ? ValueStoreFactory::ModelType::APP | 81 extension->is_app() ? ValueStoreFactory::ModelType::APP |
81 : ValueStoreFactory::ModelType::EXTENSION; | 82 : ValueStoreFactory::ModelType::EXTENSION; |
82 std::unique_ptr<ValueStore> store = storage_factory_->CreateSettingsStore( | 83 std::unique_ptr<ValueStore> store = storage_factory_->CreateSettingsStore( |
83 settings_namespace::LOCAL, model_type, extension->id()); | 84 settings_namespace::LOCAL, model_type, extension->id()); |
84 std::unique_ptr<SettingsStorageQuotaEnforcer> storage( | 85 std::unique_ptr<SettingsStorageQuotaEnforcer> storage( |
85 new SettingsStorageQuotaEnforcer(quota_, std::move(store))); | 86 new SettingsStorageQuotaEnforcer(quota_, std::move(store))); |
86 DCHECK(storage.get()); | 87 DCHECK(storage.get()); |
87 | 88 |
88 ValueStore* storage_ptr = storage.get(); | 89 ValueStore* storage_ptr = storage.get(); |
89 storage_map_[extension->id()] = std::move(storage); | 90 storage_map_[extension->id()] = std::move(storage); |
90 return storage_ptr; | 91 return storage_ptr; |
91 } | 92 } |
92 | 93 |
93 } // namespace extensions | 94 } // namespace extensions |
OLD | NEW |