Commit d3b93c3d authored by peria@chromium.org's avatar peria@chromium.org

[SyncFS] Migrate SyncWorker::Observer to SyncWorkerInterface.

BUG=347425, 378621

Review URL: https://codereview.chromium.org/328063003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276641 0039d316-1c4b-4281-b951-d872f2087c98
parent abc4390c
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#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 "chrome/browser/sync_file_system/drive_backend/sync_task.h" #include "chrome/browser/sync_file_system/drive_backend/sync_task.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_worker.h" #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_worker_interface.h"
#include "chrome/browser/sync_file_system/drive_backend/uninstall_app_task.h" #include "chrome/browser/sync_file_system/drive_backend/uninstall_app_task.h"
#include "chrome/browser/sync_file_system/file_status_observer.h" #include "chrome/browser/sync_file_system/file_status_observer.h"
#include "chrome/browser/sync_file_system/logger.h" #include "chrome/browser/sync_file_system/logger.h"
...@@ -61,7 +62,7 @@ class RemoteChangeProcessor; ...@@ -61,7 +62,7 @@ class RemoteChangeProcessor;
namespace drive_backend { namespace drive_backend {
class SyncEngine::WorkerObserver : public SyncWorker::Observer { class SyncEngine::WorkerObserver : public SyncWorkerInterface::Observer {
public: public:
WorkerObserver(base::SequencedTaskRunner* ui_task_runner, WorkerObserver(base::SequencedTaskRunner* ui_task_runner,
base::WeakPtr<SyncEngine> sync_engine) base::WeakPtr<SyncEngine> sync_engine)
...@@ -241,8 +242,8 @@ void SyncEngine::Reset() { ...@@ -241,8 +242,8 @@ void SyncEngine::Reset() {
if (drive_service_) if (drive_service_)
drive_service_->RemoveObserver(this); drive_service_->RemoveObserver(this);
DeleteSoon(FROM_HERE, worker_task_runner_, worker_observer_.Pass());
DeleteSoon(FROM_HERE, worker_task_runner_, sync_worker_.Pass()); DeleteSoon(FROM_HERE, worker_task_runner_, sync_worker_.Pass());
DeleteSoon(FROM_HERE, worker_task_runner_, worker_observer_.Pass());
DeleteSoon(FROM_HERE, worker_task_runner_, DeleteSoon(FROM_HERE, worker_task_runner_,
remote_change_processor_on_worker_.Pass()); remote_change_processor_on_worker_.Pass());
...@@ -324,14 +325,12 @@ void SyncEngine::InitializeInternal( ...@@ -324,14 +325,12 @@ void SyncEngine::InitializeInternal(
if (extension_service_) if (extension_service_)
extension_service_weak_ptr = extension_service_->AsWeakPtr(); extension_service_weak_ptr = extension_service_->AsWeakPtr();
scoped_ptr<SyncWorker> worker(new SyncWorker( sync_worker_.reset(new SyncWorker(
sync_file_system_dir_, sync_file_system_dir_,
extension_service_weak_ptr, extension_service_weak_ptr,
sync_engine_context.Pass(), sync_engine_context.Pass(),
env_override_)); env_override_));
sync_worker_->AddObserver(worker_observer_.get());
worker->AddObserver(worker_observer_.get());
sync_worker_ = worker.PassAs<SyncWorkerInterface>();
if (remote_change_processor_) if (remote_change_processor_)
SetRemoteChangeProcessor(remote_change_processor_); SetRemoteChangeProcessor(remote_change_processor_);
......
...@@ -36,31 +36,6 @@ namespace { ...@@ -36,31 +36,6 @@ namespace {
void EmptyStatusCallback(SyncStatusCode status) {} void EmptyStatusCallback(SyncStatusCode status) {}
void QueryAppStatusOnUIThread(
const base::WeakPtr<ExtensionServiceInterface>& extension_service_ptr,
const std::vector<std::string>* app_ids,
SyncWorker::AppStatusMap* status,
const base::Closure& callback) {
ExtensionServiceInterface* extension_service = extension_service_ptr.get();
if (!extension_service) {
callback.Run();
return;
}
for (std::vector<std::string>::const_iterator itr = app_ids->begin();
itr != app_ids->end(); ++itr) {
const std::string& app_id = *itr;
if (!extension_service->GetInstalledExtension(app_id))
(*status)[app_id] = SyncWorker::APP_STATUS_UNINSTALLED;
else if (!extension_service->IsExtensionEnabled(app_id))
(*status)[app_id] = SyncWorker::APP_STATUS_DISABLED;
else
(*status)[app_id] = SyncWorker::APP_STATUS_ENABLED;
}
callback.Run();
}
} // namespace } // namespace
SyncWorker::SyncWorker( SyncWorker::SyncWorker(
...@@ -86,7 +61,9 @@ SyncWorker::SyncWorker( ...@@ -86,7 +61,9 @@ SyncWorker::SyncWorker(
DCHECK(base_dir_.IsAbsolute()); DCHECK(base_dir_.IsAbsolute());
} }
SyncWorker::~SyncWorker() {} SyncWorker::~SyncWorker() {
observers_.Clear();
}
void SyncWorker::Initialize() { void SyncWorker::Initialize() {
DCHECK(sequence_checker_.CalledOnValidSequencedThread()); DCHECK(sequence_checker_.CalledOnValidSequencedThread());
...@@ -497,7 +474,7 @@ void SyncWorker::UpdateRegisteredApps() { ...@@ -497,7 +474,7 @@ void SyncWorker::UpdateRegisteredApps() {
context_->GetUITaskRunner()->PostTask( context_->GetUITaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::Bind(&QueryAppStatusOnUIThread, base::Bind(&SyncWorker::QueryAppStatusOnUIThread,
extension_service_, extension_service_,
base::Owned(app_ids.release()), base::Owned(app_ids.release()),
app_status, app_status,
...@@ -506,6 +483,31 @@ void SyncWorker::UpdateRegisteredApps() { ...@@ -506,6 +483,31 @@ void SyncWorker::UpdateRegisteredApps() {
FROM_HERE, callback))); FROM_HERE, callback)));
} }
void SyncWorker::QueryAppStatusOnUIThread(
const base::WeakPtr<ExtensionServiceInterface>& extension_service_ptr,
const std::vector<std::string>* app_ids,
AppStatusMap* status,
const base::Closure& callback) {
ExtensionServiceInterface* extension_service = extension_service_ptr.get();
if (!extension_service) {
callback.Run();
return;
}
for (std::vector<std::string>::const_iterator itr = app_ids->begin();
itr != app_ids->end(); ++itr) {
const std::string& app_id = *itr;
if (!extension_service->GetInstalledExtension(app_id))
(*status)[app_id] = APP_STATUS_UNINSTALLED;
else if (!extension_service->IsExtensionEnabled(app_id))
(*status)[app_id] = APP_STATUS_DISABLED;
else
(*status)[app_id] = APP_STATUS_ENABLED;
}
callback.Run();
}
void SyncWorker::DidQueryAppStatus(const AppStatusMap* app_status) { void SyncWorker::DidQueryAppStatus(const AppStatusMap* app_status) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread()); DCHECK(sequence_checker_.CalledOnValidSequencedThread());
......
...@@ -14,9 +14,7 @@ ...@@ -14,9 +14,7 @@
#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h" #include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_worker_interface.h" #include "chrome/browser/sync_file_system/drive_backend/sync_worker_interface.h"
#include "chrome/browser/sync_file_system/remote_file_sync_service.h" #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
#include "chrome/browser/sync_file_system/sync_action.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_direction.h"
#include "chrome/browser/sync_file_system/task_logger.h" #include "chrome/browser/sync_file_system/task_logger.h"
#include "net/base/network_change_notifier.h" #include "net/base/network_change_notifier.h"
...@@ -57,28 +55,6 @@ class SyncEngineInitializer; ...@@ -57,28 +55,6 @@ class SyncEngineInitializer;
class SyncWorker : public SyncWorkerInterface, class SyncWorker : public SyncWorkerInterface,
public SyncTaskManager::Client { public SyncTaskManager::Client {
public: public:
enum AppStatus {
APP_STATUS_ENABLED,
APP_STATUS_DISABLED,
APP_STATUS_UNINSTALLED,
};
typedef base::hash_map<std::string, AppStatus> AppStatusMap;
class Observer {
public:
virtual void OnPendingFileListUpdated(int item_count) = 0;
virtual void OnFileStatusChanged(const fileapi::FileSystemURL& url,
SyncFileStatus file_status,
SyncAction sync_action,
SyncDirection direction) = 0;
virtual void UpdateServiceState(RemoteServiceState state,
const std::string& description) = 0;
protected:
virtual ~Observer() {}
};
SyncWorker(const base::FilePath& base_dir, SyncWorker(const base::FilePath& base_dir,
const base::WeakPtr<ExtensionServiceInterface>& extension_service, const base::WeakPtr<ExtensionServiceInterface>& extension_service,
scoped_ptr<SyncEngineContext> sync_engine_context, scoped_ptr<SyncEngineContext> sync_engine_context,
...@@ -138,12 +114,20 @@ class SyncWorker : public SyncWorkerInterface, ...@@ -138,12 +114,20 @@ class SyncWorker : public SyncWorkerInterface,
virtual void DetachFromSequence() OVERRIDE; virtual void DetachFromSequence() OVERRIDE;
void AddObserver(Observer* observer); virtual void AddObserver(Observer* observer) OVERRIDE;
private: private:
friend class DriveBackendSyncTest; friend class DriveBackendSyncTest;
friend class SyncWorkerTest; friend class SyncWorkerTest;
enum AppStatus {
APP_STATUS_ENABLED,
APP_STATUS_DISABLED,
APP_STATUS_UNINSTALLED,
};
typedef base::hash_map<std::string, AppStatus> AppStatusMap;
// SyncWorkerInterface overrides. // SyncWorkerInterface overrides.
// TODO(peria): Remove this interface after making FakeSyncWorker class. // TODO(peria): Remove this interface after making FakeSyncWorker class.
virtual void SetHasRefreshToken(bool has_refresh_token) OVERRIDE; virtual void SetHasRefreshToken(bool has_refresh_token) OVERRIDE;
...@@ -157,6 +141,11 @@ class SyncWorker : public SyncWorkerInterface, ...@@ -157,6 +141,11 @@ class SyncWorker : public SyncWorkerInterface,
void DidInitialize(SyncEngineInitializer* initializer, void DidInitialize(SyncEngineInitializer* initializer,
SyncStatusCode status); SyncStatusCode status);
void UpdateRegisteredApps(); void UpdateRegisteredApps();
static void QueryAppStatusOnUIThread(
const base::WeakPtr<ExtensionServiceInterface>& extension_service_ptr,
const std::vector<std::string>* app_ids,
AppStatusMap* status,
const base::Closure& callback);
void DidQueryAppStatus(const AppStatusMap* app_status); void DidQueryAppStatus(const AppStatusMap* app_status);
void DidProcessRemoteChange(RemoteToLocalSyncer* syncer, void DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
const SyncFileCallback& callback, const SyncFileCallback& callback,
......
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "chrome/browser/sync_file_system/remote_file_sync_service.h" #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
#include "chrome/browser/sync_file_system/sync_action.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_direction.h"
#include "net/base/network_change_notifier.h" #include "net/base/network_change_notifier.h"
class GURL; class GURL;
...@@ -41,6 +43,21 @@ class SyncTaskManager; ...@@ -41,6 +43,21 @@ class SyncTaskManager;
class SyncWorkerInterface { class SyncWorkerInterface {
public: public:
class Observer {
public:
virtual void OnPendingFileListUpdated(int item_count) = 0;
virtual void OnFileStatusChanged(const fileapi::FileSystemURL& url,
SyncFileStatus file_status,
SyncAction sync_action,
SyncDirection direction) = 0;
virtual void UpdateServiceState(RemoteServiceState state,
const std::string& description) = 0;
protected:
virtual ~Observer() {}
};
SyncWorkerInterface() {}
virtual ~SyncWorkerInterface() {} virtual ~SyncWorkerInterface() {}
// Initializes SyncWorkerInterface after constructions of some member classes. // Initializes SyncWorkerInterface after constructions of some member classes.
...@@ -94,11 +111,15 @@ class SyncWorkerInterface { ...@@ -94,11 +111,15 @@ class SyncWorkerInterface {
virtual void DetachFromSequence() = 0; virtual void DetachFromSequence() = 0;
virtual void AddObserver(Observer* observer) = 0;
private: private:
friend class SyncEngineTest; friend class SyncEngineTest;
// TODO(peria): Remove this interface after making FakeSyncWorker class. // TODO(peria): Remove this interface after making FakeSyncWorker class.
virtual void SetHasRefreshToken(bool has_refresh_token) = 0; virtual void SetHasRefreshToken(bool has_refresh_token) = 0;
DISALLOW_COPY_AND_ASSIGN(SyncWorkerInterface);
}; };
} // namespace drive_backend } // namespace drive_backend
......
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