summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/gdata/gdata_file_system_proxy.h
blob: 049a20b6248c3e91e323d3d4fe0d19dda473e40a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_PROXY_H_
#define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_PROXY_H_

#include "webkit/chromeos/fileapi/remote_file_system_proxy.h"

class Profile;

namespace gdata {

class GDataFileBase;
class GDataFileSystemInterface;

// The interface class for remote file system proxy.
class GDataFileSystemProxy : public fileapi::RemoteFileSystemProxyInterface {
 public:
  // |profile| is used to create GDataFileSystem, which is a per-profile
  // instance.
  explicit GDataFileSystemProxy(GDataFileSystemInterface* file_system);
  virtual ~GDataFileSystemProxy();

  // fileapi::RemoteFileSystemProxyInterface overrides.
  virtual void GetFileInfo(const GURL& path,
      const fileapi::FileSystemOperationInterface::GetMetadataCallback&
          callback) OVERRIDE;
  virtual void Copy(const GURL& src_path, const GURL& dest_path,
      const fileapi::FileSystemOperationInterface::StatusCallback& callback)
          OVERRIDE;
  virtual void Move(const GURL& src_path, const GURL& dest_path,
      const fileapi::FileSystemOperationInterface::StatusCallback& callback)
          OVERRIDE;
  virtual void ReadDirectory(const GURL& path,
     const fileapi::FileSystemOperationInterface::ReadDirectoryCallback&
         callback) OVERRIDE;
  virtual void Remove(const GURL& path, bool recursive,
      const fileapi::FileSystemOperationInterface::StatusCallback& callback)
          OVERRIDE;
  virtual void CreateDirectory(
      const GURL& file_url,
      bool exclusive,
      bool recursive,
      const fileapi::FileSystemOperationInterface::StatusCallback& callback)
          OVERRIDE;
  virtual void CreateSnapshotFile(
      const GURL& path,
      const fileapi::FileSystemOperationInterface::SnapshotFileCallback&
      callback) OVERRIDE;
  // TODO(zelidrag): More methods to follow as we implement other parts of FSO.

 private:
  // Checks if a given |url| belongs to this file system. If it does,
  // the call will return true and fill in |file_path| with a file path of
  // a corresponding element within this file system.
  static bool ValidateUrl(const GURL& url, FilePath* file_path);

  // Helper callback for relaying reply for metadata retrieval request to the
  // calling thread. The callback is invoked while |file| is kept under lock
  // so it is safe to retrieve data from it, but this pointer is not safe to
  // be used outside of this method.
  void OnGetMetadata(
      const FilePath& file_path,
      scoped_refptr<base::MessageLoopProxy> proxy,
      const fileapi::FileSystemOperationInterface::GetMetadataCallback&
          callback,
      base::PlatformFileError error,
      const FilePath& directory_path,
      GDataFileBase* file);

  // Helper callback for relaying reply for ReadDirectory() to the calling
  // thread. The callback is invoked while |file| is kept under lock
  // so it is safe to retrieve data from it, but this pointer is not safe to
  // be used outside of this method.
  void OnReadDirectory(
      scoped_refptr<base::MessageLoopProxy> proxy,
      const fileapi::FileSystemOperationInterface::ReadDirectoryCallback&
          callback,
      base::PlatformFileError error,
      const FilePath& directory_path,
      GDataFileBase* file);

  // GDataFileSystemProxy is owned by Profile, which outlives
  // GDataFileSystemProxy, which is owned by CrosMountPointProvider (i.e. by
  // the time Profile is removed, the file manager is already gone). Hence
  // it's safe to use this as a raw pointer.
  GDataFileSystemInterface* file_system_;
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_PROXY_H_