#include "chrome/browser/sync_file_system/local/local_file_sync_service.h"
+#include "base/single_thread_task_runner.h"
#include "base/stl_util.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_system.h"
+#include "base/thread_task_runner_handle.h"
+#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync_file_system/file_change.h"
#include "chrome/browser/sync_file_system/local/local_file_change_tracker.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/storage_partition.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/common/extension_set.h"
#include "url/gurl.h"
#include "webkit/browser/fileapi/file_system_context.h"
#include "webkit/browser/fileapi/file_system_url.h"
callback.Run(status, sync_file_info.metadata, sync_file_info.changes);
}
+void InvokeCallbackOnNthInvocation(int* count, const base::Closure& callback) {
+ --*count;
+ if (*count <= 0)
+ callback.Run();
+}
+
} // namespace
LocalFileSyncService::OriginChangeMap::OriginChangeMap()
// LocalFileSyncService -------------------------------------------------------
-LocalFileSyncService::LocalFileSyncService(Profile* profile)
- : profile_(profile),
- sync_context_(new LocalFileSyncContext(
- profile_->GetPath(),
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI).get(),
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)
- .get())),
- local_change_processor_(NULL) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- sync_context_->AddOriginChangeObserver(this);
+scoped_ptr<LocalFileSyncService> LocalFileSyncService::Create(
+ Profile* profile) {
+ return make_scoped_ptr(new LocalFileSyncService(profile, NULL));
+}
+
+scoped_ptr<LocalFileSyncService> LocalFileSyncService::CreateForTesting(
+ Profile* profile,
+ leveldb::Env* env) {
+ scoped_ptr<LocalFileSyncService> sync_service(
+ new LocalFileSyncService(profile, env));
+ sync_service->sync_context_->set_mock_notify_changes_duration_in_sec(0);
+ return sync_service.Pass();
}
LocalFileSyncService::~LocalFileSyncService() {
const FileSystemURL& url,
const HasPendingLocalChangeCallback& callback) {
if (!ContainsKey(origin_to_contexts_, url.origin())) {
- base::MessageLoopProxy::current()->PostTask(
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::Bind(callback, SYNC_FILE_ERROR_INVALID_URL, false));
return;
origin_to_contexts_[url.origin()], url, callback);
}
-void LocalFileSyncService::PromoteDemotedChanges() {
+void LocalFileSyncService::PromoteDemotedChanges(
+ const base::Closure& callback) {
+ if (origin_to_contexts_.empty()) {
+ callback.Run();
+ return;
+ }
+
+ base::Closure completion_callback =
+ base::Bind(&InvokeCallbackOnNthInvocation,
+ base::Owned(new int(origin_to_contexts_.size())), callback);
for (OriginToContext::iterator iter = origin_to_contexts_.begin();
iter != origin_to_contexts_.end(); ++iter)
- sync_context_->PromoteDemotedChanges(iter->first, iter->second);
+ sync_context_->PromoteDemotedChanges(iter->first, iter->second,
+ completion_callback);
}
void LocalFileSyncService::GetLocalFileMetadata(
// been initialized in this service.
DCHECK(profile_);
// The given url.origin() must be for valid installed app.
- ExtensionService* extension_service =
- extensions::ExtensionSystem::Get(profile_)->extension_service();
- const extensions::Extension* extension = extension_service->GetInstalledApp(
- url.origin());
+ const extensions::Extension* extension =
+ extensions::ExtensionRegistry::Get(profile_)
+ ->enabled_extensions().GetAppByURL(url.origin());
if (!extension) {
util::Log(
logging::LOG_WARNING,
SyncFileMetadata(), FileChangeList());
return;
}
- GURL site_url = extension_service->GetSiteForExtensionId(extension->id());
+ GURL site_url =
+ extensions::util::GetSiteForExtensionId(extension->id(), profile_);
DCHECK(!site_url.is_empty());
scoped_refptr<fileapi::FileSystemContext> file_system_context =
content::BrowserContext::GetStoragePartitionForSite(
origin_change_map_.SetOriginEnabled(origin, enabled);
}
+LocalFileSyncService::LocalFileSyncService(Profile* profile,
+ leveldb::Env* env_override)
+ : profile_(profile),
+ sync_context_(new LocalFileSyncContext(
+ profile_->GetPath(),
+ env_override,
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI).get(),
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)
+ .get())),
+ local_change_processor_(NULL) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ sync_context_->AddOriginChangeObserver(this);
+}
+
void LocalFileSyncService::DidInitializeFileSystemContext(
const GURL& app_origin,
fileapi::FileSystemContext* file_system_context,