blob: b701ce9c53faa56286558ebfafd1791563085b29 [file] [log] [blame]
// Copyright 2019 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_assistant/browser/trigger_context.h"
#include "base/strings/string_split.h"
namespace autofill_assistant {
TriggerContext::Options::Options(const std::string& _experiment_ids,
bool _is_cct,
bool _onboarding_shown,
bool _is_direct_action,
const std::string& _initial_url)
: experiment_ids(_experiment_ids),
is_cct(_is_cct),
onboarding_shown(_onboarding_shown),
is_direct_action(_is_direct_action),
initial_url(_initial_url) {}
TriggerContext::Options::Options() = default;
TriggerContext::Options::~Options() = default;
TriggerContext::TriggerContext()
: script_parameters_(std::make_unique<ScriptParameters>()) {}
TriggerContext::TriggerContext(
std::unique_ptr<ScriptParameters> script_parameters,
const Options& options)
: TriggerContext(std::move(script_parameters),
options.experiment_ids,
options.is_cct,
options.onboarding_shown,
options.is_direct_action,
options.initial_url) {}
TriggerContext::TriggerContext(
std::unique_ptr<ScriptParameters> script_parameters,
const std::string& experiment_ids,
bool is_cct,
bool onboarding_shown,
bool is_direct_action,
const std::string& initial_url)
: script_parameters_(std::move(script_parameters)),
experiment_ids_(std::move(experiment_ids)),
cct_(is_cct),
onboarding_shown_(onboarding_shown),
direct_action_(is_direct_action),
initial_url_(initial_url) {}
TriggerContext::TriggerContext(std::vector<const TriggerContext*> contexts)
: TriggerContext() {
for (const TriggerContext* context : contexts) {
std::string context_experiment_ids = context->GetExperimentIds();
if (context_experiment_ids.empty())
continue;
if (!experiment_ids_.empty())
experiment_ids_.append(1, ',');
experiment_ids_.append(context_experiment_ids);
}
for (const TriggerContext* context : contexts) {
script_parameters_->MergeWith(context->GetScriptParameters());
cct_ |= context->GetCCT();
onboarding_shown_ |= context->GetOnboardingShown();
direct_action_ |= context->GetDirectAction();
if (initial_url_.empty()) {
initial_url_ = context->GetInitialUrl();
}
}
}
TriggerContext::~TriggerContext() = default;
const ScriptParameters& TriggerContext::GetScriptParameters() const {
return *script_parameters_.get();
}
std::string TriggerContext::GetExperimentIds() const {
return experiment_ids_;
}
std::string TriggerContext::GetInitialUrl() const {
return initial_url_;
}
bool TriggerContext::HasExperimentId(const std::string& experiment_id) const {
std::vector<std::string> experiments = base::SplitString(
experiment_ids_, ",", base::WhitespaceHandling::TRIM_WHITESPACE,
base::SplitResult::SPLIT_WANT_NONEMPTY);
return std::find(experiments.begin(), experiments.end(), experiment_id) !=
experiments.end();
}
bool TriggerContext::GetCCT() const {
return cct_;
}
bool TriggerContext::GetOnboardingShown() const {
return onboarding_shown_;
}
void TriggerContext::SetOnboardingShown(bool onboarding_shown) {
onboarding_shown_ = onboarding_shown;
}
bool TriggerContext::GetDirectAction() const {
return direct_action_;
}
} // namespace autofill_assistant