| Index: chrome/browser/importer/external_process_importer_client.cc
|
| diff --git a/chrome/browser/importer/external_process_importer_client.cc b/chrome/browser/importer/external_process_importer_client.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e5dc7c07842ebbf30ec9f13262a86edad7214415
|
| --- /dev/null
|
| +++ b/chrome/browser/importer/external_process_importer_client.cc
|
| @@ -0,0 +1,237 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/importer/external_process_importer_client.h"
|
| +
|
| +#include "chrome/browser/browser_process.h"
|
| +#include "chrome/browser/importer/importer_bridge.h"
|
| +#include "chrome/browser/importer/importer_host.h"
|
| +#include "chrome/browser/search_engines/template_url.h"
|
| +#include "chrome/browser/search_engines/template_url_model.h"
|
| +#include "content/browser/browser_thread.h"
|
| +
|
| +ExternalProcessImporterClient::ExternalProcessImporterClient(
|
| + ExternalProcessImporterHost* importer_host,
|
| + const importer::ProfileInfo& profile_info,
|
| + uint16 items,
|
| + InProcessImporterBridge* bridge,
|
| + bool import_to_bookmark_bar)
|
| + : bookmarks_options_(0),
|
| + total_bookmarks_count_(0),
|
| + total_history_rows_count_(0),
|
| + total_fav_icons_count_(0),
|
| + process_importer_host_(importer_host),
|
| + profile_import_process_host_(NULL),
|
| + profile_info_(profile_info),
|
| + items_(items),
|
| + import_to_bookmark_bar_(import_to_bookmark_bar),
|
| + bridge_(bridge),
|
| + cancelled_(false) {
|
| + bridge_->AddRef();
|
| + process_importer_host_->NotifyImportStarted();
|
| +}
|
| +
|
| +ExternalProcessImporterClient::~ExternalProcessImporterClient() {
|
| + bridge_->Release();
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::CancelImportProcessOnIOThread() {
|
| + profile_import_process_host_->CancelProfileImportProcess();
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::NotifyItemFinishedOnIOThread(
|
| + importer::ImportItem import_item) {
|
| + profile_import_process_host_->ReportImportItemFinished(import_item);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::Cleanup() {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + if (process_importer_host_)
|
| + process_importer_host_->NotifyImportEnded();
|
| + Release();
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::Start() {
|
| + AddRef(); // balanced in Cleanup.
|
| + BrowserThread::ID thread_id;
|
| + CHECK(BrowserThread::GetCurrentThreadIdentifier(&thread_id));
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE,
|
| + NewRunnableMethod(this,
|
| + &ExternalProcessImporterClient::StartProcessOnIOThread,
|
| + g_browser_process->resource_dispatcher_host(), thread_id));
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::StartProcessOnIOThread(
|
| + ResourceDispatcherHost* rdh,
|
| + BrowserThread::ID thread_id) {
|
| + profile_import_process_host_ =
|
| + new ProfileImportProcessHost(rdh, this, thread_id);
|
| + profile_import_process_host_->StartProfileImportProcess(profile_info_,
|
| + items_, import_to_bookmark_bar_);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::Cancel() {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + cancelled_ = true;
|
| + if (profile_import_process_host_) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE,
|
| + NewRunnableMethod(this,
|
| + &ExternalProcessImporterClient::CancelImportProcessOnIOThread));
|
| + }
|
| + Release();
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnProcessCrashed(int exit_code) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + process_importer_host_->Cancel();
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnImportStart() {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + bridge_->NotifyStarted();
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnImportFinished(bool succeeded,
|
| + std::string error_msg) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + if (!succeeded)
|
| + LOG(WARNING) << "Import failed. Error: " << error_msg;
|
| + Cleanup();
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnImportItemStart(int item_data) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + bridge_->NotifyItemStarted(static_cast<importer::ImportItem>(item_data));
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnImportItemFinished(int item_data) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + importer::ImportItem import_item =
|
| + static_cast<importer::ImportItem>(item_data);
|
| + bridge_->NotifyItemEnded(import_item);
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO, FROM_HERE,
|
| + NewRunnableMethod(this,
|
| + &ExternalProcessImporterClient::NotifyItemFinishedOnIOThread,
|
| + import_item));
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnHistoryImportStart(
|
| + size_t total_history_rows_count) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + total_history_rows_count_ = total_history_rows_count;
|
| + history_rows_.reserve(total_history_rows_count);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnHistoryImportGroup(
|
| + const std::vector<history::URLRow>& history_rows_group,
|
| + int visit_source) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + history_rows_.insert(history_rows_.end(), history_rows_group.begin(),
|
| + history_rows_group.end());
|
| + if (history_rows_.size() == total_history_rows_count_)
|
| + bridge_->SetHistoryItems(history_rows_,
|
| + static_cast<history::VisitSource>(visit_source));
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnHomePageImportReady(
|
| + const GURL& home_page) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + bridge_->AddHomePage(home_page);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnBookmarksImportStart(
|
| + const std::wstring first_folder_name,
|
| + int options, size_t total_bookmarks_count) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + bookmarks_first_folder_name_ = first_folder_name;
|
| + bookmarks_options_ = options;
|
| + total_bookmarks_count_ = total_bookmarks_count;
|
| + bookmarks_.reserve(total_bookmarks_count);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnBookmarksImportGroup(
|
| + const std::vector<ProfileWriter::BookmarkEntry>& bookmarks_group) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + // Collect sets of bookmarks from importer process until we have reached
|
| + // total_bookmarks_count_:
|
| + bookmarks_.insert(bookmarks_.end(), bookmarks_group.begin(),
|
| + bookmarks_group.end());
|
| + if (bookmarks_.size() == total_bookmarks_count_) {
|
| + bridge_->AddBookmarkEntries(bookmarks_, bookmarks_first_folder_name_,
|
| + bookmarks_options_);
|
| + }
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnFavIconsImportStart(
|
| + size_t total_fav_icons_count) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + total_fav_icons_count_ = total_fav_icons_count;
|
| + fav_icons_.reserve(total_fav_icons_count);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnFavIconsImportGroup(
|
| + const std::vector<history::ImportedFavIconUsage>& fav_icons_group) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + fav_icons_.insert(fav_icons_.end(), fav_icons_group.begin(),
|
| + fav_icons_group.end());
|
| + if (fav_icons_.size() == total_fav_icons_count_)
|
| + bridge_->SetFavIcons(fav_icons_);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnPasswordFormImportReady(
|
| + const webkit_glue::PasswordForm& form) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + bridge_->SetPasswordForm(form);
|
| +}
|
| +
|
| +void ExternalProcessImporterClient::OnKeywordsImportReady(
|
| + const std::vector<TemplateURL>& template_urls,
|
| + int default_keyword_index, bool unique_on_host_and_path) {
|
| + if (cancelled_)
|
| + return;
|
| +
|
| + std::vector<TemplateURL*> template_url_vec;
|
| + template_url_vec.reserve(template_urls.size());
|
| + std::vector<TemplateURL>::const_iterator iter;
|
| + for (iter = template_urls.begin();
|
| + iter != template_urls.end();
|
| + ++iter) {
|
| + template_url_vec.push_back(new TemplateURL(*iter));
|
| + }
|
| + bridge_->SetKeywords(template_url_vec, default_keyword_index,
|
| + unique_on_host_and_path);
|
| +}
|
|
|