firefox_importer_unittest.cc revision 731df977c0511bca2206b5f333555b1205ff1f43
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2008 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 Murdochusing base::Time; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The following 2 tests require the use of the NSSDecryptor, on OSX this needs 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to run in a separate process, so we use a proxy object so we can share the 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// same test between platforms. 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FirefoxImporterTest, Firefox2NSS3Decryptor) { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath nss_path; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &nss_path)); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef OS_MACOSX 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox2_nss_mac"); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox2_nss"); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // !OS_MACOSX 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath db_path; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &db_path)); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_path = db_path.AppendASCII("firefox2_profile"); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FFUnitTestDecryptorProxy decryptor_proxy; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(decryptor_proxy.Setup(nss_path.ToWStringHack())); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(decryptor_proxy.DecryptorInit(nss_path.ToWStringHack(), 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_path.ToWStringHack())); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("hello"), 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECBJ" 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "M63MpT9rtBAjMCm7qo/EhlA==")); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test UTF-16 encoding. 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(L"\x4E2D"), 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECN9" 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "OQ5ZFmhb8BAiFo1Z+fUvaIQ==")); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FirefoxImporterTest, Firefox3NSS3Decryptor) { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath nss_path; 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &nss_path)); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef OS_MACOSX 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox3_nss_mac"); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch nss_path = nss_path.AppendASCII("firefox3_nss"); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // !OS_MACOSX 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath db_path; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &db_path)); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_path = db_path.AppendASCII("firefox3_profile"); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FFUnitTestDecryptorProxy decryptor_proxy; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(decryptor_proxy.Setup(nss_path.ToWStringHack())); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(decryptor_proxy.DecryptorInit(nss_path.ToWStringHack(), 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_path.ToWStringHack())); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("hello"), 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECKa" 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "jtRg4qFSHBAhv9luFkXgDJA==")); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test UTF-16 encoding. 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(L"\x4E2D"), 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decryptor_proxy.Decrypt("MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECLW" 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "qqiccfQHWBAie74hxnULxlw==")); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(FirefoxImporterTest, Firefox2BookmarkParse) { 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool result; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Tests charset. 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string charset; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseCharsetFromLine( 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<META HTTP-EQUIV=\"Content-Type\" " 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "CONTENT=\"text/html; charset=UTF-8\">", 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &charset); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("UTF-8", charset); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Escaped characters in name. 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring folder_name; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_toolbar_folder; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseFolderNameFromLine( 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><H3 ADD_DATE=\"1207558707\" >< >" 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch " & " ' \\ /</H3>", 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &folder_name, &is_toolbar_folder); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"< > & \" ' \\ /", folder_name); 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_FALSE(is_toolbar_folder); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Empty name and toolbar folder attribute. 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseFolderNameFromLine( 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><H3 PERSONAL_TOOLBAR_FOLDER=\"true\"></H3>", 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &folder_name, &is_toolbar_folder); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", folder_name); 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(is_toolbar_folder); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Unicode characters in title and shortcut. 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring title; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url, favicon; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring shortcut; 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring post_data; 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Time add_date; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://chinese.site.cn/path?query=1#ref\" " 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "SHORTCUTURL=\"\xE4\xB8\xAD\">\xE4\xB8\xAD\xE6\x96\x87</A>", 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"\x4E2D\x6587", title); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://chinese.site.cn/path?query=1#ref", url.spec()); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"\x4E2D", shortcut); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", post_data); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(Time() == add_date); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // No shortcut, and url contains %22 ('"' character). 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://domain.com/?q=%22<>%22\">name</A>", 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"name", title); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://domain.com/?q=%22%3C%3E%22", url.spec()); 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", shortcut); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", post_data); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(Time() == add_date); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://domain.com/?g="\"\">name</A>", 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"name", title); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://domain.com/?g=%22", url.spec()); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", shortcut); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", post_data); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(Time() == add_date); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creation date. 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://site/\" ADD_DATE=\"1121301154\">name</A>", 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"name", title); 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(GURL("http://site/"), url); 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", shortcut); 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", post_data); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(Time::FromTimeT(1121301154) == add_date); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Post-data 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://localhost:8080/test/hello.html\" ADD_DATE=\"" 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1212447159\" LAST_VISIT=\"1212447251\" LAST_MODIFIED=\"1212447248\"" 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "SHORTCUTURL=\"post\" ICON=\"data:\" POST_DATA=\"lname%3D%25s\"" 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "LAST_CHARSET=\"UTF-8\" ID=\"rdf:#$weKaR3\">Test Post keyword</A>", 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(result); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"Test Post keyword", title); 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://localhost:8080/test/hello.html", url.spec()); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"post", shortcut); 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"lname%3D%25s", post_data); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(Time::FromTimeT(1212447159) == add_date); 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invalid case. 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = Firefox2Importer::ParseBookmarkFromLine( 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "<DT><A HREF=\"http://domain.com/?q=%22", 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch charset, &title, &url, &favicon, &shortcut, &add_date, &post_data); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(result); 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", title); 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("", url.spec()); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", shortcut); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", post_data); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(Time() == add_date); 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 180