// 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));
}
