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 @@
#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_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/file_status_observer.h"
#include "chrome/browser/sync_file_system/logger.h"
......@@ -61,7 +62,7 @@ class RemoteChangeProcessor;
namespace drive_backend {
class SyncEngine::WorkerObserver : public SyncWorker::Observer {
class SyncEngine::WorkerObserver : public SyncWorkerInterface::Observer {
public:
WorkerObserver(base::SequencedTaskRunner* ui_task_runner,
base::WeakPtr<SyncEngine> sync_engine)
......@@ -241,8 +242,8 @@ void SyncEngine::Reset() {
if (drive_service_)
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_, worker_observer_.Pass());
DeleteSoon(FROM_HERE, worker_task_runner_,
remote_change_processor_on_worker_.Pass());
......@@ -324,14 +325,12 @@ void SyncEngine::InitializeInternal(
if (extension_service_)
extension_service_weak_ptr = extension_service_->AsWeakPtr();
scoped_ptr<SyncWorker> worker(new SyncWorker(
sync_worker_.reset(new SyncWorker(
sync_file_system_dir_,
extension_service_weak_ptr,
sync_engine_context.Pass(),
env_override_));
worker->AddObserver(worker_observer_.get());
sync_worker_ = worker.PassAs<SyncWorkerInterface>();
sync_worker_->AddObserver(worker_observer_.get());
if (remote_change_processor_)
SetRemoteChangeProcessor(remote_change_processor_);
......
......@@ -36,31 +36,6 @@ namespace {
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
SyncWorker::SyncWorker(
......@@ -86,7 +61,9 @@ SyncWorker::SyncWorker(
DCHECK(base_dir_.IsAbsolute());
}
SyncWorker::~SyncWorker() {}
SyncWorker::~SyncWorker() {
observers_.Clear();
}
void SyncWorker::Initialize() {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
......@@ -497,7 +474,7 @@ void SyncWorker::UpdateRegisteredApps() {
context_->GetUITaskRunner()->PostTask(
FROM_HERE,
base::Bind(&QueryAppStatusOnUIThread,
base::Bind(&SyncWorker::QueryAppStatusOnUIThread,
extension_service_,
base::Owned(app_ids.release()),
app_status,
......@@ -506,6 +483,31 @@ void SyncWorker::UpdateRegisteredApps() {
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) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
......
......@@ -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_worker_interface.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_direction.h"
#include "chrome/browser/sync_file_system/task_logger.h"
#include "net/base/network_change_notifier.h"
......@@ -57,28 +55,6 @@ class SyncEngineInitializer;
class SyncWorker : public SyncWorkerInterface,
public SyncTaskManager::Client {
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,
const base::WeakPtr<ExtensionServiceInterface>& extension_service,
scoped_ptr<SyncEngineContext> sync_engine_context,
......@@ -138,12 +114,20 @@ class SyncWorker : public SyncWorkerInterface,
virtual void DetachFromSequence() OVERRIDE;
void AddObserver(Observer* observer);
virtual void AddObserver(Observer* observer) OVERRIDE;
private:
friend class DriveBackendSyncTest;
friend class SyncWorkerTest;
enum AppStatus {
APP_STATUS_ENABLED,
APP_STATUS_DISABLED,
APP_STATUS_UNINSTALLED,
};
typedef base::hash_map<std::string, AppStatus> AppStatusMap;
// SyncWorkerInterface overrides.
// TODO(peria): Remove this interface after making FakeSyncWorker class.
virtual void SetHasRefreshToken(bool has_refresh_token) OVERRIDE;
......@@ -157,6 +141,11 @@ class SyncWorker : public SyncWorkerInterface,
void DidInitialize(SyncEngineInitializer* initializer,
SyncStatusCode status);
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 DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
const SyncFileCallback& callback,
......
......@@ -9,7 +9,9 @@
#include "base/memory/scoped_ptr.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_direction.h"
#include "net/base/network_change_notifier.h"
class GURL;
......@@ -41,6 +43,21 @@ class SyncTaskManager;
class SyncWorkerInterface {
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() {}
// Initializes SyncWorkerInterface after constructions of some member classes.
......@@ -94,11 +111,15 @@ class SyncWorkerInterface {
virtual void DetachFromSequence() = 0;
virtual void AddObserver(Observer* observer) = 0;
private:
friend class SyncEngineTest;
// TODO(peria): Remove this interface after making FakeSyncWorker class.
virtual void SetHasRefreshToken(bool has_refresh_token) = 0;
DISALLOW_COPY_AND_ASSIGN(SyncWorkerInterface);
};
} // 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