OLD | NEW |
| (Empty) |
1 // Copyright 2014 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 CHROME_BROWSER_LOCAL_DISCOVERY_STORAGE_PRIVET_FILESYSTEM_OPERATIONS_H_ | |
6 #define CHROME_BROWSER_LOCAL_DISCOVERY_STORAGE_PRIVET_FILESYSTEM_OPERATIONS_H_ | |
7 | |
8 #include "chrome/browser/local_discovery/privet_device_resolver.h" | |
9 #include "chrome/browser/local_discovery/privet_http.h" | |
10 #include "chrome/browser/local_discovery/privet_http_asynchronous_factory.h" | |
11 #include "chrome/browser/local_discovery/service_discovery_shared_client.h" | |
12 #include "chrome/browser/local_discovery/storage/path_util.h" | |
13 #include "chrome/browser/local_discovery/storage/privet_filesystem_attribute_cac
he.h" | |
14 #include "content/public/browser/browser_context.h" | |
15 #include "content/public/browser/browser_thread.h" | |
16 #include "net/url_request/url_request_context.h" | |
17 #include "webkit/browser/fileapi/async_file_util.h" | |
18 #include "webkit/browser/fileapi/file_system_url.h" | |
19 | |
20 namespace local_discovery { | |
21 | |
22 class PrivetFileSystemAsyncOperation { | |
23 public: | |
24 virtual ~PrivetFileSystemAsyncOperation() {} | |
25 | |
26 virtual void Start() = 0; | |
27 }; | |
28 | |
29 class PrivetFileSystemAsyncOperationContainer { | |
30 public: | |
31 virtual ~PrivetFileSystemAsyncOperationContainer() {} | |
32 | |
33 virtual void RemoveOperation( | |
34 PrivetFileSystemAsyncOperation* operation) = 0; | |
35 virtual void RemoveAllOperations() = 0; | |
36 }; | |
37 | |
38 // This object is a counterpart to PrivetFileSystemAsyncUtil that lives on the | |
39 // UI thread. | |
40 class PrivetFileSystemOperationFactory | |
41 : public PrivetFileSystemAsyncOperationContainer { | |
42 public: | |
43 explicit PrivetFileSystemOperationFactory( | |
44 content::BrowserContext* browser_context); | |
45 virtual ~PrivetFileSystemOperationFactory(); | |
46 | |
47 void GetFileInfo(const storage::FileSystemURL& url, | |
48 const storage::AsyncFileUtil::GetFileInfoCallback& callback); | |
49 void ReadDirectory( | |
50 const storage::FileSystemURL& url, | |
51 const storage::AsyncFileUtil::ReadDirectoryCallback& callback); | |
52 | |
53 base::WeakPtr<PrivetFileSystemOperationFactory> GetWeakPtr() { | |
54 return weak_factory_.GetWeakPtr(); | |
55 } | |
56 | |
57 private: | |
58 virtual void RemoveOperation(PrivetFileSystemAsyncOperation* operation) | |
59 OVERRIDE; | |
60 virtual void RemoveAllOperations() OVERRIDE; | |
61 | |
62 PrivetFileSystemAttributeCache attribute_cache_; | |
63 std::set<PrivetFileSystemAsyncOperation*> async_operations_; | |
64 content::BrowserContext* browser_context_; | |
65 base::WeakPtrFactory<PrivetFileSystemOperationFactory> weak_factory_; | |
66 }; | |
67 | |
68 class PrivetFileSystemAsyncOperationUtil { | |
69 public: | |
70 class Delegate { | |
71 public: | |
72 Delegate() {} | |
73 virtual ~Delegate() {} | |
74 | |
75 // |http_client| is the client for the resolved service, or NULL if | |
76 // resolution failed. |path| is the canonical path within the privet | |
77 // service. | |
78 virtual void PrivetFileSystemResolved(PrivetV1HTTPClient* http_client, | |
79 const std::string& path) = 0; | |
80 }; | |
81 | |
82 PrivetFileSystemAsyncOperationUtil(const base::FilePath& full_path, | |
83 content::BrowserContext* browser_context, | |
84 Delegate* delegate); | |
85 ~PrivetFileSystemAsyncOperationUtil(); | |
86 | |
87 void Start(); | |
88 | |
89 private: | |
90 void OnGotDeviceDescription(bool success, | |
91 const DeviceDescription& device_description); | |
92 void OnGotPrivetHTTP(scoped_ptr<PrivetHTTPClient> privet_http_client); | |
93 | |
94 ParsedPrivetPath parsed_path_; | |
95 scoped_refptr<net::URLRequestContextGetter> request_context_; | |
96 content::BrowserContext* browser_context_; | |
97 Delegate* delegate_; | |
98 | |
99 scoped_refptr<ServiceDiscoverySharedClient> service_discovery_client_; | |
100 scoped_ptr<PrivetDeviceResolver> privet_device_resolver_; | |
101 scoped_ptr<PrivetHTTPAsynchronousFactory> privet_async_factory_; | |
102 scoped_ptr<PrivetHTTPResolution> privet_http_resolution_; | |
103 scoped_ptr<PrivetV1HTTPClient> privet_client_; | |
104 | |
105 base::WeakPtrFactory<PrivetFileSystemAsyncOperationUtil> weak_factory_; | |
106 }; | |
107 | |
108 class PrivetFileSystemListOperation | |
109 : public PrivetFileSystemAsyncOperationUtil::Delegate, | |
110 public local_discovery::PrivetFileSystemAsyncOperation { | |
111 public: | |
112 PrivetFileSystemListOperation( | |
113 const base::FilePath& full_path, | |
114 content::BrowserContext* browser_context, | |
115 PrivetFileSystemAsyncOperationContainer* container, | |
116 PrivetFileSystemAttributeCache* attribute_cache, | |
117 const storage::AsyncFileUtil::ReadDirectoryCallback& callback); | |
118 virtual ~PrivetFileSystemListOperation(); | |
119 | |
120 virtual void Start() OVERRIDE; | |
121 | |
122 virtual void PrivetFileSystemResolved(PrivetV1HTTPClient* http_client, | |
123 const std::string& path) OVERRIDE; | |
124 | |
125 private: | |
126 void OnStorageListResult(const base::DictionaryValue* value); | |
127 void SignalError(); | |
128 void TriggerCallbackAndDestroy( | |
129 base::File::Error result, | |
130 const storage::AsyncFileUtil::EntryList& file_list, | |
131 bool has_more); | |
132 | |
133 PrivetFileSystemAsyncOperationUtil core_; | |
134 base::FilePath full_path_; | |
135 PrivetFileSystemAsyncOperationContainer* container_; | |
136 PrivetFileSystemAttributeCache* attribute_cache_; | |
137 storage::AsyncFileUtil::ReadDirectoryCallback callback_; | |
138 | |
139 scoped_ptr<PrivetJSONOperation> list_operation_; | |
140 }; | |
141 | |
142 class PrivetFileSystemDetailsOperation | |
143 : public PrivetFileSystemAsyncOperationUtil::Delegate, | |
144 public local_discovery::PrivetFileSystemAsyncOperation { | |
145 public: | |
146 PrivetFileSystemDetailsOperation( | |
147 const base::FilePath& full_path, | |
148 content::BrowserContext* browser_context, | |
149 PrivetFileSystemAsyncOperationContainer* container, | |
150 PrivetFileSystemAttributeCache* attribute_cache, | |
151 const storage::AsyncFileUtil::GetFileInfoCallback& callback); | |
152 virtual ~PrivetFileSystemDetailsOperation(); | |
153 | |
154 virtual void Start() OVERRIDE; | |
155 | |
156 virtual void PrivetFileSystemResolved(PrivetV1HTTPClient* http_client, | |
157 const std::string& path) OVERRIDE; | |
158 | |
159 private: | |
160 void OnStorageListResult(const base::DictionaryValue* value); | |
161 void SignalError(); | |
162 void TriggerCallbackAndDestroy(base::File::Error result, | |
163 const base::File::Info& info); | |
164 | |
165 PrivetFileSystemAsyncOperationUtil core_; | |
166 base::FilePath full_path_; | |
167 PrivetFileSystemAsyncOperationContainer* container_; | |
168 PrivetFileSystemAttributeCache* attribute_cache_; | |
169 storage::AsyncFileUtil::GetFileInfoCallback callback_; | |
170 | |
171 scoped_ptr<PrivetJSONOperation> list_operation_; | |
172 }; | |
173 | |
174 } // namespace local_discovery | |
175 | |
176 #endif // CHROME_BROWSER_LOCAL_DISCOVERY_STORAGE_PRIVET_FILESYSTEM_OPERATIONS_H
_ | |
OLD | NEW |