diff options
author | gfeher@chromium.org <gfeher@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-01 13:09:32 +0000 |
---|---|---|
committer | gfeher@chromium.org <gfeher@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-01 13:09:32 +0000 |
commit | 62cb99478bd034816d74937c34a4255dff5bfe1e (patch) | |
tree | 7ea71b2b8de11076e4c1c9235d54d62fd83b8fd1 /chrome/browser/chromeos/enterprise_extension_observer.cc | |
parent | e8f8da26a2149d5ab13af5939e7d23b0927f2110 (diff) | |
download | chromium_src-62cb99478bd034816d74937c34a4255dff5bfe1e.zip chromium_src-62cb99478bd034816d74937c34a4255dff5bfe1e.tar.gz chromium_src-62cb99478bd034816d74937c34a4255dff5bfe1e.tar.bz2 |
Notify the CrOS Enterprise Daemon if an Enterprise Extension has been installed
Listen for extension install events and restart the Enterprise Daemon if an extension was installed, that is from a policy and it contains the policy marker file.
BUG=chromeos:9702
TEST=manual
Review URL: http://codereview.chromium.org/5311007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67847 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/enterprise_extension_observer.cc')
-rw-r--r-- | chrome/browser/chromeos/enterprise_extension_observer.cc | 65 |
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..8e6c620 --- /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/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 |