blob: fc5b5049763690cfa618fea05189d8d9544af2dd [file] [log] [blame]
[email protected]ef9d2742013-02-26 12:48:351// Copyright 2013 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/extensions/install_tracker.h"
6
[email protected]67e0a262013-03-15 13:14:497#include "base/bind.h"
[email protected]49a01e642013-07-12 00:29:458#include "chrome/browser/chrome_notification_types.h"
[email protected]67e0a262013-03-15 13:14:499#include "chrome/common/pref_names.h"
10#include "content/public/browser/notification_service.h"
[email protected]489db0842014-01-22 18:20:0311#include "extensions/browser/extension_prefs.h"
[email protected]234fc5ff2014-01-16 23:32:2812#include "extensions/browser/pref_names.h"
[email protected]67e0a262013-03-15 13:14:4913
[email protected]ef9d2742013-02-26 12:48:3514namespace extensions {
15
[email protected]67e0a262013-03-15 13:14:4916InstallTracker::InstallTracker(Profile* profile,
17 extensions::ExtensionPrefs* prefs) {
[email protected]74474042013-11-21 12:03:5418 AppSorting* sorting = prefs->app_sorting();
[email protected]67e0a262013-03-15 13:14:4919
[email protected]b9b9b5d2013-07-12 05:11:3920 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED,
21 content::Source<Profile>(profile));
[email protected]67e0a262013-03-15 13:14:4922 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
23 content::Source<Profile>(profile));
[email protected]ec870532014-03-19 20:24:0524 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
[email protected]67e0a262013-03-15 13:14:4925 content::Source<Profile>(profile));
[email protected]8ed2d352013-07-03 22:26:4626 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
27 content::Source<Profile>(profile));
[email protected]8c179032014-03-20 22:49:1028 registrar_.Add(this,
29 chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED,
30 content::Source<Profile>(profile));
[email protected]67e0a262013-03-15 13:14:4931 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED,
[email protected]74474042013-11-21 12:03:5432 content::Source<AppSorting>(sorting));
[email protected]67e0a262013-03-15 13:14:4933 registrar_.Add(this, chrome::NOTIFICATION_APP_INSTALLED_TO_APPLIST,
34 content::Source<Profile>(profile));
35
36 pref_change_registrar_.Init(prefs->pref_service());
[email protected]234fc5ff2014-01-16 23:32:2837 pref_change_registrar_.Add(pref_names::kExtensions,
[email protected]67e0a262013-03-15 13:14:4938 base::Bind(&InstallTracker::OnAppsReordered,
39 base::Unretained(this)));
[email protected]ef9d2742013-02-26 12:48:3540}
41
42InstallTracker::~InstallTracker() {
43}
44
45void InstallTracker::AddObserver(InstallObserver* observer) {
46 observers_.AddObserver(observer);
47}
48
49void InstallTracker::RemoveObserver(InstallObserver* observer) {
50 observers_.RemoveObserver(observer);
51}
52
53void InstallTracker::OnBeginExtensionInstall(
[email protected]fa517d02013-11-18 09:33:0954 const InstallObserver::ExtensionInstallParams& params) {
[email protected]ef9d2742013-02-26 12:48:3555 FOR_EACH_OBSERVER(InstallObserver, observers_,
[email protected]fa517d02013-11-18 09:33:0956 OnBeginExtensionInstall(params));
[email protected]ef9d2742013-02-26 12:48:3557}
58
[email protected]c80fe5f2014-03-26 04:36:3059void InstallTracker::OnBeginExtensionDownload(const std::string& extension_id) {
60 FOR_EACH_OBSERVER(
61 InstallObserver, observers_, OnBeginExtensionDownload(extension_id));
62}
63
[email protected]ef9d2742013-02-26 12:48:3564void InstallTracker::OnDownloadProgress(const std::string& extension_id,
65 int percent_downloaded) {
66 FOR_EACH_OBSERVER(InstallObserver, observers_,
67 OnDownloadProgress(extension_id, percent_downloaded));
68}
69
[email protected]c80fe5f2014-03-26 04:36:3070void InstallTracker::OnBeginCrxInstall(const std::string& extension_id) {
71 FOR_EACH_OBSERVER(
72 InstallObserver, observers_, OnBeginCrxInstall(extension_id));
73}
74
[email protected]ef9d2742013-02-26 12:48:3575void InstallTracker::OnInstallFailure(
76 const std::string& extension_id) {
77 FOR_EACH_OBSERVER(InstallObserver, observers_,
78 OnInstallFailure(extension_id));
79}
80
[email protected]523352c922013-02-28 01:38:5281void InstallTracker::Shutdown() {
82 FOR_EACH_OBSERVER(InstallObserver, observers_, OnShutdown());
83}
84
[email protected]67e0a262013-03-15 13:14:4985void InstallTracker::Observe(int type,
86 const content::NotificationSource& source,
87 const content::NotificationDetails& details) {
88 switch (type) {
[email protected]b9b9b5d2013-07-12 05:11:3989 case chrome::NOTIFICATION_EXTENSION_INSTALLED: {
[email protected]67e0a262013-03-15 13:14:4990 const Extension* extension =
[email protected]914358df2013-07-17 17:22:0091 content::Details<const InstalledExtensionInfo>(details).ptr()->
92 extension;
[email protected]67e0a262013-03-15 13:14:4993 FOR_EACH_OBSERVER(InstallObserver, observers_,
94 OnExtensionInstalled(extension));
95 break;
96 }
[email protected]b9b9b5d2013-07-12 05:11:3997 case chrome::NOTIFICATION_EXTENSION_LOADED: {
98 const Extension* extension =
99 content::Details<const Extension>(details).ptr();
100 FOR_EACH_OBSERVER(InstallObserver, observers_,
101 OnExtensionLoaded(extension));
102 break;
103 }
[email protected]ec870532014-03-19 20:24:05104 case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
[email protected]67e0a262013-03-15 13:14:49105 const content::Details<extensions::UnloadedExtensionInfo>& unload_info(
106 details);
107 const Extension* extension = unload_info->extension;
[email protected]b9b9b5d2013-07-12 05:11:39108 FOR_EACH_OBSERVER(InstallObserver, observers_,
109 OnExtensionUnloaded(extension));
[email protected]67e0a262013-03-15 13:14:49110 break;
111 }
[email protected]8ed2d352013-07-03 22:26:46112 case chrome::NOTIFICATION_EXTENSION_UNINSTALLED: {
113 const Extension* extension =
114 content::Details<const Extension>(details).ptr();
115
116 FOR_EACH_OBSERVER(InstallObserver, observers_,
117 OnExtensionUninstalled(extension));
118 break;
119 }
[email protected]8c179032014-03-20 22:49:10120 case chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED: {
121 const Extension* extension =
122 content::Details<const Extension>(details).ptr();
123 FOR_EACH_OBSERVER(
124 InstallObserver, observers_, OnDisabledExtensionUpdated(extension));
125 break;
126 }
[email protected]67e0a262013-03-15 13:14:49127 case chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED: {
128 FOR_EACH_OBSERVER(InstallObserver, observers_, OnAppsReordered());
129 break;
130 }
131 case chrome::NOTIFICATION_APP_INSTALLED_TO_APPLIST: {
132 const std::string& extension_id(
133 *content::Details<const std::string>(details).ptr());
134 FOR_EACH_OBSERVER(InstallObserver, observers_,
135 OnAppInstalledToAppList(extension_id));
136 break;
137 }
138 default:
139 NOTREACHED();
140 }
141}
142
143void InstallTracker::OnAppsReordered() {
144 FOR_EACH_OBSERVER(InstallObserver, observers_, OnAppsReordered());
145}
146
[email protected]ef9d2742013-02-26 12:48:35147} // namespace extensions