OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |