firefox_importer_browsertest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/file_util.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/path_service.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/stl_util.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/importer/external_process_importer_host.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/importer/importer_progress_observer.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/importer/importer_unittest_utils.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/importer/imported_bookmark_entry.h" 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/importer/imported_favicon_usage.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/importer/importer_data_types.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "components/autofill/core/common/password_form.h" 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(estade): some of these are disabled on mac. http://crbug.com/48007 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(jschuh): Disabled on Win64 build. http://crbug.com/179688 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_MACOSX) || (defined(OS_WIN) && defined(ARCH_CPU_X86_64)) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_IMPORTER(x) DISABLED_##x 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_IMPORTER(x) x 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct PasswordInfo { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* origin; 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* action; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* realm; 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* username_element; 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* username; 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* password_element; 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const char* password; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool blacklisted; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct KeywordInfo { 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const wchar_t* keyword; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* url; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst BookmarkInfo kFirefoxBookmarks[] = { 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) {true, 1, {"Bookmarks Toolbar"}, 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"Toolbar", 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://site/"}, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {false, 0, {}, 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"Title", 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://www.google.com/"}, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst PasswordInfo kFirefoxPasswords[] = { 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {"http://localhost:8080/", "http://localhost:8080/", "http://localhost:8080/", 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "loginuser", "abc", "loginpass", "123", false}, 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {"http://localhost:8080/", "", "http://localhost:8080/localhost", 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "", "http", "", "Http1+1abcdefg", false}, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochconst KeywordInfo kFirefoxKeywords[] = { 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"amazon.com", 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://www.amazon.com/exec/obidos/external-search/?field-keywords=" 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "{searchTerms}&mode=blended" }, 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"answers.com", 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://www.answers.com/main/ntquery?s={searchTerms}&gwp=13" }, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"search.creativecommons.org", 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://search.creativecommons.org/?q={searchTerms}" }, 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"search.ebay.com", 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://search.ebay.com/search/search.dll?query={searchTerms}&" 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "MfcISAPICommand=GetResult&ht=1&ebaytag1=ebayreg&srchdesc=n&" 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "maxRecordsReturned=300&maxRecordsPerPage=50&SortProperty=MetaEndSort" }, 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"google.com", 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://www.google.com/search?q={searchTerms}&ie=utf-8&oe=utf-8&aq=t" }, 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"en.wikipedia.org", 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://en.wikipedia.org/wiki/Special:Search?search={searchTerms}" }, 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"search.yahoo.com", 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://search.yahoo.com/search?p={searchTerms}&ei=UTF-8" }, 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"flickr.com", 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://www.flickr.com/photos/tags/?q={searchTerms}" }, 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"imdb.com", 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://www.imdb.com/find?q={searchTerms}" }, 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"webster.com", 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "http://www.webster.com/cgi-bin/dictionary?va={searchTerms}" }, 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Search keywords. 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { L"\x4E2D\x6587", "http://www.google.com/" }, 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass FirefoxObserver : public ProfileWriter, 98ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public importer::ImporterProgressObserver { 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch FirefoxObserver() 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : ProfileWriter(NULL), 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bookmark_count_(0), 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch history_count_(0), 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch password_count_(0), 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch keyword_count_(0) {} 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // importer::ImporterProgressObserver: 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ImportStarted() OVERRIDE {} 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ImportItemStarted(importer::ImportItem item) OVERRIDE {} 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ImportItemEnded(importer::ImportItem item) OVERRIDE {} 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ImportEnded() OVERRIDE { 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Quit(); 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(arraysize(kFirefoxBookmarks), bookmark_count_); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1U, history_count_); 115ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(arraysize(kFirefoxPasswords), password_count_); 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(arraysize(kFirefoxKeywords), keyword_count_); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool BookmarkModelIsLoaded() const OVERRIDE { 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Profile is ready for writing. 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool TemplateURLServiceIsLoaded() const OVERRIDE { 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void AddPasswordForm(const autofill::PasswordForm& form) OVERRIDE { 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PasswordInfo p = kFirefoxPasswords[password_count_]; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(p.origin, form.origin.spec()); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(p.realm, form.signon_realm); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(p.action, form.action.spec()); 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16(p.username_element), form.username_element); 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16(p.username), form.username_value); 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16(p.password_element), form.password_element); 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16(p.password), form.password_value); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(p.blacklisted, form.blacklisted_by_user); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++password_count_; 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddHistoryPage(const history::URLRows& page, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history::VisitSource visit_source) OVERRIDE { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(3U, page.size()); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("http://www.google.com/", page[0].url().spec()); 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16("Google"), page[0].title()); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("http://www.google.com/", page[1].url().spec()); 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16("Google"), page[1].title()); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("http://www.cs.unc.edu/~jbs/resources/perl/perl-cgi/programs/" 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "form1-POST.html", page[2].url().spec()); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::ASCIIToUTF16("example form (POST)"), page[2].title()); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(history::SOURCE_FIREFOX_IMPORTED, visit_source); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++history_count_; 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void AddBookmarks( 156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<ImportedBookmarkEntry>& bookmarks, 157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& top_level_folder_name) OVERRIDE { 158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASSERT_LE(bookmark_count_ + bookmarks.size(), arraysize(kFirefoxBookmarks)); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Importer should import the FF favorites the same as the list, in the same 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // order. 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < bookmarks.size(); ++i) { 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NO_FATAL_FAILURE( 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestEqualBookmarkEntry(bookmarks[i], 164ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch kFirefoxBookmarks[bookmark_count_])) << i; 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++bookmark_count_; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddKeywords(ScopedVector<TemplateURL> template_urls, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool unique_on_host_and_path) OVERRIDE { 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < template_urls.size(); ++i) { 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The order might not be deterministic, look in the expected list for 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // that template URL. 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool found = false; 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const base::string16& keyword = template_urls[i]->keyword(); 176ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (size_t j = 0; j < arraysize(kFirefoxKeywords); ++j) { 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (keyword == base::WideToUTF16(kFirefoxKeywords[j].keyword)) { 178ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(kFirefoxKeywords[j].url, template_urls[i]->url()); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) found = true; 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(found); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++keyword_count_; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddFavicons( 189a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::vector<ImportedFaviconUsage>& favicons) OVERRIDE { 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 193ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual ~FirefoxObserver() {} 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t bookmark_count_; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t history_count_; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t password_count_; 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t keyword_count_; 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// These tests need to be browser tests in order to be able to run the OOP 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// import (via ExternalProcessImporterHost) which launches a utility process on 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// supported platforms. 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FirefoxProfileImporterBrowserTest : public InProcessBrowserTest { 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUp() OVERRIDE { 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates a new profile in a new subdirectory in the temp directory. 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath test_path = temp_dir_.path().AppendASCII("ImporterTest"); 2127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DeleteFile(test_path, true); 213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::CreateDirectory(test_path); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_path_ = test_path.AppendASCII("profile"); 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app_path_ = test_path.AppendASCII("app"); 216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::CreateDirectory(app_path_); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This will launch the browser test and thus needs to happen last. 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InProcessBrowserTest::SetUp(); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void FirefoxImporterBrowserTest(std::string profile_dir, 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch importer::ImporterProgressObserver* observer, 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ProfileWriter* writer) { 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath data_path; 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) data_path = data_path.AppendASCII(profile_dir); 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::CopyDirectory(data_path, profile_path_, true)); 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) data_path = data_path.AppendASCII("firefox3_nss"); 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::CopyDirectory(data_path, profile_path_, false)); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create a directory to house default search engines. 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath default_search_engine_path = 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch app_path_.AppendASCII("searchplugins"); 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::CreateDirectory(default_search_engine_path); 238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create a directory to house custom/installed search engines. 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath custom_search_engine_path = 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_path_.AppendASCII("searchplugins"); 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::CreateDirectory(custom_search_engine_path); 243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Copy over search engines. 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_path = data_path.AppendASCII("firefox_searchplugins"); 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath default_search_engine_source_path = 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_path.AppendASCII("default"); 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath custom_search_engine_source_path = 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_path.AppendASCII("custom"); 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(base::CopyDirectory( 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default_search_engine_source_path, default_search_engine_path, false)); 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(base::CopyDirectory( 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch custom_search_engine_source_path, custom_search_engine_path, false)); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) importer::SourceProfile source_profile; 257ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch source_profile.importer_type = importer::TYPE_FIREFOX; 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source_profile.app_path = app_path_; 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) source_profile.source_path = profile_path_; 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch source_profile.locale = "en-US"; 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int items = importer::HISTORY | importer::PASSWORDS | importer::FAVORITES | 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch importer::SEARCH_ENGINES; 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Deletes itself. 266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExternalProcessImporterHost* host = new ExternalProcessImporterHost; 267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host->set_observer(observer); 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch host->StartImportSettings( 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch source_profile, browser()->profile(), items, writer); 27090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ScopedTempDir temp_dir_; 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath profile_path_; 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath app_path_; 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FirefoxProfileImporterBrowserTest, 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MAYBE_IMPORTER(Firefox30Importer)) { 280ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_refptr<FirefoxObserver> observer(new FirefoxObserver()); 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FirefoxImporterBrowserTest( 282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "firefox3_profile", observer.get(), observer.get()); 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FirefoxProfileImporterBrowserTest, 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MAYBE_IMPORTER(Firefox35Importer)) { 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<FirefoxObserver> observer(new FirefoxObserver()); 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FirefoxImporterBrowserTest( 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "firefox35_profile", observer.get(), observer.get()); 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 292116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(FirefoxProfileImporterBrowserTest, 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MAYBE_IMPORTER(FirefoxImporter)) { 294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<FirefoxObserver> observer(new FirefoxObserver()); 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FirefoxImporterBrowserTest("firefox_profile", observer.get(), observer.get()); 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 297