|  | // Copyright 2024 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "net/reporting/reporting_context.h" | 
|  |  | 
|  | #include <optional> | 
|  | #include <string> | 
|  |  | 
|  | #include "base/test/scoped_feature_list.h" | 
|  | #include "net/base/features.h" | 
|  | #include "net/reporting/mock_persistent_reporting_store.h" | 
|  | #include "net/reporting/reporting_test_util.h" | 
|  | #include "net/url_request/url_request_context_builder.h" | 
|  | #include "net/url_request/url_request_test_util.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  | #include "url/gurl.h" | 
|  |  | 
|  | namespace net { | 
|  | namespace { | 
|  |  | 
|  | // The tests are parametrized on a boolean value which represents whether to use | 
|  | // a MockPersistentReportingStore or not. | 
|  | class ReportingContextTest : public ReportingTestBase, | 
|  | public ::testing::WithParamInterface<bool> { | 
|  | protected: | 
|  | ReportingContextTest() { | 
|  | feature_list_.InitAndEnableFeature( | 
|  | features::kPartitionConnectionsByNetworkIsolationKey); | 
|  | std::unique_ptr<MockPersistentReportingStore> store; | 
|  | if (GetParam()) { | 
|  | store = std::make_unique<MockPersistentReportingStore>(); | 
|  | } | 
|  | store_ = store.get(); | 
|  | UseStore(std::move(store)); | 
|  | } | 
|  |  | 
|  | MockPersistentReportingStore* store() { return store_.get(); } | 
|  |  | 
|  | private: | 
|  | base::test::ScopedFeatureList feature_list_; | 
|  | raw_ptr<MockPersistentReportingStore> store_; | 
|  | }; | 
|  |  | 
|  | TEST_P(ReportingContextTest, ReportingContextConstructionWithFeatureEnabled) { | 
|  | base::test::ScopedFeatureList feature_list; | 
|  | feature_list.InitAndEnableFeature( | 
|  | net::features::kReportingApiEnableEnterpriseCookieIssues); | 
|  | base::flat_map<std::string, GURL> test_enterprise_endpoints{ | 
|  | {"endpoint-1", GURL("https://example.com/reports")}, | 
|  | {"endpoint-2", GURL("https://reporting.example/cookie-issues")}, | 
|  | {"endpoint-3", GURL("https://report-collector.example")}, | 
|  | }; | 
|  | EXPECT_EQ(0u, cache()->GetEnterpriseEndpointsForTesting().size()); | 
|  | std::unique_ptr<URLRequestContext> url_request_context = | 
|  | CreateTestURLRequestContextBuilder()->Build(); | 
|  | std::unique_ptr<ReportingContext> reporting_context_ptr = | 
|  | ReportingContext::Create(ReportingPolicy(), url_request_context.get(), | 
|  | store(), test_enterprise_endpoints); | 
|  |  | 
|  | std::vector<ReportingEndpoint> expected_enterprise_endpoints = { | 
|  | {ReportingEndpointGroupKey(NetworkAnonymizationKey(), | 
|  | /*reporting_source=*/std::nullopt, | 
|  | /*origin=*/std::nullopt, "endpoint-1", | 
|  | ReportingTargetType::kEnterprise), | 
|  | {.url = GURL("https://example.com/reports")}}, | 
|  | {ReportingEndpointGroupKey(NetworkAnonymizationKey(), | 
|  | /*reporting_source=*/std::nullopt, | 
|  | /*origin=*/std::nullopt, "endpoint-2", | 
|  | ReportingTargetType::kEnterprise), | 
|  | {.url = GURL("https://reporting.example/cookie-issues")}}, | 
|  | {ReportingEndpointGroupKey(NetworkAnonymizationKey(), | 
|  | /*reporting_source=*/std::nullopt, | 
|  | /*origin=*/std::nullopt, "endpoint-3", | 
|  | ReportingTargetType::kEnterprise), | 
|  | {.url = GURL("https://report-collector.example")}}}; | 
|  |  | 
|  | EXPECT_EQ(expected_enterprise_endpoints, | 
|  | reporting_context_ptr->cache()->GetEnterpriseEndpointsForTesting()); | 
|  | } | 
|  |  | 
|  | TEST_P(ReportingContextTest, ReportingContextConstructionWithFeatureDisabled) { | 
|  | base::test::ScopedFeatureList feature_list; | 
|  | feature_list.InitAndDisableFeature( | 
|  | net::features::kReportingApiEnableEnterpriseCookieIssues); | 
|  | base::flat_map<std::string, GURL> test_enterprise_endpoints{ | 
|  | {"endpoint-1", GURL("https://example.com/reports")}, | 
|  | {"endpoint-2", GURL("https://reporting.example/cookie-issues")}, | 
|  | {"endpoint-3", GURL("https://report-collector.example")}, | 
|  | }; | 
|  | EXPECT_EQ(0u, cache()->GetEnterpriseEndpointsForTesting().size()); | 
|  | std::unique_ptr<URLRequestContext> url_request_context = | 
|  | CreateTestURLRequestContextBuilder()->Build(); | 
|  | std::unique_ptr<ReportingContext> reporting_context_ptr = | 
|  | ReportingContext::Create(ReportingPolicy(), url_request_context.get(), | 
|  | store(), test_enterprise_endpoints); | 
|  |  | 
|  | EXPECT_EQ(0u, reporting_context_ptr->cache() | 
|  | ->GetEnterpriseEndpointsForTesting() | 
|  | .size()); | 
|  | } | 
|  |  | 
|  | INSTANTIATE_TEST_SUITE_P(ReportingContextStoreTest, | 
|  | ReportingContextTest, | 
|  | ::testing::Bool()); | 
|  | }  // namespace | 
|  | }  // namespace net |