#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include <string>
+#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
+#include "base/location.h"
#include "base/logging.h"
+#include "base/message_loop/message_loop.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/path_service.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/chromeos/policy/app_pack_updater.h"
+#include "chrome/browser/chromeos/policy/consumer_management_service.h"
+#include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h"
+#include "chrome/browser/chromeos/policy/device_cloud_policy_invalidator.h"
#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
#include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h"
#include "chrome/browser/chromeos/policy/device_local_account.h"
#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h"
#include "chrome/browser/chromeos/policy/device_network_configuration_updater.h"
-#include "chrome/browser/chromeos/policy/device_status_collector.h"
#include "chrome/browser/chromeos/policy/enterprise_install_attributes.h"
#include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chromeos/chromeos_paths.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/cryptohome/system_salt_getter.h"
+#include "chromeos/dbus/cryptohome_client.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/network/network_handler.h"
#include "chromeos/network/onc/onc_certificate_importer_impl.h"
#include "chromeos/settings/cros_settings_names.h"
#include "chromeos/settings/cros_settings_provider.h"
#include "chromeos/settings/timezone_settings.h"
-#include "chromeos/system/statistics_provider.h"
#include "components/policy/core/common/cloud/cloud_policy_client.h"
#include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
#include "components/policy/core/common/proxy_policy_provider.h"
pool->GetSequenceToken(), base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
}
-std::string GetConsumerDeviceManagementServerUrl() {
+std::string GetDeviceManagementServerUrlForConsumer() {
const CommandLine* command_line = CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(
chromeos::switches::kConsumerDeviceManagementUrl)) {
chromeos::switches::kConsumerDeviceManagementUrl);
}
return kDefaultConsumerDeviceManagementServerUrl;
-};
+}
} // namespace
device_cloud_policy_manager_ =
new DeviceCloudPolicyManagerChromeOS(device_cloud_policy_store.Pass(),
base::MessageLoopProxy::current(),
- GetBackgroundTaskRunner(),
- install_attributes_.get(),
state_keys_broker_.get());
AddPolicyProvider(
scoped_ptr<ConfigurationPolicyProvider>(device_cloud_policy_manager_));
scoped_ptr<DeviceManagementService::Configuration> configuration(
new DeviceManagementServiceConfiguration(
- GetConsumerDeviceManagementServerUrl()));
+ GetDeviceManagementServerUrlForConsumer()));
consumer_device_management_service_.reset(
new DeviceManagementService(configuration.Pass()));
consumer_device_management_service_->ScheduleInitialization(
kServiceInitializationStartupDelay);
+ const CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(chromeos::switches::kEnableConsumerManagement)) {
+ chromeos::CryptohomeClient* cryptohome_client =
+ chromeos::DBusThreadManager::Get()->GetCryptohomeClient();
+ consumer_management_service_.reset(
+ new ConsumerManagementService(cryptohome_client));
+ }
+
if (device_cloud_policy_manager_) {
// Note: for now the |device_cloud_policy_manager_| is using the global
// schema registry. Eventually it will have its own registry, once device
// cloud policy for extensions is introduced. That means it'd have to be
// initialized from here instead of BrowserPolicyConnector::Init().
- scoped_ptr<CloudPolicyClient::StatusProvider> status_provider(
- new DeviceStatusCollector(
+ device_cloud_policy_manager_->Initialize(local_state);
+
+ device_cloud_policy_initializer_.reset(
+ new DeviceCloudPolicyInitializer(
local_state,
- chromeos::system::StatisticsProvider::GetInstance(),
- NULL));
- device_cloud_policy_manager_->Connect(
- local_state, device_management_service(), status_provider.Pass());
+ device_management_service(),
+ GetDeviceManagementServiceForConsumer(),
+ GetBackgroundTaskRunner(),
+ install_attributes_.get(),
+ state_keys_broker_.get(),
+ device_cloud_policy_manager_->device_store(),
+ device_cloud_policy_manager_,
+ chromeos::DeviceSettingsService::Get(),
+ base::Bind(&BrowserPolicyConnectorChromeOS::
+ OnDeviceCloudPolicyManagerConnected,
+ base::Unretained(this))));
}
device_local_account_policy_service_.reset(
content::BrowserThread::IO),
request_context));
device_local_account_policy_service_->Connect(device_management_service());
+ device_cloud_policy_invalidator_.reset(new DeviceCloudPolicyInvalidator);
// request_context is NULL in unit tests.
if (request_context && install_attributes_) {
chromeos::CrosSettings::Get());
}
+void BrowserPolicyConnectorChromeOS::ShutdownInvalidator() {
+ device_cloud_policy_invalidator_.reset();
+}
+
void BrowserPolicyConnectorChromeOS::Shutdown() {
+ // Verify that ShutdownInvalidator() has been called first.
+ DCHECK(!device_cloud_policy_invalidator_);
+
// The AppPackUpdater may be observing the |device_cloud_policy_manager_|.
// Delete it first.
app_pack_updater_.reset();
if (device_local_account_policy_service_)
device_local_account_policy_service_->Shutdown();
+ if (device_cloud_policy_initializer_)
+ device_cloud_policy_initializer_->Shutdown();
+
ChromeBrowserPolicyConnector::Shutdown();
}
}
}
+void BrowserPolicyConnectorChromeOS::OnDeviceCloudPolicyManagerConnected() {
+ // This function is invoked by DCPInitializer, so we should release the
+ // initializer after this function returns.
+ if (device_cloud_policy_initializer_) {
+ device_cloud_policy_initializer_->Shutdown();
+ base::MessageLoop::current()->DeleteSoon(
+ FROM_HERE, device_cloud_policy_initializer_.release());
+ }
+}
+
} // namespace policy