• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/chromeos/enterprise_extension_observer.h"
6 
7 #include "base/file_util.h"
8 #include "chrome/browser/chromeos/cros/cros_library.h"
9 #include "chrome/browser/chromeos/cros/login_library.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "content/browser/browser_thread.h"
12 
13 namespace chromeos {
14 
EnterpriseExtensionObserver(Profile * profile)15 EnterpriseExtensionObserver::EnterpriseExtensionObserver(Profile* profile)
16     : profile_(profile) {
17   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
18   registrar_.Add(this,
19                  NotificationType::EXTENSION_INSTALLED,
20                  Source<Profile>(profile_));
21 }
22 
Observe(NotificationType type,const NotificationSource & source,const NotificationDetails & details)23 void EnterpriseExtensionObserver::Observe(NotificationType type,
24                                           const NotificationSource& source,
25                                           const NotificationDetails& details) {
26   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
27   DCHECK(type == NotificationType::EXTENSION_INSTALLED);
28   if (Source<Profile>(source).ptr() != profile_) {
29     return;
30   }
31   Extension* extension = Details<Extension>(details).ptr();
32   if (extension->location() != Extension::EXTERNAL_POLICY_DOWNLOAD) {
33     return;
34   }
35   BrowserThread::PostTask(
36       BrowserThread::FILE,
37       FROM_HERE,
38       NewRunnableFunction(
39           &EnterpriseExtensionObserver::CheckExtensionAndNotifyEntd,
40           extension->path()));
41 }
42 
43 // static
CheckExtensionAndNotifyEntd(const FilePath & path)44 void EnterpriseExtensionObserver::CheckExtensionAndNotifyEntd(
45     const FilePath& path) {
46   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
47   if (file_util::PathExists(
48       path.Append(FILE_PATH_LITERAL("isa-cros-policy")))) {
49     BrowserThread::PostTask(
50         BrowserThread::UI,
51         FROM_HERE,
52         NewRunnableFunction(&EnterpriseExtensionObserver::NotifyEntd));
53   }
54 }
55 
56 // static
NotifyEntd()57 void EnterpriseExtensionObserver::NotifyEntd() {
58   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
59   if (CrosLibrary::Get()->EnsureLoaded()) {
60     CrosLibrary::Get()->GetLoginLibrary()->RestartEntd();
61     return;
62   }
63 }
64 
65 }  // namespace chromeos
66