15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_url.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/fileapi/file_system_types.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/fileapi/file_system_util.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define FPL FILE_PATH_LITERAL
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(FILE_PATH_USES_DRIVE_LETTERS)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define DRIVE FPL("C:")
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define DRIVE FPL("/a/")
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::FileSystemURL;
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kFileSystemTypeExternal;
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kFileSystemTypeIsolated;
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kFileSystemTypePersistent;
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kFileSystemTypeTemporary;
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::VirtualPath;
275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace content {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileSystemURL CreateFileSystemURL(const std::string& url_string) {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FileSystemURL url = FileSystemURL::CreateForTest(GURL(url_string));
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_TRUE(url.type() != kFileSystemTypeExternal &&
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              url.type() != kFileSystemTypeIsolated);
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return url;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string NormalizedUTF8Path(const base::FilePath& path) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return path.NormalizePathSeparators().AsUTF8Unsafe();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, ParsePersistent) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemURL url = CreateFileSystemURL(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     "filesystem:http://chromium.org/persistent/directory/file");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(url.is_valid());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://chromium.org/", url.origin().spec());
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kFileSystemTypePersistent, url.type());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("file"), VirtualPath::BaseName(url.path()).value());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("directory"), url.path().DirName().value());
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, ParseTemporary) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemURL url = CreateFileSystemURL(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "filesystem:http://chromium.org/temporary/directory/file");
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(url.is_valid());
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://chromium.org/", url.origin().spec());
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kFileSystemTypeTemporary, url.type());
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("file"), VirtualPath::BaseName(url.path()).value());
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("directory"), url.path().DirName().value());
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, EnsureFilePathIsRelative) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemURL url = CreateFileSystemURL(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "filesystem:http://chromium.org/temporary/////directory/file");
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(url.is_valid());
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("http://chromium.org/", url.origin().spec());
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kFileSystemTypeTemporary, url.type());
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("file"), VirtualPath::BaseName(url.path()).value());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("directory"), url.path().DirName().value());
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(url.path().IsAbsolute());
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, RejectBadSchemes) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL("http://chromium.org/").is_valid());
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL("https://chromium.org/").is_valid());
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL("file:///foo/bar").is_valid());
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL("foobar:///foo/bar").is_valid());
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, UnescapePath) {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemURL url = CreateFileSystemURL(
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "filesystem:http://chromium.org/persistent/%7Echromium/space%20bar");
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(url.is_valid());
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("space bar"), VirtualPath::BaseName(url.path()).value());
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(FPL("~chromium"), url.path().DirName().value());
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, RejectBadType) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "filesystem:http://c.org/foobar/file").is_valid());
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL(
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "filesystem:http://c.org/temporaryfoo/file").is_valid());
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, RejectMalformedURL) {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL("filesystem:///foobar/file").is_valid());
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL("filesystem:foobar/file").is_valid());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, CompareURLs) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL urls[] = {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:http://chromium.org/temporary/dir a/file a"),
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:http://chromium.org/temporary/dir a/file a"),
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:http://chromium.org/temporary/dir a/file b"),
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:http://chromium.org/temporary/dir a/file aa"),
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:http://chromium.org/temporary/dir b/file a"),
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:http://chromium.org/temporary/dir aa/file b"),
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:http://chromium.com/temporary/dir a/file a"),
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("filesystem:https://chromium.org/temporary/dir a/file a")
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemURL::Comparator compare;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(urls); ++i) {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t j = 0; j < arraysize(urls); ++j) {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SCOPED_TRACE(testing::Message() << i << " < " << j);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_EQ(urls[i] < urls[j],
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                compare(FileSystemURL::CreateForTest(urls[i]),
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        FileSystemURL::CreateForTest(urls[j])));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FileSystemURL a = CreateFileSystemURL(
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "filesystem:http://chromium.org/temporary/dir a/file a");
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FileSystemURL b = CreateFileSystemURL(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "filesystem:http://chromium.org/persistent/dir a/file a");
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(a.type() < b.type(), compare(a, b));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(b.type() < a.type(), compare(b, a));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, IsParent) {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string root1 = GetFileSystemRootURI(
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("http://example.com"), kFileSystemTypeTemporary).spec();
13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const std::string root2 = GetFileSystemRootURI(
13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GURL("http://example.com"), kFileSystemTypePersistent).spec();
13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const std::string root3 = GetFileSystemRootURI(
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL("http://chromium.org"), kFileSystemTypeTemporary).spec();
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string parent("dir");
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string child("dir/child");
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string other("other");
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True cases.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(CreateFileSystemURL(root1 + parent).IsParent(
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateFileSystemURL(root1 + child)));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(CreateFileSystemURL(root2 + parent).IsParent(
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateFileSystemURL(root2 + child)));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // False cases: the path is not a child.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL(root1 + parent).IsParent(
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateFileSystemURL(root1 + other)));
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL(root1 + parent).IsParent(
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateFileSystemURL(root1 + parent)));
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL(root1 + child).IsParent(
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateFileSystemURL(root1 + parent)));
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // False case: different types.
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL(root1 + parent).IsParent(
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CreateFileSystemURL(root2 + child)));
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // False case: different origins.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(CreateFileSystemURL(root1 + parent).IsParent(
16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      CreateFileSystemURL(root3 + child)));
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
168424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST(FileSystemURLTest, ToGURL) {
169424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_TRUE(FileSystemURL().ToGURL().is_empty());
170424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const char* kTestURL[] = {
171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    "filesystem:http://chromium.org/persistent/directory/file0",
172424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    "filesystem:http://chromium.org/temporary/directory/file1",
173424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    "filesystem:http://chromium.org/isolated/directory/file2",
174424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    "filesystem:http://chromium.org/external/directory/file2",
175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    "filesystem:http://chromium.org/test/directory/file3",
176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    "filesystem:http://chromium.org/test/plus%2B/space%20/colon%3A",
177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  };
178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kTestURL); ++i) {
180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    EXPECT_EQ(
181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        kTestURL[i],
182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        FileSystemURL::CreateForTest(GURL(kTestURL[i])).ToGURL().spec());
183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
185424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(FileSystemURLTest, DebugString) {
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL kOrigin("http://example.com");
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const base::FilePath kPath(FPL("dir/file"));
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const FileSystemURL kURL1 = FileSystemURL::CreateForTest(
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      kOrigin, kFileSystemTypeTemporary, kPath);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("filesystem:http://example.com/temporary/" +
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            NormalizedUTF8Path(kPath),
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            kURL1.DebugString());
19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST(FileSystemURLTest, IsInSameFileSystem) {
19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FileSystemURL url_foo_temp_a = FileSystemURL::CreateForTest(
19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GURL("http://foo"), kFileSystemTypeTemporary,
20090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath::FromUTF8Unsafe("a"));
20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FileSystemURL url_foo_temp_b = FileSystemURL::CreateForTest(
20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GURL("http://foo"), kFileSystemTypeTemporary,
20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath::FromUTF8Unsafe("b"));
20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FileSystemURL url_foo_perm_a = FileSystemURL::CreateForTest(
20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GURL("http://foo"), kFileSystemTypePersistent,
20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath::FromUTF8Unsafe("a"));
20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FileSystemURL url_bar_temp_a = FileSystemURL::CreateForTest(
20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GURL("http://bar"), kFileSystemTypeTemporary,
20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath::FromUTF8Unsafe("a"));
21090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FileSystemURL url_bar_perm_a = FileSystemURL::CreateForTest(
21190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GURL("http://bar"), kFileSystemTypePersistent,
21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath::FromUTF8Unsafe("a"));
21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_TRUE(url_foo_temp_a.IsInSameFileSystem(url_foo_temp_a));
21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_TRUE(url_foo_temp_a.IsInSameFileSystem(url_foo_temp_b));
21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_FALSE(url_foo_temp_a.IsInSameFileSystem(url_foo_perm_a));
21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_FALSE(url_foo_temp_a.IsInSameFileSystem(url_bar_temp_a));
21890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_FALSE(url_foo_temp_a.IsInSameFileSystem(url_bar_perm_a));
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace content
222