| 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/extensions/file_manager/event_router.h" | 5 #include "chrome/browser/chromeos/extensions/file_manager/event_router.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/prefs/pref_change_registrar.h" | 10 #include "base/prefs/pref_change_registrar.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "chrome/browser/chromeos/file_manager/open_util.h" | 24 #include "chrome/browser/chromeos/file_manager/open_util.h" |
| 25 #include "chrome/browser/chromeos/file_manager/volume_manager.h" | 25 #include "chrome/browser/chromeos/file_manager/volume_manager.h" |
| 26 #include "chrome/browser/chromeos/login/login_display_host_impl.h" | 26 #include "chrome/browser/chromeos/login/login_display_host_impl.h" |
| 27 #include "chrome/browser/chromeos/login/screen_locker.h" | 27 #include "chrome/browser/chromeos/login/screen_locker.h" |
| 28 #include "chrome/browser/drive/drive_service_interface.h" | 28 #include "chrome/browser/drive/drive_service_interface.h" |
| 29 #include "chrome/browser/extensions/event_names.h" | 29 #include "chrome/browser/extensions/event_names.h" |
| 30 #include "chrome/browser/extensions/event_router.h" | 30 #include "chrome/browser/extensions/event_router.h" |
| 31 #include "chrome/browser/extensions/extension_service.h" | 31 #include "chrome/browser/extensions/extension_service.h" |
| 32 #include "chrome/browser/extensions/extension_system.h" | 32 #include "chrome/browser/extensions/extension_system.h" |
| 33 #include "chrome/browser/profiles/profile.h" | 33 #include "chrome/browser/profiles/profile.h" |
| 34 #include "chrome/common/extensions/api/file_browser_private.h" |
| 34 #include "chrome/common/pref_names.h" | 35 #include "chrome/common/pref_names.h" |
| 35 #include "chromeos/login/login_state.h" | 36 #include "chromeos/login/login_state.h" |
| 36 #include "chromeos/network/network_handler.h" | 37 #include "chromeos/network/network_handler.h" |
| 37 #include "chromeos/network/network_state_handler.h" | 38 #include "chromeos/network/network_state_handler.h" |
| 38 #include "content/public/browser/browser_thread.h" | 39 #include "content/public/browser/browser_thread.h" |
| 39 #include "content/public/browser/notification_source.h" | 40 #include "content/public/browser/notification_source.h" |
| 40 #include "webkit/common/fileapi/file_system_types.h" | 41 #include "webkit/common/fileapi/file_system_types.h" |
| 41 #include "webkit/common/fileapi/file_system_util.h" | 42 #include "webkit/common/fileapi/file_system_util.h" |
| 42 | 43 |
| 43 using chromeos::disks::DiskMountManager; | 44 using chromeos::disks::DiskMountManager; |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 return util::VolumeTypeToStringEnum(VOLUME_TYPE_REMOVABLE_DISK_PARTITION); | 221 return util::VolumeTypeToStringEnum(VOLUME_TYPE_REMOVABLE_DISK_PARTITION); |
| 221 case chromeos::MOUNT_TYPE_ARCHIVE: | 222 case chromeos::MOUNT_TYPE_ARCHIVE: |
| 222 return util::VolumeTypeToStringEnum(VOLUME_TYPE_MOUNTED_ARCHIVE_FILE); | 223 return util::VolumeTypeToStringEnum(VOLUME_TYPE_MOUNTED_ARCHIVE_FILE); |
| 223 case chromeos::MOUNT_TYPE_GOOGLE_DRIVE: | 224 case chromeos::MOUNT_TYPE_GOOGLE_DRIVE: |
| 224 return util::VolumeTypeToStringEnum(VOLUME_TYPE_GOOGLE_DRIVE); | 225 return util::VolumeTypeToStringEnum(VOLUME_TYPE_GOOGLE_DRIVE); |
| 225 } | 226 } |
| 226 NOTREACHED(); | 227 NOTREACHED(); |
| 227 return ""; | 228 return ""; |
| 228 } | 229 } |
| 229 | 230 |
| 231 // Sends an event named |event_name| with arguments |event_args| to extensions. |
| 232 void BroadcastEvent(Profile* profile, |
| 233 const std::string& event_name, |
| 234 scoped_ptr<base::ListValue> event_args) { |
| 235 extensions::ExtensionSystem::Get(profile)->event_router()-> |
| 236 BroadcastEvent(make_scoped_ptr( |
| 237 new extensions::Event(event_name, event_args.Pass()))); |
| 238 } |
| 239 |
| 230 } // namespace | 240 } // namespace |
| 231 | 241 |
| 232 // Pass dummy value to JobInfo's constructor for make it default constructible. | 242 // Pass dummy value to JobInfo's constructor for make it default constructible. |
| 233 EventRouter::DriveJobInfoWithStatus::DriveJobInfoWithStatus() | 243 EventRouter::DriveJobInfoWithStatus::DriveJobInfoWithStatus() |
| 234 : job_info(drive::TYPE_DOWNLOAD_FILE) { | 244 : job_info(drive::TYPE_DOWNLOAD_FILE) { |
| 235 } | 245 } |
| 236 | 246 |
| 237 EventRouter::DriveJobInfoWithStatus::DriveJobInfoWithStatus( | 247 EventRouter::DriveJobInfoWithStatus::DriveJobInfoWithStatus( |
| 238 const drive::JobInfo& info, const std::string& status) | 248 const drive::JobInfo& info, const std::string& status) |
| 239 : job_info(info), status(status) { | 249 : job_info(info), status(status) { |
| 240 } | 250 } |
| 241 | 251 |
| 242 EventRouter::EventRouter( | 252 EventRouter::EventRouter(Profile* profile) |
| 243 Profile* profile) | |
| 244 : notifications_(new DesktopNotifications(profile)), | 253 : notifications_(new DesktopNotifications(profile)), |
| 245 pref_change_registrar_(new PrefChangeRegistrar), | 254 pref_change_registrar_(new PrefChangeRegistrar), |
| 246 profile_(profile), | 255 profile_(profile), |
| 247 weak_factory_(this) { | 256 weak_factory_(this) { |
| 248 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 257 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 249 } | 258 } |
| 250 | 259 |
| 251 EventRouter::~EventRouter() { | 260 EventRouter::~EventRouter() { |
| 252 } | 261 } |
| 253 | 262 |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 if (iter == file_watchers_.end()) | 408 if (iter == file_watchers_.end()) |
| 400 return; | 409 return; |
| 401 // Remove the watcher if |watch_path| is no longer watched by any extensions. | 410 // Remove the watcher if |watch_path| is no longer watched by any extensions. |
| 402 iter->second->RemoveExtension(extension_id); | 411 iter->second->RemoveExtension(extension_id); |
| 403 if (iter->second->GetExtensionIds().empty()) { | 412 if (iter->second->GetExtensionIds().empty()) { |
| 404 delete iter->second; | 413 delete iter->second; |
| 405 file_watchers_.erase(iter); | 414 file_watchers_.erase(iter); |
| 406 } | 415 } |
| 407 } | 416 } |
| 408 | 417 |
| 418 void EventRouter::OnCopyCompleted( |
| 419 int copy_id, const GURL& url, base::PlatformFileError error) { |
| 420 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 421 |
| 422 using extensions::api::file_browser_private::CopyProgressStatus; |
| 423 namespace OnCopyProgress = |
| 424 extensions::api::file_browser_private::OnCopyProgress; |
| 425 |
| 426 CopyProgressStatus status; |
| 427 if (error == base::PLATFORM_FILE_OK) { |
| 428 // Send success event. |
| 429 status.type = CopyProgressStatus::TYPE_SUCCESS; |
| 430 status.url.reset(new std::string(url.spec())); |
| 431 } else { |
| 432 // Send error event. |
| 433 status.type = CopyProgressStatus::TYPE_ERROR; |
| 434 status.error.reset( |
| 435 new int(fileapi::PlatformFileErrorToWebFileError(error))); |
| 436 } |
| 437 |
| 438 BroadcastEvent( |
| 439 profile_, |
| 440 extensions::event_names::kOnFileBrowserCopyProgress, |
| 441 OnCopyProgress::Create(copy_id, status)); |
| 442 } |
| 443 |
| 409 void EventRouter::OnDiskEvent(DiskMountManager::DiskEvent event, | 444 void EventRouter::OnDiskEvent(DiskMountManager::DiskEvent event, |
| 410 const DiskMountManager::Disk* disk) { | 445 const DiskMountManager::Disk* disk) { |
| 411 // Disk event is dispatched by VolumeManager now. Do nothing. | 446 // Disk event is dispatched by VolumeManager now. Do nothing. |
| 412 } | 447 } |
| 413 | 448 |
| 414 void EventRouter::OnDeviceEvent(DiskMountManager::DeviceEvent event, | 449 void EventRouter::OnDeviceEvent(DiskMountManager::DeviceEvent event, |
| 415 const std::string& device_path) { | 450 const std::string& device_path) { |
| 416 // Device event is dispatched by VolumeManager now. Do nothing. | 451 // Device event is dispatched by VolumeManager now. Do nothing. |
| 417 } | 452 } |
| 418 | 453 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 const std::string& device_path) { | 507 const std::string& device_path) { |
| 473 // Format event is dispatched by VolumeManager now. Do nothing. | 508 // Format event is dispatched by VolumeManager now. Do nothing. |
| 474 } | 509 } |
| 475 | 510 |
| 476 void EventRouter::NetworkManagerChanged() { | 511 void EventRouter::NetworkManagerChanged() { |
| 477 if (!profile_ || | 512 if (!profile_ || |
| 478 !extensions::ExtensionSystem::Get(profile_)->event_router()) { | 513 !extensions::ExtensionSystem::Get(profile_)->event_router()) { |
| 479 NOTREACHED(); | 514 NOTREACHED(); |
| 480 return; | 515 return; |
| 481 } | 516 } |
| 482 scoped_ptr<extensions::Event> event(new extensions::Event( | 517 |
| 518 BroadcastEvent( |
| 519 profile_, |
| 483 extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, | 520 extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, |
| 484 scoped_ptr<ListValue>(new ListValue()))); | 521 make_scoped_ptr(new ListValue)); |
| 485 extensions::ExtensionSystem::Get(profile_)->event_router()-> | |
| 486 BroadcastEvent(event.Pass()); | |
| 487 } | 522 } |
| 488 | 523 |
| 489 void EventRouter::DefaultNetworkChanged(const chromeos::NetworkState* network) { | 524 void EventRouter::DefaultNetworkChanged(const chromeos::NetworkState* network) { |
| 490 NetworkManagerChanged(); | 525 NetworkManagerChanged(); |
| 491 } | 526 } |
| 492 | 527 |
| 493 void EventRouter::OnExternalStorageDisabledChanged() { | 528 void EventRouter::OnExternalStorageDisabledChanged() { |
| 494 // If the policy just got disabled we have to unmount every device currently | 529 // If the policy just got disabled we have to unmount every device currently |
| 495 // mounted. The opposite is fine - we can let the user re-plug her device to | 530 // mounted. The opposite is fine - we can let the user re-plug her device to |
| 496 // make it available. | 531 // make it available. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 508 } | 543 } |
| 509 } | 544 } |
| 510 | 545 |
| 511 void EventRouter::OnFileManagerPrefsChanged() { | 546 void EventRouter::OnFileManagerPrefsChanged() { |
| 512 if (!profile_ || | 547 if (!profile_ || |
| 513 !extensions::ExtensionSystem::Get(profile_)->event_router()) { | 548 !extensions::ExtensionSystem::Get(profile_)->event_router()) { |
| 514 NOTREACHED(); | 549 NOTREACHED(); |
| 515 return; | 550 return; |
| 516 } | 551 } |
| 517 | 552 |
| 518 scoped_ptr<extensions::Event> event(new extensions::Event( | 553 BroadcastEvent( |
| 554 profile_, |
| 519 extensions::event_names::kOnFileBrowserPreferencesChanged, | 555 extensions::event_names::kOnFileBrowserPreferencesChanged, |
| 520 scoped_ptr<ListValue>(new ListValue()))); | 556 make_scoped_ptr(new ListValue)); |
| 521 extensions::ExtensionSystem::Get(profile_)->event_router()-> | |
| 522 BroadcastEvent(event.Pass()); | |
| 523 } | 557 } |
| 524 | 558 |
| 525 void EventRouter::OnJobAdded(const drive::JobInfo& job_info) { | 559 void EventRouter::OnJobAdded(const drive::JobInfo& job_info) { |
| 526 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 560 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 527 OnJobUpdated(job_info); | 561 OnJobUpdated(job_info); |
| 528 } | 562 } |
| 529 | 563 |
| 530 void EventRouter::OnJobUpdated(const drive::JobInfo& job_info) { | 564 void EventRouter::OnJobUpdated(const drive::JobInfo& job_info) { |
| 531 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 565 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 532 if (!drive::IsActiveFileTransferJobInfo(job_info)) | 566 if (!drive::IsActiveFileTransferJobInfo(job_info)) |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 chromeos::MOUNT_TYPE_GOOGLE_DRIVE, | 668 chromeos::MOUNT_TYPE_GOOGLE_DRIVE, |
| 635 chromeos::disks::MOUNT_CONDITION_NONE); | 669 chromeos::disks::MOUNT_CONDITION_NONE); |
| 636 OnMountEvent(DiskMountManager::UNMOUNTING, chromeos::MOUNT_ERROR_NONE, | 670 OnMountEvent(DiskMountManager::UNMOUNTING, chromeos::MOUNT_ERROR_NONE, |
| 637 mount_info); | 671 mount_info); |
| 638 } | 672 } |
| 639 | 673 |
| 640 void EventRouter::OnRefreshTokenInvalid() { | 674 void EventRouter::OnRefreshTokenInvalid() { |
| 641 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 675 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 642 | 676 |
| 643 // Raise a DriveConnectionStatusChanged event to notify the status offline. | 677 // Raise a DriveConnectionStatusChanged event to notify the status offline. |
| 644 scoped_ptr<extensions::Event> event(new extensions::Event( | 678 BroadcastEvent( |
| 679 profile_, |
| 645 extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, | 680 extensions::event_names::kOnFileBrowserDriveConnectionStatusChanged, |
| 646 scoped_ptr<ListValue>(new ListValue()))); | 681 make_scoped_ptr(new ListValue)); |
| 647 extensions::ExtensionSystem::Get(profile_)->event_router()-> | |
| 648 BroadcastEvent(event.Pass()); | |
| 649 } | 682 } |
| 650 | 683 |
| 651 void EventRouter::HandleFileWatchNotification(const base::FilePath& local_path, | 684 void EventRouter::HandleFileWatchNotification(const base::FilePath& local_path, |
| 652 bool got_error) { | 685 bool got_error) { |
| 653 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 686 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 654 | 687 |
| 655 WatcherMap::const_iterator iter = file_watchers_.find(local_path); | 688 WatcherMap::const_iterator iter = file_watchers_.find(local_path); |
| 656 if (iter == file_watchers_.end()) { | 689 if (iter == file_watchers_.end()) { |
| 657 return; | 690 return; |
| 658 } | 691 } |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 &relative_mount_path)) { | 762 &relative_mount_path)) { |
| 730 mount_info_value->SetString("mountPath", | 763 mount_info_value->SetString("mountPath", |
| 731 "/" + relative_mount_path.value()); | 764 "/" + relative_mount_path.value()); |
| 732 } else { | 765 } else { |
| 733 mount_info_value->SetString( | 766 mount_info_value->SetString( |
| 734 "status", | 767 "status", |
| 735 MountErrorToString(chromeos::MOUNT_ERROR_PATH_UNMOUNTED)); | 768 MountErrorToString(chromeos::MOUNT_ERROR_PATH_UNMOUNTED)); |
| 736 } | 769 } |
| 737 } | 770 } |
| 738 | 771 |
| 739 scoped_ptr<extensions::Event> extension_event(new extensions::Event( | 772 BroadcastEvent(profile_, |
| 740 extensions::event_names::kOnFileBrowserMountCompleted, args.Pass())); | 773 extensions::event_names::kOnFileBrowserMountCompleted, |
| 741 extensions::ExtensionSystem::Get(profile_)->event_router()-> | 774 args.Pass()); |
| 742 BroadcastEvent(extension_event.Pass()); | |
| 743 } | 775 } |
| 744 | 776 |
| 745 void EventRouter::ShowRemovableDeviceInFileManager( | 777 void EventRouter::ShowRemovableDeviceInFileManager( |
| 746 const DiskMountManager::Disk& disk, | 778 const DiskMountManager::Disk& disk, |
| 747 const base::FilePath& mount_path) { | 779 const base::FilePath& mount_path) { |
| 748 // Do not attempt to open File Manager while the login is in progress or | 780 // Do not attempt to open File Manager while the login is in progress or |
| 749 // the screen is locked. | 781 // the screen is locked. |
| 750 if (chromeos::LoginDisplayHostImpl::default_host() || | 782 if (chromeos::LoginDisplayHostImpl::default_host() || |
| 751 chromeos::ScreenLocker::default_screen_locker()) | 783 chromeos::ScreenLocker::default_screen_locker()) |
| 752 return; | 784 return; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 base::TimeDelta::FromSeconds(4)); | 872 base::TimeDelta::FromSeconds(4)); |
| 841 } else { | 873 } else { |
| 842 notifications_->HideNotification(DesktopNotifications::FORMAT_START, | 874 notifications_->HideNotification(DesktopNotifications::FORMAT_START, |
| 843 device_path); | 875 device_path); |
| 844 notifications_->ShowNotification(DesktopNotifications::FORMAT_FAIL, | 876 notifications_->ShowNotification(DesktopNotifications::FORMAT_FAIL, |
| 845 device_path); | 877 device_path); |
| 846 } | 878 } |
| 847 } | 879 } |
| 848 | 880 |
| 849 } // namespace file_manager | 881 } // namespace file_manager |
| OLD | NEW |