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

Side by Side Diff: chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc

Issue 479563007: Files.app: Remove MountedDiskMonitor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 6 years, 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/file_manager/mounted_disk_monitor.h"
6
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/message_loop/message_loop_proxy.h"
10 #include "chromeos/dbus/power_manager_client.h"
11
12 using chromeos::disks::DiskMountManager;
13
14 namespace file_manager {
15 namespace {
16
17 // Time span of the resuming process. All unmount events sent during this
18 // time are considered as being part of remounting process, since remounting
19 // is done just after resuming.
20 const base::TimeDelta kResumingTimeSpan = base::TimeDelta::FromSeconds(5);
21
22 } // namespace
23
24 MountedDiskMonitor::MountedDiskMonitor(
25 chromeos::PowerManagerClient* power_manager_client)
26 : power_manager_client_(power_manager_client),
27 is_resuming_(false),
28 resuming_time_span_(kResumingTimeSpan),
29 weak_factory_(this) {
30 DCHECK(power_manager_client_);
31 power_manager_client_->AddObserver(this);
32 }
33
34 MountedDiskMonitor::~MountedDiskMonitor() {
35 power_manager_client_->RemoveObserver(this);
36 }
37
38 void MountedDiskMonitor::SuspendImminent() {
39 // Flip the resuming flag while suspending, so it is possible to detect
40 // resuming as soon as possible after the lid is open. Note, that mount
41 // events may occur before the SuspendDone method is called.
42 is_resuming_ = true;
43 weak_factory_.InvalidateWeakPtrs();
44 }
45
46 void MountedDiskMonitor::SuspendDone(
47 const base::TimeDelta& sleep_duration) {
48 // Undo any previous resets. Release the resuming flag after a fixed timeout.
49 weak_factory_.InvalidateWeakPtrs();
50 base::MessageLoopProxy::current()->PostDelayedTask(
51 FROM_HERE,
52 base::Bind(&MountedDiskMonitor::Reset,
53 weak_factory_.GetWeakPtr()),
54 resuming_time_span_);
55 }
56
57 bool MountedDiskMonitor::DiskIsRemounting(
58 const DiskMountManager::Disk& disk) const {
59 return unmounted_while_resuming_.count(disk.fs_uuid()) > 0;
60 }
61
62 bool MountedDiskMonitor::DeviceIsHardUnpluggedButNotReported(
63 const std::string& device_path) const {
64 const std::map<std::string, HardUnpluggedState>::const_iterator it
65 = hard_unplugged_.find(device_path);
66 return it != hard_unplugged_.end() && it->second == HARD_UNPLUGGED;
67 }
68
69 void MountedDiskMonitor::MarkAsHardUnpluggedReported(
70 const std::string& device_path) {
71 hard_unplugged_[device_path] = HARD_UNPLUGGED_AND_REPORTED;
72 }
73
74 void MountedDiskMonitor::OnMountEvent(
75 chromeos::disks::DiskMountManager::MountEvent event,
76 chromeos::MountError error_code,
77 const chromeos::disks::DiskMountManager::MountPointInfo& mount_info,
78 const DiskMountManager::Disk* disk) {
79 if (mount_info.mount_type != chromeos::MOUNT_TYPE_DEVICE)
80 return;
81
82 switch (event) {
83 case DiskMountManager::MOUNTING: {
84 if (!disk || error_code != chromeos::MOUNT_ERROR_NONE)
85 return;
86 mounted_disks_[mount_info.source_path] = disk->fs_uuid();
87 break;
88 }
89
90 case DiskMountManager::UNMOUNTING: {
91 DiskMap::iterator it = mounted_disks_.find(mount_info.source_path);
92 if (it == mounted_disks_.end())
93 return;
94 const std::string& fs_uuid = it->second;
95 if (is_resuming_)
96 unmounted_while_resuming_.insert(fs_uuid);
97 mounted_disks_.erase(it);
98 break;
99 }
100 }
101 }
102
103 void MountedDiskMonitor::OnDiskEvent(
104 chromeos::disks::DiskMountManager::DiskEvent event,
105 const chromeos::disks::DiskMountManager::Disk* disk) {
106 if (event == chromeos::disks::DiskMountManager::DISK_REMOVED) {
107 // If the mount path is not empty, the disk is hard unplugged.
108 if (!is_resuming_ &&
109 !disk->mount_path().empty() &&
110 hard_unplugged_.find(disk->system_path_prefix()) ==
111 hard_unplugged_.end()) {
112 hard_unplugged_.insert(
113 std::make_pair(disk->system_path_prefix(), HARD_UNPLUGGED));
114 }
115 }
116 }
117
118 void MountedDiskMonitor::OnDeviceEvent(
119 chromeos::disks::DiskMountManager::DeviceEvent event,
120 const std::string& device_path) {
121 if (event == chromeos::disks::DiskMountManager::DEVICE_REMOVED) {
122 const std::map<std::string, HardUnpluggedState>::iterator it
123 = hard_unplugged_.find(device_path);
124 if (it != hard_unplugged_.end())
125 hard_unplugged_.erase(it);
126 }
127 }
128
129 void MountedDiskMonitor::Reset() {
130 unmounted_while_resuming_.clear();
131 is_resuming_ = false;
132 }
133
134 } // namespace file_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698