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

Side by Side Diff: chrome/browser/media_galleries/fileapi/itunes_file_util.cc

Issue 442383002: Move storage-related files from webkit/ to new top-level directory storage/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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 2013 The Chromium Authors. All rights reserved. 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 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/fileapi/itunes_file_util.h" 5 #include "chrome/browser/media_galleries/fileapi/itunes_file_util.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/file_util.h" 12 #include "base/file_util.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/media_galleries/fileapi/itunes_data_provider.h" 14 #include "chrome/browser/media_galleries/fileapi/itunes_data_provider.h"
15 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" 15 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h"
16 #include "chrome/browser/media_galleries/imported_media_gallery_registry.h" 16 #include "chrome/browser/media_galleries/imported_media_gallery_registry.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 #include "webkit/browser/fileapi/file_system_operation_context.h" 18 #include "storage/browser/fileapi/file_system_operation_context.h"
19 #include "webkit/browser/fileapi/file_system_url.h" 19 #include "storage/browser/fileapi/file_system_url.h"
20 #include "webkit/browser/fileapi/native_file_util.h" 20 #include "storage/browser/fileapi/native_file_util.h"
21 #include "webkit/common/blob/shareable_file_reference.h" 21 #include "storage/common/blob/shareable_file_reference.h"
22 #include "webkit/common/fileapi/file_system_util.h" 22 #include "storage/common/fileapi/file_system_util.h"
23 23
24 using fileapi::DirectoryEntry; 24 using storage::DirectoryEntry;
25 25
26 namespace itunes { 26 namespace itunes {
27 27
28 namespace { 28 namespace {
29 29
30 base::File::Error MakeDirectoryFileInfo(base::File::Info* file_info) { 30 base::File::Error MakeDirectoryFileInfo(base::File::Info* file_info) {
31 base::File::Info result; 31 base::File::Info result;
32 result.is_directory = true; 32 result.is_directory = true;
33 *file_info = result; 33 *file_info = result;
34 return base::File::FILE_OK; 34 return base::File::FILE_OK;
35 } 35 }
36 36
37 std::vector<std::string> GetVirtualPathComponents( 37 std::vector<std::string> GetVirtualPathComponents(
38 const fileapi::FileSystemURL& url) { 38 const storage::FileSystemURL& url) {
39 ImportedMediaGalleryRegistry* imported_registry = 39 ImportedMediaGalleryRegistry* imported_registry =
40 ImportedMediaGalleryRegistry::GetInstance(); 40 ImportedMediaGalleryRegistry::GetInstance();
41 base::FilePath root = imported_registry->ImportedRoot().AppendASCII("itunes"); 41 base::FilePath root = imported_registry->ImportedRoot().AppendASCII("itunes");
42 42
43 DCHECK(root.IsParent(url.path()) || root == url.path()); 43 DCHECK(root.IsParent(url.path()) || root == url.path());
44 base::FilePath virtual_path; 44 base::FilePath virtual_path;
45 root.AppendRelativePath(url.path(), &virtual_path); 45 root.AppendRelativePath(url.path(), &virtual_path);
46 46
47 std::vector<std::string> result; 47 std::vector<std::string> result;
48 fileapi::VirtualPath::GetComponentsUTF8Unsafe(virtual_path, &result); 48 storage::VirtualPath::GetComponentsUTF8Unsafe(virtual_path, &result);
49 return result; 49 return result;
50 } 50 }
51 51
52 } // namespace 52 } // namespace
53 53
54 const char kITunesLibraryXML[] = "iTunes Music Library.xml"; 54 const char kITunesLibraryXML[] = "iTunes Music Library.xml";
55 const char kITunesMediaDir[] = "iTunes Media"; 55 const char kITunesMediaDir[] = "iTunes Media";
56 const char kITunesMusicDir[] = "Music"; 56 const char kITunesMusicDir[] = "Music";
57 const char kITunesAutoAddDir[] = "Automatically Add to iTunes"; 57 const char kITunesAutoAddDir[] = "Automatically Add to iTunes";
58 58
59 ITunesFileUtil::ITunesFileUtil(MediaPathFilter* media_path_filter) 59 ITunesFileUtil::ITunesFileUtil(MediaPathFilter* media_path_filter)
60 : NativeMediaFileUtil(media_path_filter), 60 : NativeMediaFileUtil(media_path_filter),
61 weak_factory_(this), 61 weak_factory_(this),
62 imported_registry_(NULL) { 62 imported_registry_(NULL) {
63 } 63 }
64 64
65 ITunesFileUtil::~ITunesFileUtil() { 65 ITunesFileUtil::~ITunesFileUtil() {
66 } 66 }
67 67
68 void ITunesFileUtil::GetFileInfoOnTaskRunnerThread( 68 void ITunesFileUtil::GetFileInfoOnTaskRunnerThread(
69 scoped_ptr<fileapi::FileSystemOperationContext> context, 69 scoped_ptr<storage::FileSystemOperationContext> context,
70 const fileapi::FileSystemURL& url, 70 const storage::FileSystemURL& url,
71 const GetFileInfoCallback& callback) { 71 const GetFileInfoCallback& callback) {
72 ITunesDataProvider* data_provider = GetDataProvider(); 72 ITunesDataProvider* data_provider = GetDataProvider();
73 // |data_provider| may be NULL if the file system was revoked before this 73 // |data_provider| may be NULL if the file system was revoked before this
74 // operation had a chance to run. 74 // operation had a chance to run.
75 if (!data_provider) { 75 if (!data_provider) {
76 GetFileInfoWithFreshDataProvider(context.Pass(), url, callback, false); 76 GetFileInfoWithFreshDataProvider(context.Pass(), url, callback, false);
77 } else { 77 } else {
78 data_provider->RefreshData( 78 data_provider->RefreshData(
79 base::Bind(&ITunesFileUtil::GetFileInfoWithFreshDataProvider, 79 base::Bind(&ITunesFileUtil::GetFileInfoWithFreshDataProvider,
80 weak_factory_.GetWeakPtr(), base::Passed(&context), url, 80 weak_factory_.GetWeakPtr(), base::Passed(&context), url,
81 callback)); 81 callback));
82 } 82 }
83 } 83 }
84 84
85 void ITunesFileUtil::ReadDirectoryOnTaskRunnerThread( 85 void ITunesFileUtil::ReadDirectoryOnTaskRunnerThread(
86 scoped_ptr<fileapi::FileSystemOperationContext> context, 86 scoped_ptr<storage::FileSystemOperationContext> context,
87 const fileapi::FileSystemURL& url, 87 const storage::FileSystemURL& url,
88 const ReadDirectoryCallback& callback) { 88 const ReadDirectoryCallback& callback) {
89 ITunesDataProvider* data_provider = GetDataProvider(); 89 ITunesDataProvider* data_provider = GetDataProvider();
90 // |data_provider| may be NULL if the file system was revoked before this 90 // |data_provider| may be NULL if the file system was revoked before this
91 // operation had a chance to run. 91 // operation had a chance to run.
92 if (!data_provider) { 92 if (!data_provider) {
93 ReadDirectoryWithFreshDataProvider(context.Pass(), url, callback, false); 93 ReadDirectoryWithFreshDataProvider(context.Pass(), url, callback, false);
94 } else { 94 } else {
95 data_provider->RefreshData( 95 data_provider->RefreshData(
96 base::Bind(&ITunesFileUtil::ReadDirectoryWithFreshDataProvider, 96 base::Bind(&ITunesFileUtil::ReadDirectoryWithFreshDataProvider,
97 weak_factory_.GetWeakPtr(), base::Passed(&context), url, 97 weak_factory_.GetWeakPtr(), base::Passed(&context), url,
98 callback)); 98 callback));
99 } 99 }
100 } 100 }
101 101
102 void ITunesFileUtil::CreateSnapshotFileOnTaskRunnerThread( 102 void ITunesFileUtil::CreateSnapshotFileOnTaskRunnerThread(
103 scoped_ptr<fileapi::FileSystemOperationContext> context, 103 scoped_ptr<storage::FileSystemOperationContext> context,
104 const fileapi::FileSystemURL& url, 104 const storage::FileSystemURL& url,
105 const CreateSnapshotFileCallback& callback) { 105 const CreateSnapshotFileCallback& callback) {
106 ITunesDataProvider* data_provider = GetDataProvider(); 106 ITunesDataProvider* data_provider = GetDataProvider();
107 // |data_provider| may be NULL if the file system was revoked before this 107 // |data_provider| may be NULL if the file system was revoked before this
108 // operation had a chance to run. 108 // operation had a chance to run.
109 if (!data_provider) { 109 if (!data_provider) {
110 CreateSnapshotFileWithFreshDataProvider(context.Pass(), url, callback, 110 CreateSnapshotFileWithFreshDataProvider(context.Pass(), url, callback,
111 false); 111 false);
112 } else { 112 } else {
113 data_provider->RefreshData( 113 data_provider->RefreshData(
114 base::Bind(&ITunesFileUtil::CreateSnapshotFileWithFreshDataProvider, 114 base::Bind(&ITunesFileUtil::CreateSnapshotFileWithFreshDataProvider,
115 weak_factory_.GetWeakPtr(), base::Passed(&context), url, 115 weak_factory_.GetWeakPtr(), base::Passed(&context), url,
116 callback)); 116 callback));
117 } 117 }
118 } 118 }
119 119
120 // Contents of the iTunes media gallery: 120 // Contents of the iTunes media gallery:
121 // / - root directory 121 // / - root directory
122 // /iTunes Music Library.xml - library xml file 122 // /iTunes Music Library.xml - library xml file
123 // /iTunes Media/Automatically Add to iTunes - auto-import directory 123 // /iTunes Media/Automatically Add to iTunes - auto-import directory
124 // /iTunes Media/Music/<Artist>/<Album>/<Track> - tracks 124 // /iTunes Media/Music/<Artist>/<Album>/<Track> - tracks
125 // 125 //
126 base::File::Error ITunesFileUtil::GetFileInfoSync( 126 base::File::Error ITunesFileUtil::GetFileInfoSync(
127 fileapi::FileSystemOperationContext* context, 127 storage::FileSystemOperationContext* context,
128 const fileapi::FileSystemURL& url, 128 const storage::FileSystemURL& url,
129 base::File::Info* file_info, 129 base::File::Info* file_info,
130 base::FilePath* platform_path) { 130 base::FilePath* platform_path) {
131 std::vector<std::string> components = GetVirtualPathComponents(url); 131 std::vector<std::string> components = GetVirtualPathComponents(url);
132 132
133 if (components.size() == 0) 133 if (components.size() == 0)
134 return MakeDirectoryFileInfo(file_info); 134 return MakeDirectoryFileInfo(file_info);
135 135
136 if (components.size() == 1 && components[0] == kITunesLibraryXML) { 136 if (components.size() == 1 && components[0] == kITunesLibraryXML) {
137 // We can't just call NativeMediaFileUtil::GetFileInfoSync() here because it 137 // We can't just call NativeMediaFileUtil::GetFileInfoSync() here because it
138 // uses the MediaPathFilter. At this point, |library_path_| is known good 138 // uses the MediaPathFilter. At this point, |library_path_| is known good
139 // because GetFileInfoWithFreshDataProvider() gates access to this method. 139 // because GetFileInfoWithFreshDataProvider() gates access to this method.
140 base::FilePath file_path = GetDataProvider()->library_path(); 140 base::FilePath file_path = GetDataProvider()->library_path();
141 if (platform_path) 141 if (platform_path)
142 *platform_path = file_path; 142 *platform_path = file_path;
143 return fileapi::NativeFileUtil::GetFileInfo(file_path, file_info); 143 return storage::NativeFileUtil::GetFileInfo(file_path, file_info);
144 } 144 }
145 145
146 if (components[0] != kITunesMediaDir) 146 if (components[0] != kITunesMediaDir)
147 return base::File::FILE_ERROR_NOT_FOUND; 147 return base::File::FILE_ERROR_NOT_FOUND;
148 148
149 if (components[1] == kITunesAutoAddDir) { 149 if (components[1] == kITunesAutoAddDir) {
150 if (GetDataProvider()->auto_add_path().empty()) 150 if (GetDataProvider()->auto_add_path().empty())
151 return base::File::FILE_ERROR_NOT_FOUND; 151 return base::File::FILE_ERROR_NOT_FOUND;
152 return NativeMediaFileUtil::GetFileInfoSync(context, url, file_info, 152 return NativeMediaFileUtil::GetFileInfoSync(context, url, file_info,
153 platform_path); 153 platform_path);
(...skipping 24 matching lines...) Expand all
178 } 178 }
179 break; 179 break;
180 } 180 }
181 } 181 }
182 } 182 }
183 183
184 return base::File::FILE_ERROR_NOT_FOUND; 184 return base::File::FILE_ERROR_NOT_FOUND;
185 } 185 }
186 186
187 base::File::Error ITunesFileUtil::ReadDirectorySync( 187 base::File::Error ITunesFileUtil::ReadDirectorySync(
188 fileapi::FileSystemOperationContext* context, 188 storage::FileSystemOperationContext* context,
189 const fileapi::FileSystemURL& url, 189 const storage::FileSystemURL& url,
190 EntryList* file_list) { 190 EntryList* file_list) {
191 DCHECK(file_list->empty()); 191 DCHECK(file_list->empty());
192 std::vector<std::string> components = GetVirtualPathComponents(url); 192 std::vector<std::string> components = GetVirtualPathComponents(url);
193 193
194 if (components.size() == 0) { 194 if (components.size() == 0) {
195 base::File::Info xml_info; 195 base::File::Info xml_info;
196 if (!base::GetFileInfo(GetDataProvider()->library_path(), &xml_info)) 196 if (!base::GetFileInfo(GetDataProvider()->library_path(), &xml_info))
197 return base::File::FILE_ERROR_IO; 197 return base::File::FILE_ERROR_IO;
198 file_list->push_back(DirectoryEntry(kITunesLibraryXML, 198 file_list->push_back(DirectoryEntry(kITunesLibraryXML,
199 DirectoryEntry::FILE, 199 DirectoryEntry::FILE,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 DCHECK_EQ(4UL, components.size()); 275 DCHECK_EQ(4UL, components.size());
276 base::FilePath location; 276 base::FilePath location;
277 location = GetDataProvider()->GetTrackLocation(components[1], components[2], 277 location = GetDataProvider()->GetTrackLocation(components[1], components[2],
278 components[3]); 278 components[3]);
279 if (!location.empty()) 279 if (!location.empty())
280 return base::File::FILE_ERROR_NOT_A_DIRECTORY; 280 return base::File::FILE_ERROR_NOT_A_DIRECTORY;
281 return base::File::FILE_ERROR_NOT_FOUND; 281 return base::File::FILE_ERROR_NOT_FOUND;
282 } 282 }
283 283
284 base::File::Error ITunesFileUtil::DeleteDirectorySync( 284 base::File::Error ITunesFileUtil::DeleteDirectorySync(
285 fileapi::FileSystemOperationContext* context, 285 storage::FileSystemOperationContext* context,
286 const fileapi::FileSystemURL& url) { 286 const storage::FileSystemURL& url) {
287 return base::File::FILE_ERROR_SECURITY; 287 return base::File::FILE_ERROR_SECURITY;
288 } 288 }
289 289
290 base::File::Error ITunesFileUtil::DeleteFileSync( 290 base::File::Error ITunesFileUtil::DeleteFileSync(
291 fileapi::FileSystemOperationContext* context, 291 storage::FileSystemOperationContext* context,
292 const fileapi::FileSystemURL& url) { 292 const storage::FileSystemURL& url) {
293 return base::File::FILE_ERROR_SECURITY; 293 return base::File::FILE_ERROR_SECURITY;
294 } 294 }
295 295
296 base::File::Error ITunesFileUtil::CreateSnapshotFileSync( 296 base::File::Error ITunesFileUtil::CreateSnapshotFileSync(
297 fileapi::FileSystemOperationContext* context, 297 storage::FileSystemOperationContext* context,
298 const fileapi::FileSystemURL& url, 298 const storage::FileSystemURL& url,
299 base::File::Info* file_info, 299 base::File::Info* file_info,
300 base::FilePath* platform_path, 300 base::FilePath* platform_path,
301 scoped_refptr<webkit_blob::ShareableFileReference>* file_ref) { 301 scoped_refptr<storage::ShareableFileReference>* file_ref) {
302 std::vector<std::string> components = GetVirtualPathComponents(url); 302 std::vector<std::string> components = GetVirtualPathComponents(url);
303 if (components.size() != 1 || components[0] != kITunesLibraryXML) { 303 if (components.size() != 1 || components[0] != kITunesLibraryXML) {
304 return NativeMediaFileUtil::CreateSnapshotFileSync(context, url, file_info, 304 return NativeMediaFileUtil::CreateSnapshotFileSync(context, url, file_info,
305 platform_path, file_ref); 305 platform_path, file_ref);
306 } 306 }
307 307
308 // The following code is different than 308 // The following code is different than
309 // NativeMediaFileUtil::CreateSnapshotFileSync in that it knows that the 309 // NativeMediaFileUtil::CreateSnapshotFileSync in that it knows that the
310 // library xml file is not a directory and it doesn't run mime sniffing on the 310 // library xml file is not a directory and it doesn't run mime sniffing on the
311 // file. The only way to get here is by way of 311 // file. The only way to get here is by way of
312 // CreateSnapshotFileWithFreshDataProvider() so the file has already been 312 // CreateSnapshotFileWithFreshDataProvider() so the file has already been
313 // parsed and deemed valid. 313 // parsed and deemed valid.
314 *file_ref = scoped_refptr<webkit_blob::ShareableFileReference>(); 314 *file_ref = scoped_refptr<storage::ShareableFileReference>();
315 return GetFileInfoSync(context, url, file_info, platform_path); 315 return GetFileInfoSync(context, url, file_info, platform_path);
316 } 316 }
317 317
318 base::File::Error ITunesFileUtil::GetLocalFilePath( 318 base::File::Error ITunesFileUtil::GetLocalFilePath(
319 fileapi::FileSystemOperationContext* context, 319 storage::FileSystemOperationContext* context,
320 const fileapi::FileSystemURL& url, 320 const storage::FileSystemURL& url,
321 base::FilePath* local_file_path) { 321 base::FilePath* local_file_path) {
322 std::vector<std::string> components = GetVirtualPathComponents(url); 322 std::vector<std::string> components = GetVirtualPathComponents(url);
323 323
324 if (components.size() == 1 && components[0] == kITunesLibraryXML) { 324 if (components.size() == 1 && components[0] == kITunesLibraryXML) {
325 *local_file_path = GetDataProvider()->library_path(); 325 *local_file_path = GetDataProvider()->library_path();
326 return base::File::FILE_OK; 326 return base::File::FILE_OK;
327 } 327 }
328 328
329 if (components.size() >= 2 && components[0] == kITunesMediaDir && 329 if (components.size() >= 2 && components[0] == kITunesMediaDir &&
330 components[1] == kITunesAutoAddDir) { 330 components[1] == kITunesAutoAddDir) {
(...skipping 17 matching lines...) Expand all
348 *local_file_path = GetDataProvider()->GetTrackLocation(components[2], 348 *local_file_path = GetDataProvider()->GetTrackLocation(components[2],
349 components[3], 349 components[3],
350 components[4]); 350 components[4]);
351 if (!local_file_path->empty()) 351 if (!local_file_path->empty())
352 return base::File::FILE_OK; 352 return base::File::FILE_OK;
353 353
354 return base::File::FILE_ERROR_NOT_FOUND; 354 return base::File::FILE_ERROR_NOT_FOUND;
355 } 355 }
356 356
357 void ITunesFileUtil::GetFileInfoWithFreshDataProvider( 357 void ITunesFileUtil::GetFileInfoWithFreshDataProvider(
358 scoped_ptr<fileapi::FileSystemOperationContext> context, 358 scoped_ptr<storage::FileSystemOperationContext> context,
359 const fileapi::FileSystemURL& url, 359 const storage::FileSystemURL& url,
360 const GetFileInfoCallback& callback, 360 const GetFileInfoCallback& callback,
361 bool valid_parse) { 361 bool valid_parse) {
362 if (!valid_parse) { 362 if (!valid_parse) {
363 if (!callback.is_null()) { 363 if (!callback.is_null()) {
364 content::BrowserThread::PostTask( 364 content::BrowserThread::PostTask(
365 content::BrowserThread::IO, 365 content::BrowserThread::IO,
366 FROM_HERE, 366 FROM_HERE,
367 base::Bind(callback, base::File::FILE_ERROR_IO, 367 base::Bind(callback, base::File::FILE_ERROR_IO,
368 base::File::Info())); 368 base::File::Info()));
369 } 369 }
370 return; 370 return;
371 } 371 }
372 NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread(context.Pass(), url, 372 NativeMediaFileUtil::GetFileInfoOnTaskRunnerThread(context.Pass(), url,
373 callback); 373 callback);
374 } 374 }
375 375
376 void ITunesFileUtil::ReadDirectoryWithFreshDataProvider( 376 void ITunesFileUtil::ReadDirectoryWithFreshDataProvider(
377 scoped_ptr<fileapi::FileSystemOperationContext> context, 377 scoped_ptr<storage::FileSystemOperationContext> context,
378 const fileapi::FileSystemURL& url, 378 const storage::FileSystemURL& url,
379 const ReadDirectoryCallback& callback, 379 const ReadDirectoryCallback& callback,
380 bool valid_parse) { 380 bool valid_parse) {
381 if (!valid_parse) { 381 if (!valid_parse) {
382 if (!callback.is_null()) { 382 if (!callback.is_null()) {
383 content::BrowserThread::PostTask( 383 content::BrowserThread::PostTask(
384 content::BrowserThread::IO, 384 content::BrowserThread::IO,
385 FROM_HERE, 385 FROM_HERE,
386 base::Bind(callback, base::File::FILE_ERROR_IO, EntryList(), false)); 386 base::Bind(callback, base::File::FILE_ERROR_IO, EntryList(), false));
387 } 387 }
388 return; 388 return;
389 } 389 }
390 NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread(context.Pass(), url, 390 NativeMediaFileUtil::ReadDirectoryOnTaskRunnerThread(context.Pass(), url,
391 callback); 391 callback);
392 } 392 }
393 393
394 void ITunesFileUtil::CreateSnapshotFileWithFreshDataProvider( 394 void ITunesFileUtil::CreateSnapshotFileWithFreshDataProvider(
395 scoped_ptr<fileapi::FileSystemOperationContext> context, 395 scoped_ptr<storage::FileSystemOperationContext> context,
396 const fileapi::FileSystemURL& url, 396 const storage::FileSystemURL& url,
397 const CreateSnapshotFileCallback& callback, 397 const CreateSnapshotFileCallback& callback,
398 bool valid_parse) { 398 bool valid_parse) {
399 if (!valid_parse) { 399 if (!valid_parse) {
400 if (!callback.is_null()) { 400 if (!callback.is_null()) {
401 base::File::Info file_info; 401 base::File::Info file_info;
402 base::FilePath platform_path; 402 base::FilePath platform_path;
403 scoped_refptr<webkit_blob::ShareableFileReference> file_ref; 403 scoped_refptr<storage::ShareableFileReference> file_ref;
404 content::BrowserThread::PostTask( 404 content::BrowserThread::PostTask(
405 content::BrowserThread::IO, 405 content::BrowserThread::IO,
406 FROM_HERE, 406 FROM_HERE,
407 base::Bind(callback, base::File::FILE_ERROR_IO, file_info, 407 base::Bind(callback, base::File::FILE_ERROR_IO, file_info,
408 platform_path, file_ref)); 408 platform_path, file_ref));
409 } 409 }
410 return; 410 return;
411 } 411 }
412 NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread(context.Pass(), url, 412 NativeMediaFileUtil::CreateSnapshotFileOnTaskRunnerThread(context.Pass(), url,
413 callback); 413 callback);
414 } 414 }
415 415
416 ITunesDataProvider* ITunesFileUtil::GetDataProvider() { 416 ITunesDataProvider* ITunesFileUtil::GetDataProvider() {
417 if (!imported_registry_) 417 if (!imported_registry_)
418 imported_registry_ = ImportedMediaGalleryRegistry::GetInstance(); 418 imported_registry_ = ImportedMediaGalleryRegistry::GetInstance();
419 return imported_registry_->ITunesDataProvider(); 419 return imported_registry_->ITunesDataProvider();
420 } 420 }
421 421
422 } // namespace itunes 422 } // namespace itunes
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698