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..4896ab43dcdaab9460923757698b1b7917ea2d84 100644 |
--- a/chrome/browser/importer/external_process_importer_client.cc |
+++ b/chrome/browser/importer/external_process_importer_client.cc |
@@ -12,11 +12,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,7 +34,8 @@ ExternalProcessImporterClient::ExternalProcessImporterClient( |
source_profile_(source_profile), |
items_(items), |
bridge_(bridge), |
- cancelled_(false) { |
+ cancelled_(false), |
+ binding_(this) { |
process_importer_host_->NotifyImportStarted(); |
} |
@@ -54,11 +55,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 +74,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; |
gab
2016/11/07 20:07:31
Why is this method still needed?
tibell
2016/11/07 23:34:23
It's a (unfortunately) a pure virtual method in co
gab
2016/11/08 13:34:24
I see, does every mojo host need this to get OnPro
|
} |
void ExternalProcessImporterClient::OnImportStart() { |
@@ -137,29 +94,27 @@ void ExternalProcessImporterClient::OnImportFinished( |
Cleanup(); |
} |
-void ExternalProcessImporterClient::OnImportItemStart(int item_data) { |
+void ExternalProcessImporterClient::OnImportItemStart( |
+ importer::ImportItem item_data) { |
if (cancelled_) |
return; |
bridge_->NotifyItemStarted(static_cast<importer::ImportItem>(item_data)); |
Sam McNally
2016/11/07 06:31:07
Remove the cast.
gab
2016/11/07 20:07:31
and also rename the parameter to |import_item| sin
tibell
2016/11/07 23:34:23
Done.
tibell
2016/11/07 23:34:23
Done.
|
} |
-void ExternalProcessImporterClient::OnImportItemFinished(int item_data) { |
+void ExternalProcessImporterClient::OnImportItemFinished( |
+ importer::ImportItem item_data) { |
if (cancelled_) |
return; |
importer::ImportItem import_item = |
static_cast<importer::ImportItem>(item_data); |
gab
2016/11/07 20:07:32
no cast here too and rename param
tibell
2016/11/07 23:34:23
Done.
|
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 +145,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 +168,7 @@ void ExternalProcessImporterClient::OnBookmarksImportGroup( |
} |
void ExternalProcessImporterClient::OnFaviconsImportStart( |
- size_t total_favicons_count) { |
+ int total_favicons_count) { |
if (cancelled_) |
return; |
@@ -249,14 +204,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 +232,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,20 +251,10 @@ 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) { |
utility_process_host_ = |
@@ -326,6 +273,21 @@ void ExternalProcessImporterClient::StartProcessOnIOThread( |
utility_process_host_->SetEnv(env); |
#endif |
+ utility_process_host_->Start(); |
+ chrome::mojom::ProfileImportPtr profile_import; |
+ utility_process_host_->GetRemoteInterfaces()->GetInterface(&profile_import); |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
gab
2016/11/07 20:07:31
Does it matter that this on the UI thread? Is this
tibell
2016/11/07 23:34:23
I opted for Sam's suggestion below, which means we
|
+ base::Bind(&ExternalProcessImporterClient::SetupMojoOnUIThread, this, |
+ base::Passed(profile_import.PassInterface()))); |
+} |
+ |
+void ExternalProcessImporterClient::SetupMojoOnUIThread( |
Sam McNally
2016/11/07 06:31:07
Have you considered doing this in Start() and pass
tibell
2016/11/07 23:34:23
Done.
|
+ chrome::mojom::ProfileImportPtrInfo profile_import_ptr_info) { |
gab
2016/11/07 20:07:32
DCHECK(owning_sequence_->RunsTasksOnCurrentThread(
tibell
2016/11/07 23:34:23
Done.
|
+ profile_import_.Bind(std::move(profile_import_ptr_info)); |
+ auto observer_ptr = binding_.CreateInterfacePtrAndBind(); |
+ |
// Dictionary of all localized strings that could be needed by the importer |
// in the external process. |
base::DictionaryValue localized_strings; |
@@ -351,6 +313,11 @@ void ExternalProcessImporterClient::StartProcessOnIOThread( |
base::IntToString(IDS_BOOKMARK_BAR_FOLDER_NAME), |
l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_FOLDER_NAME)); |
- utility_process_host_->Send(new ProfileImportProcessMsg_StartImport( |
- source_profile_, items_, localized_strings)); |
+ profile_import_->StartImport(source_profile_, items_, localized_strings, |
+ std::move(observer_ptr)); |
gab
2016/11/07 20:07:32
#include <utility>
tibell
2016/11/07 23:34:23
Done.
|
+} |
+ |
+void ExternalProcessImporterClient::CloseMojoHandles() { |
gab
2016/11/07 20:07:32
DCHECK runs on proper sequence/thread?
tibell
2016/11/07 23:34:23
Fortunately Mojo itself checks this (which is conv
|
+ profile_import_.reset(); |
+ binding_.Close(); |
} |