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

Side by Side Diff: device/usb/mojo/device_impl.cc

Issue 1695643002: Destroy DeviceImpl when the underlying UsbDevice is disconnected. (Closed) Base URL: reillyg-linux.mtv.corp.google.com:/src/chromium/src@mojo_device_autoclose
Patch Set: Revert change to web_usb_device_impl.cc. Created 4 years, 10 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/usb/mojo/device_impl.h ('k') | device/usb/mojo/device_impl_unittest.cc » ('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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/usb/mojo/device_impl.h" 5 #include "device/usb/mojo/device_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <numeric> 10 #include <numeric>
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 scoped_refptr<net::IOBuffer> buffer, 172 scoped_refptr<net::IOBuffer> buffer,
173 const std::vector<UsbDeviceHandle::IsochronousPacket>& packets) { 173 const std::vector<UsbDeviceHandle::IsochronousPacket>& packets) {
174 callback->Run(mojo::Array<IsochronousPacketPtr>::From(packets)); 174 callback->Run(mojo::Array<IsochronousPacketPtr>::From(packets));
175 } 175 }
176 176
177 } // namespace 177 } // namespace
178 178
179 DeviceImpl::DeviceImpl(scoped_refptr<UsbDevice> device, 179 DeviceImpl::DeviceImpl(scoped_refptr<UsbDevice> device,
180 PermissionProviderPtr permission_provider, 180 PermissionProviderPtr permission_provider,
181 mojo::InterfaceRequest<Device> request) 181 mojo::InterfaceRequest<Device> request)
182 : binding_(this, std::move(request)), 182 : device_(device),
183 device_(device), 183 observer_(this),
184 permission_provider_(std::move(permission_provider)), 184 permission_provider_(std::move(permission_provider)),
185 binding_(this, std::move(request)),
185 weak_factory_(this) { 186 weak_factory_(this) {
186 // This object owns itself and will be destroyed if either the message pipe 187 DCHECK(device_);
187 // it is bound to is closed or the PermissionProvider it depends on is 188 // This object owns itself and will be destroyed if,
188 // unavailable. 189 // * the device is disconnected,
190 // * the message pipe it is bound to is closed, or
191 // * the PermissionProvider it depends on is unavailable.
192 observer_.Add(device_.get());
189 binding_.set_connection_error_handler([this]() { delete this; }); 193 binding_.set_connection_error_handler([this]() { delete this; });
190 permission_provider_.set_connection_error_handler([this]() { delete this; }); 194 permission_provider_.set_connection_error_handler([this]() { delete this; });
191 } 195 }
192 196
193 DeviceImpl::~DeviceImpl() { 197 DeviceImpl::~DeviceImpl() {
194 CloseHandle(); 198 CloseHandle();
195 } 199 }
196 200
197 void DeviceImpl::CloseHandle() { 201 void DeviceImpl::CloseHandle() {
198 if (device_handle_) 202 if (device_handle_)
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 scoped_refptr<net::IOBuffer> buffer = CreateTransferBuffer(data.size()); 460 scoped_refptr<net::IOBuffer> buffer = CreateTransferBuffer(data.size());
457 { 461 {
458 const std::vector<uint8_t>& storage = data.storage(); 462 const std::vector<uint8_t>& storage = data.storage();
459 std::copy(storage.begin(), storage.end(), buffer->data()); 463 std::copy(storage.begin(), storage.end(), buffer->data());
460 } 464 }
461 device_handle_->IsochronousTransferOut( 465 device_handle_->IsochronousTransferOut(
462 endpoint_address, buffer, packet_lengths.storage(), timeout, 466 endpoint_address, buffer, packet_lengths.storage(), timeout,
463 base::Bind(&OnIsochronousTransferOut, base::Passed(&callback_ptr))); 467 base::Bind(&OnIsochronousTransferOut, base::Passed(&callback_ptr)));
464 } 468 }
465 469
470 void DeviceImpl::OnDeviceRemoved(scoped_refptr<UsbDevice> device) {
471 DCHECK_EQ(device_, device);
472 delete this;
473 }
474
466 } // namespace usb 475 } // namespace usb
467 } // namespace device 476 } // namespace device
OLDNEW
« no previous file with comments | « device/usb/mojo/device_impl.h ('k') | device/usb/mojo/device_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698