summaryrefslogtreecommitdiffstats
path: root/chrome/browser/policy
diff options
context:
space:
mode:
authormnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-15 12:53:04 +0000
committermnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-15 12:53:04 +0000
commitc3d00c8bd8e3652890db6e0525fb5c62a912c123 (patch)
treea9f33cc0bbc70b15b1255dc39f3613527f3bda3d /chrome/browser/policy
parent9fe69d2c3dcc76003df82afd826f6cfb0da9f875 (diff)
downloadchromium_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.cc41
-rw-r--r--chrome/browser/policy/browser_policy_connector.h18
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);
};