- add sources.
[platform/framework/web/crosswalk.git] / src / content / child / fileapi / webfilesystem_impl.h
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
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_CHILD_FILEAPI_WEBFILESYSTEM_IMPL_H_
6 #define CONTENT_CHILD_FILEAPI_WEBFILESYSTEM_IMPL_H_
7
8 #include <map>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/threading/non_thread_safe.h"
14 #include "third_party/WebKit/public/platform/WebFileSystem.h"
15 #include "webkit/child/worker_task_runner.h"
16
17 namespace base {
18 class MessageLoopProxy;
19 }
20
21 namespace WebKit {
22 class WebURL;
23 class WebFileWriter;
24 class WebFileWriterClient;
25 }
26
27 namespace content {
28
29 class WebFileSystemImpl
30     : public WebKit::WebFileSystem,
31       public webkit_glue::WorkerTaskRunner::Observer,
32       public base::NonThreadSafe {
33  public:
34   // Returns thread-specific instance.  If non-null |main_thread_loop|
35   // is given and no thread-specific instance has been created it may
36   // create a new instance.
37   static WebFileSystemImpl* ThreadSpecificInstance(
38       base::MessageLoopProxy* main_thread_loop);
39
40   // Deletes thread-specific instance (if exists). For workers it deletes
41   // itself in OnWorkerRunLoopStopped(), but for an instance created on the
42   // main thread this method must be called.
43   static void DeleteThreadSpecificInstance();
44
45   explicit WebFileSystemImpl(base::MessageLoopProxy* main_thread_loop);
46   virtual ~WebFileSystemImpl();
47
48   // webkit_glue::WorkerTaskRunner::Observer implementation.
49   virtual void OnWorkerRunLoopStopped() OVERRIDE;
50
51   // WebFileSystem implementation.
52   virtual void openFileSystem(
53       const WebKit::WebURL& storage_partition,
54       const WebKit::WebFileSystemType type,
55       WebKit::WebFileSystemCallbacks);
56   virtual void resolveURL(
57       const WebKit::WebURL& filesystem_url,
58       WebKit::WebFileSystemCallbacks) OVERRIDE;
59   virtual void deleteFileSystem(
60       const WebKit::WebURL& storage_partition,
61       const WebKit::WebFileSystemType type,
62       WebKit::WebFileSystemCallbacks);
63   virtual void move(
64       const WebKit::WebURL& src_path,
65       const WebKit::WebURL& dest_path,
66       WebKit::WebFileSystemCallbacks) OVERRIDE;
67   virtual void copy(
68       const WebKit::WebURL& src_path,
69       const WebKit::WebURL& dest_path,
70       WebKit::WebFileSystemCallbacks) OVERRIDE;
71   virtual void remove(
72       const WebKit::WebURL& path,
73       WebKit::WebFileSystemCallbacks) OVERRIDE;
74   virtual void removeRecursively(
75       const WebKit::WebURL& path,
76       WebKit::WebFileSystemCallbacks) OVERRIDE;
77   virtual void readMetadata(
78       const WebKit::WebURL& path,
79       WebKit::WebFileSystemCallbacks) OVERRIDE;
80   virtual void createFile(
81       const WebKit::WebURL& path,
82       bool exclusive,
83       WebKit::WebFileSystemCallbacks) OVERRIDE;
84   virtual void createDirectory(
85       const WebKit::WebURL& path,
86       bool exclusive,
87       WebKit::WebFileSystemCallbacks) OVERRIDE;
88   virtual void fileExists(
89       const WebKit::WebURL& path,
90       WebKit::WebFileSystemCallbacks) OVERRIDE;
91   virtual void directoryExists(
92       const WebKit::WebURL& path,
93       WebKit::WebFileSystemCallbacks) OVERRIDE;
94   virtual void readDirectory(
95       const WebKit::WebURL& path,
96       WebKit::WebFileSystemCallbacks) OVERRIDE;
97   virtual void createFileWriter(
98       const WebKit::WebURL& path,
99       WebKit::WebFileWriterClient*,
100       WebKit::WebFileSystemCallbacks) OVERRIDE;
101   virtual void createSnapshotFileAndReadMetadata(
102       const WebKit::WebURL& path,
103       WebKit::WebFileSystemCallbacks);
104
105   int RegisterCallbacks(const WebKit::WebFileSystemCallbacks& callbacks);
106   WebKit::WebFileSystemCallbacks GetAndUnregisterCallbacks(
107       int callbacks_id);
108
109  private:
110   typedef std::map<int, WebKit::WebFileSystemCallbacks> CallbacksMap;
111
112   scoped_refptr<base::MessageLoopProxy> main_thread_loop_;
113
114   CallbacksMap callbacks_;
115   int next_callbacks_id_;
116
117   DISALLOW_COPY_AND_ASSIGN(WebFileSystemImpl);
118 };
119
120 }  // namespace content
121
122 #endif  // CONTENT_CHILD_FILEAPI_WEBFILESYSTEM_IMPL_H_