in_process_importer_bridge.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com// Copyright (c) 2012 The Chromium Authors. All rights reserved.
243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Use of this source code is governed by a BSD-style license that can be
343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// found in the LICENSE file.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "chrome/browser/importer/in_process_importer_bridge.h"
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/bind.h"
843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/debug/dump_without_crashing.h"
943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/files/file_util.h"
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/strings/string_util.h"
1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "base/strings/utf_string_conversions.h"
1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "chrome/browser/importer/external_process_importer_host.h"
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "chrome/common/importer/imported_bookmark_entry.h"
1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "chrome/common/importer/imported_favicon_usage.h"
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "chrome/common/importer/importer_autofill_form_data_entry.h"
1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "components/autofill/core/browser/webdata/autofill_entry.h"
1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "components/autofill/core/common/password_form.h"
1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "components/search_engines/template_url.h"
2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "components/search_engines/template_url_parser.h"
2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "components/search_engines/template_url_prepopulate_data.h"
2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "content/public/browser/browser_thread.h"
2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "ui/base/l10n/l10n_util.h"
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#if defined(OS_WIN)
2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "components/os_crypt/ie7_password_win.h"
2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
29eb7c144137bd7d461d4996f752f1353a0856fac1ricow@chromium.org#include <iterator>
30659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org
3177ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.orgnamespace {
32659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org
33659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.orghistory::URLRows ConvertImporterURLRowsToHistoryURLRows(
34659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org    const std::vector<ImporterURLRow>& rows) {
3579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org  history::URLRows converted;
3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  converted.reserve(rows.size());
37753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org  for (std::vector<ImporterURLRow>::const_iterator it = rows.begin();
3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen       it != rows.end(); ++it) {
39659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org    history::URLRow row(it->url);
40659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org    row.set_title(it->title);
41c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org    row.set_visit_count(it->visit_count);
4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    row.set_typed_count(it->typed_count);
43a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    row.set_last_visit(it->last_visit);
4443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    row.set_hidden(it->hidden);
4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    converted.push_back(row);
462c186ca6690a1cb19ec7584e71f167234587c87cwhesse@chromium.org  }
472e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org  return converted;
48169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org}
49594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org
50ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orghistory::VisitSource ConvertImporterVisitSourceToHistoryVisitSource(
51f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org    importer::VisitSource visit_source) {
52f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org  switch (visit_source) {
53f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org    case importer::VISIT_SOURCE_BROWSED:
54eb7c144137bd7d461d4996f752f1353a0856fac1ricow@chromium.org      return history::SOURCE_BROWSED;
5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    case importer::VISIT_SOURCE_FIREFOX_IMPORTED:
563d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org      return history::SOURCE_FIREFOX_IMPORTED;
57357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org    case importer::VISIT_SOURCE_IE_IMPORTED:
58659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org      return history::SOURCE_IE_IMPORTED;
59659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org    case importer::VISIT_SOURCE_SAFARI_IMPORTED:
60ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org      return history::SOURCE_SAFARI_IMPORTED;
61a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  }
6255ee80713569ab0324fc8dcedcb5518501daa6a6ricow@chromium.org  NOTREACHED();
6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return history::SOURCE_SYNCED;
64659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.org}
65c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org
66ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org// http://crbug.com/404012. Let's see where the empty fields come from.
675ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.orgvoid CheckForEmptyUsernameAndPassword(const autofill::PasswordForm& form) {
68a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  if (form.username_value.empty() &&
6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      form.password_value.empty() &&
7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      !form.blacklisted_by_user) {
71ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    base::debug::DumpWithoutCrashing();
7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  }
73ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org}
74ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org
75ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org}  // namespace
7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenusing content::BrowserThread;
7843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
79ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgnamespace {
80ae16103bc671a8693911bc99b5fd619e2c772e33machenbach@chromium.org
819155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org// FirefoxURLParameterFilter is used to remove parameter mentioning Firefox from
829155e252524a2bf92aecd27493feafed86702312kmillikin@chromium.org// the search URL when importing search engines.
8343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenclass FirefoxURLParameterFilter : public TemplateURLParser::ParameterFilter {
8443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public:
8543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  FirefoxURLParameterFilter() {}
867979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  virtual ~FirefoxURLParameterFilter() {}
877979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
887979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  // TemplateURLParser::ParameterFilter method.
8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  virtual bool KeepParameter(const std::string& key,
9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                             const std::string& value) OVERRIDE {
9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    std::string low_value = base::StringToLowerASCII(value);
92fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org    if (low_value.find("mozilla") != std::string::npos ||
9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen        low_value.find("firefox") != std::string::npos ||
94ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        low_value.find("moz:") != std::string::npos) {
957979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org      return false;
96ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    }
9743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    return true;
98ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  }
997979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
100fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org private:
10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  DISALLOW_COPY_AND_ASSIGN(FirefoxURLParameterFilter);
10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen};
103fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org
10443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Creates a TemplateURL with the |keyword| and |url|. |title| may be empty.
10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// This function transfers ownership of the created TemplateURL to the caller.
10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenTemplateURL* CreateTemplateURL(const base::string16& title,
107fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org                               const base::string16& keyword,
108fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org                               const GURL& url) {
109fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  // Skip if the url is invalid.
110fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  if (!url.is_valid())
111fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org    return NULL;
112fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org
113fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  TemplateURLData data;
114fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org  if (keyword.empty())
115fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org    data.SetKeyword(TemplateURL::GenerateKeyword(url));
11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  else
11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    data.SetKeyword(keyword);
11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  // We set short name by using the title if it exists.
1194a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com  // Otherwise, we use the shortcut.
1204a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com  data.short_name = title.empty() ? keyword : title;
1214a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com  data.SetURL(
1224a6c3279070e8f133607a74c08d8c08ac394ab98erik.corry@gmail.com      TemplateURLRef::DisplayURLToURLRef(base::UTF8ToUTF16(url.spec())));
12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  return new TemplateURL(data);
12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
126c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// Parses the OpenSearch XML files in |xml_files| and populates |search_engines|
127ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org// with the resulting TemplateURLs.
128ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.orgvoid ParseSearchEnginesFromFirefoxXMLData(
129ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org    const std::vector<std::string>& xml_data,
130ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org    std::vector<TemplateURL*>* search_engines) {
131ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  DCHECK(search_engines);
132ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org
133ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  typedef std::map<std::string, TemplateURL*> SearchEnginesMap;
134f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  SearchEnginesMap search_engine_for_url;
135ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  FirefoxURLParameterFilter param_filter;
136f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  // The first XML file represents the default search engine in Firefox 3, so we
137ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  // need to keep it on top of the list.
138f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  SearchEnginesMap::const_iterator default_turl = search_engine_for_url.end();
139ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  for (std::vector<std::string>::const_iterator xml_iter =
140f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org           xml_data.begin(); xml_iter != xml_data.end(); ++xml_iter) {
141ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org    TemplateURL* template_url = TemplateURLParser::Parse(
142f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org        UIThreadSearchTermsData(NULL), true,
143ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org        xml_iter->data(), xml_iter->length(), &param_filter);
144f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org    if (template_url) {
145ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org      SearchEnginesMap::iterator iter =
146f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org          search_engine_for_url.find(template_url->url());
147ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org      if (iter == search_engine_for_url.end()) {
148f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org        iter = search_engine_for_url.insert(
149ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org            std::make_pair(template_url->url(), template_url)).first;
150f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org      } else {
151ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org        // We have already found a search engine with the same URL.  We give
152f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org        // priority to the latest one found, as GetSearchEnginesXMLFiles()
153ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org        // returns a vector with first Firefox default search engines and then
15441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org        // the user's ones.  We want to give priority to the user ones.
15541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org        delete iter->second;
15641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org        iter->second = template_url;
15741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org      }
158f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org      if (default_turl == search_engine_for_url.end())
159ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org        default_turl = iter;
160ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org    }
161ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  }
162ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org
163ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  // Put the results in the |search_engines| vector.
164ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org  for (SearchEnginesMap::iterator t_iter = search_engine_for_url.begin();
165ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org       t_iter != search_engine_for_url.end(); ++t_iter) {
166ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org    if (t_iter == default_turl)
167ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org      search_engines->insert(search_engines->begin(), default_turl->second);
168e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org    else
169e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      search_engines->push_back(t_iter->second);
170f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org  }
171c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org}
172f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org
173c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org}  // namespace
174c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org
175c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.orgInProcessImporterBridge::InProcessImporterBridge(
176c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org    ProfileWriter* writer,
177c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org    base::WeakPtr<ExternalProcessImporterHost> host) : writer_(writer),
178ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org                                                       host_(host) {
179ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org}
180ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org
181ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.orgvoid InProcessImporterBridge::AddBookmarks(
1827979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org    const std::vector<ImportedBookmarkEntry>& bookmarks,
1839768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org    const base::string16& first_folder_name) {
1849768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org  BrowserThread::PostTask(
1859768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org      BrowserThread::UI, FROM_HERE,
1869768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org      base::Bind(&ProfileWriter::AddBookmarks, writer_, bookmarks,
1879768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org                 first_folder_name));
1884ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org}
1894ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org
190e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.orgvoid InProcessImporterBridge::AddHomePage(const GURL& home_page) {
19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  BrowserThread::PostTask(
19243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      BrowserThread::UI, FROM_HERE,
19343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      base::Bind(&ProfileWriter::AddHomepage, writer_, home_page));
1944ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org}
195e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org
196e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org#if defined(OS_WIN)
197e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.orgvoid InProcessImporterBridge::AddIE7PasswordInfo(
198e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org    const importer::ImporterIE7PasswordInfo& password_info) {
199e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org  IE7PasswordInfo ie7_password_info;
200e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org  ie7_password_info.url_hash = password_info.url_hash;
201e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org  ie7_password_info.encrypted_data = password_info.encrypted_data;
202e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org  ie7_password_info.date_created = password_info.date_created;
203e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org
204e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org  BrowserThread::PostTask(
20543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      BrowserThread::UI, FROM_HERE,
20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      base::Bind(&ProfileWriter::AddIE7PasswordInfo, writer_,
20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                 ie7_password_info));
20843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
209e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org#endif  // OS_WIN
210e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org
21143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid InProcessImporterBridge::SetFavicons(
21243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen    const std::vector<ImportedFaviconUsage>& favicons) {
21343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  BrowserThread::PostTask(
2147979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org      BrowserThread::UI, FROM_HERE,
2157979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org      base::Bind(&ProfileWriter::AddFavicons, writer_, favicons));
2167979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org}
2177979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org
2187979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgvoid InProcessImporterBridge::SetHistoryItems(
2197979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org    const std::vector<ImporterURLRow>& rows,
2207979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org    importer::VisitSource visit_source) {
2217979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  history::URLRows converted_rows =
2227979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org      ConvertImporterURLRowsToHistoryURLRows(rows);
2237979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org  history::VisitSource converted_visit_source =
22443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      ConvertImporterVisitSourceToHistoryVisitSource(visit_source);
22543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  BrowserThread::PostTask(BrowserThread::UI,
22643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen                          FROM_HERE,
2271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                          base::Bind(&ProfileWriter::AddHistoryPage,
2281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                     writer_,
2291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                     converted_rows,
2301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                     converted_visit_source));
2311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvoid InProcessImporterBridge::SetKeywords(
234ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    const std::vector<importer::URLKeywordInfo>& url_keywords,
235ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    bool unique_on_host_and_path) {
23643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  ScopedVector<TemplateURL> owned_template_urls;
23743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen  for (size_t i = 0; i < url_keywords.size(); ++i) {
238ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    owned_template_urls.push_back(
239ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org        CreateTemplateURL(url_keywords[i].display_name,
2404ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org                          url_keywords[i].keyword,
2414ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org                          url_keywords[i].url));
2424ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org  }
2434ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
244ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org      base::Bind(&ProfileWriter::AddKeywords, writer_,
245ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org                 base::Passed(&owned_template_urls), unique_on_host_and_path));
246e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org}
247ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
248ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgvoid InProcessImporterBridge::SetFirefoxSearchEnginesXMLData(
249ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    const std::vector<std::string>& search_engine_data) {
250ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  std::vector<TemplateURL*> search_engines;
251ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  ParseSearchEnginesFromFirefoxXMLData(search_engine_data, &search_engines);
252ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
253ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  ScopedVector<TemplateURL> owned_template_urls;
254ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  std::copy(search_engines.begin(), search_engines.end(),
255ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org            std::back_inserter(owned_template_urls));
256ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
257ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
25843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen      base::Bind(&ProfileWriter::AddKeywords, writer_,
259ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org                 base::Passed(&owned_template_urls), true));
260ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}
261ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
262ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgvoid InProcessImporterBridge::SetPasswordForm(
263ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    const autofill::PasswordForm& form) {
264ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org  CheckForEmptyUsernameAndPassword(form);
265e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  BrowserThread::PostTask(
266e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      BrowserThread::UI, FROM_HERE,
267e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      base::Bind(&ProfileWriter::AddPasswordForm, writer_, form));
268e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}
269e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
270e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgvoid InProcessImporterBridge::SetAutofillFormData(
271e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org    const std::vector<ImporterAutofillFormDataEntry>& entries) {
272e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  std::vector<autofill::AutofillEntry> autofill_entries;
273e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  for (size_t i = 0; i < entries.size(); ++i) {
274e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org    autofill_entries.push_back(autofill::AutofillEntry(
275e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org        autofill::AutofillKey(entries[i].name, entries[i].value),
276e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org        entries[i].first_used,
277e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org        entries[i].last_used));
278e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  }
279e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
280e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  BrowserThread::PostTask(BrowserThread::UI,
281e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org                          FROM_HERE,
282e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org                          base::Bind(&ProfileWriter::AddAutofillFormDataEntries,
283e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org                                     writer_,
284e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org                                     autofill_entries));
285e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}
286e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
287e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgvoid InProcessImporterBridge::NotifyStarted() {
288e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  BrowserThread::PostTask(
289e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      BrowserThread::UI, FROM_HERE,
290e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      base::Bind(&ExternalProcessImporterHost::NotifyImportStarted, host_));
291e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}
292e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
293e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgvoid InProcessImporterBridge::NotifyItemStarted(importer::ImportItem item) {
294e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org  BrowserThread::PostTask(
295e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      BrowserThread::UI, FROM_HERE,
296e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      base::Bind(&ExternalProcessImporterHost::NotifyImportItemStarted,
297e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org                 host_, item));
298e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}
299e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org
300e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgvoid InProcessImporterBridge::NotifyItemEnded(importer::ImportItem item) {
301f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org  BrowserThread::PostTask(
302e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      BrowserThread::UI, FROM_HERE,
303e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org      base::Bind(&ExternalProcessImporterHost::NotifyImportItemEnded,
304e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org                 host_, item));
305e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org}
3068e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org
3078e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgvoid InProcessImporterBridge::NotifyEnded() {
3088e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org  BrowserThread::PostTask(
3098e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org      BrowserThread::UI, FROM_HERE,
3108e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org      base::Bind(&ExternalProcessImporterHost::NotifyImportEnded, host_));
3118e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org}
3128e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org
3138e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgbase::string16 InProcessImporterBridge::GetLocalizedString(int message_id) {
3148e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org  return l10n_util::GetStringUTF16(message_id);
3158e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org}
3168e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org
3178e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgInProcessImporterBridge::~InProcessImporterBridge() {}
318e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org