Commit 4b37dadf authored by peria@chromium.org's avatar peria@chromium.org

[SyncFS] SyncWorker caches a flag if it has refresh token.


BUG=347425

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274844 0039d316-1c4b-4281-b951-d872f2087c98
parent 4dca7650
......@@ -93,7 +93,6 @@ google_apis::CancelCallback DriveServiceOnWorker::DownloadFile(
return google_apis::CancelCallback();
}
google_apis::CancelCallback DriveServiceOnWorker::GetAboutResource(
const google_apis::AboutResourceCallback& callback) {
ui_task_runner_->PostTask(
......@@ -108,7 +107,6 @@ google_apis::CancelCallback DriveServiceOnWorker::GetAboutResource(
return google_apis::CancelCallback();
}
google_apis::CancelCallback DriveServiceOnWorker::GetChangeList(
int64 start_changestamp,
const google_apis::ChangeListCallback& callback) {
......@@ -233,10 +231,8 @@ google_apis::CancelCallback DriveServiceOnWorker::SearchByTitle(
}
bool DriveServiceOnWorker::HasRefreshToken() const {
// TODO(peria): Cache the state and returns it directly, before migration of
// SyncWorker to a worker thread.
DCHECK(wrapper_);
return wrapper_->HasRefreshToken();
NOTREACHED();
return false;
}
void DriveServiceOnWorker::Initialize(const std::string& account_id) {
......
......@@ -86,10 +86,6 @@ void DriveServiceWrapper::GetFileListInDirectory(
drive_service_->GetFileListInDirectory(directory_resource_id, callback);
}
bool DriveServiceWrapper::HasRefreshToken() const {
return drive_service_->HasRefreshToken();
}
void DriveServiceWrapper::RemoveResourceFromDirectory(
const std::string& parent_resource_id,
const std::string& resource_id,
......
......@@ -60,8 +60,6 @@ class DriveServiceWrapper : public base::SupportsWeakPtr<DriveServiceWrapper> {
const std::string& directory_resource_id,
const google_apis::FileListCallback& callback);
bool HasRefreshToken() const;
void RemoveResourceFromDirectory(
const std::string& parent_resource_id,
const std::string& resource_id,
......
......@@ -152,7 +152,11 @@ class SyncEngineTest
}
MetadataDatabase* metadata_database() {
return sync_engine()->sync_worker_->GetMetadataDatabase();
return sync_engine_->sync_worker_->GetMetadataDatabase();
}
void SetHasRefreshToken(bool has_refresh_token) {
sync_engine_->sync_worker_->has_refresh_token_ = has_refresh_token;
}
private:
......@@ -281,6 +285,8 @@ TEST_F(SyncEngineTest, GetOriginStatusMap) {
TEST_F(SyncEngineTest, UpdateServiceState) {
EXPECT_EQ(REMOTE_SERVICE_OK, sync_engine()->GetCurrentState());
SetHasRefreshToken(true);
GetSyncEngineTaskManager()->ScheduleTask(
FROM_HERE,
base::Bind(&EmptyTask, SYNC_STATUS_AUTHENTICATION_FAILED),
......
......@@ -102,6 +102,7 @@ SyncWorker::SyncWorker(
network_available_(false),
extension_service_(extension_service),
context_(sync_engine_context.Pass()),
has_refresh_token_(false),
weak_ptr_factory_(this) {}
SyncWorker::~SyncWorker() {}
......@@ -124,7 +125,7 @@ void SyncWorker::Initialize() {
void SyncWorker::RegisterOrigin(
const GURL& origin,
const SyncStatusCallback& callback) {
if (!GetMetadataDatabase() && GetDriveService()->HasRefreshToken())
if (!GetMetadataDatabase() && has_refresh_token_)
PostInitializeTask();
scoped_ptr<RegisterAppTask> task(
......@@ -346,6 +347,7 @@ void SyncWorker::OnNotificationReceived() {
}
void SyncWorker::OnReadyToSendRequests(const std::string& account_id) {
has_refresh_token_ = true;
if (service_state_ == REMOTE_SERVICE_OK)
return;
UpdateServiceState(REMOTE_SERVICE_OK, "Authenticated");
......@@ -361,6 +363,8 @@ void SyncWorker::OnReadyToSendRequests(const std::string& account_id) {
}
void SyncWorker::OnRefreshTokenInvalid() {
has_refresh_token_ = false;
UpdateServiceState(
REMOTE_SERVICE_AUTHENTICATION_REQUIRED,
"Found invalid refresh token.");
......@@ -442,7 +446,7 @@ void SyncWorker::PostInitializeTask() {
void SyncWorker::DidInitialize(SyncEngineInitializer* initializer,
SyncStatusCode status) {
if (status != SYNC_STATUS_OK) {
if (GetDriveService()->HasRefreshToken()) {
if (has_refresh_token_) {
UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE,
"Could not initialize remote service");
} else {
......@@ -671,7 +675,7 @@ void SyncWorker::UpdateServiceStateFromSyncStatusCode(
case SYNC_STATUS_NETWORK_ERROR:
case SYNC_STATUS_ABORT:
case SYNC_STATUS_FAILED:
if (GetDriveService()->HasRefreshToken()) {
if (has_refresh_token_) {
UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE,
"Network or temporary service error.");
} else {
......
......@@ -138,6 +138,8 @@ class SyncWorker : public SyncTaskManager::Client {
void AddObserver(Observer* observer);
private:
friend class SyncEngineTest;
void DoDisableApp(const std::string& app_id,
const SyncStatusCallback& callback);
void DoEnableApp(const std::string& app_id,
......@@ -188,6 +190,8 @@ class SyncWorker : public SyncTaskManager::Client {
scoped_ptr<SyncEngineContext> context_;
ObserverList<Observer> observers_;
bool has_refresh_token_;
base::WeakPtrFactory<SyncWorker> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(SyncWorker);
};
......
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