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

Side by Side Diff: chrome/browser/media_galleries/mac/mtp_device_delegate_impl_mac.mm

Issue 145303002: Convert Media Galleries to use base::File (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 11 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 | Annotate | Revision Log
OLDNEW
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/media_galleries/mac/mtp_device_delegate_impl_mac.h" 5 #include "chrome/browser/media_galleries/mac/mtp_device_delegate_impl_mac.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/mac/scoped_nsobject.h" 9 #include "base/mac/scoped_nsobject.h"
10 #include "base/threading/sequenced_worker_pool.h" 10 #include "base/threading/sequenced_worker_pool.h"
(...skipping 29 matching lines...) Expand all
40 : delegate_(delegate) {} 40 : delegate_(delegate) {}
41 virtual ~DeviceListener() {} 41 virtual ~DeviceListener() {}
42 42
43 void OpenCameraSession(const std::string& device_id); 43 void OpenCameraSession(const std::string& device_id);
44 void CloseCameraSessionAndDelete(); 44 void CloseCameraSessionAndDelete();
45 45
46 void DownloadFile(const std::string& name, const base::FilePath& local_path); 46 void DownloadFile(const std::string& name, const base::FilePath& local_path);
47 47
48 // ImageCaptureDeviceListener 48 // ImageCaptureDeviceListener
49 virtual void ItemAdded(const std::string& name, 49 virtual void ItemAdded(const std::string& name,
50 const base::PlatformFileInfo& info) OVERRIDE; 50 const base::File::Info& info) OVERRIDE;
51 virtual void NoMoreItems() OVERRIDE; 51 virtual void NoMoreItems() OVERRIDE;
52 virtual void DownloadedFile(const std::string& name, 52 virtual void DownloadedFile(const std::string& name,
53 base::PlatformFileError error) OVERRIDE; 53 base::File::Error error) OVERRIDE;
54 virtual void DeviceRemoved() OVERRIDE; 54 virtual void DeviceRemoved() OVERRIDE;
55 55
56 // Used during delegate destruction to ensure there are no more calls 56 // Used during delegate destruction to ensure there are no more calls
57 // to the delegate by the listener. 57 // to the delegate by the listener.
58 virtual void ResetDelegate(); 58 virtual void ResetDelegate();
59 59
60 private: 60 private:
61 base::scoped_nsobject<ImageCaptureDevice> camera_device_; 61 base::scoped_nsobject<ImageCaptureDevice> camera_device_;
62 62
63 // Weak pointer 63 // Weak pointer
(...skipping 18 matching lines...) Expand all
82 } 82 }
83 83
84 void MTPDeviceDelegateImplMac::DeviceListener::DownloadFile( 84 void MTPDeviceDelegateImplMac::DeviceListener::DownloadFile(
85 const std::string& name, 85 const std::string& name,
86 const base::FilePath& local_path) { 86 const base::FilePath& local_path) {
87 [camera_device_ downloadFile:name localPath:local_path]; 87 [camera_device_ downloadFile:name localPath:local_path];
88 } 88 }
89 89
90 void MTPDeviceDelegateImplMac::DeviceListener::ItemAdded( 90 void MTPDeviceDelegateImplMac::DeviceListener::ItemAdded(
91 const std::string& name, 91 const std::string& name,
92 const base::PlatformFileInfo& info) { 92 const base::File::Info& info) {
93 if (delegate_) 93 if (delegate_)
94 delegate_->ItemAdded(name, info); 94 delegate_->ItemAdded(name, info);
95 } 95 }
96 96
97 void MTPDeviceDelegateImplMac::DeviceListener::NoMoreItems() { 97 void MTPDeviceDelegateImplMac::DeviceListener::NoMoreItems() {
98 if (delegate_) 98 if (delegate_)
99 delegate_->NoMoreItems(); 99 delegate_->NoMoreItems();
100 } 100 }
101 101
102 void MTPDeviceDelegateImplMac::DeviceListener::DownloadedFile( 102 void MTPDeviceDelegateImplMac::DeviceListener::DownloadedFile(
103 const std::string& name, 103 const std::string& name,
104 base::PlatformFileError error) { 104 base::File::Error error) {
105 if (delegate_) 105 if (delegate_)
106 delegate_->DownloadedFile(name, error); 106 delegate_->DownloadedFile(name, error);
107 } 107 }
108 108
109 void MTPDeviceDelegateImplMac::DeviceListener::DeviceRemoved() { 109 void MTPDeviceDelegateImplMac::DeviceListener::DeviceRemoved() {
110 [camera_device_ close]; 110 [camera_device_ close];
111 camera_device_.reset(); 111 camera_device_.reset();
112 if (delegate_) 112 if (delegate_)
113 delegate_->NoMoreItems(); 113 delegate_->NoMoreItems();
114 } 114 }
115 115
116 void MTPDeviceDelegateImplMac::DeviceListener::ResetDelegate() { 116 void MTPDeviceDelegateImplMac::DeviceListener::ResetDelegate() {
117 delegate_ = NULL; 117 delegate_ = NULL;
118 } 118 }
119 119
120 MTPDeviceDelegateImplMac::MTPDeviceDelegateImplMac( 120 MTPDeviceDelegateImplMac::MTPDeviceDelegateImplMac(
121 const std::string& device_id, 121 const std::string& device_id,
122 const base::FilePath::StringType& synthetic_path) 122 const base::FilePath::StringType& synthetic_path)
123 : device_id_(device_id), 123 : device_id_(device_id),
124 root_path_(synthetic_path), 124 root_path_(synthetic_path),
125 received_all_files_(false), 125 received_all_files_(false),
126 weak_factory_(this) { 126 weak_factory_(this) {
127 127
128 // Make a synthetic entry for the root of the filesystem. 128 // Make a synthetic entry for the root of the filesystem.
129 base::PlatformFileInfo info; 129 base::File::Info info;
130 info.is_directory = true; 130 info.is_directory = true;
131 file_paths_.push_back(root_path_); 131 file_paths_.push_back(root_path_);
132 file_info_[root_path_.value()] = info; 132 file_info_[root_path_.value()] = info;
133 133
134 camera_interface_.reset(new DeviceListener(this)); 134 camera_interface_.reset(new DeviceListener(this));
135 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 135 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
136 base::Bind(&DeviceListener::OpenCameraSession, 136 base::Bind(&DeviceListener::OpenCameraSession,
137 base::Unretained(camera_interface_.get()), 137 base::Unretained(camera_interface_.get()),
138 device_id_)); 138 device_id_));
139 } 139 }
140 140
141 MTPDeviceDelegateImplMac::~MTPDeviceDelegateImplMac() { 141 MTPDeviceDelegateImplMac::~MTPDeviceDelegateImplMac() {
142 } 142 }
143 143
144 namespace { 144 namespace {
145 145
146 void ForwardGetFileInfo( 146 void ForwardGetFileInfo(
147 base::PlatformFileInfo* info, 147 base::File::Info* info,
148 base::PlatformFileError* error, 148 base::File::Error* error,
149 const GetFileInfoSuccessCallback& success_callback, 149 const GetFileInfoSuccessCallback& success_callback,
150 const ErrorCallback& error_callback) { 150 const ErrorCallback& error_callback) {
151 if (*error == base::PLATFORM_FILE_OK) 151 if (*error == base::File::FILE_OK)
152 success_callback.Run(*info); 152 success_callback.Run(*info);
153 else 153 else
154 error_callback.Run(*error); 154 error_callback.Run(*error);
155 } 155 }
156 156
157 } // namespace 157 } // namespace
158 158
159 void MTPDeviceDelegateImplMac::GetFileInfo( 159 void MTPDeviceDelegateImplMac::GetFileInfo(
160 const base::FilePath& file_path, 160 const base::FilePath& file_path,
161 const GetFileInfoSuccessCallback& success_callback, 161 const GetFileInfoSuccessCallback& success_callback,
162 const ErrorCallback& error_callback) { 162 const ErrorCallback& error_callback) {
163 base::PlatformFileInfo* info = new base::PlatformFileInfo; 163 base::File::Info* info = new base::File::Info;
164 base::PlatformFileError* error = new base::PlatformFileError; 164 base::File::Error* error = new base::File::Error;
165 // Note: ownership of these objects passed into the reply callback. 165 // Note: ownership of these objects passed into the reply callback.
166 content::BrowserThread::PostTaskAndReply(content::BrowserThread::UI, 166 content::BrowserThread::PostTaskAndReply(content::BrowserThread::UI,
167 FROM_HERE, 167 FROM_HERE,
168 base::Bind(&MTPDeviceDelegateImplMac::GetFileInfoImpl, 168 base::Bind(&MTPDeviceDelegateImplMac::GetFileInfoImpl,
169 base::Unretained(this), file_path, info, error), 169 base::Unretained(this), file_path, info, error),
170 base::Bind(&ForwardGetFileInfo, 170 base::Bind(&ForwardGetFileInfo,
171 base::Owned(info), base::Owned(error), 171 base::Owned(info), base::Owned(error),
172 success_callback, error_callback)); 172 success_callback, error_callback));
173 } 173 }
174 174
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 } 207 }
208 208
209 void MTPDeviceDelegateImplMac::CancelPendingTasksAndDeleteDelegate() { 209 void MTPDeviceDelegateImplMac::CancelPendingTasksAndDeleteDelegate() {
210 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 210 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
211 base::Bind(&MTPDeviceDelegateImplMac::CancelAndDelete, 211 base::Bind(&MTPDeviceDelegateImplMac::CancelAndDelete,
212 base::Unretained(this))); 212 base::Unretained(this)));
213 } 213 }
214 214
215 void MTPDeviceDelegateImplMac::GetFileInfoImpl( 215 void MTPDeviceDelegateImplMac::GetFileInfoImpl(
216 const base::FilePath& file_path, 216 const base::FilePath& file_path,
217 base::PlatformFileInfo* file_info, 217 base::File::Info* file_info,
218 base::PlatformFileError* error) { 218 base::File::Error* error) {
219 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 219 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
220 base::hash_map<base::FilePath::StringType, 220 base::hash_map<base::FilePath::StringType,
221 base::PlatformFileInfo>::const_iterator i = 221 base::File::Info>::const_iterator i =
222 file_info_.find(file_path.value()); 222 file_info_.find(file_path.value());
223 if (i == file_info_.end()) { 223 if (i == file_info_.end()) {
224 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 224 *error = base::File::FILE_ERROR_NOT_FOUND;
225 return; 225 return;
226 } 226 }
227 *file_info = i->second; 227 *file_info = i->second;
228 *error = base::PLATFORM_FILE_OK; 228 *error = base::File::FILE_OK;
229 } 229 }
230 230
231 void MTPDeviceDelegateImplMac::ReadDirectoryImpl( 231 void MTPDeviceDelegateImplMac::ReadDirectoryImpl(
232 const base::FilePath& root, 232 const base::FilePath& root,
233 const ReadDirectorySuccessCallback& success_callback, 233 const ReadDirectorySuccessCallback& success_callback,
234 const ErrorCallback& error_callback) { 234 const ErrorCallback& error_callback) {
235 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 235 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
236 236
237 read_dir_transactions_.push_back(ReadDirectoryRequest( 237 read_dir_transactions_.push_back(ReadDirectoryRequest(
238 root, success_callback, error_callback)); 238 root, success_callback, error_callback));
(...skipping 15 matching lines...) Expand all
254 const base::FilePath& root) { 254 const base::FilePath& root) {
255 if (received_all_files_) 255 if (received_all_files_)
256 return; 256 return;
257 257
258 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin(); 258 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin();
259 iter != read_dir_transactions_.end();) { 259 iter != read_dir_transactions_.end();) {
260 if (iter->directory != root) { 260 if (iter->directory != root) {
261 iter++; 261 iter++;
262 continue; 262 continue;
263 } 263 }
264 iter->error_callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 264 iter->error_callback.Run(base::File::FILE_ERROR_ABORT);
265 iter = read_dir_transactions_.erase(iter); 265 iter = read_dir_transactions_.erase(iter);
266 } 266 }
267 } 267 }
268 268
269 void MTPDeviceDelegateImplMac::DownloadFile( 269 void MTPDeviceDelegateImplMac::DownloadFile(
270 const base::FilePath& device_file_path, 270 const base::FilePath& device_file_path,
271 const base::FilePath& local_path, 271 const base::FilePath& local_path,
272 const CreateSnapshotFileSuccessCallback& success_callback, 272 const CreateSnapshotFileSuccessCallback& success_callback,
273 const ErrorCallback& error_callback) { 273 const ErrorCallback& error_callback) {
274 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 274 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
275 275
276 base::PlatformFileError error; 276 base::File::Error error;
277 base::PlatformFileInfo info; 277 base::File::Info info;
278 GetFileInfoImpl(device_file_path, &info, &error); 278 GetFileInfoImpl(device_file_path, &info, &error);
279 if (error != base::PLATFORM_FILE_OK) { 279 if (error != base::File::FILE_OK) {
280 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 280 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
281 base::Bind(error_callback, 281 base::Bind(error_callback,
282 error)); 282 error));
283 return; 283 return;
284 } 284 }
285 285
286 base::FilePath relative_path; 286 base::FilePath relative_path;
287 root_path_.AppendRelativePath(device_file_path, &relative_path); 287 root_path_.AppendRelativePath(device_file_path, &relative_path);
288 288
289 read_file_transactions_.push_back( 289 read_file_transactions_.push_back(
(...skipping 20 matching lines...) Expand all
310 310
311 delete this; 311 delete this;
312 } 312 }
313 313
314 void MTPDeviceDelegateImplMac::CancelDownloads() { 314 void MTPDeviceDelegateImplMac::CancelDownloads() {
315 // Cancel any outstanding callbacks. 315 // Cancel any outstanding callbacks.
316 for (ReadFileTransactionList::iterator iter = read_file_transactions_.begin(); 316 for (ReadFileTransactionList::iterator iter = read_file_transactions_.begin();
317 iter != read_file_transactions_.end(); ++iter) { 317 iter != read_file_transactions_.end(); ++iter) {
318 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 318 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
319 base::Bind(iter->error_callback, 319 base::Bind(iter->error_callback,
320 base::PLATFORM_FILE_ERROR_ABORT)); 320 base::File::FILE_ERROR_ABORT));
321 } 321 }
322 read_file_transactions_.clear(); 322 read_file_transactions_.clear();
323 323
324 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin(); 324 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin();
325 iter != read_dir_transactions_.end(); ++iter) { 325 iter != read_dir_transactions_.end(); ++iter) {
326 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 326 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
327 base::Bind(iter->error_callback, base::PLATFORM_FILE_ERROR_ABORT)); 327 base::Bind(iter->error_callback, base::File::FILE_ERROR_ABORT));
328 } 328 }
329 read_dir_transactions_.clear(); 329 read_dir_transactions_.clear();
330 } 330 }
331 331
332 // Called on the UI thread by the listener 332 // Called on the UI thread by the listener
333 void MTPDeviceDelegateImplMac::ItemAdded( 333 void MTPDeviceDelegateImplMac::ItemAdded(
334 const std::string& name, const base::PlatformFileInfo& info) { 334 const std::string& name, const base::File::Info& info) {
335 if (received_all_files_) 335 if (received_all_files_)
336 return; 336 return;
337 337
338 // This kinda should go in a Join method in FilePath... 338 // This kinda should go in a Join method in FilePath...
339 base::FilePath relative_path(name); 339 base::FilePath relative_path(name);
340 std::vector<base::FilePath::StringType> components; 340 std::vector<base::FilePath::StringType> components;
341 relative_path.GetComponents(&components); 341 relative_path.GetComponents(&components);
342 base::FilePath item_filename = root_path_; 342 base::FilePath item_filename = root_path_;
343 for (std::vector<base::FilePath::StringType>::iterator iter = 343 for (std::vector<base::FilePath::StringType>::iterator iter =
344 components.begin(); 344 components.begin();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 if (!read_path.IsParent(file_paths_[i])) { 379 if (!read_path.IsParent(file_paths_[i])) {
380 if (read_path < file_paths_[i].DirName()) 380 if (read_path < file_paths_[i].DirName())
381 break; 381 break;
382 continue; 382 continue;
383 } 383 }
384 if (file_paths_[i].DirName() != read_path) 384 if (file_paths_[i].DirName() != read_path)
385 continue; 385 continue;
386 386
387 base::FilePath relative_path; 387 base::FilePath relative_path;
388 read_path.AppendRelativePath(file_paths_[i], &relative_path); 388 read_path.AppendRelativePath(file_paths_[i], &relative_path);
389 base::PlatformFileInfo info = file_info_[file_paths_[i].value()]; 389 base::File::Info info = file_info_[file_paths_[i].value()];
390 fileapi::DirectoryEntry entry; 390 fileapi::DirectoryEntry entry;
391 entry.name = relative_path.value(); 391 entry.name = relative_path.value();
392 entry.is_directory = info.is_directory; 392 entry.is_directory = info.is_directory;
393 entry.size = info.size; 393 entry.size = info.size;
394 entry.last_modified_time = info.last_modified; 394 entry.last_modified_time = info.last_modified;
395 entry_list.push_back(entry); 395 entry_list.push_back(entry);
396 } 396 }
397 397
398 if (found_path) { 398 if (found_path) {
399 content::BrowserThread::PostTask(content::BrowserThread::IO, 399 content::BrowserThread::PostTask(content::BrowserThread::IO,
400 FROM_HERE, 400 FROM_HERE,
401 base::Bind(iter->success_callback, entry_list, false)); 401 base::Bind(iter->success_callback, entry_list, false));
402 } else { 402 } else {
403 content::BrowserThread::PostTask(content::BrowserThread::IO, 403 content::BrowserThread::PostTask(content::BrowserThread::IO,
404 FROM_HERE, 404 FROM_HERE,
405 base::Bind(iter->error_callback, 405 base::Bind(iter->error_callback,
406 base::PLATFORM_FILE_ERROR_NOT_FOUND)); 406 base::File::FILE_ERROR_NOT_FOUND));
407 } 407 }
408 } 408 }
409 409
410 read_dir_transactions_.clear(); 410 read_dir_transactions_.clear();
411 } 411 }
412 412
413 // Invoked on UI thread from the listener. 413 // Invoked on UI thread from the listener.
414 void MTPDeviceDelegateImplMac::DownloadedFile( 414 void MTPDeviceDelegateImplMac::DownloadedFile(
415 const std::string& name, base::PlatformFileError error) { 415 const std::string& name, base::File::Error error) {
416 // If we're cancelled and deleting, we may have deleted the camera. 416 // If we're cancelled and deleting, we may have deleted the camera.
417 if (!camera_interface_.get()) 417 if (!camera_interface_.get())
418 return; 418 return;
419 419
420 bool found = false; 420 bool found = false;
421 ReadFileTransactionList::iterator iter = read_file_transactions_.begin(); 421 ReadFileTransactionList::iterator iter = read_file_transactions_.begin();
422 for (; iter != read_file_transactions_.end(); ++iter) { 422 for (; iter != read_file_transactions_.end(); ++iter) {
423 if (iter->request_file == name) { 423 if (iter->request_file == name) {
424 found = true; 424 found = true;
425 break; 425 break;
426 } 426 }
427 } 427 }
428 if (!found) 428 if (!found)
429 return; 429 return;
430 430
431 if (error != base::PLATFORM_FILE_OK) { 431 if (error != base::File::FILE_OK) {
432 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 432 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
433 base::Bind(iter->error_callback, error)); 433 base::Bind(iter->error_callback, error));
434 read_file_transactions_.erase(iter); 434 read_file_transactions_.erase(iter);
435 return; 435 return;
436 } 436 }
437 437
438 base::FilePath relative_path(name); 438 base::FilePath relative_path(name);
439 std::vector<base::FilePath::StringType> components; 439 std::vector<base::FilePath::StringType> components;
440 relative_path.GetComponents(&components); 440 relative_path.GetComponents(&components);
441 base::FilePath item_filename = root_path_; 441 base::FilePath item_filename = root_path_;
442 for (std::vector<base::FilePath::StringType>::iterator i = 442 for (std::vector<base::FilePath::StringType>::iterator i =
443 components.begin(); 443 components.begin();
444 i != components.end(); ++i) { 444 i != components.end(); ++i) {
445 item_filename = item_filename.Append(*i); 445 item_filename = item_filename.Append(*i);
446 } 446 }
447 447
448 base::PlatformFileInfo info = file_info_[item_filename.value()]; 448 base::File::Info info = file_info_[item_filename.value()];
449 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 449 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
450 base::Bind(iter->success_callback, info, iter->snapshot_file)); 450 base::Bind(iter->success_callback, info, iter->snapshot_file));
451 read_file_transactions_.erase(iter); 451 read_file_transactions_.erase(iter);
452 } 452 }
453 453
454 MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest( 454 MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest(
455 const std::string& file, 455 const std::string& file,
456 const base::FilePath& snapshot_filename, 456 const base::FilePath& snapshot_filename,
457 CreateSnapshotFileSuccessCallback success_cb, 457 CreateSnapshotFileSuccessCallback success_cb,
458 ErrorCallback error_cb) 458 ErrorCallback error_cb)
(...skipping 21 matching lines...) Expand all
480 const CreateMTPDeviceAsyncDelegateCallback& cb) { 480 const CreateMTPDeviceAsyncDelegateCallback& cb) {
481 std::string device_name = base::FilePath(device_location).BaseName().value(); 481 std::string device_name = base::FilePath(device_location).BaseName().value();
482 std::string device_id; 482 std::string device_id;
483 StorageInfo::Type type; 483 StorageInfo::Type type;
484 bool cracked = StorageInfo::CrackDeviceId(device_name, &type, &device_id); 484 bool cracked = StorageInfo::CrackDeviceId(device_name, &type, &device_id);
485 DCHECK(cracked); 485 DCHECK(cracked);
486 DCHECK_EQ(StorageInfo::MAC_IMAGE_CAPTURE, type); 486 DCHECK_EQ(StorageInfo::MAC_IMAGE_CAPTURE, type);
487 487
488 cb.Run(new MTPDeviceDelegateImplMac(device_id, device_location)); 488 cb.Run(new MTPDeviceDelegateImplMac(device_id, device_location));
489 } 489 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698