diff --git a/shell/browser/atom_autofill_driver.cc b/shell/browser/atom_autofill_driver.cc index 78e7e82ff05fa..dd6bedf4d41ec 100644 --- a/shell/browser/atom_autofill_driver.cc +++ b/shell/browser/atom_autofill_driver.cc @@ -12,18 +12,16 @@ namespace electron { -AutofillDriver::AutofillDriver(content::RenderFrameHost* render_frame_host) +AutofillDriver::AutofillDriver( + content::RenderFrameHost* render_frame_host, + mojom::ElectronAutofillDriverAssociatedRequest request) : render_frame_host_(render_frame_host), binding_(this) { autofill_popup_.reset(new AutofillPopup()); + binding_.Bind(std::move(request)); } AutofillDriver::~AutofillDriver() {} -void AutofillDriver::BindRequest( - mojom::ElectronAutofillDriverAssociatedRequest request) { - binding_.Bind(std::move(request)); -} - void AutofillDriver::ShowAutofillPopup( const gfx::RectF& bounds, const std::vector& values, diff --git a/shell/browser/atom_autofill_driver.h b/shell/browser/atom_autofill_driver.h index 8be0afd14a3e2..b30521491d6b6 100644 --- a/shell/browser/atom_autofill_driver.h +++ b/shell/browser/atom_autofill_driver.h @@ -19,12 +19,11 @@ namespace electron { class AutofillDriver : public mojom::ElectronAutofillDriver { public: - explicit AutofillDriver(content::RenderFrameHost* render_frame_host); + AutofillDriver(content::RenderFrameHost* render_frame_host, + mojom::ElectronAutofillDriverAssociatedRequest request); ~AutofillDriver() override; - void BindRequest(mojom::ElectronAutofillDriverAssociatedRequest request); - void ShowAutofillPopup(const gfx::RectF& bounds, const std::vector& values, const std::vector& labels) override; diff --git a/shell/browser/atom_autofill_driver_factory.cc b/shell/browser/atom_autofill_driver_factory.cc index d922b925c52a3..bcac60d8c4beb 100644 --- a/shell/browser/atom_autofill_driver_factory.cc +++ b/shell/browser/atom_autofill_driver_factory.cc @@ -20,8 +20,10 @@ namespace electron { namespace { std::unique_ptr CreateDriver( - content::RenderFrameHost* render_frame_host) { - return std::make_unique(render_frame_host); + content::RenderFrameHost* render_frame_host, + mojom::ElectronAutofillDriverAssociatedRequest request) { + return std::make_unique(render_frame_host, + std::move(request)); } } // namespace @@ -43,8 +45,10 @@ void AutofillDriverFactory::BindAutofillDriver( return; AutofillDriver* driver = factory->DriverForFrame(render_frame_host); - if (driver) - driver->BindRequest(std::move(request)); + if (!driver) + factory->AddDriverForFrame( + render_frame_host, + base::BindOnce(CreateDriver, render_frame_host, std::move(request))); } AutofillDriverFactory::AutofillDriverFactory(content::WebContents* web_contents) @@ -57,12 +61,6 @@ AutofillDriverFactory::AutofillDriverFactory(content::WebContents* web_contents) } } -void AutofillDriverFactory::RenderFrameCreated( - content::RenderFrameHost* render_frame_host) { - AddDriverForFrame(render_frame_host, - base::Bind(CreateDriver, render_frame_host)); -} - void AutofillDriverFactory::RenderFrameDeleted( content::RenderFrameHost* render_frame_host) { DeleteDriverForFrame(render_frame_host); @@ -88,12 +86,12 @@ AutofillDriver* AutofillDriverFactory::DriverForFrame( void AutofillDriverFactory::AddDriverForFrame( content::RenderFrameHost* render_frame_host, - base::Callback()> factory_method) { + CreationCallback factory_method) { auto insertion_result = driver_map_.insert(std::make_pair(render_frame_host, nullptr)); // This can be called twice for the key representing the main frame. if (insertion_result.second) { - insertion_result.first->second = factory_method.Run(); + insertion_result.first->second = std::move(factory_method).Run(); } } diff --git a/shell/browser/atom_autofill_driver_factory.h b/shell/browser/atom_autofill_driver_factory.h index 3aeab5b4da416..bcf0b4a29cacc 100644 --- a/shell/browser/atom_autofill_driver_factory.h +++ b/shell/browser/atom_autofill_driver_factory.h @@ -21,6 +21,9 @@ class AutofillDriverFactory : public content::WebContentsObserver, public content::WebContentsUserData { public: + typedef base::OnceCallback()> + CreationCallback; + ~AutofillDriverFactory() override; static void BindAutofillDriver( @@ -28,15 +31,13 @@ class AutofillDriverFactory content::RenderFrameHost* render_frame_host); // content::WebContentsObserver: - void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; void DidFinishNavigation( content::NavigationHandle* navigation_handle) override; AutofillDriver* DriverForFrame(content::RenderFrameHost* render_frame_host); - void AddDriverForFrame( - content::RenderFrameHost* render_frame_host, - base::Callback()> factory_method); + void AddDriverForFrame(content::RenderFrameHost* render_frame_host, + CreationCallback factory_method); void DeleteDriverForFrame(content::RenderFrameHost* render_frame_host); void CloseAllPopups();