Commit 714e8c22 authored by tzik@chromium.org's avatar tzik@chromium.org

[SyncFS] Support late authentication

- Make observers to external services sticky over re-initialization.
- Leave SyncWorker NULL when non sign-in state.
- Observe sign-in event and trigger initialization on it.

BUG=374101,380615

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276591 0039d316-1c4b-4281-b951-d872f2087c98
parent 21d00244
......@@ -18,11 +18,11 @@
#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_direction.h"
#include "components/signin/core/browser/signin_manager_base.h"
#include "net/base/network_change_notifier.h"
class ExtensionServiceInterface;
class ProfileOAuth2TokenService;
class SigninManagerBase;
namespace base {
class SequencedTaskRunner;
......@@ -60,9 +60,10 @@ class SyncEngine : public RemoteFileSyncService,
public LocalChangeProcessor,
public drive::DriveNotificationObserver,
public drive::DriveServiceObserver,
public net::NetworkChangeNotifier::NetworkChangeObserver {
public net::NetworkChangeNotifier::NetworkChangeObserver,
public SigninManagerBase::Observer {
public:
typedef Observer SyncServiceObserver;
typedef RemoteFileSyncService::Observer SyncServiceObserver;
static scoped_ptr<SyncEngine> CreateForBrowserContext(
content::BrowserContext* context,
......@@ -131,13 +132,11 @@ class SyncEngine : public RemoteFileSyncService,
virtual void OnNetworkChanged(
net::NetworkChangeNotifier::ConnectionType type) OVERRIDE;
void OnPendingFileListUpdated(int item_count);
void OnFileStatusChanged(const fileapi::FileSystemURL& url,
SyncFileStatus file_status,
SyncAction sync_action,
SyncDirection direction);
void UpdateServiceState(RemoteServiceState state,
const std::string& description);
// SigninManagerBase::Observer overrides.
virtual void GoogleSigninFailed(const GoogleServiceAuthError& error) OVERRIDE;
virtual void GoogleSigninSucceeded(const std::string& username,
const std::string& password) OVERRIDE;
virtual void GoogleSignedOut(const std::string& username) OVERRIDE;
private:
class WorkerObserver;
......@@ -158,6 +157,15 @@ class SyncEngine : public RemoteFileSyncService,
net::URLRequestContextGetter* request_context,
leveldb::Env* env_override);
// Called by WorkerObserver.
void OnPendingFileListUpdated(int item_count);
void OnFileStatusChanged(const fileapi::FileSystemURL& url,
SyncFileStatus file_status,
SyncAction sync_action,
SyncDirection direction);
void UpdateServiceState(RemoteServiceState state,
const std::string& description);
SyncStatusCallback TrackCallback(const SyncStatusCallback& callback);
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
......
......@@ -337,7 +337,7 @@ void SyncWorker::OnNotificationReceived() {
MaybeScheduleNextTask();
}
void SyncWorker::OnReadyToSendRequests(const std::string& account_id) {
void SyncWorker::OnReadyToSendRequests() {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
has_refresh_token_ = true;
......@@ -346,8 +346,7 @@ void SyncWorker::OnReadyToSendRequests(const std::string& account_id) {
return;
UpdateServiceState(REMOTE_SERVICE_OK, "Authenticated");
if (!GetMetadataDatabase() && !account_id.empty()) {
GetDriveService()->Initialize(account_id);
if (!GetMetadataDatabase()) {
PostInitializeTask();
return;
}
......
......@@ -125,7 +125,7 @@ class SyncWorker : public SyncWorkerInterface,
virtual void OnNotificationReceived() OVERRIDE;
virtual void OnReadyToSendRequests(const std::string& account_id) OVERRIDE;
virtual void OnReadyToSendRequests() OVERRIDE;
virtual void OnRefreshTokenInvalid() OVERRIDE;
virtual void OnNetworkChanged(
......
......@@ -80,7 +80,7 @@ class SyncWorkerInterface {
virtual void OnNotificationReceived() = 0;
// See drive::DriveServiceObserver for the details.
virtual void OnReadyToSendRequests(const std::string& account_id) = 0;
virtual void OnReadyToSendRequests() = 0;
virtual void OnRefreshTokenInvalid() = 0;
// See net::NetworkChangeNotifier::NetworkChangeObserver for the details.
......
......@@ -15,7 +15,6 @@
#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_task.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_worker.h"
#include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "extensions/common/extension.h"
......
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