| Index: content/browser/fileapi/file_system_context_unittest.cc
|
| diff --git a/content/browser/fileapi/file_system_context_unittest.cc b/content/browser/fileapi/file_system_context_unittest.cc
|
| deleted file mode 100644
|
| index de01fce6f75b88401636fc14fad76366034380ee..0000000000000000000000000000000000000000
|
| --- a/content/browser/fileapi/file_system_context_unittest.cc
|
| +++ /dev/null
|
| @@ -1,391 +0,0 @@
|
| -// Copyright 2013 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 "storage/browser/fileapi/file_system_context.h"
|
| -
|
| -#include <stddef.h>
|
| -
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/macros.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "build/build_config.h"
|
| -#include "content/browser/quota/mock_quota_manager.h"
|
| -#include "content/public/test/mock_special_storage_policy.h"
|
| -#include "content/public/test/test_file_system_options.h"
|
| -#include "storage/browser/fileapi/external_mount_points.h"
|
| -#include "storage/browser/fileapi/file_system_backend.h"
|
| -#include "storage/browser/fileapi/isolated_context.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -#define FPL(x) FILE_PATH_LITERAL(x)
|
| -
|
| -#if defined(FILE_PATH_USES_DRIVE_LETTERS)
|
| -#define DRIVE FPL("C:")
|
| -#else
|
| -#define DRIVE
|
| -#endif
|
| -
|
| -using storage::ExternalMountPoints;
|
| -using storage::FileSystemBackend;
|
| -using storage::FileSystemContext;
|
| -using storage::FileSystemMountOption;
|
| -using storage::FileSystemURL;
|
| -using storage::IsolatedContext;
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -const char kTestOrigin[] = "http://chromium.org/";
|
| -
|
| -GURL CreateRawFileSystemURL(const std::string& type_str,
|
| - const std::string& fs_id) {
|
| - std::string url_str = base::StringPrintf(
|
| - "filesystem:http://chromium.org/%s/%s/root/file",
|
| - type_str.c_str(),
|
| - fs_id.c_str());
|
| - return GURL(url_str);
|
| -}
|
| -
|
| -class FileSystemContextTest : public testing::Test {
|
| - public:
|
| - FileSystemContextTest() {}
|
| -
|
| - void SetUp() override {
|
| - ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
|
| -
|
| - storage_policy_ = new MockSpecialStoragePolicy();
|
| -
|
| - mock_quota_manager_ = new MockQuotaManager(
|
| - false /* is_incognito */, data_dir_.GetPath(),
|
| - base::ThreadTaskRunnerHandle::Get().get(),
|
| - base::ThreadTaskRunnerHandle::Get().get(), storage_policy_.get());
|
| - }
|
| -
|
| - protected:
|
| - FileSystemContext* CreateFileSystemContextForTest(
|
| - storage::ExternalMountPoints* external_mount_points) {
|
| - return new FileSystemContext(
|
| - base::ThreadTaskRunnerHandle::Get().get(),
|
| - base::ThreadTaskRunnerHandle::Get().get(), external_mount_points,
|
| - storage_policy_.get(), mock_quota_manager_->proxy(),
|
| - ScopedVector<FileSystemBackend>(),
|
| - std::vector<storage::URLRequestAutoMountHandler>(), data_dir_.GetPath(),
|
| - CreateAllowFileAccessOptions());
|
| - }
|
| -
|
| - // Verifies a *valid* filesystem url has expected values.
|
| - void ExpectFileSystemURLMatches(const FileSystemURL& url,
|
| - const GURL& expect_origin,
|
| - storage::FileSystemType expect_mount_type,
|
| - storage::FileSystemType expect_type,
|
| - const base::FilePath& expect_path,
|
| - const base::FilePath& expect_virtual_path,
|
| - const std::string& expect_filesystem_id) {
|
| - EXPECT_TRUE(url.is_valid());
|
| -
|
| - EXPECT_EQ(expect_origin, url.origin());
|
| - EXPECT_EQ(expect_mount_type, url.mount_type());
|
| - EXPECT_EQ(expect_type, url.type());
|
| - EXPECT_EQ(expect_path, url.path());
|
| - EXPECT_EQ(expect_virtual_path, url.virtual_path());
|
| - EXPECT_EQ(expect_filesystem_id, url.filesystem_id());
|
| - }
|
| -
|
| - private:
|
| - base::ScopedTempDir data_dir_;
|
| - base::MessageLoop message_loop_;
|
| - scoped_refptr<storage::SpecialStoragePolicy> storage_policy_;
|
| - scoped_refptr<MockQuotaManager> mock_quota_manager_;
|
| -};
|
| -
|
| -// It is not valid to pass NULL ExternalMountPoints to FileSystemContext on
|
| -// ChromeOS.
|
| -#if !defined(OS_CHROMEOS)
|
| -TEST_F(FileSystemContextTest, NullExternalMountPoints) {
|
| - scoped_refptr<FileSystemContext> file_system_context(
|
| - CreateFileSystemContextForTest(NULL));
|
| -
|
| - // Cracking system external mount and isolated mount points should work.
|
| - std::string isolated_name = "root";
|
| - std::string isolated_id =
|
| - IsolatedContext::GetInstance()->RegisterFileSystemForPath(
|
| - storage::kFileSystemTypeNativeLocal,
|
| - std::string(),
|
| - base::FilePath(DRIVE FPL("/test/isolated/root")),
|
| - &isolated_name);
|
| - // Register system external mount point.
|
| - ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem(
|
| - "system",
|
| - storage::kFileSystemTypeNativeLocal,
|
| - FileSystemMountOption(),
|
| - base::FilePath(DRIVE FPL("/test/sys/"))));
|
| -
|
| - FileSystemURL cracked_isolated = file_system_context->CrackURL(
|
| - CreateRawFileSystemURL("isolated", isolated_id));
|
| -
|
| - ExpectFileSystemURLMatches(
|
| - cracked_isolated,
|
| - GURL(kTestOrigin),
|
| - storage::kFileSystemTypeIsolated,
|
| - storage::kFileSystemTypeNativeLocal,
|
| - base::FilePath(DRIVE FPL("/test/isolated/root/file"))
|
| - .NormalizePathSeparators(),
|
| - base::FilePath::FromUTF8Unsafe(isolated_id)
|
| - .Append(FPL("root/file"))
|
| - .NormalizePathSeparators(),
|
| - isolated_id);
|
| -
|
| - FileSystemURL cracked_external = file_system_context->CrackURL(
|
| - CreateRawFileSystemURL("external", "system"));
|
| -
|
| - ExpectFileSystemURLMatches(
|
| - cracked_external,
|
| - GURL(kTestOrigin),
|
| - storage::kFileSystemTypeExternal,
|
| - storage::kFileSystemTypeNativeLocal,
|
| - base::FilePath(DRIVE FPL("/test/sys/root/file"))
|
| - .NormalizePathSeparators(),
|
| - base::FilePath(FPL("system/root/file")).NormalizePathSeparators(),
|
| - "system");
|
| -
|
| - IsolatedContext::GetInstance()->RevokeFileSystem(isolated_id);
|
| - ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("system");
|
| -}
|
| -#endif // !defiend(OS_CHROMEOS)
|
| -
|
| -TEST_F(FileSystemContextTest, FileSystemContextKeepsMountPointsAlive) {
|
| - scoped_refptr<ExternalMountPoints> mount_points =
|
| - ExternalMountPoints::CreateRefCounted();
|
| -
|
| - // Register system external mount point.
|
| - ASSERT_TRUE(mount_points->RegisterFileSystem(
|
| - "system",
|
| - storage::kFileSystemTypeNativeLocal,
|
| - FileSystemMountOption(),
|
| - base::FilePath(DRIVE FPL("/test/sys/"))));
|
| -
|
| - scoped_refptr<FileSystemContext> file_system_context(
|
| - CreateFileSystemContextForTest(mount_points.get()));
|
| -
|
| - // Release a MountPoints reference created in the test.
|
| - mount_points = NULL;
|
| -
|
| - // FileSystemContext should keep a reference to the |mount_points|, so it
|
| - // should be able to resolve the URL.
|
| - FileSystemURL cracked_external = file_system_context->CrackURL(
|
| - CreateRawFileSystemURL("external", "system"));
|
| -
|
| - ExpectFileSystemURLMatches(
|
| - cracked_external,
|
| - GURL(kTestOrigin),
|
| - storage::kFileSystemTypeExternal,
|
| - storage::kFileSystemTypeNativeLocal,
|
| - base::FilePath(DRIVE FPL("/test/sys/root/file"))
|
| - .NormalizePathSeparators(),
|
| - base::FilePath(FPL("system/root/file")).NormalizePathSeparators(),
|
| - "system");
|
| -
|
| - // No need to revoke the registered filesystem since |mount_points| lifetime
|
| - // is bound to this test.
|
| -}
|
| -
|
| -TEST_F(FileSystemContextTest, CrackFileSystemURL) {
|
| - scoped_refptr<ExternalMountPoints> external_mount_points(
|
| - ExternalMountPoints::CreateRefCounted());
|
| - scoped_refptr<FileSystemContext> file_system_context(
|
| - CreateFileSystemContextForTest(external_mount_points.get()));
|
| -
|
| - // Register an isolated mount point.
|
| - std::string isolated_file_system_name = "root";
|
| - const std::string kIsolatedFileSystemID =
|
| - IsolatedContext::GetInstance()->RegisterFileSystemForPath(
|
| - storage::kFileSystemTypeNativeLocal,
|
| - std::string(),
|
| - base::FilePath(DRIVE FPL("/test/isolated/root")),
|
| - &isolated_file_system_name);
|
| - // Register system external mount point.
|
| - ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem(
|
| - "system",
|
| - storage::kFileSystemTypeDrive,
|
| - FileSystemMountOption(),
|
| - base::FilePath(DRIVE FPL("/test/sys/"))));
|
| - ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem(
|
| - "ext",
|
| - storage::kFileSystemTypeNativeLocal,
|
| - FileSystemMountOption(),
|
| - base::FilePath(DRIVE FPL("/test/ext"))));
|
| - // Register a system external mount point with the same name/id as the
|
| - // registered isolated mount point.
|
| - ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem(
|
| - kIsolatedFileSystemID,
|
| - storage::kFileSystemTypeRestrictedNativeLocal,
|
| - FileSystemMountOption(),
|
| - base::FilePath(DRIVE FPL("/test/system/isolated"))));
|
| - // Add a mount points with the same name as a system mount point to
|
| - // FileSystemContext's external mount points.
|
| - ASSERT_TRUE(external_mount_points->RegisterFileSystem(
|
| - "ext",
|
| - storage::kFileSystemTypeNativeLocal,
|
| - FileSystemMountOption(),
|
| - base::FilePath(DRIVE FPL("/test/local/ext/"))));
|
| -
|
| - const GURL kTestOrigin = GURL("http://chromium.org/");
|
| - const base::FilePath kVirtualPathNoRoot = base::FilePath(FPL("root/file"));
|
| -
|
| - struct TestCase {
|
| - // Test case values.
|
| - std::string root;
|
| - std::string type_str;
|
| -
|
| - // Expected test results.
|
| - bool expect_is_valid;
|
| - storage::FileSystemType expect_mount_type;
|
| - storage::FileSystemType expect_type;
|
| - const base::FilePath::CharType* expect_path;
|
| - std::string expect_filesystem_id;
|
| - };
|
| -
|
| - const TestCase kTestCases[] = {
|
| - // Following should not be handled by the url crackers:
|
| - {
|
| - "pers_mount", "persistent", true /* is_valid */,
|
| - storage::kFileSystemTypePersistent, storage::kFileSystemTypePersistent,
|
| - FPL("pers_mount/root/file"), std::string() /* filesystem id */
|
| - },
|
| - {
|
| - "temp_mount", "temporary", true /* is_valid */,
|
| - storage::kFileSystemTypeTemporary, storage::kFileSystemTypeTemporary,
|
| - FPL("temp_mount/root/file"), std::string() /* filesystem id */
|
| - },
|
| - // Should be cracked by isolated mount points:
|
| - {kIsolatedFileSystemID, "isolated", true /* is_valid */,
|
| - storage::kFileSystemTypeIsolated, storage::kFileSystemTypeNativeLocal,
|
| - DRIVE FPL("/test/isolated/root/file"), kIsolatedFileSystemID},
|
| - // Should be cracked by system mount points:
|
| - {"system", "external", true /* is_valid */,
|
| - storage::kFileSystemTypeExternal, storage::kFileSystemTypeDrive,
|
| - DRIVE FPL("/test/sys/root/file"), "system"},
|
| - {kIsolatedFileSystemID, "external", true /* is_valid */,
|
| - storage::kFileSystemTypeExternal,
|
| - storage::kFileSystemTypeRestrictedNativeLocal,
|
| - DRIVE FPL("/test/system/isolated/root/file"), kIsolatedFileSystemID},
|
| - // Should be cracked by FileSystemContext's ExternalMountPoints.
|
| - {"ext", "external", true /* is_valid */, storage::kFileSystemTypeExternal,
|
| - storage::kFileSystemTypeNativeLocal,
|
| - DRIVE FPL("/test/local/ext/root/file"), "ext"},
|
| - // Test for invalid filesystem url (made invalid by adding invalid
|
| - // filesystem type).
|
| - {"sytem", "external", false /* is_valid */,
|
| - // The rest of values will be ignored.
|
| - storage::kFileSystemTypeUnknown, storage::kFileSystemTypeUnknown,
|
| - FPL(""), std::string()},
|
| - // Test for URL with non-existing filesystem id.
|
| - {"invalid", "external", false /* is_valid */,
|
| - // The rest of values will be ignored.
|
| - storage::kFileSystemTypeUnknown, storage::kFileSystemTypeUnknown,
|
| - FPL(""), std::string()},
|
| - };
|
| -
|
| - for (size_t i = 0; i < arraysize(kTestCases); ++i) {
|
| - const base::FilePath virtual_path =
|
| - base::FilePath::FromUTF8Unsafe(
|
| - kTestCases[i].root).Append(kVirtualPathNoRoot);
|
| -
|
| - GURL raw_url =
|
| - CreateRawFileSystemURL(kTestCases[i].type_str, kTestCases[i].root);
|
| - FileSystemURL cracked_url = file_system_context->CrackURL(raw_url);
|
| -
|
| - SCOPED_TRACE(testing::Message() << "Test case " << i << ": "
|
| - << "Cracking URL: " << raw_url);
|
| -
|
| - EXPECT_EQ(kTestCases[i].expect_is_valid, cracked_url.is_valid());
|
| - if (!kTestCases[i].expect_is_valid)
|
| - continue;
|
| -
|
| - ExpectFileSystemURLMatches(
|
| - cracked_url,
|
| - GURL(kTestOrigin),
|
| - kTestCases[i].expect_mount_type,
|
| - kTestCases[i].expect_type,
|
| - base::FilePath(kTestCases[i].expect_path).NormalizePathSeparators(),
|
| - virtual_path.NormalizePathSeparators(),
|
| - kTestCases[i].expect_filesystem_id);
|
| - }
|
| -
|
| - IsolatedContext::GetInstance()->RevokeFileSystemByPath(
|
| - base::FilePath(DRIVE FPL("/test/isolated/root")));
|
| - ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("system");
|
| - ExternalMountPoints::GetSystemInstance()->RevokeFileSystem("ext");
|
| - ExternalMountPoints::GetSystemInstance()->RevokeFileSystem(
|
| - kIsolatedFileSystemID);
|
| -}
|
| -
|
| -TEST_F(FileSystemContextTest, CanServeURLRequest) {
|
| - scoped_refptr<ExternalMountPoints> external_mount_points(
|
| - ExternalMountPoints::CreateRefCounted());
|
| - scoped_refptr<FileSystemContext> context(
|
| - CreateFileSystemContextForTest(external_mount_points.get()));
|
| -
|
| - // A request for a sandbox mount point should be served.
|
| - FileSystemURL cracked_url =
|
| - context->CrackURL(CreateRawFileSystemURL("persistent", "pers_mount"));
|
| - EXPECT_EQ(storage::kFileSystemTypePersistent, cracked_url.mount_type());
|
| - EXPECT_TRUE(context->CanServeURLRequest(cracked_url));
|
| -
|
| - // A request for an isolated mount point should NOT be served.
|
| - std::string isolated_fs_name = "root";
|
| - std::string isolated_fs_id =
|
| - IsolatedContext::GetInstance()->RegisterFileSystemForPath(
|
| - storage::kFileSystemTypeNativeLocal,
|
| - std::string(),
|
| - base::FilePath(DRIVE FPL("/test/isolated/root")),
|
| - &isolated_fs_name);
|
| - cracked_url = context->CrackURL(
|
| - CreateRawFileSystemURL("isolated", isolated_fs_id));
|
| - EXPECT_EQ(storage::kFileSystemTypeIsolated, cracked_url.mount_type());
|
| - EXPECT_FALSE(context->CanServeURLRequest(cracked_url));
|
| -
|
| - // A request for an external mount point should be served.
|
| - const std::string kExternalMountName = "ext_mount";
|
| - ASSERT_TRUE(ExternalMountPoints::GetSystemInstance()->RegisterFileSystem(
|
| - kExternalMountName,
|
| - storage::kFileSystemTypeDrive,
|
| - FileSystemMountOption(),
|
| - base::FilePath()));
|
| - cracked_url = context->CrackURL(
|
| - CreateRawFileSystemURL("external", kExternalMountName));
|
| - EXPECT_EQ(storage::kFileSystemTypeExternal, cracked_url.mount_type());
|
| - EXPECT_TRUE(context->CanServeURLRequest(cracked_url));
|
| -
|
| - ExternalMountPoints::GetSystemInstance()->RevokeFileSystem(
|
| - kExternalMountName);
|
| - IsolatedContext::GetInstance()->RevokeFileSystem(isolated_fs_id);
|
| -}
|
| -
|
| -// Ensures that a backend exists for each common isolated file system type.
|
| -// See http://crbug.com/447027
|
| -TEST_F(FileSystemContextTest, IsolatedFileSystemsTypesHandled) {
|
| - // This does not provide any "additional" file system handlers. In particular,
|
| - // on Chrome OS it does not provide chromeos::FileSystemBackend.
|
| - scoped_refptr<FileSystemContext> file_system_context(
|
| - CreateFileSystemContextForTest(nullptr));
|
| -
|
| - // Isolated file system types are handled.
|
| - EXPECT_TRUE(file_system_context->GetFileSystemBackend(
|
| - storage::kFileSystemTypeIsolated));
|
| - EXPECT_TRUE(file_system_context->GetFileSystemBackend(
|
| - storage::kFileSystemTypeDragged));
|
| - EXPECT_TRUE(file_system_context->GetFileSystemBackend(
|
| - storage::kFileSystemTypeForTransientFile));
|
| - EXPECT_TRUE(file_system_context->GetFileSystemBackend(
|
| - storage::kFileSystemTypeNativeLocal));
|
| - EXPECT_TRUE(file_system_context->GetFileSystemBackend(
|
| - storage::kFileSystemTypeNativeForPlatformApp));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace content
|
|
|