Commit c0cc6e3b authored by sdefresne's avatar sdefresne Committed by Commit bot

Upstream iOS autofill driver implementation

BUG=437508

Review URL: https://codereview.chromium.org/964443002

Cr-Commit-Position: refs/heads/master@{#318723}
parent 789d213f
......@@ -459,5 +459,26 @@
},
],
}],
['OS == "ios"', {
'targets': [
{
'target_name': 'autofill_ios_browser',
'type': 'static_library',
'include_dirs': [
'..',
],
'dependencies': [
'autofill_core_browser',
'../ios/provider/ios_provider_web.gyp:ios_provider_web',
'../ios/web/ios_web.gyp:ios_web',
],
'sources': [
'autofill/ios/browser/autofill_driver_ios.h',
'autofill/ios/browser/autofill_driver_ios.mm',
'autofill/ios/browser/autofill_driver_ios_bridge.h',
],
},
],
}],
],
}
include_rules = [
"+ios/public/provider/web",
"+ios/web/public",
]
jdonnelly@chromium.org
// Copyright 2013 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.
#ifndef COMPONENTS_AUTOFILL_CONTENT_BROWSER_AUTOFILL_DRIVER_IOS_H_
#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_AUTOFILL_DRIVER_IOS_H_
#include <string>
#include "components/autofill/core/browser/autofill_client.h"
#include "components/autofill/core/browser/autofill_driver.h"
#include "components/autofill/core/browser/autofill_external_delegate.h"
#include "components/autofill/core/browser/autofill_manager.h"
#include "ios/web/public/web_state/web_state_user_data.h"
namespace web {
class WebState;
}
@protocol AutofillDriverIOSBridge;
namespace autofill {
class AutofillManagerDelegate;
// Class that drives autofill flow on iOS. There is one instance per
// WebContents.
class AutofillDriverIOS : public AutofillDriver,
public web::WebStateUserData<AutofillDriverIOS> {
public:
static void CreateForWebStateAndDelegate(
web::WebState* web_state,
AutofillClient* client,
id<AutofillDriverIOSBridge> bridge,
const std::string& app_locale,
AutofillManager::AutofillDownloadManagerState enable_download_manager);
// AutofillDriver:
bool IsOffTheRecord() const override;
net::URLRequestContextGetter* GetURLRequestContext() override;
bool RendererIsAvailable() override;
void SendFormDataToRenderer(int query_id,
RendererFormDataAction action,
const FormData& data) override;
void PingRenderer() override;
void DetectAccountCreationForms(
const std::vector<autofill::FormStructure*>& forms) override;
void SendAutofillTypePredictionsToRenderer(
const std::vector<FormStructure*>& forms) override;
void RendererShouldClearFilledForm() override;
void RendererShouldClearPreviewedForm() override;
void RendererShouldAcceptDataListSuggestion(
const base::string16& value) override;
base::SequencedWorkerPool* GetBlockingPool() override;
AutofillManager* autofill_manager() { return &autofill_manager_; }
void RendererShouldFillFieldWithValue(const base::string16& value) override;
void RendererShouldPreviewFieldWithValue(
const base::string16& value) override;
void PopupHidden() override;
private:
AutofillDriverIOS(
web::WebState* web_state,
AutofillClient* client,
id<AutofillDriverIOSBridge> bridge,
const std::string& app_locale,
AutofillManager::AutofillDownloadManagerState enable_download_manager);
~AutofillDriverIOS() override;
// The WebState with which this object is associated.
web::WebState* web_state_;
// AutofillDriverIOSBridge instance that is passed in.
id<AutofillDriverIOSBridge> bridge_;
// AutofillManager instance via which this object drives the shared Autofill
// code.
AutofillManager autofill_manager_;
// AutofillExternalDelegate instance that is passed to the AutofillManager.
AutofillExternalDelegate autofill_external_delegate_;
};
} // namespace autofill
#endif // COMPONENTS_AUTOFILL_CONTENT_BROWSER_AUTOFILL_DRIVER_IOS_H_
// Copyright 2013 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 "components/autofill/ios/browser/autofill_driver_ios.h"
#include "components/autofill/ios/browser/autofill_driver_ios_bridge.h"
#include "ios/web/public/browser_state.h"
#include "ios/web/public/web_state/web_state.h"
#include "ios/web/public/web_thread.h"
DEFINE_WEB_STATE_USER_DATA_KEY(autofill::AutofillDriverIOS);
namespace autofill {
// static
void AutofillDriverIOS::CreateForWebStateAndDelegate(
web::WebState* web_state,
AutofillClient* client,
id<AutofillDriverIOSBridge> bridge,
const std::string& app_locale,
AutofillManager::AutofillDownloadManagerState enable_download_manager) {
if (FromWebState(web_state))
return;
web_state->SetUserData(
UserDataKey(),
new AutofillDriverIOS(web_state, client, bridge, app_locale,
enable_download_manager));
}
AutofillDriverIOS::AutofillDriverIOS(
web::WebState* web_state,
AutofillClient* client,
id<AutofillDriverIOSBridge> bridge,
const std::string& app_locale,
AutofillManager::AutofillDownloadManagerState enable_download_manager)
: web_state_(web_state),
bridge_(bridge),
autofill_manager_(this, client, app_locale, enable_download_manager),
autofill_external_delegate_(&autofill_manager_, this) {
autofill_manager_.SetExternalDelegate(&autofill_external_delegate_);
}
AutofillDriverIOS::~AutofillDriverIOS() {}
bool AutofillDriverIOS::IsOffTheRecord() const {
return web_state_->GetBrowserState()->IsOffTheRecord();
}
net::URLRequestContextGetter* AutofillDriverIOS::GetURLRequestContext() {
return web_state_->GetBrowserState()->GetRequestContext();
}
base::SequencedWorkerPool* AutofillDriverIOS::GetBlockingPool() {
return web::WebThread::GetBlockingPool();
}
bool AutofillDriverIOS::RendererIsAvailable() {
return true;
}
void AutofillDriverIOS::SendFormDataToRenderer(
int query_id,
RendererFormDataAction action,
const FormData& data) {
[bridge_ onFormDataFilled:query_id result:data];
}
void AutofillDriverIOS::PingRenderer() {
}
void AutofillDriverIOS::DetectAccountCreationForms(
const std::vector<autofill::FormStructure*>& forms) {
autofill_manager_.client()->DetectAccountCreationForms(nullptr, forms);
};
void AutofillDriverIOS::SendAutofillTypePredictionsToRenderer(
const std::vector<FormStructure*>& forms) {
[bridge_ sendAutofillTypePredictionsToRenderer:forms];
}
void AutofillDriverIOS::RendererShouldAcceptDataListSuggestion(
const base::string16& value) {
}
void AutofillDriverIOS::RendererShouldClearFilledForm() {
}
void AutofillDriverIOS::RendererShouldClearPreviewedForm() {
}
void AutofillDriverIOS::RendererShouldFillFieldWithValue(
const base::string16& value) {
}
void AutofillDriverIOS::RendererShouldPreviewFieldWithValue(
const base::string16& value) {
}
void AutofillDriverIOS::PopupHidden() {
}
} // namespace autofill
// Copyright 2014 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.
#ifndef COMPONENTS_AUTOFILL_IOS_BROWSER_AUTOFILL_DRIVER_IOS_BRIDGE_H_
#define COMPONENTS_AUTOFILL_IOS_BROWSER_AUTOFILL_DRIVER_IOS_BRIDGE_H_
namespace autofill {
struct FormData;
class FormStructure;
}
@protocol AutofillDriverIOSBridge
- (void)onFormDataFilled:(uint16)query_id
result:(const autofill::FormData&)result;
- (void)sendAutofillTypePredictionsToRenderer:
(const std::vector<autofill::FormStructure*>&)forms;
@end
#endif // COMPONENTS_AUTOFILL_IOS_BROWSER_AUTOFILL_DRIVER_IOS_BRIDGE_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment