Commit 09a8b25c authored by tzik@chromium.org's avatar tzik@chromium.org

[SyncFS] Implement Database initialization part of SyncEngineInitializer

BUG=240165

Review URL: https://chromiumcodereview.appspot.com/23618029

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221383 0039d316-1c4b-4281-b951-d872f2087c98
parent f2ecf785
......@@ -16,12 +16,20 @@
namespace sync_file_system {
namespace drive_backend {
namespace {
// TODO(tzik): Move this to separate file and consolidate with
// DriveMetadataStore::kDatabaseName.
base::FilePath::CharType kDatabaseName[] = FILE_PATH_LITERAL("DriveMetadata");
} // namespace
SyncEngine::SyncEngine(
const base::FilePath& base_dir,
base::SequencedTaskRunner* task_runner,
scoped_ptr<drive::DriveAPIService> drive_api,
drive::DriveNotificationManager* notification_manager,
ExtensionService* extension_service)
: base_dir_(base_dir),
task_runner_(task_runner),
drive_api_(drive_api.Pass()),
notification_manager_(notification_manager),
extension_service_(extension_service),
......@@ -36,7 +44,10 @@ SyncEngine::~SyncEngine() {
void SyncEngine::Initialize() {
task_manager_.Initialize(SYNC_STATUS_OK);
SyncEngineInitializer* initializer = new SyncEngineInitializer;
SyncEngineInitializer* initializer =
new SyncEngineInitializer(task_runner_.get(),
drive_api_.get(),
base_dir_.Append(kDatabaseName));
task_manager_.ScheduleSyncTask(
scoped_ptr<SyncTask>(initializer),
base::Bind(&SyncEngine::DidInitialize, weak_ptr_factory_.GetWeakPtr(),
......
......@@ -15,6 +15,10 @@
class ExtensionService;
namespace base {
class SequencedTaskRunner;
}
namespace drive {
class DriveAPIService;
class DriveNotificationManager;
......@@ -36,6 +40,7 @@ class SyncEngine : public RemoteFileSyncService,
typedef Observer SyncServiceObserver;
SyncEngine(const base::FilePath& base_dir,
base::SequencedTaskRunner* task_runner,
scoped_ptr<drive::DriveAPIService> drive_api,
drive::DriveNotificationManager* notification_manager,
ExtensionService* extension_service);
......@@ -121,6 +126,8 @@ class SyncEngine : public RemoteFileSyncService,
base::FilePath base_dir_;
base::FilePath temporary_file_dir_;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
scoped_ptr<drive::DriveAPIService> drive_api_;
scoped_ptr<MetadataDatabase> metadata_database_;
......
......@@ -4,14 +4,22 @@
#include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h"
#include "base/bind.h"
#include "base/callback.h"
#include "base/logging.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
namespace sync_file_system {
namespace drive_backend {
SyncEngineInitializer::SyncEngineInitializer() {
NOTIMPLEMENTED();
SyncEngineInitializer::SyncEngineInitializer(
base::SequencedTaskRunner* task_runner,
drive::DriveAPIService* drive_api,
const base::FilePath& database_path)
: task_runner_(task_runner),
drive_api_(drive_api),
database_path_(database_path),
weak_ptr_factory_(this) {
}
SyncEngineInitializer::~SyncEngineInitializer() {
......@@ -19,6 +27,26 @@ SyncEngineInitializer::~SyncEngineInitializer() {
}
void SyncEngineInitializer::Run(const SyncStatusCallback& callback) {
MetadataDatabase::Create(
task_runner_.get(), database_path_,
base::Bind(&SyncEngineInitializer::DidCreateMetadataDatabase,
weak_ptr_factory_.GetWeakPtr(), callback));
}
void SyncEngineInitializer::DidCreateMetadataDatabase(
const SyncStatusCallback& callback,
SyncStatusCode status,
scoped_ptr<MetadataDatabase> instance) {
if (status != SYNC_STATUS_OK) {
callback.Run(status);
return;
}
metadata_database_ = instance.Pass();
// TODO(tzik): Set up sync root and populate database with initial folder
// tree.
NOTIMPLEMENTED();
callback.Run(SYNC_STATUS_FAILED);
}
......
......@@ -5,19 +5,43 @@
#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_INITIALIZER_H_
#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_INITIALIZER_H_
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h"
#include "chrome/browser/sync_file_system/sync_callbacks.h"
#include "chrome/browser/sync_file_system/sync_task.h"
namespace drive {
class DriveAPIService;
}
namespace sync_file_system {
namespace drive_backend {
class MetadataDatabase;
class SyncEngineInitializer : public SyncTask {
public:
SyncEngineInitializer();
SyncEngineInitializer(base::SequencedTaskRunner* task_runner,
drive::DriveAPIService* drive_api,
const base::FilePath& database_path);
virtual ~SyncEngineInitializer();
virtual void Run(const SyncStatusCallback& callback) OVERRIDE;
private:
void DidCreateMetadataDatabase(const SyncStatusCallback& callback,
SyncStatusCode status,
scoped_ptr<MetadataDatabase> instance);
scoped_refptr<base::SequencedTaskRunner> task_runner_;
drive::DriveAPIService* drive_api_;
base::FilePath database_path_;
scoped_ptr<MetadataDatabase> metadata_database_;
base::WeakPtrFactory<SyncEngineInitializer> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(SyncEngineInitializer);
};
......
......@@ -80,11 +80,14 @@ SyncFileSystemServiceFactory::BuildServiceInstanceFor(
GURL wapi_base_url(
google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction);
scoped_refptr<base::SequencedWorkerPool> worker_pool(
content::BrowserThread::GetBlockingPool());
scoped_ptr<drive::DriveAPIService> drive_api_service(
new drive::DriveAPIService(
ProfileOAuth2TokenServiceFactory::GetForProfile(profile),
context->GetRequestContext(),
content::BrowserThread::GetBlockingPool(),
worker_pool.get(),
base_drive_url, base_download_url, wapi_base_url,
std::string() /* custom_user_agent */));
......@@ -93,9 +96,15 @@ SyncFileSystemServiceFactory::BuildServiceInstanceFor(
ExtensionService* extension_service =
extensions::ExtensionSystem::Get(profile)->extension_service();
scoped_refptr<base::SequencedTaskRunner> task_runner(
worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
worker_pool->GetSequenceToken(),
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
scoped_ptr<drive_backend::SyncEngine> sync_engine(
new drive_backend::SyncEngine(
context->GetPath(),
task_runner.get(),
drive_api_service.Pass(),
notification_manager,
extension_service));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment