Index: components/autofill/content/browser/content_autofill_driver.cc |
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc |
index 8d091cdcb0ec325fb5786480a99a2a4083dd15ac..0806760c645ea71a7b38fa911947941856005ea2 100644 |
--- a/components/autofill/content/browser/content_autofill_driver.cc |
+++ b/components/autofill/content/browser/content_autofill_driver.cc |
@@ -8,6 +8,7 @@ |
#include "base/command_line.h" |
#include "base/threading/sequenced_worker_pool.h" |
+#include "components/autofill/content/browser/content_autofill_driver_factory.h" |
#include "components/autofill/content/common/autofill_messages.h" |
#include "components/autofill/core/browser/autofill_client.h" |
#include "components/autofill/core/browser/autofill_external_delegate.h" |
@@ -23,7 +24,8 @@ |
#include "content/public/browser/render_widget_host_view.h" |
#include "content/public/browser/site_instance.h" |
#include "content/public/browser/storage_partition.h" |
-#include "ipc/ipc_message_macros.h" |
+#include "content/public/browser/web_contents.h" |
+#include "mojo/common/common_type_converters.h" |
#include "services/shell/public/cpp/interface_provider.h" |
#include "ui/gfx/geometry/size_f.h" |
@@ -40,14 +42,24 @@ ContentAutofillDriver::ContentAutofillDriver( |
client, |
app_locale, |
enable_download_manager)), |
- autofill_external_delegate_(autofill_manager_.get(), this) { |
+ autofill_external_delegate_(autofill_manager_.get(), this), |
+ binding_(this) { |
autofill_manager_->SetExternalDelegate(&autofill_external_delegate_); |
} |
ContentAutofillDriver::~ContentAutofillDriver() {} |
+// static |
+ContentAutofillDriver* ContentAutofillDriver::GetForRenderFrameHost( |
+ content::RenderFrameHost* render_frame_host) { |
+ ContentAutofillDriverFactory* factory = |
+ ContentAutofillDriverFactory::FromWebContents( |
+ content::WebContents::FromRenderFrameHost(render_frame_host)); |
+ return factory ? factory->DriverForFrame(render_frame_host) : nullptr; |
+} |
+ |
void ContentAutofillDriver::BindRequest(mojom::AutofillDriverRequest request) { |
- bindings_.AddBinding(this, std::move(request)); |
+ binding_.Bind(std::move(request)); |
} |
bool ContentAutofillDriver::IsOffTheRecord() const { |
@@ -76,14 +88,13 @@ void ContentAutofillDriver::SendFormDataToRenderer( |
const FormData& data) { |
if (!RendererIsAvailable()) |
return; |
+ |
switch (action) { |
case FORM_DATA_ACTION_FILL: |
- render_frame_host_->Send(new AutofillMsg_FillForm( |
- render_frame_host_->GetRoutingID(), query_id, data)); |
+ GetAutofillAgent()->FillForm(query_id, data); |
break; |
case FORM_DATA_ACTION_PREVIEW: |
- render_frame_host_->Send(new AutofillMsg_PreviewForm( |
- render_frame_host_->GetRoutingID(), query_id, data)); |
+ GetAutofillAgent()->PreviewForm(query_id, data); |
break; |
} |
} |
@@ -105,46 +116,41 @@ void ContentAutofillDriver::SendAutofillTypePredictionsToRenderer( |
std::vector<FormDataPredictions> type_predictions = |
FormStructure::GetFieldTypePredictions(forms); |
- render_frame_host_->Send(new AutofillMsg_FieldTypePredictionsAvailable( |
- render_frame_host_->GetRoutingID(), type_predictions)); |
+ GetAutofillAgent()->FieldTypePredictionsAvailable( |
+ std::move(type_predictions)); |
} |
void ContentAutofillDriver::RendererShouldAcceptDataListSuggestion( |
const base::string16& value) { |
if (!RendererIsAvailable()) |
return; |
- render_frame_host_->Send(new AutofillMsg_AcceptDataListSuggestion( |
- render_frame_host_->GetRoutingID(), value)); |
+ GetAutofillAgent()->AcceptDataListSuggestion(mojo::String::From(value)); |
} |
void ContentAutofillDriver::RendererShouldClearFilledForm() { |
if (!RendererIsAvailable()) |
return; |
- render_frame_host_->Send( |
- new AutofillMsg_ClearForm(render_frame_host_->GetRoutingID())); |
+ GetAutofillAgent()->ClearForm(); |
} |
void ContentAutofillDriver::RendererShouldClearPreviewedForm() { |
if (!RendererIsAvailable()) |
return; |
- render_frame_host_->Send( |
- new AutofillMsg_ClearPreviewedForm(render_frame_host_->GetRoutingID())); |
+ GetAutofillAgent()->ClearPreviewedForm(); |
} |
void ContentAutofillDriver::RendererShouldFillFieldWithValue( |
const base::string16& value) { |
if (!RendererIsAvailable()) |
return; |
- render_frame_host_->Send(new AutofillMsg_FillFieldWithValue( |
- render_frame_host_->GetRoutingID(), value)); |
+ GetAutofillAgent()->FillFieldWithValue(mojo::String::From(value)); |
} |
void ContentAutofillDriver::RendererShouldPreviewFieldWithValue( |
const base::string16& value) { |
if (!RendererIsAvailable()) |
return; |
- render_frame_host_->Send(new AutofillMsg_PreviewFieldWithValue( |
- render_frame_host_->GetRoutingID(), value)); |
+ GetAutofillAgent()->PreviewFieldWithValue(mojo::String::From(value)); |
} |
void ContentAutofillDriver::PopupHidden() { |
@@ -172,47 +178,65 @@ void ContentAutofillDriver::FirstUserGestureObserved() { |
client_->OnFirstUserGestureObserved(); |
} |
-bool ContentAutofillDriver::HandleMessage(const IPC::Message& message) { |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(ContentAutofillDriver, message) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_FormsSeen, |
- autofill_manager_.get(), |
- AutofillManager::OnFormsSeen) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_WillSubmitForm, autofill_manager_.get(), |
- AutofillManager::OnWillSubmitForm) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_FormSubmitted, |
- autofill_manager_.get(), |
- AutofillManager::OnFormSubmitted) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_TextFieldDidChange, |
- autofill_manager_.get(), |
- AutofillManager::OnTextFieldDidChange) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_FocusNoLongerOnForm, |
- autofill_manager_.get(), |
- AutofillManager::OnFocusNoLongerOnForm) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_QueryFormFieldAutofill, |
- autofill_manager_.get(), |
- AutofillManager::OnQueryFormFieldAutofill) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_DidPreviewAutofillFormData, |
- autofill_manager_.get(), |
- AutofillManager::OnDidPreviewAutofillFormData) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_PingAck, |
- &autofill_external_delegate_, |
- AutofillExternalDelegate::OnPingAck) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_DidFillAutofillFormData, |
- autofill_manager_.get(), |
- AutofillManager::OnDidFillAutofillFormData) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_DidEndTextFieldEditing, |
- autofill_manager_.get(), |
- AutofillManager::OnDidEndTextFieldEditing) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_HidePopup, |
- autofill_manager_.get(), |
- AutofillManager::OnHidePopup) |
- IPC_MESSAGE_FORWARD(AutofillHostMsg_SetDataList, |
- autofill_manager_.get(), |
- AutofillManager::OnSetDataList) |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled; |
+void ContentAutofillDriver::FormsSeen(mojo::Array<FormData> forms, |
+ const base::TimeTicks& timestamp) { |
+ autofill_manager_->OnFormsSeen(forms.storage(), timestamp); |
+} |
+ |
+void ContentAutofillDriver::WillSubmitForm(const FormData& form, |
+ const base::TimeTicks& timestamp) { |
+ autofill_manager_->OnWillSubmitForm(form, timestamp); |
+} |
+ |
+void ContentAutofillDriver::FormSubmitted(const FormData& form) { |
+ autofill_manager_->OnFormSubmitted(form); |
+} |
+ |
+void ContentAutofillDriver::TextFieldDidChange( |
+ const FormData& form, |
+ const FormFieldData& field, |
+ const base::TimeTicks& timestamp) { |
+ autofill_manager_->OnTextFieldDidChange(form, field, timestamp); |
+} |
+ |
+void ContentAutofillDriver::QueryFormFieldAutofill( |
+ int32_t id, |
+ const FormData& form, |
+ const FormFieldData& field, |
+ const gfx::RectF& bounding_box) { |
+ autofill_manager_->OnQueryFormFieldAutofill(id, form, field, bounding_box); |
+} |
+ |
+void ContentAutofillDriver::HidePopup() { |
+ autofill_manager_->OnHidePopup(); |
+} |
+ |
+void ContentAutofillDriver::PingAck() { |
+ autofill_external_delegate_.OnPingAck(); |
+} |
+ |
+void ContentAutofillDriver::FocusNoLongerOnForm() { |
+ autofill_manager_->OnFocusNoLongerOnForm(); |
+} |
+ |
+void ContentAutofillDriver::DidFillAutofillFormData( |
+ const FormData& form, |
+ const base::TimeTicks& timestamp) { |
+ autofill_manager_->OnDidFillAutofillFormData(form, timestamp); |
+} |
+ |
+void ContentAutofillDriver::DidPreviewAutofillFormData() { |
+ autofill_manager_->OnDidPreviewAutofillFormData(); |
+} |
+ |
+void ContentAutofillDriver::DidEndTextFieldEditing() { |
+ autofill_manager_->OnDidEndTextFieldEditing(); |
+} |
+ |
+void ContentAutofillDriver::SetDataList(mojo::Array<mojo::String> values, |
+ mojo::Array<mojo::String> labels) { |
+ autofill_manager_->OnSetDataList(values.To<std::vector<base::string16>>(), |
+ labels.To<std::vector<base::string16>>()); |
} |
void ContentAutofillDriver::DidNavigateFrame( |
@@ -229,16 +253,16 @@ void ContentAutofillDriver::SetAutofillManager( |
} |
void ContentAutofillDriver::NotifyFirstUserGestureObservedInTab() { |
- ConnectToMojoAutofillAgentIfNeeded(); |
- mojo_autofill_agent_->FirstUserGestureObservedInTab(); |
+ GetAutofillAgent()->FirstUserGestureObservedInTab(); |
} |
-void ContentAutofillDriver::ConnectToMojoAutofillAgentIfNeeded() { |
- if (mojo_autofill_agent_) |
- return; |
+const mojom::AutofillAgentPtr& ContentAutofillDriver::GetAutofillAgent() { |
+ if (!mojo_autofill_agent_) { |
+ render_frame_host_->GetRemoteInterfaces()->GetInterface( |
+ mojo::GetProxy(&mojo_autofill_agent_)); |
dcheng
2016/07/12 14:22:12
I guess we do this lazy binding to avoid connectin
leonhsl(Using Gerrit)
2016/07/13 03:48:30
Done.
|
+ } |
- render_frame_host_->GetRemoteInterfaces()->GetInterface( |
- &mojo_autofill_agent_); |
+ return mojo_autofill_agent_; |
} |
} // namespace autofill |