1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/external_process_importer_client.h"
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/browser_process.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/external_process_importer_host.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/importer_host.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/in_process_importer_bridge.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/importer/profile_import_process_host.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/search_engines/template_url.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/search_engines/template_url_model.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/browser_thread.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/renderer_host/resource_dispatcher_host.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenExternalProcessImporterClient::ExternalProcessImporterClient(
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    ExternalProcessImporterHost* importer_host,
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const importer::SourceProfile& source_profile,
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    uint16 items,
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    InProcessImporterBridge* bridge,
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    bool import_to_bookmark_bar)
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : bookmarks_options_(0),
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      total_bookmarks_count_(0),
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      total_history_rows_count_(0),
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      total_favicons_count_(0),
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      process_importer_host_(importer_host),
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      profile_import_process_host_(NULL),
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      source_profile_(source_profile),
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      items_(items),
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      import_to_bookmark_bar_(import_to_bookmark_bar),
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      bridge_(bridge),
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      cancelled_(false) {
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->AddRef();
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  process_importer_host_->NotifyImportStarted();
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenExternalProcessImporterClient::~ExternalProcessImporterClient() {
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->Release();
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::Start() {
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  AddRef();  // balanced in Cleanup.
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  BrowserThread::ID thread_id;
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  CHECK(BrowserThread::GetCurrentThreadIdentifier(&thread_id));
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  BrowserThread::PostTask(
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      BrowserThread::IO, FROM_HERE,
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewRunnableMethod(
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          this,
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          &ExternalProcessImporterClient::StartImportProcessOnIOThread,
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          thread_id));
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::Cancel() {
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  cancelled_ = true;
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (profile_import_process_host_) {
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    BrowserThread::PostTask(
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        BrowserThread::IO, FROM_HERE,
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        NewRunnableMethod(this,
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            &ExternalProcessImporterClient::CancelImportProcessOnIOThread));
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Release();
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::Cleanup() {
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (process_importer_host_)
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    process_importer_host_->NotifyImportEnded();
74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Release();
75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::StartImportProcessOnIOThread(
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    BrowserThread::ID thread_id) {
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile_import_process_host_ =
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      new ProfileImportProcessHost(this, thread_id);
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile_import_process_host_->StartProfileImportProcess(
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      source_profile_, items_, import_to_bookmark_bar_);
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::CancelImportProcessOnIOThread() {
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile_import_process_host_->CancelProfileImportProcess();
87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::NotifyItemFinishedOnIOThread(
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    importer::ImportItem import_item) {
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile_import_process_host_->ReportImportItemFinished(import_item);
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnProcessCrashed(int exit_code) {
95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  process_importer_host_->Cancel();
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnImportStart() {
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->NotifyStarted();
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnImportFinished(
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    bool succeeded, const std::string& error_msg) {
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!succeeded)
114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    LOG(WARNING) << "Import failed.  Error: " << error_msg;
115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Cleanup();
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnImportItemStart(int item_data) {
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->NotifyItemStarted(static_cast<importer::ImportItem>(item_data));
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnImportItemFinished(int item_data) {
126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  importer::ImportItem import_item =
130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      static_cast<importer::ImportItem>(item_data);
131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->NotifyItemEnded(import_item);
132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  BrowserThread::PostTask(
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      BrowserThread::IO, FROM_HERE,
134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      NewRunnableMethod(this,
135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          &ExternalProcessImporterClient::NotifyItemFinishedOnIOThread,
136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          import_item));
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnHistoryImportStart(
140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    size_t total_history_rows_count) {
141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  total_history_rows_count_ = total_history_rows_count;
145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  history_rows_.reserve(total_history_rows_count);
146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnHistoryImportGroup(
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const std::vector<history::URLRow>& history_rows_group,
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    int visit_source) {
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  history_rows_.insert(history_rows_.end(), history_rows_group.begin(),
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                       history_rows_group.end());
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (history_rows_.size() == total_history_rows_count_)
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    bridge_->SetHistoryItems(history_rows_,
158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                             static_cast<history::VisitSource>(visit_source));
159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnHomePageImportReady(
162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const GURL& home_page) {
163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->AddHomePage(home_page);
167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnBookmarksImportStart(
170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const string16& first_folder_name,
171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    int options,
172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    size_t total_bookmarks_count) {
173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bookmarks_first_folder_name_ = first_folder_name;
177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bookmarks_options_ = options;
178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  total_bookmarks_count_ = total_bookmarks_count;
179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bookmarks_.reserve(total_bookmarks_count);
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnBookmarksImportGroup(
183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const std::vector<ProfileWriter::BookmarkEntry>& bookmarks_group) {
184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Collect sets of bookmarks from importer process until we have reached
188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // total_bookmarks_count_:
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bookmarks_.insert(bookmarks_.end(), bookmarks_group.begin(),
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                    bookmarks_group.end());
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (bookmarks_.size() == total_bookmarks_count_) {
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    bridge_->AddBookmarkEntries(bookmarks_, bookmarks_first_folder_name_,
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                bookmarks_options_);
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnFaviconsImportStart(
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    size_t total_favicons_count) {
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  total_favicons_count_ = total_favicons_count;
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  favicons_.reserve(total_favicons_count);
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnFaviconsImportGroup(
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const std::vector<history::ImportedFaviconUsage>& favicons_group) {
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  favicons_.insert(favicons_.end(), favicons_group.begin(),
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                    favicons_group.end());
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (favicons_.size() == total_favicons_count_)
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    bridge_->SetFavicons(favicons_);
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnPasswordFormImportReady(
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const webkit_glue::PasswordForm& form) {
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->SetPasswordForm(form);
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid ExternalProcessImporterClient::OnKeywordsImportReady(
226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const std::vector<TemplateURL>& template_urls,
227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        int default_keyword_index, bool unique_on_host_and_path) {
228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cancelled_)
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::vector<TemplateURL*> template_url_vec;
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url_vec.reserve(template_urls.size());
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::vector<TemplateURL>::const_iterator iter;
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  for (iter = template_urls.begin();
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen       iter != template_urls.end();
236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen       ++iter) {
237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    template_url_vec.push_back(new TemplateURL(*iter));
238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bridge_->SetKeywords(template_url_vec, default_keyword_index,
240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                       unique_on_host_and_path);
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
242