| // Copyright 2014 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_DEVICE_CLOUD_POLICY_INITIALIZER_H_ |
| #define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_DEVICE_CLOUD_POLICY_INITIALIZER_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/functional/callback_forward.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/scoped_observation.h" |
| #include "chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.h" |
| #include "chrome/browser/ash/policy/server_backed_state/server_backed_state_keys_broker.h" |
| #include "components/policy/core/common/cloud/cloud_policy_constants.h" |
| #include "components/policy/core/common/cloud/cloud_policy_store.h" |
| #include "components/policy/core/common/cloud/dm_auth.h" |
| #include "services/network/public/cpp/shared_url_loader_factory.h" |
| |
| namespace ash { |
| namespace system { |
| class StatisticsProvider; |
| } |
| class InstallAttributes; |
| } // namespace ash |
| |
| namespace policy { |
| class CloudPolicyClient; |
| class DeviceCloudPolicyStoreAsh; |
| class DeviceManagementService; |
| |
| // The |DeviceCloudPolicyInitializer| is a helper class which calls |
| // `DeviceCloudPolicyManager::StartConnection` with a new `CloudPolicyClient` |
| // for a given |DeviceManagementService|. It does so, once |
| // - the `DeviceCloudPolicyStoreAsh` is initialized and has policy, |
| // - the `ServerBackedStateKeysBroker` is available. |
| // |
| // It is expected that the |DeviceCloudPolicyInitializer| will be |
| // destroyed soon after it called |StartConnection|, but see |
| // crbug.com/705758 for complications. |
| class DeviceCloudPolicyInitializer |
| : public CloudPolicyStore::Observer, |
| public DeviceCloudPolicyManagerAsh::Observer { |
| public: |
| DeviceCloudPolicyInitializer( |
| DeviceManagementService* enterprise_service, |
| ash::InstallAttributes* install_attributes, |
| ServerBackedStateKeysBroker* state_keys_broker, |
| DeviceCloudPolicyStoreAsh* policy_store, |
| DeviceCloudPolicyManagerAsh* policy_manager, |
| ash::system::StatisticsProvider* statistics_provider); |
| |
| DeviceCloudPolicyInitializer(const DeviceCloudPolicyInitializer&) = delete; |
| DeviceCloudPolicyInitializer& operator=(const DeviceCloudPolicyInitializer&) = |
| delete; |
| |
| ~DeviceCloudPolicyInitializer() override; |
| |
| virtual void Init(); |
| virtual void Shutdown(); |
| |
| // CloudPolicyStore::Observer: |
| void OnStoreLoaded(CloudPolicyStore* store) override; |
| void OnStoreError(CloudPolicyStore* store) override; |
| |
| // DeviceCloudPolicyManagerAsh::Observer |
| void OnDeviceCloudPolicyManagerConnected() override; |
| void OnDeviceCloudPolicyManagerGotRegistry() override; |
| |
| void SetSystemURLLoaderFactoryForTesting( |
| scoped_refptr<network::SharedURLLoaderFactory> system_url_loader_factory); |
| |
| private: |
| // Creates a new CloudPolicyClient. |
| std::unique_ptr<CloudPolicyClient> CreateClient( |
| DeviceManagementService* device_management_service); |
| |
| void TryToStartConnection(); |
| void StartConnection(std::unique_ptr<CloudPolicyClient> client); |
| |
| raw_ptr<DeviceManagementService, DanglingUntriaged> enterprise_service_; |
| raw_ptr<ash::InstallAttributes, DanglingUntriaged> install_attributes_; |
| raw_ptr<ServerBackedStateKeysBroker> state_keys_broker_; |
| raw_ptr<DeviceCloudPolicyStoreAsh, DanglingUntriaged> policy_store_; |
| raw_ptr<DeviceCloudPolicyManagerAsh, DanglingUntriaged> policy_manager_; |
| raw_ptr<ash::system::StatisticsProvider> statistics_provider_; |
| bool is_initialized_ = false; |
| bool policy_manager_store_ready_notified_ = false; |
| |
| base::CallbackListSubscription state_keys_update_subscription_; |
| base::ScopedObservation<DeviceCloudPolicyManagerAsh, |
| DeviceCloudPolicyManagerAsh::Observer> |
| policy_manager_observer_{this}; |
| |
| // The URLLoaderFactory set in tests. |
| scoped_refptr<network::SharedURLLoaderFactory> |
| system_url_loader_factory_for_testing_; |
| }; |
| |
| } // namespace policy |
| |
| #endif // CHROME_BROWSER_ASH_POLICY_ENROLLMENT_DEVICE_CLOUD_POLICY_INITIALIZER_H_ |