Skip to content

Commit

Permalink
[FastCheckout] Parse BundleCapabilitiesInformation in GetCapabilities.
Browse files Browse the repository at this point in the history
Bug: 1350456, 1334642
Change-Id: I57a0785a6ae73b7ee760b45818d51851faf3036f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3825970
Commit-Queue: Jan Keitel <jkeitel@google.com>
Reviewed-by: Norge Vizcay <vizcay@google.com>
Reviewed-by: Luca Hunkeler <hluca@google.com>
Cr-Commit-Position: refs/heads/main@{#1035053}
  • Loading branch information
Jan Keitel authored and Chromium LUCI CQ committed Aug 15, 2022
1 parent ab578c3 commit f92f6ab
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 12 deletions.
25 changes: 25 additions & 0 deletions components/autofill_assistant/browser/autofill_assistant_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
#include <memory>
#include <vector>

#include "base/ranges/algorithm.h"
#include "base/time/default_tick_clock.h"
#include "components/autofill/core/common/signatures.h"
#include "components/autofill_assistant/browser/common_dependencies.h"
#include "components/autofill_assistant/browser/desktop/starter_delegate_desktop.h"
#include "components/autofill_assistant/browser/headless/client_headless.h"
Expand Down Expand Up @@ -63,6 +65,29 @@ void OnCapabilitiesResponse(
info.script_parameters[param.name()] = param.value();
}

if (match.has_bundle_capabilities_information() &&
match.bundle_capabilities_information().has_chrome_fast_checkout() &&
!match.bundle_capabilities_information()
.chrome_fast_checkout()
.trigger_form_signatures()
.empty()) {
// Source and the target vector are abbreviated due to their length.
auto& source = match.bundle_capabilities_information()
.chrome_fast_checkout()
.trigger_form_signatures();

info.bundle_capabilities_information =
AutofillAssistant::BundleCapabilitiesInformation();
std::vector<autofill::FormSignature>& target =
info.bundle_capabilities_information.value().trigger_form_signatures;

target.reserve(source.size());
base::ranges::transform(source, std::back_inserter(target),
[](uint64_t signature) {
return autofill::FormSignature(signature);
});
}

infos.push_back(info);
}
std::move(callback).Run(http_status, infos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "base/memory/raw_ptr.h"
#include "base/test/gmock_callback_support.h"
#include "base/test/mock_callback.h"
#include "components/autofill/core/common/signatures.h"
#include "components/autofill_assistant/browser/mock_common_dependencies.h"
#include "components/autofill_assistant/browser/service.pb.h"
#include "components/autofill_assistant/browser/service/mock_service_request_sender.h"
Expand All @@ -17,12 +18,13 @@
namespace autofill_assistant {
namespace {

using ::base::test::RunOnceCallback;
using ::testing::_;
using ::testing::NiceMock;
using ::testing::Return;
using ::testing::SaveArg;
using ::testing::UnorderedElementsAreArray;
using autofill::FormSignature;
using base::test::RunOnceCallback;
using testing::_;
using testing::NiceMock;
using testing::Return;
using testing::SaveArg;
using testing::UnorderedElementsAreArray;

const char kScriptServerUrl[] = "https://www.fake.backend.com/script_server";

Expand Down Expand Up @@ -58,10 +60,17 @@ class AutofillAssistantImpTest : public testing::Test {

} // namespace

bool operator==(const AutofillAssistant::BundleCapabilitiesInformation& lhs,
const AutofillAssistant::BundleCapabilitiesInformation& rhs) {
return (lhs.trigger_form_signatures == rhs.trigger_form_signatures);
}

bool operator==(const AutofillAssistant::CapabilitiesInfo& lhs,
const AutofillAssistant::CapabilitiesInfo& rhs) {
return std::tie(lhs.url, lhs.script_parameters) ==
std::tie(rhs.url, rhs.script_parameters);
return std::tie(lhs.url, lhs.script_parameters,
lhs.bundle_capabilities_information) ==
std::tie(rhs.url, rhs.script_parameters,
rhs.bundle_capabilities_information);
}

TEST_F(AutofillAssistantImpTest, GetCapabilitiesByHashPrefixEmptyRespose) {
Expand Down Expand Up @@ -123,9 +132,23 @@ TEST_F(AutofillAssistantImpTest, GetCapabilitiesByHashPrefix) {
proto.add_match_info();
match_info2->set_url_match("http://exampleB.com");

BundleCapabilitiesInformationProto::ChromeFastCheckoutProto*
fast_checkout_proto =
match_info2->mutable_bundle_capabilities_information()
->mutable_chrome_fast_checkout();

fast_checkout_proto->add_trigger_form_signatures(123ull);
fast_checkout_proto->add_trigger_form_signatures(18446744073709551615ull);

std::string serialized_proto;
proto.SerializeToString(&serialized_proto);

AutofillAssistant::BundleCapabilitiesInformation
bundle_capabilities_information;
bundle_capabilities_information.trigger_form_signatures =
std::vector<FormSignature>{FormSignature(123ull),
FormSignature(18446744073709551615ull)};

EXPECT_CALL(*mock_request_sender_,
OnSendRequest(GURL(kScriptServerUrl), _, _,
RpcType::GET_CAPABILITIES_BY_HASH_PREFIX))
Expand All @@ -138,7 +161,9 @@ TEST_F(AutofillAssistantImpTest, GetCapabilitiesByHashPrefix) {
UnorderedElementsAreArray(
std::vector<AutofillAssistant::CapabilitiesInfo>{
{"http://exampleA.com", {{"EXPERIMENT_IDS", "3345172"}}},
{"http://exampleB.com", {}}})));
{"http://exampleB.com",
{},
bundle_capabilities_information}})));

