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 @@ ...@@ -16,12 +16,20 @@
namespace sync_file_system { namespace sync_file_system {
namespace drive_backend { 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( SyncEngine::SyncEngine(
const base::FilePath& base_dir, const base::FilePath& base_dir,
base::SequencedTaskRunner* task_runner,
scoped_ptr<drive::DriveAPIService> drive_api, scoped_ptr<drive::DriveAPIService> drive_api,
drive::DriveNotificationManager* notification_manager, drive::DriveNotificationManager* notification_manager,
ExtensionService* extension_service) ExtensionService* extension_service)
: base_dir_(base_dir), : base_dir_(base_dir),
task_runner_(task_runner),
drive_api_(drive_api.Pass()), drive_api_(drive_api.Pass()),
notification_manager_(notification_manager), notification_manager_(notification_manager),
extension_service_(extension_service), extension_service_(extension_service),
...@@ -36,7 +44,10 @@ SyncEngine::~SyncEngine() { ...@@ -36,7 +44,10 @@ SyncEngine::~SyncEngine() {
void SyncEngine::Initialize() { void SyncEngine::Initialize() {
task_manager_.Initialize(SYNC_STATUS_OK); 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( task_manager_.ScheduleSyncTask(
scoped_ptr<SyncTask>(initializer), scoped_ptr<SyncTask>(initializer),
base::Bind(&SyncEngine::DidInitialize, weak_ptr_factory_.GetWeakPtr(), base::Bind(&SyncEngine::DidInitialize, weak_ptr_factory_.GetWeakPtr(),
......
...@@ -15,6 +15,10 @@ ...@@ -15,6 +15,10 @@
class ExtensionService; class ExtensionService;
namespace base {
class SequencedTaskRunner;
}
namespace drive { namespace drive {
class DriveAPIService; class DriveAPIService;
class DriveNotificationManager; class DriveNotificationManager;
...@@ -36,6 +40,7 @@ class SyncEngine : public RemoteFileSyncService, ...@@ -36,6 +40,7 @@ class SyncEngine : public RemoteFileSyncService,
typedef Observer SyncServiceObserver; typedef Observer SyncServiceObserver;
SyncEngine(const base::FilePath& base_dir, SyncEngine(const base::FilePath& base_dir,
base::SequencedTaskRunner* task_runner,
scoped_ptr<drive::DriveAPIService> drive_api, scoped_ptr<drive::DriveAPIService> drive_api,
drive::DriveNotificationManager* notification_manager, drive::DriveNotificationManager* notification_manager,
ExtensionService* extension_service); ExtensionService* extension_service);
...@@ -121,6 +126,8 @@ class SyncEngine : public RemoteFileSyncService, ...@@ -121,6 +126,8 @@ class SyncEngine : public RemoteFileSyncService,
base::FilePath base_dir_; base::FilePath base_dir_;
base::FilePath temporary_file_dir_; base::FilePath temporary_file_dir_;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
scoped_ptr<drive::DriveAPIService> drive_api_; scoped_ptr<drive::DriveAPIService> drive_api_;
scoped_ptr<MetadataDatabase> metadata_database_; scoped_ptr<MetadataDatabase> metadata_database_;
......
...@@ -4,14 +4,22 @@ ...@@ -4,14 +4,22 @@
#include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h" #include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h"
#include "base/bind.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/logging.h" #include "base/logging.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
namespace sync_file_system { namespace sync_file_system {
namespace drive_backend { namespace drive_backend {
SyncEngineInitializer::SyncEngineInitializer() { SyncEngineInitializer::SyncEngineInitializer(
NOTIMPLEMENTED(); 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() { SyncEngineInitializer::~SyncEngineInitializer() {
...@@ -19,6 +27,26 @@ SyncEngineInitializer::~SyncEngineInitializer() { ...@@ -19,6 +27,26 @@ SyncEngineInitializer::~SyncEngineInitializer() {
} }
void SyncEngineInitializer::Run(const SyncStatusCallback& callback) { 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(); NOTIMPLEMENTED();
callback.Run(SYNC_STATUS_FAILED); callback.Run(SYNC_STATUS_FAILED);
} }
......
...@@ -5,19 +5,43 @@ ...@@ -5,19 +5,43 @@
#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_INITIALIZER_H_ #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_ENGINE_INITIALIZER_H_
#define 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_callbacks.h"
#include "chrome/browser/sync_file_system/sync_task.h" #include "chrome/browser/sync_file_system/sync_task.h"
namespace drive {
class DriveAPIService;
}
namespace sync_file_system { namespace sync_file_system {
namespace drive_backend { namespace drive_backend {
class MetadataDatabase;
class SyncEngineInitializer : public SyncTask { class SyncEngineInitializer : public SyncTask {
public: public:
SyncEngineInitializer(); SyncEngineInitializer(base::SequencedTaskRunner* task_runner,
drive::DriveAPIService* drive_api,
const base::FilePath& database_path);
virtual ~SyncEngineInitializer(); virtual ~SyncEngineInitializer();
virtual void Run(const SyncStatusCallback& callback) OVERRIDE; virtual void Run(const SyncStatusCallback& callback) OVERRIDE;
private: 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); DISALLOW_COPY_AND_ASSIGN(SyncEngineInitializer);
}; };
......
...@@ -80,11 +80,14 @@ SyncFileSystemServiceFactory::BuildServiceInstanceFor( ...@@ -80,11 +80,14 @@ SyncFileSystemServiceFactory::BuildServiceInstanceFor(
GURL wapi_base_url( GURL wapi_base_url(
google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction); google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction);
scoped_refptr<base::SequencedWorkerPool> worker_pool(
content::BrowserThread::GetBlockingPool());
scoped_ptr<drive::DriveAPIService> drive_api_service( scoped_ptr<drive::DriveAPIService> drive_api_service(
new drive::DriveAPIService( new drive::DriveAPIService(
ProfileOAuth2TokenServiceFactory::GetForProfile(profile), ProfileOAuth2TokenServiceFactory::GetForProfile(profile),
context->GetRequestContext(), context->GetRequestContext(),
content::BrowserThread::GetBlockingPool(), worker_pool.get(),
base_drive_url, base_download_url, wapi_base_url, base_drive_url, base_download_url, wapi_base_url,
std::string() /* custom_user_agent */)); std::string() /* custom_user_agent */));
...@@ -93,9 +96,15 @@ SyncFileSystemServiceFactory::BuildServiceInstanceFor( ...@@ -93,9 +96,15 @@ SyncFileSystemServiceFactory::BuildServiceInstanceFor(
ExtensionService* extension_service = ExtensionService* extension_service =
extensions::ExtensionSystem::Get(profile)->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( scoped_ptr<drive_backend::SyncEngine> sync_engine(
new drive_backend::SyncEngine( new drive_backend::SyncEngine(
context->GetPath(), context->GetPath(),
task_runner.get(),
drive_api_service.Pass(), drive_api_service.Pass(),
notification_manager, notification_manager,
extension_service)); 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