1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/strings/string_piece.h" 6 #include "base/strings/utf_string_conversions.h" 7 #include "testing/gtest/include/gtest/gtest.h" 8 #include "webkit/browser/database/database_util.h" 9 #include "webkit/common/database/database_identifier.h" 10 11 using webkit_database::DatabaseUtil; 12 13 static void TestVfsFilePath(bool expected_result, 14 const char* vfs_file_name, 15 const char* expected_origin_identifier = "", 16 const char* expected_database_name = "", 17 const char* expected_sqlite_suffix = "") { 18 std::string origin_identifier; 19 base::string16 database_name; 20 base::string16 sqlite_suffix; 21 EXPECT_EQ(expected_result, 22 DatabaseUtil::CrackVfsFileName(ASCIIToUTF16(vfs_file_name), 23 &origin_identifier, 24 &database_name, 25 &sqlite_suffix)); 26 EXPECT_EQ(expected_origin_identifier, origin_identifier); 27 EXPECT_EQ(ASCIIToUTF16(expected_database_name), database_name); 28 EXPECT_EQ(ASCIIToUTF16(expected_sqlite_suffix), sqlite_suffix); 29 } 30 31 static GURL ToAndFromOriginIdentifier(const GURL origin_url) { 32 std::string id = webkit_database::GetIdentifierFromOrigin(origin_url); 33 return webkit_database::GetOriginFromIdentifier(id); 34 } 35 36 static void TestValidOriginIdentifier(bool expected_result, 37 const std::string& id) { 38 EXPECT_EQ(expected_result, 39 DatabaseUtil::IsValidOriginIdentifier(id)); 40 } 41 42 namespace webkit_database { 43 44 // Test DatabaseUtil::CrackVfsFilePath on various inputs. 45 TEST(DatabaseUtilTest, CrackVfsFilePathTest) { 46 TestVfsFilePath(true, "origin/#", "origin", "", ""); 47 TestVfsFilePath(true, "origin/#suffix", "origin", "", "suffix"); 48 TestVfsFilePath(true, "origin/db_name#", "origin", "db_name", ""); 49 TestVfsFilePath(true, "origin/db_name#suffix", "origin", "db_name", "suffix"); 50 TestVfsFilePath(false, "origindb_name#"); 51 TestVfsFilePath(false, "origindb_name#suffix"); 52 TestVfsFilePath(false, "origin/db_name"); 53 TestVfsFilePath(false, "origin#db_name/suffix"); 54 TestVfsFilePath(false, "/db_name#"); 55 TestVfsFilePath(false, "/db_name#suffix"); 56 } 57 58 TEST(DatabaseUtilTest, OriginIdentifiers) { 59 const GURL kFileOrigin(GURL("file:///").GetOrigin()); 60 const GURL kHttpOrigin(GURL("http://bar/").GetOrigin()); 61 EXPECT_EQ(kFileOrigin, ToAndFromOriginIdentifier(kFileOrigin)); 62 EXPECT_EQ(kHttpOrigin, ToAndFromOriginIdentifier(kHttpOrigin)); 63 } 64 65 TEST(DatabaseUtilTest, IsValidOriginIdentifier) { 66 TestValidOriginIdentifier(true, "http_bar_0"); 67 TestValidOriginIdentifier(true, ""); 68 TestValidOriginIdentifier(false, "bad..id"); 69 TestValidOriginIdentifier(false, "bad/id"); 70 TestValidOriginIdentifier(false, "bad\\id"); 71 TestValidOriginIdentifier(false, std::string("bad\0id", 6)); 72 } 73 74 } // namespace webkit_database 75