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

Unified Diff: chrome/browser/chromeos/extensions/file_manager/event_router.cc

Issue 490643005: Files.app: Start to use DeviceEventRouter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 6 years, 4 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/extensions/file_manager/event_router.cc
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
index 32e99b0f4b4fc20408c965de70077adf7b11d15b..149cb7502811d78632eff5e6a0cf6154b6986610 100644
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -18,6 +18,7 @@
#include "chrome/browser/chromeos/drive/file_change.h"
#include "chrome/browser/chromeos/drive/file_system_interface.h"
#include "chrome/browser/chromeos/drive/file_system_util.h"
+#include "chrome/browser/chromeos/extensions/file_manager/device_event_router.h"
#include "chrome/browser/chromeos/extensions/file_manager/private_api_util.h"
#include "chrome/browser/chromeos/file_manager/app_id.h"
#include "chrome/browser/chromeos/file_manager/fileapi_util.h"
@@ -32,6 +33,7 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/login/login_state.h"
#include "chromeos/network/network_handler.h"
#include "chromeos/network/network_state_handler.h"
@@ -285,22 +287,14 @@ bool ShouldSendProgressEvent(bool always, base::Time* last_time) {
// Obtains whether the Files.app should handle the volume or not.
bool ShouldShowNotificationForVolume(
Profile* profile,
- file_browser_private::MountCompletedEventType event_type,
- chromeos::MountError error,
- const VolumeInfo& volume_info,
- bool is_remounting) {
- if (event_type != file_browser_private::MOUNT_COMPLETED_EVENT_TYPE_MOUNT)
- return false;
-
+ const DeviceEventRouter& device_event_router,
+ const VolumeInfo& volume_info) {
if (volume_info.type != VOLUME_TYPE_MTP &&
volume_info.type != VOLUME_TYPE_REMOVABLE_DISK_PARTITION) {
return false;
}
- if (error != chromeos::MOUNT_ERROR_NONE)
- return false;
-
- if (is_remounting)
+ if (device_event_router.is_resuming() || device_event_router.is_starting_up())
return false;
// Do not attempt to open File Manager while the login is in progress or
@@ -327,6 +321,37 @@ bool ShouldShowNotificationForVolume(
return true;
}
+// Sub-part of the event router for handling device events.
+class DeviceEventRouterImpl : public DeviceEventRouter {
+ public:
+ explicit DeviceEventRouterImpl(Profile* profile) : profile_(profile) {}
+
+ // DeviceEventRouter overrides.
+ virtual void OnDeviceEvent(file_browser_private::DeviceEventType type,
+ const std::string& device_path) OVERRIDE {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ file_browser_private::DeviceEvent event;
+ event.type = type;
+ event.device_path = device_path;
+
+ BroadcastEvent(profile_,
+ file_browser_private::OnDeviceChanged::kEventName,
+ file_browser_private::OnDeviceChanged::Create(event));
+ }
+
+ // DeviceEventRouter overrides.
+ virtual bool IsExternalStorageDisabled() OVERRIDE {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ return profile_->GetPrefs()->GetBoolean(prefs::kExternalStorageDisabled);
+ }
+
+ private:
+ Profile* const profile_;
+
+ DISALLOW_COPY_AND_ASSIGN(DeviceEventRouterImpl);
+};
+
} // namespace
// Pass dummy value to JobInfo's constructor for make it default constructible.
@@ -343,6 +368,7 @@ EventRouter::EventRouter(Profile* profile)
: pref_change_registrar_(new PrefChangeRegistrar),
profile_(profile),
multi_user_window_manager_observer_registered_(false),
+ device_event_router_(new DeviceEventRouterImpl(profile)),
weak_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
@@ -369,7 +395,7 @@ void EventRouter::Shutdown() {
FROM_HERE);
}
- DriveIntegrationService* integration_service =
+ DriveIntegrationService* const integration_service =
DriveIntegrationServiceFactory::FindForProfile(profile_);
if (integration_service) {
integration_service->file_system()->RemoveObserver(this);
@@ -377,9 +403,15 @@ void EventRouter::Shutdown() {
integration_service->job_list()->RemoveObserver(this);
}
- VolumeManager* volume_manager = VolumeManager::Get(profile_);
- if (volume_manager)
+ VolumeManager* const volume_manager = VolumeManager::Get(profile_);
+ if (volume_manager) {
volume_manager->RemoveObserver(this);
+ volume_manager->RemoveObserver(device_event_router_.get());
+ }
+
+ chromeos::PowerManagerClient* const power_manager_client =
+ chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+ power_manager_client->RemoveObserver(device_event_router_.get());
chrome::MultiUserWindowManager* const multi_user_window_manager =
chrome::MultiUserWindowManager::GetInstance();
@@ -402,14 +434,23 @@ void EventRouter::ObserveEvents() {
return;
}
+ // Ignore device events for the first few seconds.
+ device_event_router_->Startup();
+
// VolumeManager's construction triggers DriveIntegrationService's
// construction, so it is necessary to call VolumeManager's Get before
// accessing DriveIntegrationService.
- VolumeManager* volume_manager = VolumeManager::Get(profile_);
- if (volume_manager)
+ VolumeManager* const volume_manager = VolumeManager::Get(profile_);
+ if (volume_manager) {
volume_manager->AddObserver(this);
+ volume_manager->AddObserver(device_event_router_.get());
+ }
- DriveIntegrationService* integration_service =
+ chromeos::PowerManagerClient* const power_manager_client =
+ chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+ power_manager_client->AddObserver(device_event_router_.get());
+
+ DriveIntegrationService* const integration_service =
DriveIntegrationServiceFactory::FindForProfile(profile_);
if (integration_service) {
integration_service->drive_service()->AddObserver(this);
@@ -824,29 +865,10 @@ void EventRouter::DispatchDirectoryChangeEventWithEntryDefinition(
file_browser_private::OnDirectoryChanged::Create(event));
}
-void EventRouter::DispatchDeviceEvent(
- file_browser_private::DeviceEventType type,
- const std::string& device_path) {
- file_browser_private::DeviceEvent event;
-
- event.type = type;
- event.device_path = device_path;
- BroadcastEvent(profile_,
- file_browser_private::OnDeviceChanged::kEventName,
- file_browser_private::OnDeviceChanged::Create(event));
-}
-
void EventRouter::OnDiskAdded(
const DiskMountManager::Disk& disk, bool mounting) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- if (!mounting) {
- // If the disk is not being mounted, we don't want the Scanning
- // notification to persist.
- DispatchDeviceEvent(
- file_browser_private::DEVICE_EVENT_TYPE_SCAN_CANCELED,
- disk.system_path_prefix());
- }
+ // Do nothing.
}
void EventRouter::OnDiskRemoved(const DiskMountManager::Disk& disk) {
@@ -856,26 +878,12 @@ void EventRouter::OnDiskRemoved(const DiskMountManager::Disk& disk) {
void EventRouter::OnDeviceAdded(const std::string& device_path) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- // If the policy is set instead of showing the new device notification,
- // we show a notification that the operation is not permitted.
- if (profile_->GetPrefs()->GetBoolean(prefs::kExternalStorageDisabled)) {
- DispatchDeviceEvent(
- file_browser_private::DEVICE_EVENT_TYPE_DISABLED,
- device_path);
- return;
- }
-
- DispatchDeviceEvent(
- file_browser_private::DEVICE_EVENT_TYPE_ADDED,
- device_path);
+ // Do nothing.
}
void EventRouter::OnDeviceRemoved(const std::string& device_path) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DispatchDeviceEvent(
- file_browser_private::DEVICE_EVENT_TYPE_REMOVED,
- device_path);
+ // Do nothing.
}
void EventRouter::OnVolumeMounted(chromeos::MountError error_code,
@@ -888,11 +896,11 @@ void EventRouter::OnVolumeMounted(chromeos::MountError error_code,
// the only path to come here after Shutdown is called).
if (!profile_)
return;
+
DispatchMountCompletedEvent(
file_browser_private::MOUNT_COMPLETED_EVENT_TYPE_MOUNT,
error_code,
- volume_info,
- is_remounting);
+ volume_info);
}
void EventRouter::OnVolumeUnmounted(chromeos::MountError error_code,
@@ -901,30 +909,21 @@ void EventRouter::OnVolumeUnmounted(chromeos::MountError error_code,
DispatchMountCompletedEvent(
file_browser_private::MOUNT_COMPLETED_EVENT_TYPE_UNMOUNT,
error_code,
- volume_info,
- false);
-}
-
-void EventRouter::OnHardUnplugged(const std::string& device_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DispatchDeviceEvent(file_browser_private::DEVICE_EVENT_TYPE_HARD_UNPLUGGED,
- device_path);
+ volume_info);
}
void EventRouter::DispatchMountCompletedEvent(
file_browser_private::MountCompletedEventType event_type,
chromeos::MountError error,
- const VolumeInfo& volume_info,
- bool is_remounting) {
+ const VolumeInfo& volume_info) {
// Build an event object.
file_browser_private::MountCompletedEvent event;
event.event_type = event_type;
event.status = MountErrorToMountCompletedStatus(error);
util::VolumeInfoToVolumeMetadata(
profile_, volume_info, &event.volume_metadata);
- event.is_remounting = is_remounting;
event.should_notify = ShouldShowNotificationForVolume(
- profile_, event_type, error, volume_info, is_remounting);
+ profile_, *device_event_router_, volume_info);
BroadcastEvent(profile_,
file_browser_private::OnMountCompleted::kEventName,
file_browser_private::OnMountCompleted::Create(event));
@@ -933,23 +932,13 @@ void EventRouter::DispatchMountCompletedEvent(
void EventRouter::OnFormatStarted(const std::string& device_path,
bool success) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- if (success) {
- DispatchDeviceEvent(file_browser_private::DEVICE_EVENT_TYPE_FORMAT_START,
- device_path);
- } else {
- DispatchDeviceEvent(file_browser_private::DEVICE_EVENT_TYPE_FORMAT_FAIL,
- device_path);
- }
+ // Do nothing.
}
void EventRouter::OnFormatCompleted(const std::string& device_path,
bool success) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DispatchDeviceEvent(success ?
- file_browser_private::DEVICE_EVENT_TYPE_FORMAT_SUCCESS :
- file_browser_private::DEVICE_EVENT_TYPE_FORMAT_FAIL,
- device_path);
+ // Do nothing.
}
void EventRouter::Observe(int type,
« no previous file with comments | « chrome/browser/chromeos/extensions/file_manager/event_router.h ('k') | chrome/browser/chromeos/file_manager/volume_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698