#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
#include <memory>
#include "base/base64.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/logging.h"
#include "base/run_loop.h"
#include "base/strings/escape.h"
#include "base/test/bind.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/run_until.h"
#include "base/test/scoped_feature_list.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/optimization_guide/browser_test_util.h"
#include "chrome/browser/optimization_guide/chrome_hints_manager.h"
#include "chrome/browser/optimization_guide/chrome_model_quality_logs_uploader_service.h"
#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/profile_waiter.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/metrics_services_manager/metrics_services_manager.h"
#include "components/optimization_guide/core/command_line_top_host_provider.h"
#include "components/optimization_guide/core/feature_registry/mqls_feature_registry.h"
#include "components/optimization_guide/core/model_execution/feature_keys.h"
#include "components/optimization_guide/core/model_execution/model_execution_features.h"
#include "components/optimization_guide/core/model_execution/model_execution_features_controller.h"
#include "components/optimization_guide/core/model_execution/model_execution_prefs.h"
#include "components/optimization_guide/core/model_execution/on_device_model_component.h"
#include "components/optimization_guide/core/optimization_guide_enums.h"
#include "components/optimization_guide/core/optimization_guide_features.h"
#include "components/optimization_guide/core/optimization_guide_prefs.h"
#include "components/optimization_guide/core/optimization_guide_store.h"
#include "components/optimization_guide/core/optimization_guide_switches.h"
#include "components/optimization_guide/core/optimization_guide_test_util.h"
#include "components/optimization_guide/core/optimization_hints_component_update_listener.h"
#include "components/optimization_guide/core/test_hints_component_creator.h"
#include "components/optimization_guide/proto/hints.pb.h"
#include "components/optimization_guide/proto/model_quality_service.pb.h"
#include "components/policy/core/browser/browser_policy_connector.h"
#include "components/policy/core/common/mock_configuration_policy_provider.h"
#include "components/policy/policy_constants.h"
#include "components/prefs/pref_service.h"
#include "components/signin/public/identity_manager/account_capabilities_test_mutator.h"
#include "components/ukm/test_ukm_recorder.h"
#include "components/variations/active_field_trials.h"
#include "components/variations/hashing.h"
#include "components/variations/service/variations_service.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/metrics/public/cpp/ukm_source.h"
#include "services/network/public/cpp/network_connection_tracker.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
#include "services/network/test/test_network_connection_tracker.h"
#include "services/network/test/test_url_loader_factory.h"
namespace optimization_guide {
ModelExecutionEnterprisePolicyValue;
ElementsAre;
namespace {
OptimizationType;
class ScopedSetMetricsConsent { … };
class OptimizationGuideConsumerWebContentsObserver
: public content::WebContentsObserver { … };
class OptimizationGuideNewApiConsumerWebContentsObserver
: public content::WebContentsObserver { … };
}
class OptimizationGuideKeyedServiceDisabledBrowserTest
: public InProcessBrowserTest { … };
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceDisabledBrowserTest,
KeyedServiceEnabledButOptimizationHintsDisabled) { … }
class OptimizationGuideKeyedServiceBrowserTest
: public OptimizationGuideKeyedServiceDisabledBrowserTest { … };
class DogfoodOptimizationGuideKeyedServiceBrowserTest
: public OptimizationGuideKeyedServiceBrowserTest { … };
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
RemoteFetchingDisabled) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
NavigateToPageWithAsyncCallbackReturnsAnswerRedirect) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
NavigateToPageWithAsyncCallbackReturnsAnswer) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
NavigateToPageWithAsyncCallbackReturnsAnswerEventually) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
NavigateToPageWithHintsLoadsHint) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
RecordsMetricsWhenTabHidden) { … }
IN_PROC_BROWSER_TEST_F(
OptimizationGuideKeyedServiceBrowserTest,
NavigateToPageThatRedirectsToUrlWithHintsShouldAttemptTwoLoads) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
NavigateToPageWithoutHint) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CheckForBlocklistFilter) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CanApplyOptimizationOnDemand) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CanApplyOptimizationNewAPI) { … }
class TestSettingsEnabledObserver : public SettingsEnabledObserver { … };
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
SettingsVisibilitySignedOutVsSignedIn) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
SettingsVisibilityUpdatedCorrectly) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
SettingsOptInRevokedAfterSignOut) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
SettingsOptInUpdatedCorrectly) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
MainToggleUpdatesSettingsCorrectly) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
SettingsVisibilityIncognito) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
LogOnDeviceMetricsAfterStart) { … }
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
LogOnDeviceMetricsSingleTimeForMultipleProfiles) { … }
#endif
#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH)
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
GuestProfileUniqueKeyedService) { … }
#endif
class OptimizationGuideKeyedServiceBrowserWithModelExecutionFeatureDisabledTest
: public ::testing::WithParamInterface<bool>,
public OptimizationGuideKeyedServiceBrowserTest { … };
INSTANTIATE_TEST_SUITE_P(…);
IN_PROC_BROWSER_TEST_P(
OptimizationGuideKeyedServiceBrowserWithModelExecutionFeatureDisabledTest,
SettingsNotVisible) { … }
class OptimizationGuideKeyedServicePermissionsCheckDisabledTest
: public OptimizationGuideKeyedServiceBrowserTest { … };
IN_PROC_BROWSER_TEST_F(
OptimizationGuideKeyedServicePermissionsCheckDisabledTest,
RemoteFetchingAllowed) { … }
IN_PROC_BROWSER_TEST_F(
OptimizationGuideKeyedServicePermissionsCheckDisabledTest,
IncognitoCanStillReadFromComponentHints) { … }
IN_PROC_BROWSER_TEST_F(
OptimizationGuideKeyedServicePermissionsCheckDisabledTest,
IncognitoStillProcessesBloomFilter) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CheckUploadWithMetricsConsent) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CheckUploadWithoutMetricsConsent) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CheckUploadOnDestructionWithoutMetricsConsent) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CheckUploadWithEnterprisePolicy) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CheckCanUploadLogsWithEnterprisePolicy) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
LoggingDisabledByEnterprisePolicy_NonDogfood_NoSwitch) { … }
IN_PROC_BROWSER_TEST_F(
OptimizationGuideKeyedServiceBrowserTest,
LoggingDisabledByEnterprisePolicy_NonDogfood_WithSwitch) { … }
IN_PROC_BROWSER_TEST_F(DogfoodOptimizationGuideKeyedServiceBrowserTest,
LoggingDisabledByEnterprisePolicy_Dogfood_NoSwitch) { … }
IN_PROC_BROWSER_TEST_F(DogfoodOptimizationGuideKeyedServiceBrowserTest,
LoggingDisabledByEnterprisePolicy_Dogfood_WithSwitch) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
FeedbackIsEnabledWhenLoggingIsEnabled) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
FeedbackIsDisabledWhenLoggingIsDisabled_NotDogfood) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
FeedbackIsEnabledWhenLoggingIsDisabled_Dogfood) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
FeedbackIsDisabledWhenFeatureIsDisabled_Dogfood) { … }
IN_PROC_BROWSER_TEST_F(OptimizationGuideKeyedServiceBrowserTest,
CheckModelQualityLogsUploadOnDestruction) { … }
}