Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(174)

Side by Side Diff: webkit/fileapi/file_system_mount_point_provider_unittest.cc

Issue 12163003: Add FilePath to base namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <set> 5 #include <set>
6 #include <string> 6 #include <string>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 const char* expected_path; 81 const char* expected_path;
82 const char* virtual_path; 82 const char* virtual_path;
83 } kRootPathFileURITestCases[] = { 83 } kRootPathFileURITestCases[] = {
84 { fileapi::kFileSystemTypeTemporary, "file:///", 84 { fileapi::kFileSystemTypeTemporary, "file:///",
85 "000" PS "t", NULL }, 85 "000" PS "t", NULL },
86 { fileapi::kFileSystemTypePersistent, "file:///", 86 { fileapi::kFileSystemTypePersistent, "file:///",
87 "000" PS "p", NULL }, 87 "000" PS "p", NULL },
88 }; 88 };
89 89
90 const struct CheckValidPathTest { 90 const struct CheckValidPathTest {
91 FilePath::StringType path; 91 base::FilePath::StringType path;
92 bool expected_valid; 92 bool expected_valid;
93 } kCheckValidPathTestCases[] = { 93 } kCheckValidPathTestCases[] = {
94 { FILE_PATH_LITERAL("//tmp/foo.txt"), false, }, 94 { FILE_PATH_LITERAL("//tmp/foo.txt"), false, },
95 { FILE_PATH_LITERAL("//etc/hosts"), false, }, 95 { FILE_PATH_LITERAL("//etc/hosts"), false, },
96 { FILE_PATH_LITERAL("foo.txt"), true, }, 96 { FILE_PATH_LITERAL("foo.txt"), true, },
97 { FILE_PATH_LITERAL("a/b/c"), true, }, 97 { FILE_PATH_LITERAL("a/b/c"), true, },
98 // Any paths that includes parent references are considered invalid. 98 // Any paths that includes parent references are considered invalid.
99 { FILE_PATH_LITERAL(".."), false, }, 99 { FILE_PATH_LITERAL(".."), false, },
100 { FILE_PATH_LITERAL("tmp/.."), false, }, 100 { FILE_PATH_LITERAL("tmp/.."), false, },
101 { FILE_PATH_LITERAL("a/b/../c/.."), false, }, 101 { FILE_PATH_LITERAL("a/b/../c/.."), false, },
102 }; 102 };
103 103
104 const struct IsRestrictedNameTest { 104 const struct IsRestrictedNameTest {
105 FilePath::StringType name; 105 base::FilePath::StringType name;
106 bool expected_dangerous; 106 bool expected_dangerous;
107 } kIsRestrictedNameTestCases[] = { 107 } kIsRestrictedNameTestCases[] = {
108 // Names that contain strings that used to be restricted, but are now allowed. 108 // Names that contain strings that used to be restricted, but are now allowed.
109 { FILE_PATH_LITERAL("con"), false, }, 109 { FILE_PATH_LITERAL("con"), false, },
110 { FILE_PATH_LITERAL("Con.txt"), false, }, 110 { FILE_PATH_LITERAL("Con.txt"), false, },
111 { FILE_PATH_LITERAL("Prn.png"), false, }, 111 { FILE_PATH_LITERAL("Prn.png"), false, },
112 { FILE_PATH_LITERAL("AUX"), false, }, 112 { FILE_PATH_LITERAL("AUX"), false, },
113 { FILE_PATH_LITERAL("nUl."), false, }, 113 { FILE_PATH_LITERAL("nUl."), false, },
114 { FILE_PATH_LITERAL("coM1"), false, }, 114 { FILE_PATH_LITERAL("coM1"), false, },
115 { FILE_PATH_LITERAL("COM3.com"), false, }, 115 { FILE_PATH_LITERAL("COM3.com"), false, },
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 { FILE_PATH_LITERAL(". "), false, }, 186 { FILE_PATH_LITERAL(". "), false, },
187 { FILE_PATH_LITERAL(" . "), false, }, 187 { FILE_PATH_LITERAL(" . "), false, },
188 { FILE_PATH_LITERAL(" .."), false, }, 188 { FILE_PATH_LITERAL(" .."), false, },
189 { FILE_PATH_LITERAL(".. "), false, }, 189 { FILE_PATH_LITERAL(".. "), false, },
190 { FILE_PATH_LITERAL(" .. "), false, }, 190 { FILE_PATH_LITERAL(" .. "), false, },
191 { FILE_PATH_LITERAL("b."), false, }, 191 { FILE_PATH_LITERAL("b."), false, },
192 { FILE_PATH_LITERAL(".b"), false, }, 192 { FILE_PATH_LITERAL(".b"), false, },
193 }; 193 };
194 194
195 // For External filesystem. 195 // For External filesystem.
196 const FilePath::CharType kMountPoint[] = FILE_PATH_LITERAL("/tmp/testing"); 196 const base::FilePath::CharType kMountPoint[] = FILE_PATH_LITERAL("/tmp/testing") ;
197 const FilePath::CharType kRootPath[] = FILE_PATH_LITERAL("/tmp"); 197 const base::FilePath::CharType kRootPath[] = FILE_PATH_LITERAL("/tmp");
198 const FilePath::CharType kVirtualPath[] = FILE_PATH_LITERAL("testing"); 198 const base::FilePath::CharType kVirtualPath[] = FILE_PATH_LITERAL("testing");
199 199
200 } // namespace 200 } // namespace
201 201
202 class FileSystemMountPointProviderTest : public testing::Test { 202 class FileSystemMountPointProviderTest : public testing::Test {
203 public: 203 public:
204 FileSystemMountPointProviderTest() 204 FileSystemMountPointProviderTest()
205 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { 205 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
206 } 206 }
207 207
208 void SetUp() { 208 void SetUp() {
209 ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); 209 ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
210 special_storage_policy_ = new quota::MockSpecialStoragePolicy; 210 special_storage_policy_ = new quota::MockSpecialStoragePolicy;
211 } 211 }
212 212
213 protected: 213 protected:
214 void SetupNewContext(const FileSystemOptions& options) { 214 void SetupNewContext(const FileSystemOptions& options) {
215 scoped_refptr<ExternalMountPoints> external_mount_points( 215 scoped_refptr<ExternalMountPoints> external_mount_points(
216 ExternalMountPoints::CreateRefCounted()); 216 ExternalMountPoints::CreateRefCounted());
217 file_system_context_ = new FileSystemContext( 217 file_system_context_ = new FileSystemContext(
218 FileSystemTaskRunners::CreateMockTaskRunners(), 218 FileSystemTaskRunners::CreateMockTaskRunners(),
219 external_mount_points.get(), 219 external_mount_points.get(),
220 special_storage_policy_, 220 special_storage_policy_,
221 NULL, 221 NULL,
222 data_dir_.path(), 222 data_dir_.path(),
223 options); 223 options);
224 #if defined(OS_CHROMEOS) 224 #if defined(OS_CHROMEOS)
225 FilePath mount_point_path = FilePath(kMountPoint); 225 base::FilePath mount_point_path = base::FilePath(kMountPoint);
226 external_mount_points->RegisterFileSystem( 226 external_mount_points->RegisterFileSystem(
227 mount_point_path.BaseName().AsUTF8Unsafe(), 227 mount_point_path.BaseName().AsUTF8Unsafe(),
228 kFileSystemTypeNativeLocal, 228 kFileSystemTypeNativeLocal,
229 mount_point_path); 229 mount_point_path);
230 #endif 230 #endif
231 } 231 }
232 232
233 FileSystemMountPointProvider* provider(FileSystemType type) { 233 FileSystemMountPointProvider* provider(FileSystemType type) {
234 DCHECK(file_system_context_); 234 DCHECK(file_system_context_);
235 return file_system_context_->GetMountPointProvider(type); 235 return file_system_context_->GetMountPointProvider(type);
236 } 236 }
237 237
238 bool GetRootPath(const GURL& origin_url, 238 bool GetRootPath(const GURL& origin_url,
239 fileapi::FileSystemType type, 239 fileapi::FileSystemType type,
240 bool create, 240 bool create,
241 FilePath* root_path) { 241 base::FilePath* root_path) {
242 FilePath virtual_path = FilePath(); 242 base::FilePath virtual_path = base::FilePath();
243 if (type == kFileSystemTypeExternal) 243 if (type == kFileSystemTypeExternal)
244 virtual_path = FilePath(kVirtualPath); 244 virtual_path = base::FilePath(kVirtualPath);
245 FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( 245 FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL(
246 origin_url, type, virtual_path); 246 origin_url, type, virtual_path);
247 FilePath returned_root_path = 247 base::FilePath returned_root_path =
248 provider(type)->GetFileSystemRootPathOnFileThread(url, create); 248 provider(type)->GetFileSystemRootPathOnFileThread(url, create);
249 if (root_path) 249 if (root_path)
250 *root_path = returned_root_path; 250 *root_path = returned_root_path;
251 return !returned_root_path.empty(); 251 return !returned_root_path.empty();
252 } 252 }
253 253
254 FilePath data_path() const { return data_dir_.path(); } 254 base::FilePath data_path() const { return data_dir_.path(); }
255 FilePath file_system_path() const { 255 base::FilePath file_system_path() const {
256 return data_dir_.path().Append( 256 return data_dir_.path().Append(
257 SandboxMountPointProvider::kFileSystemDirectory); 257 SandboxMountPointProvider::kFileSystemDirectory);
258 } 258 }
259 FileSystemContext* file_system_context() const { 259 FileSystemContext* file_system_context() const {
260 return file_system_context_.get(); 260 return file_system_context_.get();
261 } 261 }
262 262
263 private: 263 private:
264 base::ScopedTempDir data_dir_; 264 base::ScopedTempDir data_dir_;
265 MessageLoop message_loop_; 265 MessageLoop message_loop_;
266 base::WeakPtrFactory<FileSystemMountPointProviderTest> weak_factory_; 266 base::WeakPtrFactory<FileSystemMountPointProviderTest> weak_factory_;
267 267
268 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_; 268 scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy_;
269 scoped_refptr<FileSystemContext> file_system_context_; 269 scoped_refptr<FileSystemContext> file_system_context_;
270 270
271 DISALLOW_COPY_AND_ASSIGN(FileSystemMountPointProviderTest); 271 DISALLOW_COPY_AND_ASSIGN(FileSystemMountPointProviderTest);
272 }; 272 };
273 273
274 TEST_F(FileSystemMountPointProviderTest, GetRootPathCreateAndExamine) { 274 TEST_F(FileSystemMountPointProviderTest, GetRootPathCreateAndExamine) {
275 std::vector<FilePath> returned_root_path( 275 std::vector<base::FilePath> returned_root_path(
276 ARRAYSIZE_UNSAFE(kRootPathTestCases)); 276 ARRAYSIZE_UNSAFE(kRootPathTestCases));
277 SetupNewContext(CreateAllowFileAccessOptions()); 277 SetupNewContext(CreateAllowFileAccessOptions());
278 278
279 // Create a new root directory. 279 // Create a new root directory.
280 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kRootPathTestCases); ++i) { 280 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kRootPathTestCases); ++i) {
281 SCOPED_TRACE(testing::Message() << "RootPath (create) #" << i << " " 281 SCOPED_TRACE(testing::Message() << "RootPath (create) #" << i << " "
282 << kRootPathTestCases[i].expected_path); 282 << kRootPathTestCases[i].expected_path);
283 283
284 FilePath root_path; 284 base::FilePath root_path;
285 EXPECT_TRUE(GetRootPath(GURL(kRootPathTestCases[i].origin_url), 285 EXPECT_TRUE(GetRootPath(GURL(kRootPathTestCases[i].origin_url),
286 kRootPathTestCases[i].type, 286 kRootPathTestCases[i].type,
287 true /* create */, &root_path)); 287 true /* create */, &root_path));
288 288
289 if (kRootPathTestCases[i].type != kFileSystemTypeExternal) { 289 if (kRootPathTestCases[i].type != kFileSystemTypeExternal) {
290 FilePath expected = file_system_path().AppendASCII( 290 base::FilePath expected = file_system_path().AppendASCII(
291 kRootPathTestCases[i].expected_path); 291 kRootPathTestCases[i].expected_path);
292 EXPECT_EQ(expected.value(), root_path.value()); 292 EXPECT_EQ(expected.value(), root_path.value());
293 EXPECT_TRUE(file_util::DirectoryExists(root_path)); 293 EXPECT_TRUE(file_util::DirectoryExists(root_path));
294 } else { 294 } else {
295 // External file system root path is virtual one and does not match 295 // External file system root path is virtual one and does not match
296 // anything from the actual file system. 296 // anything from the actual file system.
297 EXPECT_EQ(kRootPath, root_path.value()); 297 EXPECT_EQ(kRootPath, root_path.value());
298 } 298 }
299 ASSERT_TRUE(returned_root_path.size() > i); 299 ASSERT_TRUE(returned_root_path.size() > i);
300 returned_root_path[i] = root_path; 300 returned_root_path[i] = root_path;
301 } 301 }
302 302
303 // Get the root directory with create=false and see if we get the 303 // Get the root directory with create=false and see if we get the
304 // same directory. 304 // same directory.
305 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kRootPathTestCases); ++i) { 305 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kRootPathTestCases); ++i) {
306 SCOPED_TRACE(testing::Message() << "RootPath (get) #" << i << " " 306 SCOPED_TRACE(testing::Message() << "RootPath (get) #" << i << " "
307 << kRootPathTestCases[i].expected_path); 307 << kRootPathTestCases[i].expected_path);
308 308
309 FilePath root_path; 309 base::FilePath root_path;
310 EXPECT_TRUE(GetRootPath(GURL(kRootPathTestCases[i].origin_url), 310 EXPECT_TRUE(GetRootPath(GURL(kRootPathTestCases[i].origin_url),
311 kRootPathTestCases[i].type, 311 kRootPathTestCases[i].type,
312 false /* create */, &root_path)); 312 false /* create */, &root_path));
313 ASSERT_TRUE(returned_root_path.size() > i); 313 ASSERT_TRUE(returned_root_path.size() > i);
314 EXPECT_EQ(returned_root_path[i].value(), root_path.value()); 314 EXPECT_EQ(returned_root_path[i].value(), root_path.value());
315 } 315 }
316 } 316 }
317 317
318 TEST_F(FileSystemMountPointProviderTest, 318 TEST_F(FileSystemMountPointProviderTest,
319 GetRootPathCreateAndExamineWithNewProvider) { 319 GetRootPathCreateAndExamineWithNewProvider) {
320 std::vector<FilePath> returned_root_path( 320 std::vector<base::FilePath> returned_root_path(
321 ARRAYSIZE_UNSAFE(kRootPathTestCases)); 321 ARRAYSIZE_UNSAFE(kRootPathTestCases));
322 SetupNewContext(CreateAllowFileAccessOptions()); 322 SetupNewContext(CreateAllowFileAccessOptions());
323 323
324 GURL origin_url("http://foo.com:1/"); 324 GURL origin_url("http://foo.com:1/");
325 325
326 FilePath root_path1; 326 base::FilePath root_path1;
327 EXPECT_TRUE(GetRootPath(origin_url, 327 EXPECT_TRUE(GetRootPath(origin_url,
328 kFileSystemTypeTemporary, true, &root_path1)); 328 kFileSystemTypeTemporary, true, &root_path1));
329 329
330 SetupNewContext(CreateDisallowFileAccessOptions()); 330 SetupNewContext(CreateDisallowFileAccessOptions());
331 FilePath root_path2; 331 base::FilePath root_path2;
332 EXPECT_TRUE(GetRootPath(origin_url, 332 EXPECT_TRUE(GetRootPath(origin_url,
333 kFileSystemTypeTemporary, false, &root_path2)); 333 kFileSystemTypeTemporary, false, &root_path2));
334 334
335 EXPECT_EQ(root_path1.value(), root_path2.value()); 335 EXPECT_EQ(root_path1.value(), root_path2.value());
336 } 336 }
337 337
338 TEST_F(FileSystemMountPointProviderTest, GetRootPathGetWithoutCreate) { 338 TEST_F(FileSystemMountPointProviderTest, GetRootPathGetWithoutCreate) {
339 SetupNewContext(CreateDisallowFileAccessOptions()); 339 SetupNewContext(CreateDisallowFileAccessOptions());
340 340
341 // Try to get a root directory without creating. 341 // Try to get a root directory without creating.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 kRootPathFileURITestCases[i].type, 376 kRootPathFileURITestCases[i].type,
377 true /* create */, NULL)); 377 true /* create */, NULL));
378 } 378 }
379 } 379 }
380 380
381 TEST_F(FileSystemMountPointProviderTest, GetRootPathFileURIWithAllowFlag) { 381 TEST_F(FileSystemMountPointProviderTest, GetRootPathFileURIWithAllowFlag) {
382 SetupNewContext(CreateAllowFileAccessOptions()); 382 SetupNewContext(CreateAllowFileAccessOptions());
383 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kRootPathFileURITestCases); ++i) { 383 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kRootPathFileURITestCases); ++i) {
384 SCOPED_TRACE(testing::Message() << "RootPathFileURI (allow) #" 384 SCOPED_TRACE(testing::Message() << "RootPathFileURI (allow) #"
385 << i << " " << kRootPathFileURITestCases[i].expected_path); 385 << i << " " << kRootPathFileURITestCases[i].expected_path);
386 FilePath root_path; 386 base::FilePath root_path;
387 EXPECT_TRUE(GetRootPath(GURL(kRootPathFileURITestCases[i].origin_url), 387 EXPECT_TRUE(GetRootPath(GURL(kRootPathFileURITestCases[i].origin_url),
388 kRootPathFileURITestCases[i].type, 388 kRootPathFileURITestCases[i].type,
389 true /* create */, &root_path)); 389 true /* create */, &root_path));
390 FilePath expected = file_system_path().AppendASCII( 390 base::FilePath expected = file_system_path().AppendASCII(
391 kRootPathFileURITestCases[i].expected_path); 391 kRootPathFileURITestCases[i].expected_path);
392 EXPECT_EQ(expected.value(), root_path.value()); 392 EXPECT_EQ(expected.value(), root_path.value());
393 EXPECT_TRUE(file_util::DirectoryExists(root_path)); 393 EXPECT_TRUE(file_util::DirectoryExists(root_path));
394 } 394 }
395 } 395 }
396 396
397 TEST_F(FileSystemMountPointProviderTest, IsRestrictedName) { 397 TEST_F(FileSystemMountPointProviderTest, IsRestrictedName) {
398 SetupNewContext(CreateDisallowFileAccessOptions()); 398 SetupNewContext(CreateDisallowFileAccessOptions());
399 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kIsRestrictedNameTestCases); ++i) { 399 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kIsRestrictedNameTestCases); ++i) {
400 SCOPED_TRACE(testing::Message() << "IsRestrictedName #" << i << " " 400 SCOPED_TRACE(testing::Message() << "IsRestrictedName #" << i << " "
401 << kIsRestrictedNameTestCases[i].name); 401 << kIsRestrictedNameTestCases[i].name);
402 FilePath name(kIsRestrictedNameTestCases[i].name); 402 base::FilePath name(kIsRestrictedNameTestCases[i].name);
403 EXPECT_EQ(kIsRestrictedNameTestCases[i].expected_dangerous, 403 EXPECT_EQ(kIsRestrictedNameTestCases[i].expected_dangerous,
404 provider(kFileSystemTypeTemporary)->IsRestrictedFileName(name)); 404 provider(kFileSystemTypeTemporary)->IsRestrictedFileName(name));
405 } 405 }
406 } 406 }
407 407
408 } // namespace fileapi 408 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/fileapi/file_system_mount_point_provider.h ('k') | webkit/fileapi/file_system_operation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698