diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-15 12:53:04 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-15 12:53:04 +0000 |
commit | c3d00c8bd8e3652890db6e0525fb5c62a912c123 (patch) | |
tree | a9f33cc0bbc70b15b1255dc39f3613527f3bda3d /chrome/browser/policy | |
parent | 9fe69d2c3dcc76003df82afd826f6cfb0da9f875 (diff) | |
download | chromium_src-c3d00c8bd8e3652890db6e0525fb5c62a912c123.zip chromium_src-c3d00c8bd8e3652890db6e0525fb5c62a912c123.tar.gz chromium_src-c3d00c8bd8e3652890db6e0525fb5c62a912c123.tar.bz2 |
Use system request context for device policy requests.
BUG=chromium-os:14186
TEST=Chrome doesn't crash on logout on ChromeOS when device policy is enabled
Review URL: http://codereview.chromium.org/6865009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81735 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/policy')
-rw-r--r-- | chrome/browser/policy/browser_policy_connector.cc | 41 | ||||
-rw-r--r-- | chrome/browser/policy/browser_policy_connector.h | 18 |
2 files changed, 20 insertions, 39 deletions
diff --git a/chrome/browser/policy/browser_policy_connector.cc b/chrome/browser/policy/browser_policy_connector.cc index f413eba..56f4443 100644 --- a/chrome/browser/policy/browser_policy_connector.cc +++ b/chrome/browser/policy/browser_policy_connector.cc @@ -5,18 +5,14 @@ #include "chrome/browser/policy/browser_policy_connector.h" #include "base/command_line.h" -#include "base/file_util.h" #include "base/path_service.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/policy/cloud_policy_subsystem.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" #include "chrome/browser/policy/configuration_policy_provider.h" #include "chrome/browser/policy/dummy_configuration_policy_provider.h" -#include "chrome/browser/prefs/pref_service.h" -#include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" -#include "content/common/notification_service.h" #if defined(OS_WIN) #include "chrome/browser/policy/configuration_policy_provider_win.h" @@ -33,11 +29,10 @@ namespace policy { -BrowserPolicyConnector::BrowserPolicyConnector() { +BrowserPolicyConnector::BrowserPolicyConnector() + : ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { managed_platform_provider_.reset(CreateManagedPlatformProvider()); recommended_platform_provider_.reset(CreateRecommendedPlatformProvider()); - registrar_.Add(this, NotificationType::DEFAULT_REQUEST_CONTEXT_AVAILABLE, - NotificationService::AllSources()); #if defined(OS_CHROMEOS) CommandLine* command_line = CommandLine::ForCurrentProcess(); @@ -46,6 +41,11 @@ BrowserPolicyConnector::BrowserPolicyConnector() { cloud_policy_subsystem_.reset(new CloudPolicySubsystem( identity_strategy_.get(), new DevicePolicyCache(identity_strategy_.get()))); + + // Initialize the subsystem once the message loops are spinning. + MessageLoop::current()->PostTask( + FROM_HERE, + method_factory_.NewRunnableMethod(&BrowserPolicyConnector::Initialize)); } #endif } @@ -54,7 +54,8 @@ BrowserPolicyConnector::BrowserPolicyConnector( ConfigurationPolicyProvider* managed_platform_provider, ConfigurationPolicyProvider* recommended_platform_provider) : managed_platform_provider_(managed_platform_provider), - recommended_platform_provider_(recommended_platform_provider) {} + recommended_platform_provider_(recommended_platform_provider), + ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {} BrowserPolicyConnector::~BrowserPolicyConnector() { if (cloud_policy_subsystem_.get()) @@ -171,25 +172,13 @@ void BrowserPolicyConnector::StopAutoRetry() { cloud_policy_subsystem_->StopAutoRetry(); } -void BrowserPolicyConnector::Observe(NotificationType type, - const NotificationSource& source, - const NotificationDetails& details) { - if (type == NotificationType::DEFAULT_REQUEST_CONTEXT_AVAILABLE) { - Initialize(g_browser_process->local_state(), - Profile::GetDefaultRequestContext()); - } else { - NOTREACHED(); - } -} - -void BrowserPolicyConnector::Initialize( - PrefService* local_state, - net::URLRequestContextGetter* request_context) { +void BrowserPolicyConnector::Initialize() { // TODO(jkummerow, mnissler): Move this out of the browser startup path. - DCHECK(local_state); - DCHECK(request_context); - if (cloud_policy_subsystem_.get()) - cloud_policy_subsystem_->Initialize(local_state, request_context); + if (cloud_policy_subsystem_.get()) { + cloud_policy_subsystem_->Initialize( + g_browser_process->local_state(), + g_browser_process->system_request_context()); + } } } // namespace diff --git a/chrome/browser/policy/browser_policy_connector.h b/chrome/browser/policy/browser_policy_connector.h index c229310..e055a97 100644 --- a/chrome/browser/policy/browser_policy_connector.h +++ b/chrome/browser/policy/browser_policy_connector.h @@ -10,8 +10,7 @@ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" -#include "content/common/notification_observer.h" -#include "content/common/notification_registrar.h" +#include "base/task.h" class PrefService; class TestingBrowserProcess; @@ -29,7 +28,7 @@ class DevicePolicyIdentityStrategy; // Manages the lifecycle of browser-global policy infrastructure, such as the // platform policy providers. -class BrowserPolicyConnector : public NotificationObserver { +class BrowserPolicyConnector { public: BrowserPolicyConnector(); ~BrowserPolicyConnector(); @@ -63,11 +62,6 @@ class BrowserPolicyConnector : public NotificationObserver { // retrying behavior. void StopAutoRetry(); - // NotificationObserver implementation: - virtual void Observe(NotificationType type, - const NotificationSource& source, - const NotificationDetails& details); - private: friend class ::TestingBrowserProcess; @@ -80,10 +74,8 @@ class BrowserPolicyConnector : public NotificationObserver { ConfigurationPolicyProvider* managed_platform_provider, ConfigurationPolicyProvider* recommended_platform_provider); - // Activates the cloud policy subsystem. Called when the default request - // context is available. - void Initialize(PrefService* local_state, - net::URLRequestContextGetter* request_context); + // Activates the cloud policy subsystem. + void Initialize(); scoped_ptr<ConfigurationPolicyProvider> managed_platform_provider_; scoped_ptr<ConfigurationPolicyProvider> recommended_platform_provider_; @@ -93,7 +85,7 @@ class BrowserPolicyConnector : public NotificationObserver { #endif scoped_ptr<CloudPolicySubsystem> cloud_policy_subsystem_; - NotificationRegistrar registrar_; + ScopedRunnableMethodFactory<BrowserPolicyConnector> method_factory_; DISALLOW_COPY_AND_ASSIGN(BrowserPolicyConnector); }; |