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 "chrome/browser/extensions/api/storage/sync_value_store_cache.h" | 5 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "chrome/browser/extensions/api/storage/sync_storage_backend.h" | 9 #include "chrome/browser/extensions/api/storage/sync_storage_backend.h" |
10 #include "chrome/browser/sync/glue/sync_start_util.h" | 10 #include "chrome/browser/sync/glue/sync_start_util.h" |
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/value_store/value_store_factory.h" | 13 #include "extensions/browser/value_store/value_store_factory.h" |
13 #include "extensions/common/api/storage.h" | 14 #include "extensions/common/api/storage.h" |
14 #include "extensions/common/extension.h" | 15 #include "extensions/common/extension.h" |
15 | 16 |
16 using content::BrowserThread; | 17 using content::BrowserThread; |
17 | 18 |
18 namespace extensions { | 19 namespace extensions { |
19 | 20 |
20 namespace { | 21 namespace { |
21 | 22 |
(...skipping 12 matching lines...) Expand all Loading... |
34 SyncValueStoreCache::SyncValueStoreCache( | 35 SyncValueStoreCache::SyncValueStoreCache( |
35 const scoped_refptr<ValueStoreFactory>& factory, | 36 const scoped_refptr<ValueStoreFactory>& factory, |
36 const scoped_refptr<SettingsObserverList>& observers, | 37 const scoped_refptr<SettingsObserverList>& observers, |
37 const base::FilePath& profile_path) | 38 const base::FilePath& profile_path) |
38 : initialized_(false) { | 39 : initialized_(false) { |
39 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 40 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
40 | 41 |
41 // This post is safe since the destructor can only be invoked from the | 42 // This post is safe since the destructor can only be invoked from the |
42 // same message loop, and any potential post of a deletion task must come | 43 // same message loop, and any potential post of a deletion task must come |
43 // after the constructor returns. | 44 // after the constructor returns. |
44 BrowserThread::PostTask( | 45 GetBackendTaskRunner()->PostTask( |
45 BrowserThread::FILE, FROM_HERE, | 46 FROM_HERE, |
46 base::BindOnce(&SyncValueStoreCache::InitOnFileThread, | 47 base::BindOnce(&SyncValueStoreCache::InitOnBackend, |
47 base::Unretained(this), factory, observers, profile_path)); | 48 base::Unretained(this), factory, observers, profile_path)); |
48 } | 49 } |
49 | 50 |
50 SyncValueStoreCache::~SyncValueStoreCache() { | 51 SyncValueStoreCache::~SyncValueStoreCache() { |
51 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 52 DCHECK(IsOnBackendSequence()); |
52 } | 53 } |
53 | 54 |
54 syncer::SyncableService* SyncValueStoreCache::GetSyncableService( | 55 syncer::SyncableService* SyncValueStoreCache::GetSyncableService( |
55 syncer::ModelType type) const { | 56 syncer::ModelType type) const { |
56 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 57 DCHECK(IsOnBackendSequence()); |
57 DCHECK(initialized_); | 58 DCHECK(initialized_); |
58 | 59 |
59 switch (type) { | 60 switch (type) { |
60 case syncer::APP_SETTINGS: | 61 case syncer::APP_SETTINGS: |
61 return app_backend_.get(); | 62 return app_backend_.get(); |
62 case syncer::EXTENSION_SETTINGS: | 63 case syncer::EXTENSION_SETTINGS: |
63 return extension_backend_.get(); | 64 return extension_backend_.get(); |
64 default: | 65 default: |
65 NOTREACHED(); | 66 NOTREACHED(); |
66 return NULL; | 67 return NULL; |
67 } | 68 } |
68 } | 69 } |
69 | 70 |
70 void SyncValueStoreCache::RunWithValueStoreForExtension( | 71 void SyncValueStoreCache::RunWithValueStoreForExtension( |
71 const StorageCallback& callback, | 72 const StorageCallback& callback, |
72 scoped_refptr<const Extension> extension) { | 73 scoped_refptr<const Extension> extension) { |
73 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 74 DCHECK(IsOnBackendSequence()); |
74 DCHECK(initialized_); | 75 DCHECK(initialized_); |
75 SyncStorageBackend* backend = | 76 SyncStorageBackend* backend = |
76 extension->is_app() ? app_backend_.get() : extension_backend_.get(); | 77 extension->is_app() ? app_backend_.get() : extension_backend_.get(); |
77 callback.Run(backend->GetStorage(extension->id())); | 78 callback.Run(backend->GetStorage(extension->id())); |
78 } | 79 } |
79 | 80 |
80 void SyncValueStoreCache::DeleteStorageSoon(const std::string& extension_id) { | 81 void SyncValueStoreCache::DeleteStorageSoon(const std::string& extension_id) { |
81 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 82 DCHECK(IsOnBackendSequence()); |
82 app_backend_->DeleteStorage(extension_id); | 83 app_backend_->DeleteStorage(extension_id); |
83 extension_backend_->DeleteStorage(extension_id); | 84 extension_backend_->DeleteStorage(extension_id); |
84 } | 85 } |
85 | 86 |
86 void SyncValueStoreCache::InitOnFileThread( | 87 void SyncValueStoreCache::InitOnBackend( |
87 const scoped_refptr<ValueStoreFactory>& factory, | 88 const scoped_refptr<ValueStoreFactory>& factory, |
88 const scoped_refptr<SettingsObserverList>& observers, | 89 const scoped_refptr<SettingsObserverList>& observers, |
89 const base::FilePath& profile_path) { | 90 const base::FilePath& profile_path) { |
90 DCHECK_CURRENTLY_ON(BrowserThread::FILE); | 91 DCHECK(IsOnBackendSequence()); |
91 DCHECK(!initialized_); | 92 DCHECK(!initialized_); |
92 app_backend_.reset(new SyncStorageBackend( | 93 app_backend_.reset(new SyncStorageBackend( |
93 factory, | 94 factory, |
94 GetSyncQuotaLimits(), | 95 GetSyncQuotaLimits(), |
95 observers, | 96 observers, |
96 syncer::APP_SETTINGS, | 97 syncer::APP_SETTINGS, |
97 sync_start_util::GetFlareForSyncableService(profile_path))); | 98 sync_start_util::GetFlareForSyncableService(profile_path))); |
98 extension_backend_.reset(new SyncStorageBackend( | 99 extension_backend_.reset(new SyncStorageBackend( |
99 factory, | 100 factory, |
100 GetSyncQuotaLimits(), | 101 GetSyncQuotaLimits(), |
101 observers, | 102 observers, |
102 syncer::EXTENSION_SETTINGS, | 103 syncer::EXTENSION_SETTINGS, |
103 sync_start_util::GetFlareForSyncableService(profile_path))); | 104 sync_start_util::GetFlareForSyncableService(profile_path))); |
104 initialized_ = true; | 105 initialized_ = true; |
105 } | 106 } |
106 | 107 |
107 } // namespace extensions | 108 } // namespace extensions |
OLD | NEW |