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

Side by Side Diff: device/core/device_monitor_linux.cc

Issue 2014933002: Move DeviceMonitorLinux to //device/core. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added comment for boolean parameter. Created 4 years, 7 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
« no previous file with comments | « device/core/device_monitor_linux.h ('k') | device/hid/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "device/hid/device_monitor_linux.h" 5 #include "device/core/device_monitor_linux.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/threading/thread_restrictions.h" 11 #include "base/threading/thread_restrictions.h"
12 #include "device/udev_linux/udev.h" 12 #include "device/udev_linux/udev.h"
13 13
14 namespace device { 14 namespace device {
15 15
(...skipping 30 matching lines...) Expand all
46 return; 46 return;
47 } 47 }
48 48
49 monitor_fd_ = udev_monitor_get_fd(monitor_.get()); 49 monitor_fd_ = udev_monitor_get_fd(monitor_.get());
50 if (monitor_fd_ <= 0) { 50 if (monitor_fd_ <= 0) {
51 LOG(ERROR) << "Failed to start udev monitoring."; 51 LOG(ERROR) << "Failed to start udev monitoring.";
52 return; 52 return;
53 } 53 }
54 54
55 if (!base::MessageLoopForIO::current()->WatchFileDescriptor( 55 if (!base::MessageLoopForIO::current()->WatchFileDescriptor(
56 monitor_fd_, 56 monitor_fd_, true /* persistent */,
57 true, 57 base::MessageLoopForIO::WATCH_READ, &monitor_watcher_, this)) {
58 base::MessageLoopForIO::WATCH_READ,
59 &monitor_watcher_,
60 this)) {
61 return; 58 return;
62 } 59 }
63 } 60 }
64 61
65 // static 62 // static
66 DeviceMonitorLinux* DeviceMonitorLinux::GetInstance() { 63 DeviceMonitorLinux* DeviceMonitorLinux::GetInstance() {
67 if (!HasInstance()) 64 if (!g_device_monitor_linux_ptr.Get().get())
68 g_device_monitor_linux_ptr.Get().reset(new DeviceMonitorLinux()); 65 g_device_monitor_linux_ptr.Get().reset(new DeviceMonitorLinux());
69 return g_device_monitor_linux_ptr.Get().get(); 66 return g_device_monitor_linux_ptr.Get().get();
70 } 67 }
71 68
72 // static
73 bool DeviceMonitorLinux::HasInstance() {
74 return g_device_monitor_linux_ptr.Get().get();
75 }
76
77 void DeviceMonitorLinux::AddObserver(Observer* observer) { 69 void DeviceMonitorLinux::AddObserver(Observer* observer) {
78 DCHECK(thread_checker_.CalledOnValidThread()); 70 DCHECK(thread_checker_.CalledOnValidThread());
79 if (observer) 71 observers_.AddObserver(observer);
80 observers_.AddObserver(observer);
81 } 72 }
82 73
83 void DeviceMonitorLinux::RemoveObserver(Observer* observer) { 74 void DeviceMonitorLinux::RemoveObserver(Observer* observer) {
84 DCHECK(thread_checker_.CalledOnValidThread()); 75 DCHECK(thread_checker_.CalledOnValidThread());
85 if (observer) 76 observers_.RemoveObserver(observer);
86 observers_.RemoveObserver(observer);
87 } 77 }
88 78
89 ScopedUdevDevicePtr DeviceMonitorLinux::GetDeviceFromPath( 79 ScopedUdevDevicePtr DeviceMonitorLinux::GetDeviceFromPath(
90 const std::string& path) { 80 const std::string& path) {
91 DCHECK(thread_checker_.CalledOnValidThread()); 81 DCHECK(thread_checker_.CalledOnValidThread());
92 ScopedUdevDevicePtr device( 82 ScopedUdevDevicePtr device(
93 udev_device_new_from_syspath(udev_.get(), path.c_str())); 83 udev_device_new_from_syspath(udev_.get(), path.c_str()));
94 return device; 84 return device;
95 } 85 }
96 86
97 void DeviceMonitorLinux::Enumerate(const EnumerateCallback& callback) { 87 void DeviceMonitorLinux::Enumerate(const EnumerateCallback& callback) {
98 DCHECK(thread_checker_.CalledOnValidThread()); 88 DCHECK(thread_checker_.CalledOnValidThread());
99 ScopedUdevEnumeratePtr enumerate(udev_enumerate_new(udev_.get())); 89 ScopedUdevEnumeratePtr enumerate(udev_enumerate_new(udev_.get()));
100 90
101 if (!enumerate) { 91 if (!enumerate) {
102 LOG(ERROR) << "Failed to enumerate devices."; 92 LOG(ERROR) << "Failed to enumerate devices.";
103 return; 93 return;
104 } 94 }
105 95
106 if (udev_enumerate_scan_devices(enumerate.get()) != 0) { 96 if (udev_enumerate_scan_devices(enumerate.get()) != 0) {
107 LOG(ERROR) << "Failed to enumerate devices."; 97 LOG(ERROR) << "Failed to enumerate devices.";
108 return; 98 return;
109 } 99 }
110 100
111 // This list is managed by |enumerate|. 101 // This list is managed by |enumerate|.
112 udev_list_entry* devices = udev_enumerate_get_list_entry(enumerate.get()); 102 udev_list_entry* devices = udev_enumerate_get_list_entry(enumerate.get());
113 for (udev_list_entry* i = devices; i != NULL; 103 for (udev_list_entry* i = devices; i != nullptr;
114 i = udev_list_entry_get_next(i)) { 104 i = udev_list_entry_get_next(i)) {
115 ScopedUdevDevicePtr device( 105 ScopedUdevDevicePtr device(
116 udev_device_new_from_syspath(udev_.get(), udev_list_entry_get_name(i))); 106 udev_device_new_from_syspath(udev_.get(), udev_list_entry_get_name(i)));
117 if (device) 107 if (device)
118 callback.Run(device.get()); 108 callback.Run(device.get());
119 } 109 }
120 } 110 }
121 111
122 void DeviceMonitorLinux::WillDestroyCurrentMessageLoop() { 112 void DeviceMonitorLinux::WillDestroyCurrentMessageLoop() {
123 DCHECK(thread_checker_.CalledOnValidThread()); 113 DCHECK(thread_checker_.CalledOnValidThread());
124 g_device_monitor_linux_ptr.Get().reset(NULL); 114 FOR_EACH_OBSERVER(Observer, observers_, WillDestroyMonitorMessageLoop());
115 g_device_monitor_linux_ptr.Get().reset(nullptr);
125 } 116 }
126 117
127 void DeviceMonitorLinux::OnFileCanReadWithoutBlocking(int fd) { 118 void DeviceMonitorLinux::OnFileCanReadWithoutBlocking(int fd) {
128 DCHECK(thread_checker_.CalledOnValidThread()); 119 DCHECK(thread_checker_.CalledOnValidThread());
129 DCHECK_EQ(monitor_fd_, fd); 120 DCHECK_EQ(monitor_fd_, fd);
130 121
131 ScopedUdevDevicePtr device(udev_monitor_receive_device(monitor_.get())); 122 ScopedUdevDevicePtr device(udev_monitor_receive_device(monitor_.get()));
132 if (!device) 123 if (!device)
133 return; 124 return;
134 125
135 std::string action(udev_device_get_action(device.get())); 126 std::string action(udev_device_get_action(device.get()));
136 if (action == kUdevActionAdd) 127 if (action == kUdevActionAdd)
137 FOR_EACH_OBSERVER(Observer, observers_, OnDeviceAdded(device.get())); 128 FOR_EACH_OBSERVER(Observer, observers_, OnDeviceAdded(device.get()));
138 else if (action == kUdevActionRemove) 129 else if (action == kUdevActionRemove)
139 FOR_EACH_OBSERVER(Observer, observers_, OnDeviceRemoved(device.get())); 130 FOR_EACH_OBSERVER(Observer, observers_, OnDeviceRemoved(device.get()));
140 } 131 }
141 132
142 void DeviceMonitorLinux::OnFileCanWriteWithoutBlocking(int fd) {} 133 void DeviceMonitorLinux::OnFileCanWriteWithoutBlocking(int fd) {}
143 134
144 DeviceMonitorLinux::~DeviceMonitorLinux() { 135 DeviceMonitorLinux::~DeviceMonitorLinux() {
145 DCHECK(thread_checker_.CalledOnValidThread()); 136 DCHECK(thread_checker_.CalledOnValidThread());
146 base::MessageLoop::current()->RemoveDestructionObserver(this); 137 base::MessageLoop::current()->RemoveDestructionObserver(this);
147 monitor_watcher_.StopWatchingFileDescriptor(); 138 monitor_watcher_.StopWatchingFileDescriptor();
148 close(monitor_fd_); 139 close(monitor_fd_);
149 } 140 }
150 141
151 } // namespace device 142 } // namespace device
OLDNEW
« no previous file with comments | « device/core/device_monitor_linux.h ('k') | device/hid/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698