Commit 023e0f3b authored by gogerald's avatar gogerald Committed by Commit Bot

[Autofill Assistant] Implement processAction for use card and address actions

Bug: 806868
Change-Id: Ic4628b11191d2be98e892fce107464ee694301ed
Reviewed-on: https://chromium-review.googlesource.com/1184149
Commit-Queue: Ganggui Tang <gogerald@chromium.org>
Reviewed-by: default avatarRouslan Solomakhin <rouslan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#585483}
parent 2ce1e034
......@@ -55,6 +55,18 @@ void AssistantUiControllerAndroid::HideOverlay() {
java_assistant_ui_controller_);
}
void AssistantUiControllerAndroid::ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) {
// TODO(crbug.com/806868): Implement ChooseAddress.
std::move(callback).Run("");
}
void AssistantUiControllerAndroid::ChooseCard(
base::OnceCallback<void(const std::string&)> callback) {
// TODO(crbug.com/806868): Implement ChooseCard.
std::move(callback).Run("");
}
void AssistantUiControllerAndroid::Destroy(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
ui_delegate_->OnDestroy();
......
......@@ -27,6 +27,10 @@ class AssistantUiControllerAndroid : public AssistantUiController {
void ShowStatusMessage(const std::string& message) override;
void ShowOverlay() override;
void HideOverlay() override;
void ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) override;
void ChooseCard(
base::OnceCallback<void(const std::string&)> callback) override;
// Called by Java.
void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
......@@ -41,4 +45,4 @@ class AssistantUiControllerAndroid : public AssistantUiController {
};
} // namespace autofill_assistant.
#endif // CHROME_BROWSER_ANDROID_AUTOFILL_ASSISTANT_ASSISTANT_UI_CONTROLLER_ANDROID_H_
\ No newline at end of file
#endif // CHROME_BROWSER_ANDROID_AUTOFILL_ASSISTANT_ASSISTANT_UI_CONTROLLER_ANDROID_H_
......@@ -5,7 +5,7 @@
#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_ACTION_H_
#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_ACTION_H_
#include "base/callback.h"
#include "base/callback_forward.h"
#include "components/autofill_assistant/browser/assistant.pb.h"
namespace autofill_assistant {
......
......@@ -27,6 +27,30 @@ class AssistantActionDelegate {
virtual void ElementExists(const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) = 0;
// Ask user to choose an address in personal data manager. GUID of the chosen
// address will be returned through callback if succeed, otherwise empty
// string is returned.
virtual void ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) = 0;
// Fill the address form given by |selectors| with the given address |guid| in
// personal data manager.
virtual void FillAddressForm(const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) = 0;
// Ask user to choose a card in personal data manager. GUID of the chosen card
// will be returned through callback if succeed, otherwise empty string is
// returned.
virtual void ChooseCard(
base::OnceCallback<void(const std::string&)> callback) = 0;
// Fill the card form given by |selectors| with the given card |guid| in
// personal data manager.
virtual void FillCardForm(const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) = 0;
protected:
AssistantActionDelegate() = default;
};
......
......@@ -2,10 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/autofill_assistant/browser/actions/assistant_click_action.h"
#include <utility>
#include "base/callback.h"
#include "components/autofill_assistant/browser/actions/assistant_action_delegate.h"
#include "components/autofill_assistant/browser/actions/assistant_click_action.h"
namespace autofill_assistant {
......
......@@ -3,10 +3,12 @@
// found in the LICENSE file.
#include "components/autofill_assistant/browser/actions/assistant_tell_action.h"
#include "components/autofill_assistant/browser/actions/assistant_action_delegate.h"
#include <utility>
#include "base/callback.h"
#include "components/autofill_assistant/browser/actions/assistant_action_delegate.h"
namespace autofill_assistant {
AssistantTellAction::AssistantTellAction(const AssistantActionProto& proto)
......
......@@ -5,11 +5,10 @@
#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_TELL_ACTION_H_
#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_TELL_ACTION_H_
#include "components/autofill_assistant/browser/actions/assistant_action.h"
#include <string>
#include "base/macros.h"
#include "components/autofill_assistant/browser/actions/assistant_action.h"
namespace autofill_assistant {
// An action to display a message.
......
......@@ -4,19 +4,57 @@
#include "components/autofill_assistant/browser/actions/assistant_use_address_action.h"
#include <vector>
#include "base/bind.h"
#include "base/callback.h"
#include "components/autofill_assistant/browser/actions/assistant_action_delegate.h"
namespace autofill_assistant {
AssistantUseAddressAction::AssistantUseAddressAction(
const AssistantActionProto& proto)
: AssistantAction(proto) {}
: AssistantAction(proto), weak_ptr_factory_(this) {}
AssistantUseAddressAction::~AssistantUseAddressAction() {}
void AssistantUseAddressAction::ProcessAction(AssistantActionDelegate* delegate,
ProcessActionCallback callback) {
NOTIMPLEMENTED();
if (proto_.use_address().has_usage()) {
delegate->ShowStatusMessage(proto_.use_address().usage());
}
delegate->ChooseAddress(base::BindOnce(
&AssistantUseAddressAction::OnChooseAddress,
weak_ptr_factory_.GetWeakPtr(), delegate, std::move(callback)));
}
void AssistantUseAddressAction::OnChooseAddress(
AssistantActionDelegate* delegate,
ProcessActionCallback callback,
const std::string& guid) {
if (guid.empty()) {
DVLOG(1) << "Failed to choose address.";
std::move(callback).Run(false);
return;
}
std::vector<std::string> selectors;
for (const auto& selector :
proto_.use_address().form_field_element().selectors()) {
selectors.emplace_back(selector);
}
DCHECK(!selectors.empty());
delegate->FillAddressForm(
guid, selectors,
base::BindOnce(&AssistantUseAddressAction::OnFillAddressForm,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
}
void AssistantUseAddressAction::OnFillAddressForm(
ProcessActionCallback callback,
bool result) {
std::move(callback).Run(result);
}
} // namespace autofill_assistant.
......@@ -5,12 +5,11 @@
#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_USE_ADDRESS_ACTION_H_
#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_USE_ADDRESS_ACTION_H_
#include "components/autofill_assistant/browser/actions/assistant_action.h"
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "components/autofill_assistant/browser/actions/assistant_action.h"
namespace autofill_assistant {
// An action to ask user to choose a local address to fill the form.
......@@ -25,6 +24,13 @@ class AssistantUseAddressAction : public AssistantAction {
ProcessActionCallback callback) override;
private:
void OnChooseAddress(AssistantActionDelegate* delegate,
ProcessActionCallback callback,
const std::string& guid);
void OnFillAddressForm(ProcessActionCallback callback, bool result);
base::WeakPtrFactory<AssistantUseAddressAction> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(AssistantUseAddressAction);
};
......
......@@ -4,19 +4,51 @@
#include "components/autofill_assistant/browser/actions/assistant_use_card_action.h"
#include <vector>
#include "base/bind.h"
#include "base/callback.h"
#include "components/autofill_assistant/browser/actions/assistant_action_delegate.h"
namespace autofill_assistant {
AssistantUseCardAction::AssistantUseCardAction(
const AssistantActionProto& proto)
: AssistantAction(proto) {}
: AssistantAction(proto), weak_ptr_factory_(this) {}
AssistantUseCardAction::~AssistantUseCardAction() {}
void AssistantUseCardAction::ProcessAction(AssistantActionDelegate* delegate,
ProcessActionCallback callback) {
NOTIMPLEMENTED();
delegate->ChooseCard(base::BindOnce(&AssistantUseCardAction::OnChooseCard,
weak_ptr_factory_.GetWeakPtr(), delegate,
std::move(callback)));
}
void AssistantUseCardAction::OnChooseCard(AssistantActionDelegate* delegate,
ProcessActionCallback callback,
const std::string& guid) {
if (guid.empty()) {
DVLOG(1) << "Failed to choose card.";
std::move(callback).Run(false);
return;
}
std::vector<std::string> selectors;
for (const auto& selector :
proto_.use_card().form_field_element().selectors()) {
selectors.emplace_back(selector);
}
DCHECK(!selectors.empty());
delegate->FillCardForm(
guid, selectors,
base::BindOnce(&AssistantUseCardAction::OnFillCardForm,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
}
void AssistantUseCardAction::OnFillCardForm(ProcessActionCallback callback,
bool result) {
std::move(callback).Run(result);
}
} // namespace autofill_assistant.
......@@ -5,12 +5,12 @@
#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_USE_CARD_ACTION_H_
#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_USE_CARD_ACTION_H_
#include "components/autofill_assistant/browser/actions/assistant_action.h"
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "components/autofill_assistant/browser/actions/assistant_action.h"
namespace autofill_assistant {
// An action to ask user to choose a local card to fill the form.
......@@ -24,6 +24,13 @@ class AssistantUseCardAction : public AssistantAction {
ProcessActionCallback callback) override;
private:
void OnChooseCard(AssistantActionDelegate* delegate,
ProcessActionCallback callback,
const std::string& guid);
void OnFillCardForm(ProcessActionCallback callback, bool result);
base::WeakPtrFactory<AssistantUseCardAction> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(AssistantUseCardAction);
};
......
......@@ -5,15 +5,13 @@
#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_WAIT_FOR_DOM_ACTION_H_
#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_ASSISTANT_WAIT_FOR_DOM_ACTION_H_
#include "components/autofill_assistant/browser/actions/assistant_action.h"
#include "components/autofill_assistant/browser/assistant.pb.h"
#include <string>
#include <vector>
#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "components/autofill_assistant/browser/actions/assistant_action.h"
#include "components/autofill_assistant/browser/assistant.pb.h"
namespace autofill_assistant {
// An action to ask Chrome to wait for a DOM element to process next action.
......
......@@ -161,7 +161,7 @@ message UseAddressProto {
// this action.
message UseCreditCardProto {
// A reference to the card number field in the form that should be filled.
optional ElementReferenceProto form_field_element = 1;
required ElementReferenceProto form_field_element = 1;
}
// Ask Chrome to wait for an element in the DOM. This can be used to only
......
......@@ -53,6 +53,32 @@ void AssistantScriptExecutor::ElementExists(
std::move(callback));
}
void AssistantScriptExecutor::ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) {
delegate_->GetAssistantUiController()->ChooseAddress(std::move(callback));
}
void AssistantScriptExecutor::FillAddressForm(
const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) {
delegate_->GetAssistantWebController()->FillAddressForm(guid, selectors,
std::move(callback));
}
void AssistantScriptExecutor::ChooseCard(
base::OnceCallback<void(const std::string&)> callback) {
delegate_->GetAssistantUiController()->ChooseCard(std::move(callback));
}
void AssistantScriptExecutor::FillCardForm(
const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) {
delegate_->GetAssistantWebController()->FillCardForm(guid, selectors,
std::move(callback));
}
void AssistantScriptExecutor::OnGetAssistantActions(
bool result,
const std::string& response) {
......
......@@ -37,6 +37,16 @@ class AssistantScriptExecutor : public AssistantActionDelegate {
base::OnceCallback<void(bool)> callback) override;
void ElementExists(const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) override;
void ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) override;
void FillAddressForm(const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) override;
void ChooseCard(
base::OnceCallback<void(const std::string&)> callback) override;
void FillCardForm(const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) override;
private:
void OnGetAssistantActions(bool result, const std::string& response);
......
......@@ -9,6 +9,8 @@
#include <string>
#include "base/callback_forward.h"
namespace autofill_assistant {
// Controller to control autofill assistant UI.
class AssistantUiController {
......@@ -27,6 +29,18 @@ class AssistantUiController {
// Hide the overlay.
virtual void HideOverlay() = 0;
// Show UI to ask user to choose an address in personal data manager. GUID of
// the chosen address will be returned through callback if succeed, otherwise
// empty string is returned.
virtual void ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) = 0;
// Show UI to ask user to choose a card in personal data manager. GUID of the
// chosen card will be returned through callback if succeed, otherwise empty
// string is returned.
virtual void ChooseCard(
base::OnceCallback<void(const std::string&)> callback) = 0;
protected:
AssistantUiController() = default;
};
......
......@@ -26,4 +26,20 @@ void AssistantWebController::ElementExists(
std::move(callback).Run(true);
}
void AssistantWebController::FillAddressForm(
const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) {
// TODO(crbug.com/806868): Implement fill address form operation.
std::move(callback).Run(true);
}
void AssistantWebController::FillCardForm(
const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback) {
// TODO(crbug.com/806868): Implement fill card form operation.
std::move(callback).Run(true);
}
} // namespace autofill_assistant.
......@@ -29,6 +29,18 @@ class AssistantWebController {
virtual void ElementExists(const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback);
// Fill the address form given by |selectors| with the given address |guid| in
// personal data manager.
virtual void FillAddressForm(const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback);
// Fill the card form given by |selectors| with the given card |guid| in
// personal data manager.
virtual void FillCardForm(const std::string& guid,
const std::vector<std::string>& selectors,
base::OnceCallback<void(bool)> callback);
private:
DISALLOW_COPY_AND_ASSIGN(AssistantWebController);
};
......
......@@ -5,6 +5,7 @@
#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_MOCK_ASSISTANT_UI_CONTROLLER_H_
#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_MOCK_ASSISTANT_UI_CONTROLLER_H_
#include "base/callback.h"
#include "components/autofill_assistant/browser/assistant_ui_controller.h"
#include "testing/gmock/include/gmock/gmock.h"
......@@ -19,6 +20,20 @@ class MockAssistantUiController : public AssistantUiController {
MOCK_METHOD1(ShowStatusMessage, void(const std::string& message));
MOCK_METHOD0(ShowOverlay, void());
MOCK_METHOD0(HideOverlay, void());
void ChooseAddress(
base::OnceCallback<void(const std::string&)> callback) override {
OnChooseAddress(callback);
}
MOCK_METHOD1(OnChooseAddress,
void(base::OnceCallback<void(const std::string&)>& callback));
void ChooseCard(
base::OnceCallback<void(const std::string&)> callback) override {
OnChooseCard(callback);
}
MOCK_METHOD1(OnChooseCard,
void(base::OnceCallback<void(const std::string&)>& callback));
};
} // namespace autofill_assistant
......
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