1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_util.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/firefox2_importer.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/firefox_importer_unittest_utils.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/firefox_importer_utils.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/nss_decryptor.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The following 2 tests require the use of the NSSDecryptor, on OSX this needs 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to run in a separate process, so we use a proxy object so we can share the 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// same test between platforms. 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FirefoxImporterTest, Firefox2NSS3Decryptor) { 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath nss_path; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &nss_path)); 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef OS_MACOSX 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox2_nss_mac"); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox2_nss"); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // !OS_MACOSX 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath db_path; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &db_path)); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_path = db_path.AppendASCII("firefox2_profile"); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FFUnitTestDecryptorProxy decryptor_proxy; 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(decryptor_proxy.Setup(nss_path)); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(decryptor_proxy.DecryptorInit(nss_path, db_path)); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("hello"), 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECBJ" 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "M63MpT9rtBAjMCm7qo/EhlA==")); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test UTF-16 encoding. 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(L"\x4E2D"), 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECN9" 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "OQ5ZFmhb8BAiFo1Z+fUvaIQ==")); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FirefoxImporterTest, Firefox3NSS3Decryptor) { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath nss_path; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &nss_path)); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef OS_MACOSX 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox3_nss_mac"); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox3_nss"); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // !OS_MACOSX 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath db_path; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &db_path)); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_path = db_path.AppendASCII("firefox3_profile"); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FFUnitTestDecryptorProxy decryptor_proxy; 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(decryptor_proxy.Setup(nss_path)); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(decryptor_proxy.DecryptorInit(nss_path, db_path)); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("hello"), 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECKa" 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "jtRg4qFSHBAhv9luFkXgDJA==")); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test UTF-16 encoding. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(L"\x4E2D"), 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECLW" 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "qqiccfQHWBAie74hxnULxlw==")); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FirefoxImporterTest, Firefox2BookmarkParse) { 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool result; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Tests charset. 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string charset; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseCharsetFromLine( 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<META HTTP-EQUIV=\"Content-Type\" " 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "CONTENT=\"text/html; charset=UTF-8\">", 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &charset); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("UTF-8", charset); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Escaped characters in name. 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 folder_name; 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_toolbar_folder; 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::Time folder_add_date; 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseFolderNameFromLine( 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><H3 ADD_DATE=\"1207558707\" >< >" 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch " & " ' \\ /</H3>", 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen charset, &folder_name, &is_toolbar_folder, &folder_add_date); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("< > & \" ' \\ /"), folder_name); 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_FALSE(is_toolbar_folder); 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(base::Time::FromTimeT(1207558707) == folder_add_date); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Empty name and toolbar folder attribute. 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseFolderNameFromLine( 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><H3 PERSONAL_TOOLBAR_FOLDER=\"true\"></H3>", 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen charset, &folder_name, &is_toolbar_folder, &folder_add_date); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), folder_name); 102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(is_toolbar_folder); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Unicode characters in title and shortcut. 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 title; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url, favicon; 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 shortcut; 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 post_data; 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::Time add_date; 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://chinese.site.cn/path?query=1#ref\" " 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "SHORTCUTURL=\"\xE4\xB8\xAD\">\xE4\xB8\xAD\xE6\x96\x87</A>", 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(L"\x4E2D\x6587", UTF16ToWide(title)); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://chinese.site.cn/path?query=1#ref", url.spec()); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(L"\x4E2D", UTF16ToWide(shortcut)); 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), post_data); 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(base::Time() == add_date); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // No shortcut, and url contains %22 ('"' character). 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://domain.com/?q=%22<>%22\">name</A>", 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("name"), title); 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://domain.com/?q=%22%3C%3E%22", url.spec()); 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), shortcut); 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), post_data); 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(base::Time() == add_date); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://domain.com/?g="\"\">name</A>", 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("name"), title); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://domain.com/?g=%22", url.spec()); 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), shortcut); 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), post_data); 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(base::Time() == add_date); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creation date. 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://site/\" ADD_DATE=\"1121301154\">name</A>", 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("name"), title); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(GURL("http://site/"), url); 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), shortcut); 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), post_data); 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(base::Time::FromTimeT(1121301154) == add_date); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Post-data 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://localhost:8080/test/hello.html\" ADD_DATE=\"" 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1212447159\" LAST_VISIT=\"1212447251\" LAST_MODIFIED=\"1212447248\"" 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "SHORTCUTURL=\"post\" ICON=\"data:\" POST_DATA=\"lname%3D%25s\"" 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "LAST_CHARSET=\"UTF-8\" ID=\"rdf:#$weKaR3\">Test Post keyword</A>", 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Test Post keyword"), title); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://localhost:8080/test/hello.html", url.spec()); 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("post"), shortcut); 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("lname%3D%25s"), post_data); 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(base::Time::FromTimeT(1212447159) == add_date); 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invalid case. 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://domain.com/?q=%22", 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(result); 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), title); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("", url.spec()); 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), shortcut); 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), post_data); 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(base::Time() == add_date); 17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Epiphany format. 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen result = Firefox2Importer::ParseMinimumBookmarkFromLine( 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "<dt><a href=\"http://www.google.com/\">Google</a></dt>", 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen charset, &title, &url); 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(result); 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Google"), title); 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("http://www.google.com/", url.spec()); 18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(FirefoxImporterTest, Firefox2BookmarkFileImport) { 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath path; 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen path = path.AppendASCII("firefox2_importer"); 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Import all bookmarks from a file which include an empty folder entry. 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath empty_folder_path = path.AppendASCII("empty_folder.html"); 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::set<GURL> default_urls; 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen string16 first_folder_name; 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Firefox2Importer* importer = new Firefox2Importer(); 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer->AddRef(); 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<ProfileWriter::BookmarkEntry> bookmarks; 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer->ImportBookmarksFile(empty_folder_path, default_urls, false, 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen first_folder_name, importer, &bookmarks, 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NULL, NULL); 20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(3, static_cast<int>(bookmarks.size())); 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<ProfileWriter::BookmarkEntry>::iterator it; 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ProfileWriter::BookmarkEntry entry; 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<string16>::iterator path_it; 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (bookmarks.size() == 3) { 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen it = bookmarks.begin(); 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen entry = *it++; 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Empty"), entry.title); 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(entry.is_folder); 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(base::Time::FromTimeT(1295938143), entry.creation_time); 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2, static_cast<int>(entry.path.size())); 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (entry.path.size() == 2) { 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen path_it = entry.path.begin(); 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), *path_it++); 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Empty's Parent"), *path_it); 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen entry = *it++; 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("[Tamura Yukari.com]"), entry.title); 22172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(entry.is_folder); 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(base::Time::FromTimeT(1234567890), entry.creation_time); 22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2, static_cast<int>(entry.path.size())); 22472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (entry.path.size() == 2) { 22572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen path_it = entry.path.begin(); 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), *path_it++); 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Not Empty"), *path_it); 22872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("http://www.tamurayukari.com/", entry.url.spec()); 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen entry = *it++; 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Google"), entry.title); 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(entry.is_folder); 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(base::Time::FromTimeT(0000000000), entry.creation_time); 23572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2, static_cast<int>(entry.path.size())); 23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (entry.path.size() == 2) { 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen path_it = entry.path.begin(); 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), *path_it++); 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Not Empty But Default"), *path_it); 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("http://www.google.com/", entry.url.spec()); 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Import non-default bookmarks from a file. 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bookmarks.clear(); 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default_urls.insert(GURL("http://www.google.com/")); 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer->ImportBookmarksFile(empty_folder_path, default_urls, false, 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen first_folder_name, importer, &bookmarks, 24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NULL, NULL); 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2, static_cast<int>(bookmarks.size())); 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (bookmarks.size() == 2) { 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen it = bookmarks.begin(); 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen entry = *it++; 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Empty"), entry.title); 25572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(entry.is_folder); 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(base::Time::FromTimeT(1295938143), entry.creation_time); 25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2, static_cast<int>(entry.path.size())); 25872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (entry.path.size() == 2) { 25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen path_it = entry.path.begin(); 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), *path_it++); 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Empty's Parent"), *path_it); 26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen entry = *it++; 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("[Tamura Yukari.com]"), entry.title); 26672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(entry.is_folder); 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(base::Time::FromTimeT(1234567890), entry.creation_time); 26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2, static_cast<int>(entry.path.size())); 26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (entry.path.size() == 2) { 27072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen path_it = entry.path.begin(); 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16(""), *path_it++); 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Not Empty"), *path_it); 27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("http://www.tamurayukari.com/", entry.url.spec()); 27572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 27672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 27772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Import Epiphany bookmarks from a file 27872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FilePath epiphany_path = path.AppendASCII("epiphany.html"); 27972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bookmarks.clear(); 28072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default_urls.clear(); 28172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer->ImportBookmarksFile(epiphany_path, default_urls, false, 28272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen first_folder_name, importer, &bookmarks, 28372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NULL, NULL); 28472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(2, static_cast<int>(bookmarks.size())); 28572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (bookmarks.size() == 2) { 28672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen it = bookmarks.begin(); 28772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen entry = *it++; 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("[Tamura Yukari.com]"), entry.title); 28972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("http://www.tamurayukari.com/", entry.url.spec()); 29072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(0, static_cast<int>(entry.path.size())); 29172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen entry = *it++; 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(ASCIIToUTF16("Google"), entry.title); 29372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ("http://www.google.com/", entry.url.spec()); 29472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(0, static_cast<int>(entry.path.size())); 29572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 29672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 29772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen importer->Release(); 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 299