Chromium Code Reviews| Index: webkit/chromeos/fileapi/cros_mount_point_provider_unittest.cc |
| diff --git a/webkit/chromeos/fileapi/cros_mount_point_provider_unittest.cc b/webkit/chromeos/fileapi/cros_mount_point_provider_unittest.cc |
| index 22f74df023c44b7eb7120ba68d3b23dc2b6e8e7b..3971e221b06e7b30276173f74d67bffc264b26cd 100644 |
| --- a/webkit/chromeos/fileapi/cros_mount_point_provider_unittest.cc |
| +++ b/webkit/chromeos/fileapi/cros_mount_point_provider_unittest.cc |
| @@ -7,19 +7,33 @@ |
| #include <set> |
| #include "base/files/file_path.h" |
| +#include "base/memory/scoped_vector.h" |
| +#include "base/message_loop.h" |
| +#include "base/stringprintf.h" |
| #include "chromeos/dbus/cros_disks_client.h" |
| #include "googleurl/src/url_util.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "webkit/fileapi/external_mount_points.h" |
| #include "webkit/fileapi/file_permission_policy.h" |
| +#include "webkit/fileapi/file_system_context.h" |
| +#include "webkit/fileapi/file_system_mount_point_provider.h" |
| +#include "webkit/fileapi/file_system_task_runners.h" |
| #include "webkit/fileapi/file_system_url.h" |
| #include "webkit/fileapi/isolated_context.h" |
| +#include "webkit/fileapi/mock_file_system_options.h" |
| #include "webkit/quota/mock_special_storage_policy.h" |
| #define FPL(x) FILE_PATH_LITERAL(x) |
| +#if defined(FILE_PATH_USES_DRIVE_LETTERS) |
| +#define DRIVE FPL("C:") |
| +#else |
| +#define DRIVE |
| +#endif |
| + |
| using fileapi::ExternalMountPoints; |
| using fileapi::FileSystemURL; |
| +using fileapi::FileSystemContext; |
| namespace { |
| @@ -32,6 +46,51 @@ FileSystemURL CreateFileSystemURL(const std::string& extension, |
| base::FilePath::FromUTF8Unsafe(path)); |
| } |
| +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); |
| +} |
| + |
| +fileapi::FileSystemContext* CreateFileSystemContextForTest( |
| + ExternalMountPoints* external_mount_points) { |
| + ScopedVector<fileapi::FileSystemMountPointProvider> additional_providers; |
| + additional_providers.push_back( |
| + new chromeos::CrosMountPointProvider( |
| + make_scoped_refptr(new quota::MockSpecialStoragePolicy()), |
| + external_mount_points, |
| + ExternalMountPoints::GetSystemInstance())); |
| + std::vector<fileapi::MountPoints*> additional_mount_points; |
| + additional_mount_points.push_back(external_mount_points); |
| + return new fileapi::FileSystemContext( |
| + fileapi::FileSystemTaskRunners::CreateMockTaskRunners(), |
| + NULL, |
| + additional_providers.Pass(), |
| + additional_mount_points, |
| + base::FilePath(FILE_PATH_LITERAL("dummy")), |
| + fileapi::CreateAllowFileAccessOptions()); |
| +} |
| + |
| +void ExpectFileSystemURLMatches(const fileapi::FileSystemURL& url, |
| + const GURL& expect_origin, |
| + fileapi::FileSystemType expect_mount_type, |
| + fileapi::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()); |
| +} |
| + |
| TEST(CrosMountPointProviderTest, DefaultMountPoints) { |
| scoped_refptr<quota::SpecialStoragePolicy> storage_policy = |
| new quota::MockSpecialStoragePolicy(); |
| @@ -299,4 +358,44 @@ TEST(CrosMountPointProvider, GetVirtualPathConflictWithSystemPoints) { |
| } |
| } |
| +TEST(CrosMountPointProvider, CrosMountPonitProviderKeepsMountPointsAlive) { |
|
tzik
2013/04/17 12:06:04
s/Ponit/Point/
kinuko
2013/04/17 14:27:29
Removed these CrOS changes from this patch.
|
| + scoped_refptr<ExternalMountPoints> mount_points = |
| + ExternalMountPoints::CreateRefCounted(); |
| + |
| + // Register system external mount point. |
| + ASSERT_TRUE(mount_points->RegisterFileSystem( |
| + "system", |
| + fileapi::kFileSystemTypeNativeLocal, |
| + base::FilePath(DRIVE FPL("/test/sys/")))); |
| + |
| + base::MessageLoop message_loop; |
| + scoped_refptr<fileapi::FileSystemContext> file_system_context( |
| + CreateFileSystemContextForTest(mount_points.get())); |
| + |
| + // Release a MountPoints reference created in the test. |
| + mount_points = NULL; |
| + |
| + // CrosMountPointProvider 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")); |
| + |
| + const char kTestOrigin[] = "http://chromium.org/"; |
| + ExpectFileSystemURLMatches( |
| + cracked_external, |
| + GURL(kTestOrigin), |
| + fileapi::kFileSystemTypeExternal, |
| + fileapi::kFileSystemTypeNativeLocal, |
| + base::FilePath( |
| + DRIVE FPL("/test/sys/root/file")).NormalizePathSeparators(), |
| + base::FilePath(FPL("system/root/file")).NormalizePathSeparators(), |
| + "system"); |
| + |
| + file_system_context = NULL; |
| + message_loop.RunUntilIdle(); |
| + |
| + // No need to revoke the registered filesystem since |mount_points| lifetime |
| + // is bound to this test. |
| +} |
| + |
| } // namespace |