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

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: 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 20 matching lines...) Expand all
195 } 195 }
196 196
197 void MTPDeviceDelegateImplMac::CancelPendingTasksAndDeleteDelegate() { 197 void MTPDeviceDelegateImplMac::CancelPendingTasksAndDeleteDelegate() {
198 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 198 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
199 base::Bind(&MTPDeviceDelegateImplMac::CancelAndDelete, 199 base::Bind(&MTPDeviceDelegateImplMac::CancelAndDelete,
200 base::Unretained(this))); 200 base::Unretained(this)));
201 } 201 }
202 202
203 void MTPDeviceDelegateImplMac::GetFileInfoImpl( 203 void MTPDeviceDelegateImplMac::GetFileInfoImpl(
204 const base::FilePath& file_path, 204 const base::FilePath& file_path,
205 base::PlatformFileInfo* file_info, 205 base::File::Info* file_info,
206 base::PlatformFileError* error) { 206 base::File::Error* error) {
207 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 207 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
208 base::hash_map<base::FilePath::StringType, 208 base::hash_map<base::FilePath::StringType,
209 base::PlatformFileInfo>::const_iterator i = 209 base::File::Info>::const_iterator i =
210 file_info_.find(file_path.value()); 210 file_info_.find(file_path.value());
211 if (i == file_info_.end()) { 211 if (i == file_info_.end()) {
212 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 212 *error = base::File::FILE_ERROR_NOT_FOUND;
213 return; 213 return;
214 } 214 }
215 *file_info = i->second; 215 *file_info = i->second;
216 *error = base::PLATFORM_FILE_OK; 216 *error = base::File::FILE_OK;
217 } 217 }
218 218
219 void MTPDeviceDelegateImplMac::ReadDirectoryImpl( 219 void MTPDeviceDelegateImplMac::ReadDirectoryImpl(
220 const base::FilePath& root, 220 const base::FilePath& root,
221 const ReadDirectorySuccessCallback& success_callback, 221 const ReadDirectorySuccessCallback& success_callback,
222 const ErrorCallback& error_callback) { 222 const ErrorCallback& error_callback) {
223 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 223 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
224 224
225 read_dir_transactions_.push_back(ReadDirectoryRequest( 225 read_dir_transactions_.push_back(ReadDirectoryRequest(
226 root, success_callback, error_callback)); 226 root, success_callback, error_callback));
(...skipping 15 matching lines...) Expand all
242 const base::FilePath& root) { 242 const base::FilePath& root) {
243 if (received_all_files_) 243 if (received_all_files_)
244 return; 244 return;
245 245
246 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin(); 246 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin();
247 iter != read_dir_transactions_.end();) { 247 iter != read_dir_transactions_.end();) {
248 if (iter->directory != root) { 248 if (iter->directory != root) {
249 iter++; 249 iter++;
250 continue; 250 continue;
251 } 251 }
252 iter->error_callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 252 iter->error_callback.Run(base::File::FILE_ERROR_ABORT);
253 iter = read_dir_transactions_.erase(iter); 253 iter = read_dir_transactions_.erase(iter);
254 } 254 }
255 } 255 }
256 256
257 void MTPDeviceDelegateImplMac::DownloadFile( 257 void MTPDeviceDelegateImplMac::DownloadFile(
258 const base::FilePath& device_file_path, 258 const base::FilePath& device_file_path,
259 const base::FilePath& local_path, 259 const base::FilePath& local_path,
260 const CreateSnapshotFileSuccessCallback& success_callback, 260 const CreateSnapshotFileSuccessCallback& success_callback,
261 const ErrorCallback& error_callback) { 261 const ErrorCallback& error_callback) {
262 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 262 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
263 263
264 base::PlatformFileError error; 264 base::File::Error error;
265 base::PlatformFileInfo info; 265 base::File::Info info;
266 GetFileInfoImpl(device_file_path, &info, &error); 266 GetFileInfoImpl(device_file_path, &info, &error);
267 if (error != base::PLATFORM_FILE_OK) { 267 if (error != base::File::FILE_OK) {
268 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 268 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
269 base::Bind(error_callback, 269 base::Bind(error_callback,
270 error)); 270 error));
271 return; 271 return;
272 } 272 }
273 273
274 base::FilePath relative_path; 274 base::FilePath relative_path;
275 root_path_.AppendRelativePath(device_file_path, &relative_path); 275 root_path_.AppendRelativePath(device_file_path, &relative_path);
276 276
277 read_file_transactions_.push_back( 277 read_file_transactions_.push_back(
(...skipping 20 matching lines...) Expand all
298 298
299 delete this; 299 delete this;
300 } 300 }
301 301
302 void MTPDeviceDelegateImplMac::CancelDownloads() { 302 void MTPDeviceDelegateImplMac::CancelDownloads() {
303 // Cancel any outstanding callbacks. 303 // Cancel any outstanding callbacks.
304 for (ReadFileTransactionList::iterator iter = read_file_transactions_.begin(); 304 for (ReadFileTransactionList::iterator iter = read_file_transactions_.begin();
305 iter != read_file_transactions_.end(); ++iter) { 305 iter != read_file_transactions_.end(); ++iter) {
306 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 306 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
307 base::Bind(iter->error_callback, 307 base::Bind(iter->error_callback,
308 base::PLATFORM_FILE_ERROR_ABORT)); 308 base::File::FILE_ERROR_ABORT));
309 } 309 }
310 read_file_transactions_.clear(); 310 read_file_transactions_.clear();
311 311
312 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin(); 312 for (ReadDirTransactionList::iterator iter = read_dir_transactions_.begin();
313 iter != read_dir_transactions_.end(); ++iter) { 313 iter != read_dir_transactions_.end(); ++iter) {
314 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 314 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
315 base::Bind(iter->error_callback, base::PLATFORM_FILE_ERROR_ABORT)); 315 base::Bind(iter->error_callback, base::File::FILE_ERROR_ABORT));
316 } 316 }
317 read_dir_transactions_.clear(); 317 read_dir_transactions_.clear();
318 } 318 }
319 319
320 // Called on the UI thread by the listener 320 // Called on the UI thread by the listener
321 void MTPDeviceDelegateImplMac::ItemAdded( 321 void MTPDeviceDelegateImplMac::ItemAdded(
322 const std::string& name, const base::PlatformFileInfo& info) { 322 const std::string& name, const base::File::Info& info) {
323 if (received_all_files_) 323 if (received_all_files_)
324 return; 324 return;
325 325
326 // This kinda should go in a Join method in FilePath... 326 // This kinda should go in a Join method in FilePath...
327 base::FilePath relative_path(name); 327 base::FilePath relative_path(name);
328 std::vector<base::FilePath::StringType> components; 328 std::vector<base::FilePath::StringType> components;
329 relative_path.GetComponents(&components); 329 relative_path.GetComponents(&components);
330 base::FilePath item_filename = root_path_; 330 base::FilePath item_filename = root_path_;
331 for (std::vector<base::FilePath::StringType>::iterator iter = 331 for (std::vector<base::FilePath::StringType>::iterator iter =
332 components.begin(); 332 components.begin();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 if (!read_path.IsParent(file_paths_[i])) { 367 if (!read_path.IsParent(file_paths_[i])) {
368 if (read_path < file_paths_[i].DirName()) 368 if (read_path < file_paths_[i].DirName())
369 break; 369 break;
370 continue; 370 continue;
371 } 371 }
372 if (file_paths_[i].DirName() != read_path) 372 if (file_paths_[i].DirName() != read_path)
373 continue; 373 continue;
374 374
375 base::FilePath relative_path; 375 base::FilePath relative_path;
376 read_path.AppendRelativePath(file_paths_[i], &relative_path); 376 read_path.AppendRelativePath(file_paths_[i], &relative_path);
377 base::PlatformFileInfo info = file_info_[file_paths_[i].value()]; 377 base::File::Info info = file_info_[file_paths_[i].value()];
378 fileapi::DirectoryEntry entry; 378 fileapi::DirectoryEntry entry;
379 entry.name = relative_path.value(); 379 entry.name = relative_path.value();
380 entry.is_directory = info.is_directory; 380 entry.is_directory = info.is_directory;
381 entry.size = info.size; 381 entry.size = info.size;
382 entry.last_modified_time = info.last_modified; 382 entry.last_modified_time = info.last_modified;
383 entry_list.push_back(entry); 383 entry_list.push_back(entry);
384 } 384 }
385 385
386 if (found_path) { 386 if (found_path) {
387 content::BrowserThread::PostTask(content::BrowserThread::IO, 387 content::BrowserThread::PostTask(content::BrowserThread::IO,
388 FROM_HERE, 388 FROM_HERE,
389 base::Bind(iter->success_callback, entry_list, false)); 389 base::Bind(iter->success_callback, entry_list, false));
390 } else { 390 } else {
391 content::BrowserThread::PostTask(content::BrowserThread::IO, 391 content::BrowserThread::PostTask(content::BrowserThread::IO,
392 FROM_HERE, 392 FROM_HERE,
393 base::Bind(iter->error_callback, 393 base::Bind(iter->error_callback,
394 base::PLATFORM_FILE_ERROR_NOT_FOUND)); 394 base::File::FILE_ERROR_NOT_FOUND));
395 } 395 }
396 } 396 }
397 397
398 read_dir_transactions_.clear(); 398 read_dir_transactions_.clear();
399 } 399 }
400 400
401 // Invoked on UI thread from the listener. 401 // Invoked on UI thread from the listener.
402 void MTPDeviceDelegateImplMac::DownloadedFile( 402 void MTPDeviceDelegateImplMac::DownloadedFile(
403 const std::string& name, base::PlatformFileError error) { 403 const std::string& name, base::File::Error error) {
404 // If we're cancelled and deleting, we may have deleted the camera. 404 // If we're cancelled and deleting, we may have deleted the camera.
405 if (!camera_interface_.get()) 405 if (!camera_interface_.get())
406 return; 406 return;
407 407
408 bool found = false; 408 bool found = false;
409 ReadFileTransactionList::iterator iter = read_file_transactions_.begin(); 409 ReadFileTransactionList::iterator iter = read_file_transactions_.begin();
410 for (; iter != read_file_transactions_.end(); ++iter) { 410 for (; iter != read_file_transactions_.end(); ++iter) {
411 if (iter->request_file == name) { 411 if (iter->request_file == name) {
412 found = true; 412 found = true;
413 break; 413 break;
414 } 414 }
415 } 415 }
416 if (!found) 416 if (!found)
417 return; 417 return;
418 418
419 if (error != base::PLATFORM_FILE_OK) { 419 if (error != base::File::FILE_OK) {
420 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 420 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
421 base::Bind(iter->error_callback, error)); 421 base::Bind(iter->error_callback, error));
422 read_file_transactions_.erase(iter); 422 read_file_transactions_.erase(iter);
423 return; 423 return;
424 } 424 }
425 425
426 base::FilePath relative_path(name); 426 base::FilePath relative_path(name);
427 std::vector<base::FilePath::StringType> components; 427 std::vector<base::FilePath::StringType> components;
428 relative_path.GetComponents(&components); 428 relative_path.GetComponents(&components);
429 base::FilePath item_filename = root_path_; 429 base::FilePath item_filename = root_path_;
430 for (std::vector<base::FilePath::StringType>::iterator i = 430 for (std::vector<base::FilePath::StringType>::iterator i =
431 components.begin(); 431 components.begin();
432 i != components.end(); ++i) { 432 i != components.end(); ++i) {
433 item_filename = item_filename.Append(*i); 433 item_filename = item_filename.Append(*i);
434 } 434 }
435 435
436 base::PlatformFileInfo info = file_info_[item_filename.value()]; 436 base::File::Info info = file_info_[item_filename.value()];
437 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 437 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
438 base::Bind(iter->success_callback, info, iter->snapshot_file)); 438 base::Bind(iter->success_callback, info, iter->snapshot_file));
439 read_file_transactions_.erase(iter); 439 read_file_transactions_.erase(iter);
440 } 440 }
441 441
442 MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest( 442 MTPDeviceDelegateImplMac::ReadFileRequest::ReadFileRequest(
443 const std::string& file, 443 const std::string& file,
444 const base::FilePath& snapshot_filename, 444 const base::FilePath& snapshot_filename,
445 CreateSnapshotFileSuccessCallback success_cb, 445 CreateSnapshotFileSuccessCallback success_cb,
446 ErrorCallback error_cb) 446 ErrorCallback error_cb)
(...skipping 21 matching lines...) Expand all
468 const CreateMTPDeviceAsyncDelegateCallback& cb) { 468 const CreateMTPDeviceAsyncDelegateCallback& cb) {
469 std::string device_name = base::FilePath(device_location).BaseName().value(); 469 std::string device_name = base::FilePath(device_location).BaseName().value();
470 std::string device_id; 470 std::string device_id;
471 StorageInfo::Type type; 471 StorageInfo::Type type;
472 bool cracked = StorageInfo::CrackDeviceId(device_name, &type, &device_id); 472 bool cracked = StorageInfo::CrackDeviceId(device_name, &type, &device_id);
473 DCHECK(cracked); 473 DCHECK(cracked);
474 DCHECK_EQ(StorageInfo::MAC_IMAGE_CAPTURE, type); 474 DCHECK_EQ(StorageInfo::MAC_IMAGE_CAPTURE, type);
475 475
476 cb.Run(new MTPDeviceDelegateImplMac(device_id, device_location)); 476 cb.Run(new MTPDeviceDelegateImplMac(device_id, device_location));
477 } 477 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698