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