|  | // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "webkit/chromeos/fileapi/file_access_permissions.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  |  | 
|  | class FileAccessPermissionsTest : public testing::Test { | 
|  | }; | 
|  |  | 
|  | TEST_F(FileAccessPermissionsTest, FileAccessChecks) { | 
|  | #if defined(OS_WIN) | 
|  | FilePath good_dir(FILE_PATH_LITERAL("c:\\root\\dir")); | 
|  | FilePath bad_dir(FILE_PATH_LITERAL("c:\\root")); | 
|  | FilePath good_file(FILE_PATH_LITERAL("c:\\root\\dir\\good_file.txt")); | 
|  | FilePath bad_file(FILE_PATH_LITERAL("c:\\root\\dir\\bad_file.txt")); | 
|  | #elif defined(OS_POSIX) | 
|  | FilePath good_dir(FILE_PATH_LITERAL("/root/dir")); | 
|  | FilePath bad_dir(FILE_PATH_LITERAL("/root")); | 
|  | FilePath good_file(FILE_PATH_LITERAL("/root/dir/good_file.txt")); | 
|  | FilePath bad_file(FILE_PATH_LITERAL("/root/dir/bad_file.txt")); | 
|  | #endif | 
|  | std::string extension1("ddammdhioacbehjngdmkjcjbnfginlla"); | 
|  | std::string extension2("jkhdjkhkhsdkfhsdkhrterwmtermeter"); | 
|  |  | 
|  | chromeos::FileAccessPermissions permissions; | 
|  | // By default extension have no access to any local file. | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, good_dir)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, bad_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_dir)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, bad_file)); | 
|  |  | 
|  | // After granting file access to the handler extension for a given file, it | 
|  | // can only access that file an nothing else. | 
|  | permissions.GrantAccessPermission(extension1, good_file); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, good_dir)); | 
|  | EXPECT_TRUE(permissions.HasAccessPermission(extension1, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, bad_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_dir)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, bad_file)); | 
|  |  | 
|  |  | 
|  | // After granting file access to the handler extension for a given directory, | 
|  | // it can access that directory and all files within it. | 
|  | permissions.GrantAccessPermission(extension2, good_dir); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, good_dir)); | 
|  | EXPECT_TRUE(permissions.HasAccessPermission(extension1, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, bad_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_dir)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, bad_file)); | 
|  |  | 
|  | // After revoking rights for extensions, they should not be able to access | 
|  | // any file system element anymore. | 
|  | permissions.RevokePermissions(extension1); | 
|  | permissions.RevokePermissions(extension2); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, good_dir)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension1, bad_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_dir)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, good_file)); | 
|  | EXPECT_FALSE(permissions.HasAccessPermission(extension2, bad_file)); | 
|  | } |