Chromium Code Reviews| 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 |
| index 325691bf5f862668efe04109905bbbc81a0a07cc..1c95a28156d50aa97086d6cf97b43b82e3741a7d 100644 |
| --- a/chrome/browser/importer/external_process_importer_client.cc |
| +++ b/chrome/browser/importer/external_process_importer_client.cc |
| @@ -4,6 +4,8 @@ |
| #include "chrome/browser/importer/external_process_importer_client.h" |
| +#include <utility> |
| + |
| #include "base/bind.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "build/build_config.h" |
| @@ -12,11 +14,11 @@ |
| #include "chrome/browser/importer/in_process_importer_bridge.h" |
| #include "chrome/common/importer/firefox_importer_utils.h" |
| #include "chrome/common/importer/imported_bookmark_entry.h" |
| -#include "chrome/common/importer/profile_import_process_messages.h" |
| #include "chrome/grit/generated_resources.h" |
| #include "components/strings/grit/components_strings.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/utility_process_host.h" |
| +#include "services/service_manager/public/cpp/interface_provider.h" |
| #include "ui/base/l10n/l10n_util.h" |
| using content::BrowserThread; |
| @@ -34,19 +36,52 @@ ExternalProcessImporterClient::ExternalProcessImporterClient( |
| source_profile_(source_profile), |
| items_(items), |
| bridge_(bridge), |
| - cancelled_(false) { |
| + cancelled_(false), |
| + binding_(this) { |
| process_importer_host_->NotifyImportStarted(); |
| } |
| void ExternalProcessImporterClient::Start() { |
| AddRef(); // balanced in Cleanup. |
| + |
| + chrome::mojom::ProfileImportRequest request = |
| + mojo::GetProxy(&profile_import_); |
| + |
| BrowserThread::ID thread_id; |
| CHECK(BrowserThread::GetCurrentThreadIdentifier(&thread_id)); |
| BrowserThread::PostTask( |
| BrowserThread::IO, FROM_HERE, |
| - base::Bind(&ExternalProcessImporterClient::StartProcessOnIOThread, |
| - this, |
| - thread_id)); |
| + base::Bind(&ExternalProcessImporterClient::StartProcessOnIOThread, this, |
| + thread_id, base::Passed(&request))); |
|
gab
2016/11/08 13:34:24
Using base::Passed() on a pointer to a local varia
tibell
2016/11/09 23:08:41
Done.
|
| + |
| + // Dictionary of all localized strings that could be needed by the importer |
| + // in the external process. |
| + base::DictionaryValue localized_strings; |
| + localized_strings.SetString(base::IntToString(IDS_BOOKMARK_GROUP), |
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_GROUP)); |
| + localized_strings.SetString( |
| + base::IntToString(IDS_BOOKMARK_GROUP_FROM_FIREFOX), |
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_GROUP_FROM_FIREFOX)); |
| + localized_strings.SetString( |
| + base::IntToString(IDS_BOOKMARK_GROUP_FROM_SAFARI), |
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_GROUP_FROM_SAFARI)); |
| + localized_strings.SetString( |
| + base::IntToString(IDS_IMPORT_FROM_FIREFOX), |
| + l10n_util::GetStringUTF8(IDS_IMPORT_FROM_FIREFOX)); |
| + localized_strings.SetString( |
| + base::IntToString(IDS_IMPORT_FROM_ICEWEASEL), |
| + l10n_util::GetStringUTF8(IDS_IMPORT_FROM_ICEWEASEL)); |
| + localized_strings.SetString(base::IntToString(IDS_IMPORT_FROM_SAFARI), |
| + l10n_util::GetStringUTF8(IDS_IMPORT_FROM_SAFARI)); |
| + localized_strings.SetString( |
| + base::IntToString(IDS_BOOKMARK_BAR_FOLDER_NAME), |
| + l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_FOLDER_NAME)); |
| + |
| + // If the utility process hasn't started yet the message will queue until it |
| + // does. |
| + auto observer_ptr = binding_.CreateInterfacePtrAndBind(); |
| + profile_import_->StartImport(source_profile_, items_, localized_strings, |
| + std::move(observer_ptr)); |
| } |
| void ExternalProcessImporterClient::Cancel() { |
| @@ -54,11 +89,9 @@ void ExternalProcessImporterClient::Cancel() { |
| return; |
| cancelled_ = true; |
| - BrowserThread::PostTask( |
| - BrowserThread::IO, FROM_HERE, |
| - base::Bind( |
| - &ExternalProcessImporterClient::CancelImportProcessOnIOThread, |
| - this)); |
| + if (utility_process_host_.get()) |
| + profile_import_->CancelImport(); |
| + CloseMojoHandles(); |
| Release(); |
| } |
| @@ -75,49 +108,7 @@ void ExternalProcessImporterClient::OnProcessCrashed(int exit_code) { |
| bool ExternalProcessImporterClient::OnMessageReceived( |
| const IPC::Message& message) { |
| - bool handled = true; |
| - IPC_BEGIN_MESSAGE_MAP(ExternalProcessImporterClient, message) |
| - // Notification messages about the state of the import process. |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_Import_Started, |
| - OnImportStart) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_Import_Finished, |
| - OnImportFinished) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_ImportItem_Started, |
| - OnImportItemStart) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_ImportItem_Finished, |
| - OnImportItemFinished) |
| - // Data messages containing items to be written to the user profile. |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyHistoryImportStart, |
| - OnHistoryImportStart) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyHistoryImportGroup, |
| - OnHistoryImportGroup) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyHomePageImportReady, |
| - OnHomePageImportReady) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyBookmarksImportStart, |
| - OnBookmarksImportStart) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyBookmarksImportGroup, |
| - OnBookmarksImportGroup) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyFaviconsImportStart, |
| - OnFaviconsImportStart) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyFaviconsImportGroup, |
| - OnFaviconsImportGroup) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyPasswordFormReady, |
| - OnPasswordFormImportReady) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyKeywordsReady, |
| - OnKeywordsImportReady) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyFirefoxSearchEngData, |
| - OnFirefoxSearchEngineDataReceived) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_AutofillFormDataImportStart, |
| - OnAutofillFormDataImportStart) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_AutofillFormDataImportGroup, |
| - OnAutofillFormDataImportGroup) |
| -#if defined(OS_WIN) |
| - IPC_MESSAGE_HANDLER(ProfileImportProcessHostMsg_NotifyIE7PasswordInfo, |
| - OnIE7PasswordReceived) |
| -#endif |
| - IPC_MESSAGE_UNHANDLED(handled = false) |
| - IPC_END_MESSAGE_MAP() |
| - return handled; |
| + return false; |
| } |
| void ExternalProcessImporterClient::OnImportStart() { |
| @@ -137,29 +128,25 @@ void ExternalProcessImporterClient::OnImportFinished( |
| Cleanup(); |
| } |
| -void ExternalProcessImporterClient::OnImportItemStart(int item_data) { |
| +void ExternalProcessImporterClient::OnImportItemStart( |
| + importer::ImportItem import_item) { |
| if (cancelled_) |
| return; |
| - bridge_->NotifyItemStarted(static_cast<importer::ImportItem>(item_data)); |
| + bridge_->NotifyItemStarted(import_item); |
| } |
| -void ExternalProcessImporterClient::OnImportItemFinished(int item_data) { |
| +void ExternalProcessImporterClient::OnImportItemFinished( |
| + importer::ImportItem import_item) { |
| if (cancelled_) |
| return; |
| - importer::ImportItem import_item = |
| - static_cast<importer::ImportItem>(item_data); |
| bridge_->NotifyItemEnded(import_item); |
| - BrowserThread::PostTask( |
| - BrowserThread::IO, FROM_HERE, |
| - base::Bind(&ExternalProcessImporterClient::NotifyItemFinishedOnIOThread, |
| - this, |
| - import_item)); |
| + profile_import_->ReportImportItemFinished(import_item); |
| } |
| void ExternalProcessImporterClient::OnHistoryImportStart( |
| - size_t total_history_rows_count) { |
| + int total_history_rows_count) { |
| if (cancelled_) |
| return; |
| @@ -190,7 +177,7 @@ void ExternalProcessImporterClient::OnHomePageImportReady( |
| void ExternalProcessImporterClient::OnBookmarksImportStart( |
| const base::string16& first_folder_name, |
| - size_t total_bookmarks_count) { |
| + int total_bookmarks_count) { |
| if (cancelled_) |
| return; |
| @@ -213,7 +200,7 @@ void ExternalProcessImporterClient::OnBookmarksImportGroup( |
| } |
| void ExternalProcessImporterClient::OnFaviconsImportStart( |
| - size_t total_favicons_count) { |
| + int total_favicons_count) { |
| if (cancelled_) |
| return; |
| @@ -249,14 +236,14 @@ void ExternalProcessImporterClient::OnKeywordsImportReady( |
| } |
| void ExternalProcessImporterClient::OnFirefoxSearchEngineDataReceived( |
| - const std::vector<std::string> search_engine_data) { |
| + const std::vector<std::string>& search_engine_data) { |
| if (cancelled_) |
| return; |
| bridge_->SetFirefoxSearchEnginesXMLData(search_engine_data); |
| } |
| void ExternalProcessImporterClient::OnAutofillFormDataImportStart( |
| - size_t total_autofill_form_data_entry_count) { |
| + int total_autofill_form_data_entry_count) { |
| if (cancelled_) |
| return; |
| @@ -277,14 +264,16 @@ void ExternalProcessImporterClient::OnAutofillFormDataImportGroup( |
| bridge_->SetAutofillFormData(autofill_form_data_); |
| } |
| -#if defined(OS_WIN) |
| void ExternalProcessImporterClient::OnIE7PasswordReceived( |
| const importer::ImporterIE7PasswordInfo& importer_password_info) { |
| +#if defined(OS_WIN) |
| if (cancelled_) |
| return; |
| bridge_->AddIE7PasswordInfo(importer_password_info); |
| -} |
| +#else |
| + NOTREACHED(); |
| #endif |
| +} |
| ExternalProcessImporterClient::~ExternalProcessImporterClient() {} |
| @@ -294,22 +283,13 @@ void ExternalProcessImporterClient::Cleanup() { |
| if (process_importer_host_.get()) |
| process_importer_host_->NotifyImportEnded(); |
| + CloseMojoHandles(); |
| Release(); |
| } |
| -void ExternalProcessImporterClient::CancelImportProcessOnIOThread() { |
| - if (utility_process_host_.get()) |
| - utility_process_host_->Send(new ProfileImportProcessMsg_CancelImport()); |
| -} |
| - |
| -void ExternalProcessImporterClient::NotifyItemFinishedOnIOThread( |
| - importer::ImportItem import_item) { |
| - utility_process_host_->Send( |
| - new ProfileImportProcessMsg_ReportImportItemFinished(import_item)); |
| -} |
| - |
| void ExternalProcessImporterClient::StartProcessOnIOThread( |
| - BrowserThread::ID thread_id) { |
| + BrowserThread::ID thread_id, |
| + chrome::mojom::ProfileImportRequest request) { |
| utility_process_host_ = |
| UtilityProcessHost::Create( |
| this, BrowserThread::GetTaskRunnerForThread(thread_id).get()) |
| @@ -326,31 +306,13 @@ void ExternalProcessImporterClient::StartProcessOnIOThread( |
| utility_process_host_->SetEnv(env); |
| #endif |
| - // Dictionary of all localized strings that could be needed by the importer |
| - // in the external process. |
| - base::DictionaryValue localized_strings; |
| - localized_strings.SetString( |
| - base::IntToString(IDS_BOOKMARK_GROUP), |
| - l10n_util::GetStringUTF8(IDS_BOOKMARK_GROUP)); |
| - localized_strings.SetString( |
| - base::IntToString(IDS_BOOKMARK_GROUP_FROM_FIREFOX), |
| - l10n_util::GetStringUTF8(IDS_BOOKMARK_GROUP_FROM_FIREFOX)); |
| - localized_strings.SetString( |
| - base::IntToString(IDS_BOOKMARK_GROUP_FROM_SAFARI), |
| - l10n_util::GetStringUTF8(IDS_BOOKMARK_GROUP_FROM_SAFARI)); |
| - localized_strings.SetString( |
| - base::IntToString(IDS_IMPORT_FROM_FIREFOX), |
| - l10n_util::GetStringUTF8(IDS_IMPORT_FROM_FIREFOX)); |
| - localized_strings.SetString( |
| - base::IntToString(IDS_IMPORT_FROM_ICEWEASEL), |
| - l10n_util::GetStringUTF8(IDS_IMPORT_FROM_ICEWEASEL)); |
| - localized_strings.SetString( |
| - base::IntToString(IDS_IMPORT_FROM_SAFARI), |
| - l10n_util::GetStringUTF8(IDS_IMPORT_FROM_SAFARI)); |
| - localized_strings.SetString( |
| - base::IntToString(IDS_BOOKMARK_BAR_FOLDER_NAME), |
| - l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_FOLDER_NAME)); |
| + utility_process_host_->Start(); |
| + chrome::mojom::ProfileImportPtr profile_import; |
| + utility_process_host_->GetRemoteInterfaces()->GetInterface( |
| + std::move(request)); |
| +} |
| - utility_process_host_->Send(new ProfileImportProcessMsg_StartImport( |
| - source_profile_, items_, localized_strings)); |
| +void ExternalProcessImporterClient::CloseMojoHandles() { |
| + profile_import_.reset(); |
| + binding_.Close(); |
| } |