service_->GetCapabilitiesByHashPrefix(16, {1339}, "DUMMY_INTENT",
mock_response_callback_.Get());
Expand Down
1 change: 1 addition & 0 deletions components/autofill_assistant/browser/public/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ static_library("public") {

deps = [
":proto",
"//components/autofill/core/common:common",
"//components/autofill_assistant/browser/public/fast_checkout/proto:proto",
"//components/autofill_assistant/browser/public/password_change/proto:proto",
"//url",
Expand Down
16 changes: 14 additions & 2 deletions components/autofill_assistant/browser/public/autofill_assistant.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,28 @@
#include "base/containers/span.h"
#include "base/hash/legacy_hash.h"
#include "base/strings/string_util.h"
#include "components/autofill/core/common/signatures.h"
#include "url/gurl.h"
#include "url/origin.h"

namespace autofill_assistant {

AutofillAssistant::BundleCapabilitiesInformation::
BundleCapabilitiesInformation() = default;
AutofillAssistant::BundleCapabilitiesInformation::
~BundleCapabilitiesInformation() = default;
AutofillAssistant::BundleCapabilitiesInformation::BundleCapabilitiesInformation(
const BundleCapabilitiesInformation& other) = default;

AutofillAssistant::CapabilitiesInfo::CapabilitiesInfo() = default;
AutofillAssistant::CapabilitiesInfo::CapabilitiesInfo(
const std::string& url,
const base::flat_map<std::string, std::string>& script_parameters)
: url(url), script_parameters(script_parameters) {}
const base::flat_map<std::string, std::string>& script_parameters,
const absl::optional<BundleCapabilitiesInformation>&
bundle_capabilities_information)
: url(url),
script_parameters(script_parameters),
bundle_capabilities_information(bundle_capabilities_information) {}
AutofillAssistant::CapabilitiesInfo::~CapabilitiesInfo() = default;
AutofillAssistant::CapabilitiesInfo::CapabilitiesInfo(
const CapabilitiesInfo& other) = default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@
#include "base/containers/flat_map.h"
#include "components/autofill_assistant/browser/public/external_action_delegate.h"
#include "components/autofill_assistant/browser/public/headless_script_controller.h"
#include "third_party/abseil-cpp/absl/types/optional.h"

namespace autofill {
class FormSignature;
} // namespace autofill

namespace content {
class WebContents;
Expand All @@ -28,17 +33,33 @@ class WebsiteLoginManager;
// Abstract interface for exported services.
class AutofillAssistant {
public:
// The C++ (parsed) version of `BundleCapabilitiesInformationProto`.
struct BundleCapabilitiesInformation {
BundleCapabilitiesInformation();
virtual ~BundleCapabilitiesInformation();
BundleCapabilitiesInformation(const BundleCapabilitiesInformation& other);

// The form signatures that the script may be started on.
std::vector<autofill::FormSignature> trigger_form_signatures;
};

struct CapabilitiesInfo {
CapabilitiesInfo();
CapabilitiesInfo(
const std::string& url,
const base::flat_map<std::string, std::string>& script_parameters);
const base::flat_map<std::string, std::string>& script_parameters,
const absl::optional<BundleCapabilitiesInformation>&
bundle_capabilities_information = absl::nullopt);
~CapabilitiesInfo();
CapabilitiesInfo(const CapabilitiesInfo& other);
CapabilitiesInfo& operator=(const CapabilitiesInfo& other);

std::string url;
base::flat_map<std::string, std::string> script_parameters;
// Additional information specified in the bundle that is needed prior to
// starting the script.
absl::optional<BundleCapabilitiesInformation>
bundle_capabilities_information;
};

using GetCapabilitiesResponseCallback =
Expand Down

0 comments on commit f92f6ab

Please sign in to comment.