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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/json/json_file_value_serializer.h" | 8 #include "base/json/json_file_value_serializer.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop_proxy.h" | 10 #include "base/message_loop_proxy.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 #include "webkit/fileapi/file_system_mount_point_provider.h" | 36 #include "webkit/fileapi/file_system_mount_point_provider.h" |
37 | 37 |
38 using ::testing::_; | 38 using ::testing::_; |
39 using ::testing::Return; | 39 using ::testing::Return; |
40 using content::BrowserContext; | 40 using content::BrowserContext; |
41 | 41 |
42 namespace { | 42 namespace { |
43 | 43 |
44 // These should match the counterparts in remote.js. | 44 // These should match the counterparts in remote.js. |
45 // Also, the size of the file in |kTestRootFeed| has to be set to | 45 // Also, the size of the file in |kTestRootFeed| has to be set to |
46 // |size(kTestFileContents)|. | 46 // length of kTestFileContent string. |
47 const char kTestFileContents[] = "hello, world"; | 47 const char kTestFileContent[] = "hello, world!"; |
48 | 48 |
49 // Contains a folder entry for the folder 'Folder' that will be 'created'. | 49 // Contains a folder entry for the folder 'Folder' that will be 'created'. |
50 const char kTestDirectory[] = "new_folder_entry.json"; | 50 const char kTestDirectory[] = "new_folder_entry.json"; |
51 | 51 |
52 // Contains a folder named Folder that has a file File.aBc inside of it. | 52 // Contains a folder named Folder that has a file File.aBc inside of it. |
53 const char kTestRootFeed[] = "remote_file_system_apitest_root_feed.json"; | 53 const char kTestRootFeed[] = "remote_file_system_apitest_root_feed.json"; |
54 | 54 |
55 // Contains metadata of the document that will be "downloaded" in test. | 55 // Contains metadata of the document that will be "downloaded" in test. |
56 const char kTestDocumentToDownloadEntry[] = | 56 const char kTestDocumentToDownloadEntry[] = |
57 "remote_file_system_apitest_document_to_download.json"; | 57 "remote_file_system_apitest_document_to_download.json"; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 base::Bind(arg4, status, base::Passed(value))); | 129 base::Bind(arg4, status, base::Passed(value))); |
130 } | 130 } |
131 | 131 |
132 // Action used to mock expectations fo GetDocumentEntry. | 132 // Action used to mock expectations fo GetDocumentEntry. |
133 ACTION_P2(MockGetDocumentEntryCallback, status, value) { | 133 ACTION_P2(MockGetDocumentEntryCallback, status, value) { |
134 base::MessageLoopProxy::current()->PostTask(FROM_HERE, | 134 base::MessageLoopProxy::current()->PostTask(FROM_HERE, |
135 base::Bind(arg1, status, base::Passed(value))); | 135 base::Bind(arg1, status, base::Passed(value))); |
136 } | 136 } |
137 | 137 |
138 // Creates a cache representation of the test file with predetermined content. | 138 // Creates a cache representation of the test file with predetermined content. |
139 void CreateDownloadFile(const FilePath& path) { | 139 void CreateFileWithContent(const FilePath& path, const std::string& content) { |
140 int file_content_size = static_cast<int>(sizeof(kTestFileContents)); | 140 int content_size = static_cast<int>(content.length()); |
141 ASSERT_EQ(file_content_size, | 141 ASSERT_EQ(content_size, |
142 file_util::WriteFile(path, kTestFileContents, file_content_size)); | 142 file_util::WriteFile(path, content.c_str(), content_size)); |
143 } | 143 } |
144 | 144 |
145 // Action used to set mock expectations for DownloadFile(). | 145 // Action used to set mock expectations for DownloadFile(). |
146 ACTION_P(MockDownloadFileCallback, status) { | 146 ACTION_P(MockDownloadFileCallback, status) { |
147 ASSERT_TRUE(content::BrowserThread::PostTaskAndReply( | 147 ASSERT_TRUE(content::BrowserThread::PostTaskAndReply( |
148 content::BrowserThread::FILE, | 148 content::BrowserThread::FILE, |
149 FROM_HERE, | 149 FROM_HERE, |
150 base::Bind(&CreateDownloadFile, arg1), | 150 base::Bind(&CreateFileWithContent, arg1, kTestFileContent), |
151 base::Bind(arg3, status, arg2, arg1))); | 151 base::Bind(arg3, status, arg2, arg1))); |
152 } | 152 } |
153 | 153 |
154 } // namespace | 154 } // namespace |
155 | 155 |
156 class FileSystemExtensionApiTest : public ExtensionApiTest { | 156 class FileSystemExtensionApiTest : public ExtensionApiTest { |
157 public: | 157 public: |
158 FileSystemExtensionApiTest() : test_mount_point_("/tmp") { | 158 FileSystemExtensionApiTest() : test_mount_point_("/tmp") { |
159 } | 159 } |
160 | 160 |
(...skipping 21 matching lines...) Expand all Loading... |
182 const extensions::Extension* extension = LoadExtension(extdir); | 182 const extensions::Extension* extension = LoadExtension(extdir); |
183 if (extension) | 183 if (extension) |
184 page_complete.WaitUntilClosed(); | 184 page_complete.WaitUntilClosed(); |
185 return extension; | 185 return extension; |
186 } | 186 } |
187 | 187 |
188 private: | 188 private: |
189 FilePath test_mount_point_; | 189 FilePath test_mount_point_; |
190 }; | 190 }; |
191 | 191 |
| 192 class RestrictedFileSystemExtensionApiTest : public ExtensionApiTest { |
| 193 public: |
| 194 RestrictedFileSystemExtensionApiTest() {} |
| 195 |
| 196 virtual ~RestrictedFileSystemExtensionApiTest() {} |
| 197 |
| 198 virtual void SetUp() OVERRIDE { |
| 199 FilePath tmp_path; |
| 200 PathService::Get(base::DIR_TEMP, &tmp_path); |
| 201 ASSERT_TRUE(tmp_dir_.CreateUniqueTempDirUnderPath(tmp_path)); |
| 202 mount_point_dir_ = tmp_dir_.path().Append("mount"); |
| 203 // Create the mount point. |
| 204 file_util::CreateDirectory(mount_point_dir_); |
| 205 |
| 206 FilePath test_dir = mount_point_dir_.Append("test_dir"); |
| 207 file_util::CreateDirectory(test_dir); |
| 208 |
| 209 FilePath test_file = test_dir.AppendASCII("test_file.foo"); |
| 210 CreateFileWithContent(test_file, kTestFileContent); |
| 211 |
| 212 test_file = test_dir.AppendASCII("mutable_test_file.foo"); |
| 213 CreateFileWithContent(test_file, kTestFileContent); |
| 214 |
| 215 test_file = test_dir.AppendASCII("test_file_to_delete.foo"); |
| 216 CreateFileWithContent(test_file, kTestFileContent); |
| 217 |
| 218 test_file = test_dir.AppendASCII("test_file_to_move.foo"); |
| 219 CreateFileWithContent(test_file, kTestFileContent); |
| 220 |
| 221 // Create test files. |
| 222 ExtensionApiTest::SetUp(); |
| 223 } |
| 224 |
| 225 virtual void TearDown() OVERRIDE { |
| 226 ExtensionApiTest::TearDown(); |
| 227 } |
| 228 |
| 229 void AddRestrictedMountPoint() { |
| 230 fileapi::ExternalFileSystemMountPointProvider* provider = |
| 231 BrowserContext::GetDefaultStoragePartition( |
| 232 browser()->profile())->GetFileSystemContext()->external_provider(); |
| 233 provider->AddRestrictedLocalMountPoint(mount_point_dir_); |
| 234 } |
| 235 |
| 236 protected: |
| 237 ScopedTempDir tmp_dir_; |
| 238 FilePath mount_point_dir_; |
| 239 }; |
| 240 |
| 241 |
192 class RemoteFileSystemExtensionApiTest : public ExtensionApiTest { | 242 class RemoteFileSystemExtensionApiTest : public ExtensionApiTest { |
193 public: | 243 public: |
194 RemoteFileSystemExtensionApiTest() {} | 244 RemoteFileSystemExtensionApiTest() {} |
195 | 245 |
196 virtual ~RemoteFileSystemExtensionApiTest() {} | 246 virtual ~RemoteFileSystemExtensionApiTest() {} |
197 | 247 |
198 virtual void SetUp() OVERRIDE { | 248 virtual void SetUp() OVERRIDE { |
199 // Set up cache root and documents service to be used when creating gdata | 249 // Set up cache root and documents service to be used when creating gdata |
200 // system service. This has to be done early on (before the browser is | 250 // system service. This has to be done early on (before the browser is |
201 // created) because the system service instance is initialized very early | 251 // created) because the system service instance is initialized very early |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 | 299 |
250 IN_PROC_BROWSER_TEST_F(FileSystemExtensionApiTest, FileBrowserWebIntentTest) { | 300 IN_PROC_BROWSER_TEST_F(FileSystemExtensionApiTest, FileBrowserWebIntentTest) { |
251 AddTmpMountPoint(); | 301 AddTmpMountPoint(); |
252 | 302 |
253 ResultCatcher catcher; | 303 ResultCatcher catcher; |
254 ScopedTempDir tmp_dir; | 304 ScopedTempDir tmp_dir; |
255 ASSERT_TRUE(tmp_dir.CreateUniqueTempDir()); | 305 ASSERT_TRUE(tmp_dir.CreateUniqueTempDir()); |
256 | 306 |
257 // Create a test file inside the ScopedTempDir. | 307 // Create a test file inside the ScopedTempDir. |
258 FilePath test_file = tmp_dir.path().AppendASCII("text_file.xul"); | 308 FilePath test_file = tmp_dir.path().AppendASCII("text_file.xul"); |
259 CreateDownloadFile(test_file); | 309 CreateFileWithContent(test_file, kTestFileContent); |
260 | 310 |
261 ASSERT_TRUE(LoadExtension( | 311 ASSERT_TRUE(LoadExtension( |
262 test_data_dir_.AppendASCII("webintent_handler"))) << message_; | 312 test_data_dir_.AppendASCII("webintent_handler"))) << message_; |
263 | 313 |
264 // Load the source component, with the fileUrl within the virtual mount | 314 // Load the source component, with the fileUrl within the virtual mount |
265 // point. | 315 // point. |
266 const extensions::Extension* extension = LoadExtensionAsComponent( | 316 const extensions::Extension* extension = LoadExtensionAsComponent( |
267 test_data_dir_.AppendASCII("filebrowser_component")); | 317 test_data_dir_.AppendASCII("filebrowser_component")); |
268 ASSERT_TRUE(extension) << message_; | 318 ASSERT_TRUE(extension) << message_; |
269 std::string path = "filesystem:chrome-extension://" + extension->id() + | 319 std::string path = "filesystem:chrome-extension://" + extension->id() + |
(...skipping 23 matching lines...) Expand all Loading... |
293 | 343 |
294 IN_PROC_BROWSER_TEST_F(FileSystemExtensionApiTest, | 344 IN_PROC_BROWSER_TEST_F(FileSystemExtensionApiTest, |
295 FileBrowserTestWriteComponent) { | 345 FileBrowserTestWriteComponent) { |
296 AddTmpMountPoint(); | 346 AddTmpMountPoint(); |
297 ASSERT_TRUE(RunComponentExtensionTest("filesystem_handler_write")) | 347 ASSERT_TRUE(RunComponentExtensionTest("filesystem_handler_write")) |
298 << message_; | 348 << message_; |
299 ASSERT_TRUE(RunExtensionSubtest( | 349 ASSERT_TRUE(RunExtensionSubtest( |
300 "filebrowser_component", "write.html", kComponentFlags)) << message_; | 350 "filebrowser_component", "write.html", kComponentFlags)) << message_; |
301 } | 351 } |
302 | 352 |
| 353 IN_PROC_BROWSER_TEST_F(RestrictedFileSystemExtensionApiTest, Basic) { |
| 354 AddRestrictedMountPoint(); |
| 355 ASSERT_TRUE(RunExtensionSubtest( |
| 356 "filebrowser_component", "restricted.html", kComponentFlags)) << message_; |
| 357 } |
| 358 |
303 IN_PROC_BROWSER_TEST_F(RemoteFileSystemExtensionApiTest, | 359 IN_PROC_BROWSER_TEST_F(RemoteFileSystemExtensionApiTest, |
304 RemoteMountPoint) { | 360 RemoteMountPoint) { |
305 EXPECT_CALL(*mock_drive_service_, GetAccountMetadata(_)).Times(1); | 361 EXPECT_CALL(*mock_drive_service_, GetAccountMetadata(_)).Times(1); |
306 | 362 |
307 // First, file browser will try to create new directory. | 363 // First, file browser will try to create new directory. |
308 scoped_ptr<base::Value> dir_value(LoadJSONFile(kTestDirectory)); | 364 scoped_ptr<base::Value> dir_value(LoadJSONFile(kTestDirectory)); |
309 EXPECT_CALL(*mock_drive_service_, | 365 EXPECT_CALL(*mock_drive_service_, |
310 CreateDirectory(_, _, _)) | 366 CreateDirectory(_, _, _)) |
311 .WillOnce(MockCreateDirectoryCallback(gdata::HTTP_SUCCESS, &dir_value)); | 367 .WillOnce(MockCreateDirectoryCallback(gdata::HTTP_SUCCESS, &dir_value)); |
312 | 368 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 _, _)) | 436 _, _)) |
381 .WillOnce(MockDownloadFileCallback(gdata::HTTP_SUCCESS)); | 437 .WillOnce(MockDownloadFileCallback(gdata::HTTP_SUCCESS)); |
382 | 438 |
383 // On exit, all operations in progress should be cancelled. | 439 // On exit, all operations in progress should be cancelled. |
384 EXPECT_CALL(*mock_drive_service_, CancelAll()); | 440 EXPECT_CALL(*mock_drive_service_, CancelAll()); |
385 | 441 |
386 // All is set... RUN THE TEST. | 442 // All is set... RUN THE TEST. |
387 EXPECT_TRUE(RunExtensionSubtest("filebrowser_component", "remote_search.html", | 443 EXPECT_TRUE(RunExtensionSubtest("filebrowser_component", "remote_search.html", |
388 kComponentFlags)) << message_; | 444 kComponentFlags)) << message_; |
389 } | 445 } |
OLD | NEW |