13f50c38dc070f4bb515c1b64450dae14f316474eKristian 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 "build/build_config.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// The order of these includes is important. 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <windows.h> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <unknwn.h> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <intshcut.h> 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <pstore.h> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <urlhist.h> 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <shlguid.h> 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "app/win/scoped_com_initializer.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/compiler_specific.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h" 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/stl_util-inl.h" 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_util.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h" 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history_types.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/importer_bridge.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/importer_data_types.h" 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/importer_host.h" 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/importer_progress_observer.h" 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/search_engines/template_url.h" 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "testing/gtest/include/gtest/gtest.h" 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/password_form.h" 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/win/scoped_comptr.h" 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/win/windows_version.h" 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/importer/ie_importer.h" 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/password_manager/ie7_password.h" 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(estade): some of these are disabled on mac. http://crbug.com/48007 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE(x) DISABLED_##x 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE(x) x 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ImporterTest : public testing::Test { 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ImporterTest() 56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : ui_thread_(BrowserThread::UI, &message_loop_), 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick file_thread_(BrowserThread::FILE, &message_loop_) {} 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates a new profile in a new subdirectory in the temp directory. 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FilePath test_path = temp_dir_.path().AppendASCII("ImporterTest"); 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen file_util::Delete(test_path, true); 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen file_util::CreateDirectory(test_path); 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen profile_path_ = test_path.AppendASCII("profile"); 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen app_path_ = test_path.AppendASCII("app"); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::CreateDirectory(app_path_); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Firefox3xImporterTest(std::string profile_dir, 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer::ImporterProgressObserver* observer, 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ProfileWriter* writer, 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool import_search_plugins) { 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath data_path; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_path = data_path.AppendASCII(profile_dir); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::CopyDirectory(data_path, profile_path_, true)); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_path = data_path.AppendASCII("firefox3_nss"); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::CopyDirectory(data_path, profile_path_, false)); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath search_engine_path = app_path_; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch search_engine_path = search_engine_path.AppendASCII("searchplugins"); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::CreateDirectory(search_engine_path); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (import_search_plugins) { 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_path = data_path.AppendASCII("firefox3_searchplugins"); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!file_util::PathExists(data_path)) { 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(maruel): Create search test data that we can open source! 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << L"Missing internal test data"; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::CopyDirectory(data_path, 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch search_engine_path, false)); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop* loop = MessageLoop::current(); 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer::SourceProfile source_profile; 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.importer_type = importer::FIREFOX3; 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.app_path = app_path_; 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.source_path = profile_path_; 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<ImporterHost> host(new ImporterHost); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host->SetObserver(observer); 105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int items = importer::HISTORY | importer::PASSWORDS | importer::FAVORITES; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (import_search_plugins) 107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen items = items | importer::SEARCH_ENGINES; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch loop->PostTask(FROM_HERE, NewRunnableMethod(host.get(), 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &ImporterHost::StartImportSettings, source_profile, 110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch static_cast<Profile*>(NULL), items, make_scoped_refptr(writer), true)); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch loop->Run(); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ScopedTempDir temp_dir_; 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoopForUI message_loop_; 116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread file_thread_; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath profile_path_; 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath app_path_; 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kMaxPathSize = 5; 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct BookmarkList { 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const bool in_toolbar; 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const size_t path_size; 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const wchar_t* path[kMaxPathSize]; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const wchar_t* title; 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* url; 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Returns true if the |entry| is in the |list|. 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool FindBookmarkEntry(const ProfileWriter::BookmarkEntry& entry, 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const BookmarkList* list, int list_size) { 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (int i = 0; i < list_size; ++i) { 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (list[i].in_toolbar == entry.in_toolbar && 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch list[i].path_size == entry.path.size() && 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch list[i].url == entry.url.spec() && 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WideToUTF16Hack(list[i].title) == entry.title) { 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool equal = true; 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t k = 0; k < list[i].path_size; ++k) 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (WideToUTF16Hack(list[i].path[k]) != entry.path[k]) { 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch equal = false; 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (equal) 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const BookmarkList kIEBookmarks[] = { 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {true, 0, {}, 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"TheLink", 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.links-thelink.com/"}, 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {true, 1, {L"SubFolderOfLinks"}, 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"SubLink", 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.links-sublink.com/"}, 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"Google Home Page", 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.google.com/"}, 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"TheLink", 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.links-thelink.com/"}, 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 1, {L"SubFolder"}, 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"Title", 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.link.com/"}, 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"WithPortAndQuery", 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://host:8080/cgi?q=query"}, 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 1, {L"a"}, 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"\x4E2D\x6587", 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://chinese-title-favorite/"}, 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const wchar_t* kIEIdentifyUrl = 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://A79029D6-753E-4e27-B807-3D46AB1545DF.com:8080/path?key=value"; 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const wchar_t* kIEIdentifyTitle = 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"Unittest GUID"; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TestObserver : public ProfileWriter, 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public importer::ImporterProgressObserver { 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestObserver() : ProfileWriter(NULL) { 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_count_ = 0; 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_count_ = 0; 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_count_ = 0; 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // importer::ImporterProgressObserver: 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportStarted() OVERRIDE {} 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemStarted(importer::ImportItem item) OVERRIDE {} 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemEnded(importer::ImportItem item) OVERRIDE {} 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportEnded() OVERRIDE { 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Quit(); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(arraysize(kIEBookmarks), bookmark_count_); 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, history_count_); 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if 0 // This part of the test is disabled. See bug #2466 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (base::win::GetVersion() >= base::win::VERSION_VISTA) 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, password_count_); 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, password_count_); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool BookmarkModelIsLoaded() const { 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Profile is ready for writing. 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool TemplateURLModelIsLoaded() const { 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void AddPasswordForm(const webkit_glue::PasswordForm& form) { 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Importer should obtain this password form only. 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(GURL("http://localhost:8080/security/index.htm"), form.origin); 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://localhost:8080/", form.signon_realm); 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"user", form.username_element); 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"1", form.username_value); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"", form.password_element); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"2", form.password_value); 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("", form.action.spec()); 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++password_count_; 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void AddHistoryPage(const std::vector<history::URLRow>& page, 2313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick history::VisitSource visit_source) { 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Importer should read the specified URL. 2333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (size_t i = 0; i < page.size(); ++i) { 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (page[i].title() == kIEIdentifyTitle && 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch page[i].url() == GURL(kIEIdentifyUrl)) 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++history_count_; 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(history::SOURCE_IE_IMPORTED, visit_source); 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void AddBookmarkEntry(const std::vector<BookmarkEntry>& bookmark, 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& first_folder_name, 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int options) { 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Importer should import the IE Favorites folder the same as the list. 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < bookmark.size(); ++i) { 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (FindBookmarkEntry(bookmark[i], kIEBookmarks, 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arraysize(kIEBookmarks))) 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++bookmark_count_; 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void AddKeyword(std::vector<TemplateURL*> template_url, 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int default_keyword_index) { 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(jcampan): bug 1169230: we should test keyword importing for IE. 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // In order to do that we'll probably need to mock the Windows registry. 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch STLDeleteContainerPointers(template_url.begin(), template_url.end()); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~TestObserver() {} 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t bookmark_count_; 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t history_count_; 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t password_count_; 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool CreateUrlFile(std::wstring file, std::wstring url) { 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::win::ScopedComPtr<IUniformResourceLocator> locator; 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HRESULT result = locator.CreateInstance(CLSID_InternetShortcut, NULL, 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CLSCTX_INPROC_SERVER); 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (FAILED(result)) 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::win::ScopedComPtr<IPersistFile> persist_file; 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = persist_file.QueryFrom(locator); 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (FAILED(result)) 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = locator->SetURL(url.c_str(), 0); 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (FAILED(result)) 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = persist_file->Save(file.c_str(), TRUE); 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (FAILED(result)) 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ClearPStoreType(IPStore* pstore, const GUID* type, const GUID* subtype) { 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::win::ScopedComPtr<IEnumPStoreItems, NULL> item; 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HRESULT result = pstore->EnumItems(0, type, subtype, 0, item.Receive()); 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (result == PST_E_OK) { 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch wchar_t* item_name; 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch while (SUCCEEDED(item->Next(1, &item_name, 0))) { 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pstore->DeleteItem(0, type, subtype, item_name, NULL, 0); 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CoTaskMemFree(item_name); 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pstore->DeleteSubtype(0, type, subtype, 0); 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pstore->DeleteType(0, type, 0); 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WritePStore(IPStore* pstore, const GUID* type, const GUID* subtype) { 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch struct PStoreItem { 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch wchar_t* name; 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int data_size; 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch char* data; 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } items[] = { 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {L"http://localhost:8080/security/index.htm#ref:StringData", 8, 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x31\x00\x00\x00\x32\x00\x00\x00"}, 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {L"http://localhost:8080/security/index.htm#ref:StringIndex", 20, 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00" 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x00\x00\x2f\x00\x74\x00\x01\x00\x00\x00"}, 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {L"user:StringData", 4, 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x31\x00\x00\x00"}, 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {L"user:StringIndex", 20, 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x57\x49\x43\x4b\x18\x00\x00\x00\x01\x00" 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x00\x00\x2f\x00\x74\x00\x00\x00\x00\x00"}, 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (int i = 0; i < arraysize(items); ++i) { 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HRESULT res = pstore->WriteItem(0, type, subtype, items[i].name, 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch items[i].data_size, reinterpret_cast<BYTE*>(items[i].data), 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NULL, 0, 0); 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(res == PST_E_OK); 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ImporterTest, IEImporter) { 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets up a favorites folder. 3293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen app::win::ScopedCOMInitializer com_init; 330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::wstring path = temp_dir_.path().AppendASCII("Favorites").value(); 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateDirectory(path.c_str(), NULL); 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateDirectory((path + L"\\SubFolder").c_str(), NULL); 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateDirectory((path + L"\\Links").c_str(), NULL); 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateDirectory((path + L"\\Links\\SubFolderOfLinks").c_str(), NULL); 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateDirectory((path + L"\\\x0061").c_str(), NULL); 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(CreateUrlFile(path + L"\\Google Home Page.url", 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://www.google.com/")); 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(CreateUrlFile(path + L"\\SubFolder\\Title.url", 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://www.link.com/")); 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(CreateUrlFile(path + L"\\TheLink.url", 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://www.links-thelink.com/")); 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(CreateUrlFile(path + L"\\WithPortAndQuery.url", 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://host:8080/cgi?q=query")); 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(CreateUrlFile(path + L"\\\x0061\\\x4E2D\x6587.url", 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://chinese-title-favorite/")); 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(CreateUrlFile(path + L"\\Links\\TheLink.url", 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://www.links-thelink.com/")); 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(CreateUrlFile(path + L"\\Links\\SubFolderOfLinks\\SubLink.url", 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"http://www.links-sublink.com/")); 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::WriteFile(path + L"\\InvalidUrlFile.url", "x", 1); 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::WriteFile(path + L"\\PlainTextFile.txt", "x", 1); 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets up dummy password data. 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HRESULT res; 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if 0 // This part of the test is disabled. See bug #2466 356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::win::ScopedComPtr<IPStore> pstore; 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HMODULE pstorec_dll; 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GUID type = IEImporter::kUnittestGUID; 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GUID subtype = IEImporter::kUnittestGUID; 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // PStore is read-only in Windows Vista. 361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (base::win::GetVersion() < base::win::VERSION_VISTA) { 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef HRESULT (WINAPI *PStoreCreateFunc)(IPStore**, DWORD, DWORD, DWORD); 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pstorec_dll = LoadLibrary(L"pstorec.dll"); 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PStoreCreateFunc PStoreCreateInstance = 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (PStoreCreateFunc)GetProcAddress(pstorec_dll, "PStoreCreateInstance"); 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch res = PStoreCreateInstance(pstore.Receive(), 0, 0, 0); 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(res == S_OK); 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearPStoreType(pstore, &type, &subtype); 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PST_TYPEINFO type_info; 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type_info.szDisplayName = L"TestType"; 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type_info.cbSize = 8; 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pstore->CreateType(0, &type, &type_info, 0); 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pstore->CreateSubtype(0, &type, &subtype, &type_info, NULL, 0); 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WritePStore(pstore, &type, &subtype); 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets up a special history link. 379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::win::ScopedComPtr<IUrlHistoryStg2> url_history_stg2; 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch res = url_history_stg2.CreateInstance(CLSID_CUrlHistory, NULL, 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CLSCTX_INPROC_SERVER); 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(res == S_OK); 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch res = url_history_stg2->AddUrl(kIEIdentifyUrl, kIEIdentifyTitle, 0); 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(res == S_OK); 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Starts to import the above settings. 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop* loop = MessageLoop::current(); 38872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<ImporterHost> host(new ImporterHost); 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestObserver* observer = new TestObserver(); 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host->SetObserver(observer); 392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer::SourceProfile source_profile; 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.importer_type = importer::MS_IE; 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.source_path = temp_dir_.path(); 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch loop->PostTask(FROM_HERE, NewRunnableMethod(host.get(), 397dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen &ImporterHost::StartImportSettings, 398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile, 399dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static_cast<Profile*>(NULL), 400dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen importer::HISTORY | importer::PASSWORDS | importer::FAVORITES, 401dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen observer, 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch true)); 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch loop->Run(); 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cleans up. 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_history_stg2->DeleteUrl(kIEIdentifyUrl, 0); 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url_history_stg2.Release(); 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if 0 // This part of the test is disabled. See bug #2466 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (base::win::GetVersion() < base::win::VERSION_VISTA) { 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ClearPStoreType(pstore, &type, &subtype); 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Releases it befor unload the dll. 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pstore.Release(); 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FreeLibrary(pstorec_dll); 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ImporterTest, IE7Importer) { 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is the unencrypted values of my keys under Storage2. 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The passwords have been manually changed to abcdef... but the size remains 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the same. 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unsigned char data1[] = "\x0c\x00\x00\x00\x38\x00\x00\x00\x2c\x00\x00\x00" 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00\x00\x00" 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x67\x00\x72\x00\x01\x00\x00\x00\x00\x00\x00\x00" 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x00\x00\x00\x00\x4e\xfa\x67\x76\x22\x94\xc8\x01" 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x08\x00\x00\x00\x12\x00\x00\x00\x4e\xfa\x67\x76" 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x22\x94\xc8\x01\x0c\x00\x00\x00\x61\x00\x62\x00" 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00" 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x00\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00" 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00" 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x6c\x00\x00\x00"; 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unsigned char data2[] = "\x0c\x00\x00\x00\x38\x00\x00\x00\x24\x00\x00\x00" 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00\x00\x00" 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x67\x00\x72\x00\x01\x00\x00\x00\x00\x00\x00\x00" 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x00\x00\x00\x00\xa8\xea\xf4\xe5\x9f\x9a\xc8\x01" 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x09\x00\x00\x00\x14\x00\x00\x00\xa8\xea\xf4\xe5" 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x9f\x9a\xc8\x01\x07\x00\x00\x00\x61\x00\x62\x00" 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00" 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x69\x00\x00\x00\x61\x00\x62\x00\x63\x00\x64\x00" 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "\x65\x00\x66\x00\x67\x00\x00\x00"; 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<unsigned char> decrypted_data1; 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decrypted_data1.resize(arraysize(data1)); 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch memcpy(&decrypted_data1.front(), data1, sizeof(data1)); 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<unsigned char> decrypted_data2; 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch decrypted_data2.resize(arraysize(data2)); 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch memcpy(&decrypted_data2.front(), data2, sizeof(data2)); 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring password; 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring username; 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data1, &username, 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &password)); 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"abcdefgh", username); 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"abcdefghijkl", password); 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data2, &username, 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &password)); 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"abcdefghi", username); 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(L"abcdefg", password); 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // defined(OS_WIN) 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const BookmarkList kFirefox2Bookmarks[] = { 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {true, 1, {L"Folder"}, 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"On Toolbar's Subfolder", 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://on.toolbar/bookmark/folder"}, 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {true, 0, {}, 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"On Bookmark Toolbar", 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://on.toolbar/bookmark"}, 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 1, {L"Folder"}, 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"New Bookmark", 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://domain/"}, 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"<Name>", 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://domain.com/q?a=%22er%22&b=%3C%20%20%3E"}, 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"Google Home Page", 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.google.com/"}, 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"\x4E2D\x6587", 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://chinese.site.cn/path?query=1#ref"}, 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"mail", 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "mailto:username@host"}, 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct PasswordList { 492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* origin; 493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* action; 494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* realm; 495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const wchar_t* username_element; 496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const wchar_t* username; 497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const wchar_t* password_element; 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const wchar_t* password; 499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool blacklisted; 500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 501ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const PasswordList kFirefox2Passwords[] = { 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {"https://www.google.com/", "", "https://www.google.com/", 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"", L"", L"", L"", true}, 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {"http://localhost:8080/", "", "http://localhost:8080/corp.google.com", 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"", L"http", L"", L"Http1+1abcdefg", false}, 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {"http://localhost:8080/", "http://localhost:8080/", "http://localhost:8080/", 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"loginuser", L"usr", L"loginpass", L"pwd", false}, 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {"http://localhost:8080/", "http://localhost:8080/", "http://localhost:8080/", 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"loginuser", L"firefox", L"loginpass", L"firefox", false}, 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {"http://localhost/", "", "http://localhost/", 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"loginuser", L"hello", L"", L"world", false}, 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 515ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct KeywordList { 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const wchar_t* keyword; 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* url; 518ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const KeywordList kFirefox2Keywords[] = { 521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Searh plugins 522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"amazon.com", 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.amazon.com/exec/obidos/external-search/?field-keywords=" 524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "{searchTerms}&mode=blended" }, 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"answers.com", 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.answers.com/main/ntquery?s={searchTerms}&gwp=13" }, 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"search.creativecommons.org", 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://search.creativecommons.org/?q={searchTerms}" }, 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"search.ebay.com", 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://search.ebay.com/search/search.dll?query={searchTerms}&" 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "MfcISAPICommand=GetResult&ht=1&ebaytag1=ebayreg&srchdesc=n&" 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "maxRecordsReturned=300&maxRecordsPerPage=50&SortProperty=MetaEndSort" }, 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"google.com", 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.google.com/search?q={searchTerms}&ie=utf-8&oe=utf-8&aq=t" }, 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"search.yahoo.com", 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://search.yahoo.com/search?p={searchTerms}&ei=UTF-8" }, 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"flickr.com", 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.flickr.com/photos/tags/?q={searchTerms}" }, 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"imdb.com", 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.imdb.com/find?q={searchTerms}" }, 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"webster.com", 542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.webster.com/cgi-bin/dictionary?va={searchTerms}" }, 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search keywords. 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"google", "http://www.google.com/" }, 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"< > & \" ' \\ /", "http://g.cn/"}, 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const int kDefaultFirefox2KeywordIndex = 8; 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FirefoxObserver : public ProfileWriter, 551ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public importer::ImporterProgressObserver { 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FirefoxObserver() : ProfileWriter(NULL) { 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bookmark_count_ = 0; 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history_count_ = 0; 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_count_ = 0; 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch keyword_count_ = 0; 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 560ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // importer::ImporterProgressObserver: 561ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportStarted() OVERRIDE {} 562ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemStarted(importer::ImportItem item) OVERRIDE {} 563ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemEnded(importer::ImportItem item) OVERRIDE {} 564ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportEnded() OVERRIDE { 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Quit(); 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(arraysize(kFirefox2Bookmarks), bookmark_count_); 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1U, history_count_); 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(arraysize(kFirefox2Passwords), password_count_); 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(arraysize(kFirefox2Keywords), keyword_count_); 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kFirefox2Keywords[kDefaultFirefox2KeywordIndex].keyword, 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_keyword_); 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kFirefox2Keywords[kDefaultFirefox2KeywordIndex].url, 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_keyword_url_); 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool BookmarkModelIsLoaded() const { 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Profile is ready for writing. 578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool TemplateURLModelIsLoaded() const { 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 585dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void AddPasswordForm(const webkit_glue::PasswordForm& form) { 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PasswordList p = kFirefox2Passwords[password_count_]; 587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.origin, form.origin.spec()); 588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.realm, form.signon_realm); 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.action, form.action.spec()); 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.username_element), form.username_element); 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.username), form.username_value); 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.password_element), form.password_element); 593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.password), form.password_value); 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.blacklisted, form.blacklisted_by_user); 595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++password_count_; 596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void AddHistoryPage(const std::vector<history::URLRow>& page, 5993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick history::VisitSource visit_source) { 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1U, page.size()); 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://en-us.www.mozilla.com/", page[0].url().spec()); 602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("Firefox Updated"), page[0].title()); 6033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(history::SOURCE_FIREFOX_IMPORTED, visit_source); 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++history_count_; 605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void AddBookmarkEntry(const std::vector<BookmarkEntry>& bookmark, 608ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& first_folder_name, 609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int options) { 610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < bookmark.size(); ++i) { 611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (FindBookmarkEntry(bookmark[i], kFirefox2Bookmarks, 612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arraysize(kFirefox2Bookmarks))) 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++bookmark_count_; 614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void AddKeywords(const std::vector<TemplateURL*>& template_urls, 618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int default_keyword_index, 619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool unique_on_host_and_path) { 620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < template_urls.size(); ++i) { 621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The order might not be deterministic, look in the expected list for 622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // that template URL. 623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool found = false; 62472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 keyword = template_urls[i]->keyword(); 625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t j = 0; j < arraysize(kFirefox2Keywords); ++j) { 62672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (template_urls[i]->keyword() == 62772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WideToUTF16Hack(kFirefox2Keywords[j].keyword)) { 628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kFirefox2Keywords[j].url, template_urls[i]->url()->url()); 629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch found = true; 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(found); 634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++keyword_count_; 635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (default_keyword_index != -1) { 638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(default_keyword_index, static_cast<int>(template_urls.size())); 639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TemplateURL* default_turl = template_urls[default_keyword_index]; 64072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default_keyword_ = UTF16ToWideHack(default_turl->keyword()); 641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_keyword_url_ = default_turl->url()->url(); 642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch STLDeleteContainerPointers(template_urls.begin(), template_urls.end()); 645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 647ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void AddFavicons(const std::vector<history::ImportedFaviconUsage>& favicons) { 648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~FirefoxObserver() {} 652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t bookmark_count_; 654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t history_count_; 655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t password_count_; 656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t keyword_count_; 657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring default_keyword_; 658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string default_keyword_url_; 659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 661c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ImporterTest, MAYBE(Firefox2Importer)) { 662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath data_path; 663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_path = data_path.AppendASCII("firefox2_profile"); 665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::CopyDirectory(data_path, profile_path_, true)); 666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_path = data_path.AppendASCII("firefox2_nss"); 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::CopyDirectory(data_path, profile_path_, false)); 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath search_engine_path = app_path_; 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch search_engine_path = search_engine_path.AppendASCII("searchplugins"); 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch file_util::CreateDirectory(search_engine_path); 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_path = data_path.AppendASCII("firefox2_searchplugins"); 675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!file_util::PathExists(data_path)) { 676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(maruel): Create test data that we can open source! 677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LOG(ERROR) << L"Missing internal test data"; 678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(file_util::CopyDirectory(data_path, search_engine_path, false)); 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop* loop = MessageLoop::current(); 68372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<ImporterHost> host(new ImporterHost); 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FirefoxObserver* observer = new FirefoxObserver(); 685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch host->SetObserver(observer); 686ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen importer::SourceProfile source_profile; 687ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.importer_type = importer::FIREFOX2; 688ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.app_path = app_path_; 689ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile.source_path = profile_path_; 690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 691513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch loop->PostTask(FROM_HERE, NewRunnableMethod( 692513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch host.get(), 693513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &ImporterHost::StartImportSettings, 694ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen source_profile, 695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static_cast<Profile*>(NULL), 696dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen importer::HISTORY | importer::PASSWORDS | 697dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen importer::FAVORITES | importer::SEARCH_ENGINES, 698513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch make_scoped_refptr(observer), 699513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch true)); 700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch loop->Run(); 701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const BookmarkList kFirefox3Bookmarks[] = { 704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {true, 0, {}, 705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"Toolbar", 706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://site/"}, 707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {false, 0, {}, 708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"Title", 709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.google.com/"}, 710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const PasswordList kFirefox3Passwords[] = { 713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {"http://localhost:8080/", "http://localhost:8080/", "http://localhost:8080/", 714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"loginuser", L"abc", L"loginpass", L"123", false}, 715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch {"http://localhost:8080/", "", "http://localhost:8080/localhost", 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"", L"http", L"", L"Http1+1abcdefg", false}, 717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const KeywordList kFirefox3Keywords[] = { 720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"amazon.com", 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.amazon.com/exec/obidos/external-search/?field-keywords=" 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "{searchTerms}&mode=blended" }, 723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"answers.com", 724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.answers.com/main/ntquery?s={searchTerms}&gwp=13" }, 725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"search.creativecommons.org", 726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://search.creativecommons.org/?q={searchTerms}" }, 727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"search.ebay.com", 728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://search.ebay.com/search/search.dll?query={searchTerms}&" 729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "MfcISAPICommand=GetResult&ht=1&ebaytag1=ebayreg&srchdesc=n&" 730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "maxRecordsReturned=300&maxRecordsPerPage=50&SortProperty=MetaEndSort" }, 731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"google.com", 732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.google.com/search?q={searchTerms}&ie=utf-8&oe=utf-8&aq=t" }, 733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"en.wikipedia.org", 734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://en.wikipedia.org/wiki/Special:Search?search={searchTerms}" }, 735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"search.yahoo.com", 736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://search.yahoo.com/search?p={searchTerms}&ei=UTF-8" }, 737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"flickr.com", 738c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.flickr.com/photos/tags/?q={searchTerms}" }, 739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"imdb.com", 740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.imdb.com/find?q={searchTerms}" }, 741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"webster.com", 742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "http://www.webster.com/cgi-bin/dictionary?va={searchTerms}" }, 743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search keywords. 744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { L"\x4E2D\x6587", "http://www.google.com/" }, 745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic const int kDefaultFirefox3KeywordIndex = 8; 748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Firefox3Observer : public ProfileWriter, 750ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public importer::ImporterProgressObserver { 751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Firefox3Observer() 753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : ProfileWriter(NULL), bookmark_count_(0), history_count_(0), 754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_count_(0), keyword_count_(0), import_search_engines_(true) { 755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit Firefox3Observer(bool import_search_engines) 758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : ProfileWriter(NULL), bookmark_count_(0), history_count_(0), 759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_count_(0), keyword_count_(0), 760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch import_search_engines_(import_search_engines) { 761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 763ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // importer::ImporterProgressObserver: 764ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportStarted() OVERRIDE {} 765ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemStarted(importer::ImportItem item) OVERRIDE {} 766ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportItemEnded(importer::ImportItem item) OVERRIDE {} 767ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ImportEnded() OVERRIDE { 768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Quit(); 769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(arraysize(kFirefox3Bookmarks), bookmark_count_); 770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1U, history_count_); 771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(arraysize(kFirefox3Passwords), password_count_); 772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (import_search_engines_) { 773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(arraysize(kFirefox3Keywords), keyword_count_); 774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kFirefox3Keywords[kDefaultFirefox3KeywordIndex].keyword, 775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_keyword_); 776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kFirefox3Keywords[kDefaultFirefox3KeywordIndex].url, 777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_keyword_url_); 778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool BookmarkModelIsLoaded() const { 782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Profile is ready for writing. 783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool TemplateURLModelIsLoaded() const { 787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 790dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void AddPasswordForm(const webkit_glue::PasswordForm& form) { 791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PasswordList p = kFirefox3Passwords[password_count_]; 792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.origin, form.origin.spec()); 793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.realm, form.signon_realm); 794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.action, form.action.spec()); 795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.username_element), form.username_element); 796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.username), form.username_value); 797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.password_element), form.password_element); 798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(WideToUTF16(p.password), form.password_value); 799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(p.blacklisted, form.blacklisted_by_user); 800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++password_count_; 801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void AddHistoryPage(const std::vector<history::URLRow>& page, 8043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick history::VisitSource visit_source) { 805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(3U, page.size()); 806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://www.google.com/", page[0].url().spec()); 807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("Google"), page[0].title()); 808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://www.google.com/", page[1].url().spec()); 809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("Google"), page[1].title()); 810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ("http://www.cs.unc.edu/~jbs/resources/perl/perl-cgi/programs/form1-POST.html", 811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch page[2].url().spec()); 812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("example form (POST)"), page[2].title()); 8133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(history::SOURCE_FIREFOX_IMPORTED, visit_source); 814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++history_count_; 815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void AddBookmarkEntry(const std::vector<BookmarkEntry>& bookmark, 818ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& first_folder_name, 819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int options) { 820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < bookmark.size(); ++i) { 821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (FindBookmarkEntry(bookmark[i], kFirefox3Bookmarks, 822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch arraysize(kFirefox3Bookmarks))) 823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++bookmark_count_; 824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddKeywords(const std::vector<TemplateURL*>& template_urls, 828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int default_keyword_index, 829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool unique_on_host_and_path) { 830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < template_urls.size(); ++i) { 831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The order might not be deterministic, look in the expected list for 832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // that template URL. 833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool found = false; 83472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen string16 keyword = template_urls[i]->keyword(); 835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t j = 0; j < arraysize(kFirefox3Keywords); ++j) { 83672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (template_urls[i]->keyword() == 83772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WideToUTF16Hack(kFirefox3Keywords[j].keyword)) { 838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kFirefox3Keywords[j].url, template_urls[i]->url()->url()); 839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch found = true; 840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(found); 844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ++keyword_count_; 845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (default_keyword_index != -1) { 848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_LT(default_keyword_index, static_cast<int>(template_urls.size())); 849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TemplateURL* default_turl = template_urls[default_keyword_index]; 85072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default_keyword_ = UTF16ToWideHack(default_turl->keyword()); 851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default_keyword_url_ = default_turl->url()->url(); 852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch STLDeleteContainerPointers(template_urls.begin(), template_urls.end()); 855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 857ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void AddFavicons(const std::vector<history::ImportedFaviconUsage>& favicons) { 858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~Firefox3Observer() {} 862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t bookmark_count_; 864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t history_count_; 865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t password_count_; 866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t keyword_count_; 867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool import_search_engines_; 868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring default_keyword_; 869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string default_keyword_url_; 870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 872c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ImporterTest, MAYBE(Firefox30Importer)) { 873513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<Firefox3Observer> observer(new Firefox3Observer()); 874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Firefox3xImporterTest("firefox3_profile", observer.get(), observer.get(), 875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch true); 876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 878c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ImporterTest, MAYBE(Firefox35Importer)) { 879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool import_search_engines = false; 880513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<Firefox3Observer> observer( 881513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch new Firefox3Observer(import_search_engines)); 882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Firefox3xImporterTest("firefox35_profile", observer.get(), observer.get(), 883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch import_search_engines); 884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 885