#include <memory>
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/functional/overloaded.h"
#include "base/path_service.h"
#include "base/run_loop.h"
#include "base/test/scoped_feature_list.h"
#include "base/threading/thread_restrictions.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
#include "chrome/browser/policy/chrome_browser_policy_connector.h"
#include "chrome/browser/policy/cloud/cloud_policy_test_utils.h"
#include "chrome/browser/policy/profile_policy_connector.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "chrome/test/base/chrome_test_utils.h"
#include "chrome/test/base/platform_browser_test.h"
#include "components/invalidation/impl/fake_invalidation_service.h"
#include "components/invalidation/impl/profile_identity_provider.h"
#include "components/invalidation/invalidation_factory.h"
#include "components/invalidation/profile_invalidation_provider.h"
#include "components/invalidation/public/invalidation.h"
#include "components/invalidation/public/invalidation_service.h"
#include "components/invalidation/public/invalidation_util.h"
#include "components/invalidation/test_support/fake_invalidation_listener.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/policy/core/browser/browser_policy_connector.h"
#include "components/policy/core/browser/cloud/user_policy_signin_service_base.h"
#include "components/policy/core/common/cloud/cloud_policy_client.h"
#include "components/policy/core/common/cloud/cloud_policy_constants.h"
#include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
#include "components/policy/core/common/cloud/mock_cloud_policy_client.h"
#include "components/policy/core/common/cloud/user_cloud_policy_store.h"
#include "components/policy/core/common/external_data_fetcher.h"
#include "components/policy/core/common/policy_map.h"
#include "components/policy/core/common/policy_service.h"
#include "components/policy/core/common/policy_switches.h"
#include "components/policy/core/common/policy_test_utils.h"
#include "components/policy/core/common/policy_types.h"
#include "components/policy/policy_constants.h"
#include "components/policy/proto/chrome_settings.pb.h"
#include "components/policy/proto/cloud_policy.pb.h"
#include "components/policy/proto/device_management_backend.pb.h"
#include "components/policy/test_support/embedded_policy_test_server.h"
#include "components/policy/test_support/policy_storage.h"
#include "components/prefs/pref_service.h"
#include "components/signin/public/identity_manager/identity_test_environment.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_utils.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "chrome/browser/ash/policy/core/user_cloud_policy_manager_ash.h"
#include "chromeos/ash/components/cryptohome/cryptohome_parameters.h"
#include "chromeos/ash/components/dbus/userdataauth/userdataauth_client.h"
#include "chromeos/dbus/constants/dbus_paths.h"
#include "components/account_id/account_id.h"
#include "components/user_manager/user_names.h"
#else
#include "chrome/browser/net/system_network_context_manager.h"
#include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
#include "components/signin/public/identity_manager/identity_manager.h"
#include "components/signin/public/identity_manager/identity_test_utils.h"
#endif
#if !BUILDFLAG(IS_ANDROID)
#include "chrome/browser/ui/browser.h"
#endif
_;
AnyNumber;
InvokeWithoutArgs;
Mock;
Return;
namespace content {
class BrowserContext;
}
em;
namespace policy {
namespace {
constexpr char kPolicyInvalidationTopic[] = …;
constexpr char kPolicyInvalidationType[] = …;
struct FeaturesTestParam { … };
std::variant<std::unique_ptr<invalidation::InvalidationService>,
std::unique_ptr<invalidation::InvalidationListener>>
CreateInvalidationServiceForSenderId(std::string fcm_sender_id,
std::string ,
std::string ) {
if (base::FeatureList::IsEnabled(
invalidation::kInvalidationsWithDirectMessages)) {
return std::make_unique<invalidation::FakeInvalidationListener>();
}
return std::make_unique<invalidation::FakeInvalidationService>();
}
std::unique_ptr<KeyedService> BuildFakeProfileInvalidationProvider(
content::BrowserContext* context) { … }
const char* GetTestUser() { … }
em::CloudPolicySettings GetTestPolicy(const char* homepage) { … }
void GetExpectedTestPolicy(PolicyMap* expected, const char* homepage) { … }
}
class CloudPolicyTest : public PlatformBrowserTest,
public PolicyService::Observer,
public testing::WithParamInterface<FeaturesTestParam> { … };
IN_PROC_BROWSER_TEST_P(CloudPolicyTest, FetchPolicy) { … }
#if BUILDFLAG(IS_CHROMEOS_ASH)
IN_PROC_BROWSER_TEST_P(CloudPolicyTest, EnsureDefaultPoliciesSet) {
PolicyService* policy_service = GetPolicyService();
{
base::RunLoop run_loop;
policy_service->RefreshPolicies(run_loop.QuitClosure(),
PolicyFetchReason::kTest);
run_loop.Run();
}
PolicyMap default_policy;
GetExpectedDefaultPolicy(&default_policy);
EXPECT_TRUE(default_policy.GetValue(key::kEasyUnlockAllowed,
base::Value::Type::BOOLEAN));
EXPECT_TRUE(default_policy.Equals(policy_service->GetPolicies(
PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))));
}
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
#define MAYBE_InvalidatePolicy …
#else
#define MAYBE_InvalidatePolicy …
#endif
IN_PROC_BROWSER_TEST_P(CloudPolicyTest, MAYBE_InvalidatePolicy) { … }
IN_PROC_BROWSER_TEST_P(CloudPolicyTest, FetchPolicyWithRotatedKey) { … }
INSTANTIATE_TEST_SUITE_P(…);
TEST(CloudPolicyProtoTest, VerifyProtobufEquivalence) { … }
}