Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: chrome/browser/sync_file_system/drive_file_sync_service.cc

Issue 11414253: DriveFileSyncService listens to OnAuthenticated event to recover from unavailable state (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" 5 #include "chrome/browser/sync_file_system/drive_file_sync_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/message_loop_proxy.h" 14 #include "base/message_loop_proxy.h"
15 #include "base/utf_string_conversions.h" 15 #include "base/utf_string_conversions.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "chrome/browser/google_apis/gdata_wapi_service.h"
18 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/sync_file_system/drive_file_sync_client.h" 18 #include "chrome/browser/sync_file_system/drive_file_sync_client.h"
20 #include "chrome/browser/sync_file_system/drive_file_sync_util.h" 19 #include "chrome/browser/sync_file_system/drive_file_sync_util.h"
21 #include "chrome/browser/sync_file_system/drive_metadata_store.h" 20 #include "chrome/browser/sync_file_system/drive_metadata_store.h"
22 #include "chrome/browser/sync_file_system/remote_change_processor.h" 21 #include "chrome/browser/sync_file_system/remote_change_processor.h"
23 #include "chrome/browser/sync_file_system/sync_file_system.pb.h" 22 #include "chrome/browser/sync_file_system/sync_file_system.pb.h"
24 #include "chrome/common/extensions/extension.h" 23 #include "chrome/common/extensions/extension.h"
25 #include "content/public/browser/browser_thread.h" 24 #include "content/public/browser/browser_thread.h"
26 #include "extensions/common/constants.h" 25 #include "extensions/common/constants.h"
27 #include "webkit/fileapi/file_system_url.h" 26 #include "webkit/fileapi/file_system_url.h"
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 DriveFileSyncService::DriveFileSyncService(Profile* profile) 202 DriveFileSyncService::DriveFileSyncService(Profile* profile)
204 : last_operation_status_(fileapi::SYNC_STATUS_OK), 203 : last_operation_status_(fileapi::SYNC_STATUS_OK),
205 state_(REMOTE_SERVICE_OK), 204 state_(REMOTE_SERVICE_OK),
206 largest_changestamp_(0), 205 largest_changestamp_(0),
207 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 206 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
208 temporary_file_dir_ = 207 temporary_file_dir_ =
209 profile->GetPath().Append(kSyncFileSystemDir).Append(kTempDirName); 208 profile->GetPath().Append(kSyncFileSystemDir).Append(kTempDirName);
210 token_.reset(new TaskToken(AsWeakPtr())); 209 token_.reset(new TaskToken(AsWeakPtr()));
211 210
212 sync_client_.reset(new DriveFileSyncClient(profile)); 211 sync_client_.reset(new DriveFileSyncClient(profile));
212 sync_client_->AddObserver(this);
213 213
214 metadata_store_.reset(new DriveMetadataStore( 214 metadata_store_.reset(new DriveMetadataStore(
215 profile->GetPath().Append(kSyncFileSystemDir), 215 profile->GetPath().Append(kSyncFileSystemDir),
216 content::BrowserThread::GetMessageLoopProxyForThread( 216 content::BrowserThread::GetMessageLoopProxyForThread(
217 content::BrowserThread::FILE))); 217 content::BrowserThread::FILE)));
218 218
219 metadata_store_->Initialize( 219 metadata_store_->Initialize(
220 base::Bind(&DriveFileSyncService::DidInitializeMetadataStore, AsWeakPtr(), 220 base::Bind(&DriveFileSyncService::DidInitializeMetadataStore, AsWeakPtr(),
221 base::Passed(GetToken(FROM_HERE, TASK_TYPE_DATABASE, 221 base::Passed(GetToken(FROM_HERE, TASK_TYPE_DATABASE,
222 "Metadata database initialization")))); 222 "Metadata database initialization"))));
223 } 223 }
224 224
225 DriveFileSyncService::~DriveFileSyncService() { 225 DriveFileSyncService::~DriveFileSyncService() {
226 // Invalidate WeakPtr instances here explicitly to notify TaskToken that we 226 // Invalidate WeakPtr instances here explicitly to notify TaskToken that we
227 // can safely discard the token. 227 // can safely discard the token.
228 weak_factory_.InvalidateWeakPtrs(); 228 weak_factory_.InvalidateWeakPtrs();
229 sync_client_->RemoveObserver(this);
229 token_.reset(); 230 token_.reset();
230 } 231 }
231 232
232 // static 233 // static
233 scoped_ptr<DriveFileSyncService> DriveFileSyncService::CreateForTesting( 234 scoped_ptr<DriveFileSyncService> DriveFileSyncService::CreateForTesting(
234 const FilePath& base_dir, 235 const FilePath& base_dir,
235 scoped_ptr<DriveFileSyncClient> sync_client, 236 scoped_ptr<DriveFileSyncClient> sync_client,
236 scoped_ptr<DriveMetadataStore> metadata_store) { 237 scoped_ptr<DriveMetadataStore> metadata_store) {
237 return make_scoped_ptr(new DriveFileSyncService( 238 return make_scoped_ptr(new DriveFileSyncService(
238 base_dir, sync_client.Pass(), metadata_store.Pass())); 239 base_dir, sync_client.Pass(), metadata_store.Pass()));
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 DidApplyLocalChange(token.Pass(), url, google_apis::GDATA_OTHER_ERROR, 503 DidApplyLocalChange(token.Pass(), url, google_apis::GDATA_OTHER_ERROR,
503 callback, fileapi::SYNC_STATUS_FAILED); 504 callback, fileapi::SYNC_STATUS_FAILED);
504 return; 505 return;
505 } 506 }
506 } 507 }
507 NOTREACHED(); 508 NOTREACHED();
508 DidApplyLocalChange(token.Pass(), url, google_apis::GDATA_OTHER_ERROR, 509 DidApplyLocalChange(token.Pass(), url, google_apis::GDATA_OTHER_ERROR,
509 callback, fileapi::SYNC_STATUS_FAILED); 510 callback, fileapi::SYNC_STATUS_FAILED);
510 } 511 }
511 512
513 void DriveFileSyncService::OnAuthenticated() {
514 DVLOG(1) << "OnAuthenticated";
515 if (state_ == REMOTE_SERVICE_AUTHENTICATION_REQUIRED ||
516 state_ == REMOTE_SERVICE_TEMPORARY_UNAVAILABLE) {
517 state_ = REMOTE_SERVICE_OK;
518 FOR_EACH_OBSERVER(
519 Observer, observers_,
520 OnRemoteServiceStateUpdated(state_, "Authenticated"));
521 }
522 }
523
512 // Called by CreateForTesting. 524 // Called by CreateForTesting.
513 DriveFileSyncService::DriveFileSyncService( 525 DriveFileSyncService::DriveFileSyncService(
514 const FilePath& base_dir, 526 const FilePath& base_dir,
515 scoped_ptr<DriveFileSyncClient> sync_client, 527 scoped_ptr<DriveFileSyncClient> sync_client,
516 scoped_ptr<DriveMetadataStore> metadata_store) 528 scoped_ptr<DriveMetadataStore> metadata_store)
517 : last_operation_status_(fileapi::SYNC_STATUS_OK), 529 : last_operation_status_(fileapi::SYNC_STATUS_OK),
518 state_(REMOTE_SERVICE_OK), 530 state_(REMOTE_SERVICE_OK),
519 largest_changestamp_(0), 531 largest_changestamp_(0),
520 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 532 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
521 temporary_file_dir_ = base_dir.Append(kTempDirName); 533 temporary_file_dir_ = base_dir.Append(kTempDirName);
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 fileapi::SyncStatusCode 1354 fileapi::SyncStatusCode
1343 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper( 1355 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper(
1344 google_apis::GDataErrorCode error) const { 1356 google_apis::GDataErrorCode error) const {
1345 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 1357 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error);
1346 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated()) 1358 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated())
1347 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED; 1359 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED;
1348 return status; 1360 return status;
1349 } 1361 }
1350 1362
1351 } // namespace sync_file_system 1363 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698