summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/enterprise_extension_observer.cc
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2011-05-11 20:53:37 +0100
committerKristian Monsen <kristianm@google.com>2011-05-16 13:54:48 +0100
commit21d179b334e59e9a3bfcaed4c4430bef1bc5759d (patch)
tree64e2bb6da27af6a5c93ca34f6051584aafbfcb9e /chrome/browser/chromeos/enterprise_extension_observer.cc
parent0c63f00edd6ed0482fd5cbcea937ca088baf7858 (diff)
downloadexternal_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.zip
external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.gz
external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.bz2
Merge Chromium at 10.0.621.0: Initial merge by git.
Change-Id: I070cc91c608dfa4a968a5a54c173260765ac8097
Diffstat (limited to 'chrome/browser/chromeos/enterprise_extension_observer.cc')
-rw-r--r--chrome/browser/chromeos/enterprise_extension_observer.cc65
1 files changed, 65 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/enterprise_extension_observer.cc b/chrome/browser/chromeos/enterprise_extension_observer.cc
new file mode 100644
index 0000000..9fb6132
--- /dev/null
+++ b/chrome/browser/chromeos/enterprise_extension_observer.cc
@@ -0,0 +1,65 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/enterprise_extension_observer.h"
+
+#include "base/file_util.h"
+#include "chrome/browser/browser_thread.h"
+#include "chrome/browser/chromeos/cros/cros_library.h"
+#include "chrome/browser/chromeos/cros/login_library.h"
+#include "chrome/browser/profiles/profile.h"
+
+namespace chromeos {
+
+EnterpriseExtensionObserver::EnterpriseExtensionObserver(Profile* profile)
+ : profile_(profile) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ registrar_.Add(this,
+ NotificationType::EXTENSION_INSTALLED,
+ Source<Profile>(profile_));
+}
+
+void EnterpriseExtensionObserver::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(type == NotificationType::EXTENSION_INSTALLED);
+ if (Source<Profile>(source).ptr() != profile_) {
+ return;
+ }
+ Extension* extension = Details<Extension>(details).ptr();
+ if (extension->location() != Extension::EXTERNAL_POLICY_DOWNLOAD) {
+ return;
+ }
+ BrowserThread::PostTask(
+ BrowserThread::FILE,
+ FROM_HERE,
+ NewRunnableFunction(
+ &EnterpriseExtensionObserver::CheckExtensionAndNotifyEntd,
+ extension->path()));
+}
+
+// static
+void EnterpriseExtensionObserver::CheckExtensionAndNotifyEntd(
+ const FilePath& path) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ if (file_util::PathExists(
+ path.Append(FILE_PATH_LITERAL("isa-cros-policy")))) {
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ NewRunnableFunction(&EnterpriseExtensionObserver::NotifyEntd));
+ }
+}
+
+// static
+void EnterpriseExtensionObserver::NotifyEntd() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (CrosLibrary::Get()->EnsureLoaded()) {
+ CrosLibrary::Get()->GetLoginLibrary()->RestartEntd();
+ return;
+ }
+}
+
+} // namespace chromeos