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/chromeos/drive/drive_integration_service.h" | 5 #include "chrome/browser/chromeos/drive/drive_integration_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/prefs/pref_change_registrar.h" | 9 #include "base/prefs/pref_change_registrar.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 const std::string& test_mount_point_name, | 212 const std::string& test_mount_point_name, |
213 const base::FilePath& test_cache_root, | 213 const base::FilePath& test_cache_root, |
214 FileSystemInterface* test_file_system) | 214 FileSystemInterface* test_file_system) |
215 : profile_(profile), | 215 : profile_(profile), |
216 state_(NOT_INITIALIZED), | 216 state_(NOT_INITIALIZED), |
217 enabled_(false), | 217 enabled_(false), |
218 mount_point_name_(test_mount_point_name), | 218 mount_point_name_(test_mount_point_name), |
219 cache_root_directory_(!test_cache_root.empty() ? | 219 cache_root_directory_(!test_cache_root.empty() ? |
220 test_cache_root : util::GetCacheRootPath(profile)), | 220 test_cache_root : util::GetCacheRootPath(profile)), |
221 weak_ptr_factory_(this) { | 221 weak_ptr_factory_(this) { |
222 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 222 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
223 DCHECK(profile && !profile->IsOffTheRecord()); | 223 DCHECK(profile && !profile->IsOffTheRecord()); |
224 | 224 |
225 logger_.reset(new EventLogger); | 225 logger_.reset(new EventLogger); |
226 base::SequencedWorkerPool* blocking_pool = BrowserThread::GetBlockingPool(); | 226 base::SequencedWorkerPool* blocking_pool = BrowserThread::GetBlockingPool(); |
227 blocking_task_runner_ = blocking_pool->GetSequencedTaskRunner( | 227 blocking_task_runner_ = blocking_pool->GetSequencedTaskRunner( |
228 blocking_pool->GetSequenceToken()); | 228 blocking_pool->GetSequenceToken()); |
229 | 229 |
230 ProfileOAuth2TokenService* oauth_service = | 230 ProfileOAuth2TokenService* oauth_service = |
231 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | 231 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); |
232 | 232 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 | 274 |
275 if (preference_watcher) { | 275 if (preference_watcher) { |
276 preference_watcher_.reset(preference_watcher); | 276 preference_watcher_.reset(preference_watcher); |
277 preference_watcher->set_integration_service(this); | 277 preference_watcher->set_integration_service(this); |
278 } | 278 } |
279 | 279 |
280 SetEnabled(drive::util::IsDriveEnabledForProfile(profile)); | 280 SetEnabled(drive::util::IsDriveEnabledForProfile(profile)); |
281 } | 281 } |
282 | 282 |
283 DriveIntegrationService::~DriveIntegrationService() { | 283 DriveIntegrationService::~DriveIntegrationService() { |
284 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 284 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
285 } | 285 } |
286 | 286 |
287 void DriveIntegrationService::Shutdown() { | 287 void DriveIntegrationService::Shutdown() { |
288 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 288 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
289 | 289 |
290 weak_ptr_factory_.InvalidateWeakPtrs(); | 290 weak_ptr_factory_.InvalidateWeakPtrs(); |
291 | 291 |
292 DriveNotificationManager* drive_notification_manager = | 292 DriveNotificationManager* drive_notification_manager = |
293 DriveNotificationManagerFactory::FindForBrowserContext(profile_); | 293 DriveNotificationManagerFactory::FindForBrowserContext(profile_); |
294 if (drive_notification_manager) | 294 if (drive_notification_manager) |
295 drive_notification_manager->RemoveObserver(this); | 295 drive_notification_manager->RemoveObserver(this); |
296 | 296 |
297 RemoveDriveMountPoint(); | 297 RemoveDriveMountPoint(); |
298 debug_info_collector_.reset(); | 298 debug_info_collector_.reset(); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 // GetRegisteredPath() returns true if the path is available. | 350 // GetRegisteredPath() returns true if the path is available. |
351 base::FilePath unused; | 351 base::FilePath unused; |
352 storage::ExternalMountPoints* const mount_points = | 352 storage::ExternalMountPoints* const mount_points = |
353 storage::ExternalMountPoints::GetSystemInstance(); | 353 storage::ExternalMountPoints::GetSystemInstance(); |
354 DCHECK(mount_points); | 354 DCHECK(mount_points); |
355 return mount_points->GetRegisteredPath(mount_point_name_, &unused); | 355 return mount_points->GetRegisteredPath(mount_point_name_, &unused); |
356 } | 356 } |
357 | 357 |
358 void DriveIntegrationService::AddObserver( | 358 void DriveIntegrationService::AddObserver( |
359 DriveIntegrationServiceObserver* observer) { | 359 DriveIntegrationServiceObserver* observer) { |
360 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 360 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
361 observers_.AddObserver(observer); | 361 observers_.AddObserver(observer); |
362 } | 362 } |
363 | 363 |
364 void DriveIntegrationService::RemoveObserver( | 364 void DriveIntegrationService::RemoveObserver( |
365 DriveIntegrationServiceObserver* observer) { | 365 DriveIntegrationServiceObserver* observer) { |
366 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 366 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
367 observers_.RemoveObserver(observer); | 367 observers_.RemoveObserver(observer); |
368 } | 368 } |
369 | 369 |
370 void DriveIntegrationService::OnNotificationReceived() { | 370 void DriveIntegrationService::OnNotificationReceived() { |
371 file_system_->CheckForUpdates(); | 371 file_system_->CheckForUpdates(); |
372 drive_app_registry_->Update(); | 372 drive_app_registry_->Update(); |
373 } | 373 } |
374 | 374 |
375 void DriveIntegrationService::OnPushNotificationEnabled(bool enabled) { | 375 void DriveIntegrationService::OnPushNotificationEnabled(bool enabled) { |
376 if (enabled) | 376 if (enabled) |
377 drive_app_registry_->Update(); | 377 drive_app_registry_->Update(); |
378 | 378 |
379 const char* status = (enabled ? "enabled" : "disabled"); | 379 const char* status = (enabled ? "enabled" : "disabled"); |
380 logger_->Log(logging::LOG_INFO, "Push notification is %s", status); | 380 logger_->Log(logging::LOG_INFO, "Push notification is %s", status); |
381 } | 381 } |
382 | 382 |
383 void DriveIntegrationService::ClearCacheAndRemountFileSystem( | 383 void DriveIntegrationService::ClearCacheAndRemountFileSystem( |
384 const base::Callback<void(bool)>& callback) { | 384 const base::Callback<void(bool)>& callback) { |
385 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 385 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
386 DCHECK(!callback.is_null()); | 386 DCHECK(!callback.is_null()); |
387 | 387 |
388 if (state_ != INITIALIZED) { | 388 if (state_ != INITIALIZED) { |
389 callback.Run(false); | 389 callback.Run(false); |
390 return; | 390 return; |
391 } | 391 } |
392 | 392 |
393 RemoveDriveMountPoint(); | 393 RemoveDriveMountPoint(); |
394 | 394 |
395 state_ = REMOUNTING; | 395 state_ = REMOUNTING; |
396 // Reloads the Drive app registry. | 396 // Reloads the Drive app registry. |
397 drive_app_registry_->Update(); | 397 drive_app_registry_->Update(); |
398 // Resetting the file system clears resource metadata and cache. | 398 // Resetting the file system clears resource metadata and cache. |
399 file_system_->Reset(base::Bind( | 399 file_system_->Reset(base::Bind( |
400 &DriveIntegrationService::AddBackDriveMountPoint, | 400 &DriveIntegrationService::AddBackDriveMountPoint, |
401 weak_ptr_factory_.GetWeakPtr(), | 401 weak_ptr_factory_.GetWeakPtr(), |
402 callback)); | 402 callback)); |
403 } | 403 } |
404 | 404 |
405 void DriveIntegrationService::AddBackDriveMountPoint( | 405 void DriveIntegrationService::AddBackDriveMountPoint( |
406 const base::Callback<void(bool)>& callback, | 406 const base::Callback<void(bool)>& callback, |
407 FileError error) { | 407 FileError error) { |
408 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 408 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
409 DCHECK(!callback.is_null()); | 409 DCHECK(!callback.is_null()); |
410 | 410 |
411 state_ = error == FILE_ERROR_OK ? INITIALIZED : NOT_INITIALIZED; | 411 state_ = error == FILE_ERROR_OK ? INITIALIZED : NOT_INITIALIZED; |
412 | 412 |
413 if (error != FILE_ERROR_OK || !enabled_) { | 413 if (error != FILE_ERROR_OK || !enabled_) { |
414 // Failed to reset, or Drive was disabled during the reset. | 414 // Failed to reset, or Drive was disabled during the reset. |
415 callback.Run(false); | 415 callback.Run(false); |
416 return; | 416 return; |
417 } | 417 } |
418 | 418 |
419 AddDriveMountPoint(); | 419 AddDriveMountPoint(); |
420 callback.Run(true); | 420 callback.Run(true); |
421 } | 421 } |
422 | 422 |
423 void DriveIntegrationService::AddDriveMountPoint() { | 423 void DriveIntegrationService::AddDriveMountPoint() { |
424 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 424 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
425 DCHECK_EQ(INITIALIZED, state_); | 425 DCHECK_EQ(INITIALIZED, state_); |
426 DCHECK(enabled_); | 426 DCHECK(enabled_); |
427 | 427 |
428 const base::FilePath& drive_mount_point = | 428 const base::FilePath& drive_mount_point = |
429 util::GetDriveMountPointPath(profile_); | 429 util::GetDriveMountPointPath(profile_); |
430 if (mount_point_name_.empty()) | 430 if (mount_point_name_.empty()) |
431 mount_point_name_ = drive_mount_point.BaseName().AsUTF8Unsafe(); | 431 mount_point_name_ = drive_mount_point.BaseName().AsUTF8Unsafe(); |
432 storage::ExternalMountPoints* const mount_points = | 432 storage::ExternalMountPoints* const mount_points = |
433 storage::ExternalMountPoints::GetSystemInstance(); | 433 storage::ExternalMountPoints::GetSystemInstance(); |
434 DCHECK(mount_points); | 434 DCHECK(mount_points); |
435 | 435 |
436 bool success = | 436 bool success = |
437 mount_points->RegisterFileSystem(mount_point_name_, | 437 mount_points->RegisterFileSystem(mount_point_name_, |
438 storage::kFileSystemTypeDrive, | 438 storage::kFileSystemTypeDrive, |
439 storage::FileSystemMountOption(), | 439 storage::FileSystemMountOption(), |
440 drive_mount_point); | 440 drive_mount_point); |
441 | 441 |
442 if (success) { | 442 if (success) { |
443 logger_->Log(logging::LOG_INFO, "Drive mount point is added"); | 443 logger_->Log(logging::LOG_INFO, "Drive mount point is added"); |
444 FOR_EACH_OBSERVER(DriveIntegrationServiceObserver, observers_, | 444 FOR_EACH_OBSERVER(DriveIntegrationServiceObserver, observers_, |
445 OnFileSystemMounted()); | 445 OnFileSystemMounted()); |
446 } | 446 } |
447 } | 447 } |
448 | 448 |
449 void DriveIntegrationService::RemoveDriveMountPoint() { | 449 void DriveIntegrationService::RemoveDriveMountPoint() { |
450 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 450 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
451 | 451 |
452 if (!mount_point_name_.empty()) { | 452 if (!mount_point_name_.empty()) { |
453 job_list()->CancelAllJobs(); | 453 job_list()->CancelAllJobs(); |
454 | 454 |
455 FOR_EACH_OBSERVER(DriveIntegrationServiceObserver, observers_, | 455 FOR_EACH_OBSERVER(DriveIntegrationServiceObserver, observers_, |
456 OnFileSystemBeingUnmounted()); | 456 OnFileSystemBeingUnmounted()); |
457 | 457 |
458 storage::ExternalMountPoints* const mount_points = | 458 storage::ExternalMountPoints* const mount_points = |
459 storage::ExternalMountPoints::GetSystemInstance(); | 459 storage::ExternalMountPoints::GetSystemInstance(); |
460 DCHECK(mount_points); | 460 DCHECK(mount_points); |
461 | 461 |
462 mount_points->RevokeFileSystem(mount_point_name_); | 462 mount_points->RevokeFileSystem(mount_point_name_); |
463 logger_->Log(logging::LOG_INFO, "Drive mount point is removed"); | 463 logger_->Log(logging::LOG_INFO, "Drive mount point is removed"); |
464 } | 464 } |
465 } | 465 } |
466 | 466 |
467 void DriveIntegrationService::Initialize() { | 467 void DriveIntegrationService::Initialize() { |
468 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 468 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
469 DCHECK_EQ(NOT_INITIALIZED, state_); | 469 DCHECK_EQ(NOT_INITIALIZED, state_); |
470 DCHECK(enabled_); | 470 DCHECK(enabled_); |
471 | 471 |
472 state_ = INITIALIZING; | 472 state_ = INITIALIZING; |
473 | 473 |
474 base::PostTaskAndReplyWithResult( | 474 base::PostTaskAndReplyWithResult( |
475 blocking_task_runner_.get(), | 475 blocking_task_runner_.get(), |
476 FROM_HERE, | 476 FROM_HERE, |
477 base::Bind(&InitializeMetadata, | 477 base::Bind(&InitializeMetadata, |
478 cache_root_directory_, | 478 cache_root_directory_, |
479 metadata_storage_.get(), | 479 metadata_storage_.get(), |
480 cache_.get(), | 480 cache_.get(), |
481 resource_metadata_.get(), | 481 resource_metadata_.get(), |
482 file_manager::util::GetDownloadsFolderForProfile(profile_)), | 482 file_manager::util::GetDownloadsFolderForProfile(profile_)), |
483 base::Bind(&DriveIntegrationService::InitializeAfterMetadataInitialized, | 483 base::Bind(&DriveIntegrationService::InitializeAfterMetadataInitialized, |
484 weak_ptr_factory_.GetWeakPtr())); | 484 weak_ptr_factory_.GetWeakPtr())); |
485 } | 485 } |
486 | 486 |
487 void DriveIntegrationService::InitializeAfterMetadataInitialized( | 487 void DriveIntegrationService::InitializeAfterMetadataInitialized( |
488 FileError error) { | 488 FileError error) { |
489 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 489 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
490 DCHECK_EQ(INITIALIZING, state_); | 490 DCHECK_EQ(INITIALIZING, state_); |
491 | 491 |
492 SigninManagerBase* signin_manager = | 492 SigninManagerBase* signin_manager = |
493 SigninManagerFactory::GetForProfile(profile_); | 493 SigninManagerFactory::GetForProfile(profile_); |
494 drive_service_->Initialize(signin_manager->GetAuthenticatedAccountId()); | 494 drive_service_->Initialize(signin_manager->GetAuthenticatedAccountId()); |
495 | 495 |
496 if (error != FILE_ERROR_OK) { | 496 if (error != FILE_ERROR_OK) { |
497 LOG(WARNING) << "Failed to initialize: " << FileErrorToString(error); | 497 LOG(WARNING) << "Failed to initialize: " << FileErrorToString(error); |
498 | 498 |
499 // Cannot used Drive. Set the download destination preference out of Drive. | 499 // Cannot used Drive. Set the download destination preference out of Drive. |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 profile, preference_watcher, | 641 profile, preference_watcher, |
642 NULL, std::string(), base::FilePath(), NULL); | 642 NULL, std::string(), base::FilePath(), NULL); |
643 } else { | 643 } else { |
644 service = factory_for_test_->Run(profile); | 644 service = factory_for_test_->Run(profile); |
645 } | 645 } |
646 | 646 |
647 return service; | 647 return service; |
648 } | 648 } |
649 | 649 |
650 } // namespace drive | 650 } // namespace drive |
OLD | NEW |