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