device_media_async_file_util.h revision 58537e28ecd584eab876aee8be7156509866d23a
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/platform_file.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/async_file_util.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/blob/shareable_file_reference.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SequencedTaskRunner; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Time; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace fileapi { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FileSystemOperationContext; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FileSystemURL; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chrome { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DeviceMediaAsyncFileUtil : public fileapi::AsyncFileUtil { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DeviceMediaAsyncFileUtil(); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns an instance of DeviceMediaAsyncFileUtil. Returns NULL if 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // asynchronous operation is not supported. Callers own the returned 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // object. 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static DeviceMediaAsyncFileUtil* Create(const base::FilePath& profile_path); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // AsyncFileUtil overrides. 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CreateOrOpen( 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int file_flags, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CreateOrOpenCallback& callback) OVERRIDE; 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void EnsureFileExists( 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const EnsureFileExistsCallback& callback) OVERRIDE; 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CreateDirectory( 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool exclusive, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool recursive, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void GetFileInfo( 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetFileInfoCallback& callback) OVERRIDE; 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void ReadDirectory( 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ReadDirectoryCallback& callback) OVERRIDE; 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void Touch( 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time& last_access_time, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time& last_modified_time, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void Truncate( 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 length, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CopyFileLocal( 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& src_url, 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& dest_url, 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const CopyFileProgressCallback& progress_callback, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void MoveFileLocal( 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& src_url, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& dest_url, 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CopyInForeignFile( 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& src_file_path, 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& dest_url, 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void DeleteFile( 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void DeleteDirectory( 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const StatusCallback& callback) OVERRIDE; 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void DeleteRecursively( 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<fileapi::FileSystemOperationContext> context, 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const fileapi::FileSystemURL& url, 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const StatusCallback& callback) OVERRIDE; 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CreateSnapshotFile( 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const fileapi::FileSystemURL& url, 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CreateSnapshotFileCallback& callback) OVERRIDE; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use Create() to get an instance of DeviceMediaAsyncFileUtil. 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit DeviceMediaAsyncFileUtil(const base::FilePath& profile_path); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 108bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // Called when GetFileInfo method call succeeds. |file_info| contains the 109bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // file details of the requested url. |callback| is invoked to complete the 110bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // GetFileInfo request. 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidGetFileInfo( 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::GetFileInfoCallback& callback, 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::PlatformFileInfo& file_info); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when GetFileInfo method call failed to get the details of file 116bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // specified by the requested url. |callback| is invoked to notify the 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // caller about the platform file |error|. 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnGetFileInfoError( 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::GetFileInfoCallback& callback, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::PlatformFileError error); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when ReadDirectory method call succeeds. |callback| is invoked to 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // complete the ReadDirectory request. 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the contents of the given directory are reported in one batch, then 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |file_list| will have the list of all files/directories in the given 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // directory and |has_more| will be false. 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the contents of the given directory are reported in multiple chunks, 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |file_list| will have only a subset of all contents (the subsets reported 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in any two calls are disjoint), and |has_more| will be true, except for 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the last chunk. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidReadDirectory( 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::ReadDirectoryCallback& callback, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::EntryList& file_list, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_more); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when ReadDirectory method call failed to enumerate the directory 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // objects. |callback| is invoked to notify the caller about the |error| 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // that occured while reading the directory objects. 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnReadDirectoryError( 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::ReadDirectoryCallback& callback, 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::PlatformFileError error); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when the snapshot file specified by the |platform_path| is 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // successfully created. |file_info| contains the device media file details 147a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // for which the snapshot file is created. 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidCreateSnapshotFile( 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::CreateSnapshotFileCallback& callback, 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SequencedTaskRunner* media_task_runner, 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::PlatformFileInfo& file_info, 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& platform_path); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 154a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Called after OnDidCreateSnapshotFile finishes media check. 155a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // |callback| is invoked to complete the CreateSnapshotFile request. 156a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) void OnDidCheckMedia( 157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const AsyncFileUtil::CreateSnapshotFileCallback& callback, 158a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const base::PlatformFileInfo& file_info, 159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) scoped_refptr<webkit_blob::ShareableFileReference> platform_file, 16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::PlatformFileError error); 161a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when CreateSnapshotFile method call fails. |callback| is invoked to 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // notify the caller about the |error|. 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnCreateSnapshotFileError( 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::CreateSnapshotFileCallback& callback, 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::PlatformFileError error); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when the snapshot file specified by the |snapshot_file_path| is 169bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // created to hold the contents of the url.path(). If the snapshot 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // file is successfully created, |snapshot_file_path| will be an non-empty 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // file path. In case of failure, |snapshot_file_path| will be an empty file 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // path. Forwards the CreateSnapshot request to the delegate to copy the 173bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // contents of url.path() to |snapshot_file_path|. 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSnapshotFileCreatedRunTask( 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<fileapi::FileSystemOperationContext> context, 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AsyncFileUtil::CreateSnapshotFileCallback& callback, 177bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const fileapi::FileSystemURL& url, 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath* snapshot_file_path); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Profile path. 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath profile_path_; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For callbacks that may run after destruction. 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<DeviceMediaAsyncFileUtil> weak_ptr_factory_; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceMediaAsyncFileUtil); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chrome 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_DEVICE_MEDIA_ASYNC_FILE_UTIL_H_ 192