Enable Enterprise enrollment on desktop builds.
[chromium-blink-merge.git] / chrome / browser / extensions / api / storage / sync_value_store_cache.cc
blobc8fe8ed217e8a6a137b394cb8b5c9fd6aae6a89c
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
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h"
7 #include "base/bind.h"
8 #include "base/callback.h"
9 #include "base/files/file_path.h"
10 #include "base/sequenced_task_runner.h"
11 #include "chrome/browser/extensions/api/storage/sync_storage_backend.h"
12 #include "chrome/browser/sync/glue/sync_start_util.h"
13 #include "content/public/browser/browser_thread.h"
14 #include "extensions/browser/api/storage/settings_storage_quota_enforcer.h"
15 #include "extensions/browser/api/storage/storage_frontend.h"
16 #include "extensions/common/api/storage.h"
17 #include "extensions/common/constants.h"
18 #include "extensions/common/extension.h"
20 using content::BrowserThread;
22 namespace extensions {
24 namespace {
26 // Returns the quota limit for sync storage, taken from the schema in
27 // extensions/common/api/storage.json.
28 SettingsStorageQuotaEnforcer::Limits GetSyncQuotaLimits() {
29 SettingsStorageQuotaEnforcer::Limits limits = {
30 static_cast<size_t>(core_api::storage::sync::QUOTA_BYTES),
31 static_cast<size_t>(core_api::storage::sync::QUOTA_BYTES_PER_ITEM),
32 static_cast<size_t>(core_api::storage::sync::MAX_ITEMS)
34 return limits;
37 } // namespace
39 SyncValueStoreCache::SyncValueStoreCache(
40 const scoped_refptr<SettingsStorageFactory>& factory,
41 const scoped_refptr<SettingsObserverList>& observers,
42 const base::FilePath& profile_path)
43 : initialized_(false) {
44 DCHECK_CURRENTLY_ON(BrowserThread::UI);
46 // This post is safe since the destructor can only be invoked from the
47 // same message loop, and any potential post of a deletion task must come
48 // after the constructor returns.
49 BrowserThread::PostTask(
50 BrowserThread::FILE, FROM_HERE,
51 base::Bind(&SyncValueStoreCache::InitOnFileThread,
52 base::Unretained(this),
53 factory, observers, profile_path));
56 SyncValueStoreCache::~SyncValueStoreCache() {
57 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
60 syncer::SyncableService* SyncValueStoreCache::GetSyncableService(
61 syncer::ModelType type) const {
62 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
63 DCHECK(initialized_);
65 switch (type) {
66 case syncer::APP_SETTINGS:
67 return app_backend_.get();
68 case syncer::EXTENSION_SETTINGS:
69 return extension_backend_.get();
70 default:
71 NOTREACHED();
72 return NULL;
76 void SyncValueStoreCache::RunWithValueStoreForExtension(
77 const StorageCallback& callback,
78 scoped_refptr<const Extension> extension) {
79 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
80 DCHECK(initialized_);
81 SyncStorageBackend* backend =
82 extension->is_app() ? app_backend_.get() : extension_backend_.get();
83 callback.Run(backend->GetStorage(extension->id()));
86 void SyncValueStoreCache::DeleteStorageSoon(const std::string& extension_id) {
87 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
88 app_backend_->DeleteStorage(extension_id);
89 extension_backend_->DeleteStorage(extension_id);
92 void SyncValueStoreCache::InitOnFileThread(
93 const scoped_refptr<SettingsStorageFactory>& factory,
94 const scoped_refptr<SettingsObserverList>& observers,
95 const base::FilePath& profile_path) {
96 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
97 DCHECK(!initialized_);
98 app_backend_.reset(new SyncStorageBackend(
99 factory,
100 profile_path.AppendASCII(kSyncAppSettingsDirectoryName),
101 GetSyncQuotaLimits(),
102 observers,
103 syncer::APP_SETTINGS,
104 sync_start_util::GetFlareForSyncableService(profile_path)));
105 extension_backend_.reset(new SyncStorageBackend(
106 factory,
107 profile_path.AppendASCII(kSyncExtensionSettingsDirectoryName),
108 GetSyncQuotaLimits(),
109 observers,
110 syncer::EXTENSION_SETTINGS,
111 sync_start_util::GetFlareForSyncableService(profile_path)));
112 initialized_ = true;
115 } // namespace extensions