OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/gdata/gdata_file_system_proxy.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_file_system_proxy.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/platform_file.h" | 8 #include "base/platform_file.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 // thread to ensure its specializations will provide reply on it. | 43 // thread to ensure its specializations will provide reply on it. |
44 class FindFileDelegateReplyBase : public FindFileDelegate { | 44 class FindFileDelegateReplyBase : public FindFileDelegate { |
45 public: | 45 public: |
46 FindFileDelegateReplyBase( | 46 FindFileDelegateReplyBase( |
47 GDataFileSystem* file_system, | 47 GDataFileSystem* file_system, |
48 const FilePath& search_file_path, | 48 const FilePath& search_file_path, |
49 bool require_content) | 49 bool require_content) |
50 : file_system_(file_system), | 50 : file_system_(file_system), |
51 search_file_path_(search_file_path), | 51 search_file_path_(search_file_path), |
52 require_content_(require_content) { | 52 require_content_(require_content) { |
53 BrowserThread::ID thread_id; | 53 reply_message_proxy_ = MessageLoopProxy::current(); |
54 CHECK(BrowserThread::GetCurrentThreadIdentifier(&thread_id)); | |
55 replay_message_proxy_ = | |
56 BrowserThread::GetMessageLoopProxyForThread(thread_id); | |
57 } | 54 } |
58 | 55 |
59 virtual ~FindFileDelegateReplyBase() {} | 56 virtual ~FindFileDelegateReplyBase() {} |
60 | 57 |
61 // chromeos::FindFileDelegate overrides. | 58 // chromeos::FindFileDelegate overrides. |
62 virtual FindFileTraversalCommand OnEnterDirectory( | 59 virtual FindFileTraversalCommand OnEnterDirectory( |
63 const FilePath& current_directory_path, | 60 const FilePath& current_directory_path, |
64 GDataDirectory* current_dir) { | 61 GDataDirectory* current_dir) { |
65 return CheckAndRefreshContent(current_directory_path, current_dir) ? | 62 return CheckAndRefreshContent(current_directory_path, current_dir) ? |
66 FIND_FILE_CONTINUES : FIND_FILE_TERMINATES; | 63 FIND_FILE_CONTINUES : FIND_FILE_TERMINATES; |
(...skipping 24 matching lines...) Expand all Loading... |
91 } | 88 } |
92 return true; | 89 return true; |
93 } | 90 } |
94 | 91 |
95 protected: | 92 protected: |
96 GDataFileSystem* file_system_; | 93 GDataFileSystem* file_system_; |
97 // Search file path. | 94 // Search file path. |
98 FilePath search_file_path_; | 95 FilePath search_file_path_; |
99 // True if the final directory content is required. | 96 // True if the final directory content is required. |
100 bool require_content_; | 97 bool require_content_; |
101 scoped_refptr<MessageLoopProxy> replay_message_proxy_; | 98 scoped_refptr<MessageLoopProxy> reply_message_proxy_; |
102 }; | 99 }; |
103 | 100 |
104 // GetFileInfoDelegate is used to handle results of proxy's content search | 101 // GetFileInfoDelegate is used to handle results of proxy's content search |
105 // during GetFileInfo call and route reply to the calling message loop. | 102 // during GetFileInfo call and route reply to the calling message loop. |
106 class GetFileInfoDelegate : public FindFileDelegateReplyBase { | 103 class GetFileInfoDelegate : public FindFileDelegateReplyBase { |
107 public: | 104 public: |
108 GetFileInfoDelegate( | 105 GetFileInfoDelegate( |
109 GDataFileSystem* file_system, | 106 GDataFileSystem* file_system, |
110 const FilePath& search_file_path, | 107 const FilePath& search_file_path, |
111 const FileSystemOperationInterface::GetMetadataCallback& callback) | 108 const FileSystemOperationInterface::GetMetadataCallback& callback) |
(...skipping 19 matching lines...) Expand all Loading... |
131 Reply(error, base::PlatformFileInfo(), FilePath()); | 128 Reply(error, base::PlatformFileInfo(), FilePath()); |
132 } | 129 } |
133 | 130 |
134 private: | 131 private: |
135 | 132 |
136 // Relays reply back to the callback on calling thread. | 133 // Relays reply back to the callback on calling thread. |
137 void Reply(base::PlatformFileError result, | 134 void Reply(base::PlatformFileError result, |
138 const base::PlatformFileInfo& file_info, | 135 const base::PlatformFileInfo& file_info, |
139 const FilePath& platform_path) { | 136 const FilePath& platform_path) { |
140 if (!callback_.is_null()) { | 137 if (!callback_.is_null()) { |
141 replay_message_proxy_->PostTask(FROM_HERE, | 138 reply_message_proxy_->PostTask(FROM_HERE, |
142 Bind(&GetFileInfoDelegate::ReplyOnCallingThread, | 139 Bind(&GetFileInfoDelegate::ReplyOnCallingThread, |
143 this, | 140 this, |
144 result, | 141 result, |
145 file_info, | 142 file_info, |
146 platform_path)); | 143 platform_path)); |
147 } | 144 } |
148 } | 145 } |
149 | 146 |
150 // Responds to callback. | 147 // Responds to callback. |
151 void ReplyOnCallingThread( | 148 void ReplyOnCallingThread( |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 Reply(error, std::vector<base::FileUtilProxy::Entry>(), false); | 208 Reply(error, std::vector<base::FileUtilProxy::Entry>(), false); |
212 } | 209 } |
213 | 210 |
214 private: | 211 private: |
215 | 212 |
216 // Relays reply back to the callback on calling thread. | 213 // Relays reply back to the callback on calling thread. |
217 void Reply(base::PlatformFileError result, | 214 void Reply(base::PlatformFileError result, |
218 const std::vector<base::FileUtilProxy::Entry>& file_list, | 215 const std::vector<base::FileUtilProxy::Entry>& file_list, |
219 bool has_more) { | 216 bool has_more) { |
220 if (!callback_.is_null()) { | 217 if (!callback_.is_null()) { |
221 replay_message_proxy_->PostTask(FROM_HERE, | 218 reply_message_proxy_->PostTask(FROM_HERE, |
222 Bind(&ReadDirectoryDelegate::ReplyOnCallingThread, | 219 Bind(&ReadDirectoryDelegate::ReplyOnCallingThread, |
223 this, | 220 this, |
224 result, | 221 result, |
225 file_list, | 222 file_list, |
226 has_more)); | 223 has_more)); |
227 } | 224 } |
228 } | 225 } |
229 | 226 |
230 // Responds to callback. | 227 // Responds to callback. |
231 void ReplyOnCallingThread( | 228 void ReplyOnCallingThread( |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 // what platform you're on. | 312 // what platform you're on. |
316 fileapi::FileSystemType type = fileapi::kFileSystemTypeUnknown; | 313 fileapi::FileSystemType type = fileapi::kFileSystemTypeUnknown; |
317 if (!fileapi::CrackFileSystemURL(url, NULL, &type, file_path) || | 314 if (!fileapi::CrackFileSystemURL(url, NULL, &type, file_path) || |
318 type != fileapi::kFileSystemTypeExternal) { | 315 type != fileapi::kFileSystemTypeExternal) { |
319 return false; | 316 return false; |
320 } | 317 } |
321 return true; | 318 return true; |
322 } | 319 } |
323 | 320 |
324 } // namespace gdata | 321 } // namespace gdata |
OLD | NEW |