blob: ebbbccb8d8575dc8203454a43da23b170f8497a9 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/permissions/resolvers/geolocation_permission_resolver.h"
#include <memory>
#include <variant>
#include "base/test/gtest_util.h"
#include "base/values.h"
#include "components/content_settings/core/common/content_settings.h"
#include "components/permissions/resolvers/permission_prompt_options.h"
#include "components/permissions/resolvers/permission_resolver.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
namespace permissions {
class GeolocationPermissionResolverTest
: public testing::Test,
public testing::WithParamInterface<base::Value> {
protected:
static std::unique_ptr<PermissionResolver> approximate_request_resolver() {
return std::make_unique<GeolocationPermissionResolver>(
/*requested_precise=*/false);
}
static std::unique_ptr<PermissionResolver> precise_request_resolver() {
return std::make_unique<GeolocationPermissionResolver>(
/*requested_precise=*/true);
}
};
TEST_F(GeolocationPermissionResolverTest, TestDeterminePermissionStatusAskAsk) {
auto setting =
GeolocationSetting(PermissionOption::kAsk, PermissionOption::kAsk);
EXPECT_EQ(approximate_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::ASK);
EXPECT_EQ(precise_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::ASK);
}
TEST_F(GeolocationPermissionResolverTest,
TestDeterminePermissionStatusAllowedAsk) {
auto setting =
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kAsk);
EXPECT_EQ(approximate_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::GRANTED);
EXPECT_EQ(precise_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::ASK);
}
TEST_F(GeolocationPermissionResolverTest,
TestDeterminePermissionStatusAllowedAllowed) {
auto setting = GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed);
EXPECT_EQ(approximate_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::GRANTED);
EXPECT_EQ(precise_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::GRANTED);
}
TEST_F(GeolocationPermissionResolverTest,
TestDeterminePermissionStatusAllowBlock) {
auto setting =
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kDenied);
EXPECT_EQ(approximate_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::GRANTED);
EXPECT_EQ(precise_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::GRANTED);
}
TEST_F(GeolocationPermissionResolverTest,
TestDeterminePermissionStatusDeniedDenied) {
auto setting =
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied);
EXPECT_EQ(approximate_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::DENIED);
EXPECT_EQ(precise_request_resolver()->DeterminePermissionStatus(setting),
blink::mojom::PermissionStatus::DENIED);
}
TEST_F(GeolocationPermissionResolverTest,
TestComputePermissionDecisionResultAskAsk) {
auto previous_setting =
GeolocationSetting(PermissionOption::kAsk, PermissionOption::kAsk);
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow, std::monostate())),
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kAsk));
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
std::monostate())),
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kAsk));
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny, std::monostate())),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
}
TEST_F(GeolocationPermissionResolverTest,
TestComputePermissionDecisionResultAllowedAsk) {
auto previous_setting =
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kAsk);
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow, std::monostate())),
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kAsk));
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
std::monostate())),
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kAsk));
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny, std::monostate())),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
}
TEST_F(GeolocationPermissionResolverTest,
TestComputePermissionDecisionResultAllowedDenied) {
auto previous_setting =
GeolocationSetting(PermissionOption::kAllowed, PermissionOption::kDenied);
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow, std::monostate())),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
std::monostate())),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny, std::monostate())),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow, std::monostate())),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
}
TEST_F(GeolocationPermissionResolverTest,
TestComputePermissionDecisionResultDeniedDenied) {
auto previous_setting =
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied);
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow, std::monostate())),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
std::monostate())),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(
std::get<GeolocationSetting>(
approximate_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny, std::monostate())),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kDenied));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/false})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllow,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kAllowThisTime,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kAllowed,
PermissionOption::kAllowed));
EXPECT_EQ(
std::get<GeolocationSetting>(
precise_request_resolver()->ComputePermissionDecisionResult(
previous_setting, PermissionDecision::kDeny,
GeolocationPromptOptions{/*selected_precise=*/true})),
GeolocationSetting(PermissionOption::kDenied, PermissionOption::kDenied));
}
} // namespace permissions