15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/importer/in_process_importer_bridge.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/debug/dump_without_crashing.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/string_util.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/importer/external_process_importer_host.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/search_engines/ui_thread_search_terms_data.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/importer/imported_bookmark_entry.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/common/importer/imported_favicon_usage.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/importer/importer_autofill_form_data_entry.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/autofill/core/browser/webdata/autofill_entry.h" 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "components/autofill/core/common/password_form.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_parser.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_prepopulate_data.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/os_crypt/ie7_password_win.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iterator> 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace { 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochhistory::URLRows ConvertImporterURLRowsToHistoryURLRows( 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<ImporterURLRow>& rows) { 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch history::URLRows converted; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch converted.reserve(rows.size()); 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (std::vector<ImporterURLRow>::const_iterator it = rows.begin(); 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch it != rows.end(); ++it) { 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch history::URLRow row(it->url); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch row.set_title(it->title); 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch row.set_visit_count(it->visit_count); 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch row.set_typed_count(it->typed_count); 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch row.set_last_visit(it->last_visit); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch row.set_hidden(it->hidden); 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch converted.push_back(row); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return converted; 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochhistory::VisitSource ConvertImporterVisitSourceToHistoryVisitSource( 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch importer::VisitSource visit_source) { 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch switch (visit_source) { 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case importer::VISIT_SOURCE_BROWSED: 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return history::SOURCE_BROWSED; 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case importer::VISIT_SOURCE_FIREFOX_IMPORTED: 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return history::SOURCE_FIREFOX_IMPORTED; 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case importer::VISIT_SOURCE_IE_IMPORTED: 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return history::SOURCE_IE_IMPORTED; 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case importer::VISIT_SOURCE_SAFARI_IMPORTED: 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return history::SOURCE_SAFARI_IMPORTED; 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return history::SOURCE_SYNCED; 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// http://crbug.com/404012. Let's see where the empty fields come from. 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CheckForEmptyUsernameAndPassword(const autofill::PasswordForm& form) { 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (form.username_value.empty() && 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci form.password_value.empty() && 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !form.blacklisted_by_user) { 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::debug::DumpWithoutCrashing(); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace { 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// FirefoxURLParameterFilter is used to remove parameter mentioning Firefox from 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the search URL when importing search engines. 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FirefoxURLParameterFilter : public TemplateURLParser::ParameterFilter { 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FirefoxURLParameterFilter() {} 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~FirefoxURLParameterFilter() {} 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // TemplateURLParser::ParameterFilter method. 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool KeepParameter(const std::string& key, 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& value) OVERRIDE { 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string low_value = base::StringToLowerASCII(value); 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (low_value.find("mozilla") != std::string::npos || 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch low_value.find("firefox") != std::string::npos || 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch low_value.find("moz:") != std::string::npos) { 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return true; 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(FirefoxURLParameterFilter); 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Creates a TemplateURL with the |keyword| and |url|. |title| may be empty. 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This function transfers ownership of the created TemplateURL to the caller. 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TemplateURL* CreateTemplateURL(const base::string16& title, 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& keyword, 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& url) { 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Skip if the url is invalid. 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!url.is_valid()) 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return NULL; 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TemplateURLData data; 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (keyword.empty()) 1156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) data.SetKeyword(TemplateURL::GenerateKeyword(url)); 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch else 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.SetKeyword(keyword); 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // We set short name by using the title if it exists. 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Otherwise, we use the shortcut. 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch data.short_name = title.empty() ? keyword : title; 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) data.SetURL( 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TemplateURLRef::DisplayURLToURLRef(base::UTF8ToUTF16(url.spec()))); 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return new TemplateURL(data); 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Parses the OpenSearch XML files in |xml_files| and populates |search_engines| 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// with the resulting TemplateURLs. 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ParseSearchEnginesFromFirefoxXMLData( 129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<std::string>& xml_data, 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<TemplateURL*>* search_engines) { 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(search_engines); 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef std::map<std::string, TemplateURL*> SearchEnginesMap; 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SearchEnginesMap search_engine_for_url; 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FirefoxURLParameterFilter param_filter; 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The first XML file represents the default search engine in Firefox 3, so we 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // need to keep it on top of the list. 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SearchEnginesMap::const_iterator default_turl = search_engine_for_url.end(); 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (std::vector<std::string>::const_iterator xml_iter = 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch xml_data.begin(); xml_iter != xml_data.end(); ++xml_iter) { 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TemplateURL* template_url = TemplateURLParser::Parse( 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UIThreadSearchTermsData(NULL), true, 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch xml_iter->data(), xml_iter->length(), ¶m_filter); 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (template_url) { 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SearchEnginesMap::iterator iter = 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch search_engine_for_url.find(template_url->url()); 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (iter == search_engine_for_url.end()) { 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch iter = search_engine_for_url.insert( 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::make_pair(template_url->url(), template_url)).first; 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // We have already found a search engine with the same URL. We give 152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // priority to the latest one found, as GetSearchEnginesXMLFiles() 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // returns a vector with first Firefox default search engines and then 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // the user's ones. We want to give priority to the user ones. 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch delete iter->second; 156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch iter->second = template_url; 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (default_turl == search_engine_for_url.end()) 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch default_turl = iter; 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Put the results in the |search_engines| vector. 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (SearchEnginesMap::iterator t_iter = search_engine_for_url.begin(); 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch t_iter != search_engine_for_url.end(); ++t_iter) { 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (t_iter == default_turl) 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch search_engines->insert(search_engines->begin(), default_turl->second); 168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch else 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch search_engines->push_back(t_iter->second); 170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)InProcessImporterBridge::InProcessImporterBridge( 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfileWriter* writer, 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::WeakPtr<ExternalProcessImporterHost> host) : writer_(writer), 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_(host) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::AddBookmarks( 182a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::vector<ImportedBookmarkEntry>& bookmarks, 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& first_folder_name) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ProfileWriter::AddBookmarks, writer_, bookmarks, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_folder_name)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::AddHomePage(const GURL& home_page) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ProfileWriter::AddHomepage, writer_, home_page)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::AddIE7PasswordInfo( 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const importer::ImporterIE7PasswordInfo& password_info) { 1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IE7PasswordInfo ie7_password_info; 2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ie7_password_info.url_hash = password_info.url_hash; 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ie7_password_info.encrypted_data = password_info.encrypted_data; 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ie7_password_info.date_created = password_info.date_created; 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ProfileWriter::AddIE7PasswordInfo, writer_, 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ie7_password_info)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_WIN 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::SetFavicons( 212a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::vector<ImportedFaviconUsage>& favicons) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ProfileWriter::AddFavicons, writer_, favicons)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::SetHistoryItems( 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<ImporterURLRow>& rows, 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch importer::VisitSource visit_source) { 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch history::URLRows converted_rows = 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ConvertImporterURLRowsToHistoryURLRows(rows); 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch history::VisitSource converted_visit_source = 2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ConvertImporterVisitSourceToHistoryVisitSource(visit_source); 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch BrowserThread::PostTask(BrowserThread::UI, 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FROM_HERE, 2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ProfileWriter::AddHistoryPage, 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch writer_, 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch converted_rows, 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch converted_visit_source)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::SetKeywords( 234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<importer::URLKeywordInfo>& url_keywords, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool unique_on_host_and_path) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<TemplateURL> owned_template_urls; 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (size_t i = 0; i < url_keywords.size(); ++i) { 238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch owned_template_urls.push_back( 239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CreateTemplateURL(url_keywords[i].display_name, 240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_keywords[i].keyword, 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch url_keywords[i].url)); 242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ProfileWriter::AddKeywords, writer_, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Passed(&owned_template_urls), unique_on_host_and_path)); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid InProcessImporterBridge::SetFirefoxSearchEnginesXMLData( 249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<std::string>& search_engine_data) { 250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<TemplateURL*> search_engines; 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParseSearchEnginesFromFirefoxXMLData(search_engine_data, &search_engines); 252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ScopedVector<TemplateURL> owned_template_urls; 254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::copy(search_engines.begin(), search_engines.end(), 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::back_inserter(owned_template_urls)); 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ProfileWriter::AddKeywords, writer_, 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Passed(&owned_template_urls), true)); 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::SetPasswordForm( 26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const autofill::PasswordForm& form) { 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CheckForEmptyUsernameAndPassword(form); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ProfileWriter::AddPasswordForm, writer_, form)); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InProcessImporterBridge::SetAutofillFormData( 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::vector<ImporterAutofillFormDataEntry>& entries) { 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<autofill::AutofillEntry> autofill_entries; 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < entries.size(); ++i) { 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci autofill_entries.push_back(autofill::AutofillEntry( 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci autofill::AutofillKey(entries[i].name, entries[i].value), 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci entries[i].first_used, 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci entries[i].last_used)); 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BrowserThread::PostTask(BrowserThread::UI, 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FROM_HERE, 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&ProfileWriter::AddAutofillFormDataEntries, 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci writer_, 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci autofill_entries)); 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::NotifyStarted() { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ExternalProcessImporterHost::NotifyImportStarted, host_)); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::NotifyItemStarted(importer::ImportItem item) { 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ExternalProcessImporterHost::NotifyImportItemStarted, 297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_, item)); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::NotifyItemEnded(importer::ImportItem item) { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ExternalProcessImporterHost::NotifyImportItemEnded, 304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_, item)); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InProcessImporterBridge::NotifyEnded() { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Bind(&ExternalProcessImporterHost::NotifyImportEnded, host_)); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 InProcessImporterBridge::GetLocalizedString(int message_id) { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(message_id); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InProcessImporterBridge::~InProcessImporterBridge() {} 318