Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(433)

Side by Side Diff: chrome/browser/extensions/activity_log/activity_log.h

Issue 298023009: Remove InstallTracker's extension load, unload observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase and shutdown Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_LOG_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_LOG_H_
6 #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_LOG_H_ 6 #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_LOG_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/observer_list_threadsafe.h" 13 #include "base/observer_list_threadsafe.h"
14 #include "base/scoped_observer.h"
14 #include "base/synchronization/lock.h" 15 #include "base/synchronization/lock.h"
15 #include "base/threading/thread.h" 16 #include "base/threading/thread.h"
16 #include "chrome/browser/extensions/activity_log/activity_actions.h" 17 #include "chrome/browser/extensions/activity_log/activity_actions.h"
17 #include "chrome/browser/extensions/activity_log/activity_log_policy.h" 18 #include "chrome/browser/extensions/activity_log/activity_log_policy.h"
18 #include "chrome/browser/extensions/install_observer.h"
19 #include "chrome/browser/extensions/tab_helper.h" 19 #include "chrome/browser/extensions/tab_helper.h"
20 #include "extensions/browser/api_activity_monitor.h" 20 #include "extensions/browser/api_activity_monitor.h"
21 #include "extensions/browser/browser_context_keyed_api_factory.h" 21 #include "extensions/browser/browser_context_keyed_api_factory.h"
22 #include "extensions/browser/extension_registry_observer.h"
22 #include "extensions/common/dom_action_types.h" 23 #include "extensions/common/dom_action_types.h"
23 24
24 class Profile; 25 class Profile;
25 26
26 namespace content { 27 namespace content {
27 class BrowserContext; 28 class BrowserContext;
28 } 29 }
29 30
30 namespace user_prefs { 31 namespace user_prefs {
31 class PrefRegistrySyncable; 32 class PrefRegistrySyncable;
32 } 33 }
33 34
34 namespace extensions { 35 namespace extensions {
35 class Extension; 36 class Extension;
36 class InstallTracker; 37 class ExtensionRegistry;
37 38
38 // A utility for tracing interesting activity for each extension. 39 // A utility for tracing interesting activity for each extension.
39 // It writes to an ActivityDatabase on a separate thread to record the activity. 40 // It writes to an ActivityDatabase on a separate thread to record the activity.
40 // Each profile has different extensions, so we keep a different database for 41 // Each profile has different extensions, so we keep a different database for
41 // each profile. 42 // each profile.
42 class ActivityLog : public BrowserContextKeyedAPI, 43 class ActivityLog : public BrowserContextKeyedAPI,
43 public ApiActivityMonitor, 44 public ApiActivityMonitor,
44 public TabHelper::ScriptExecutionObserver, 45 public TabHelper::ScriptExecutionObserver,
45 public InstallObserver { 46 public ExtensionRegistryObserver {
46 public: 47 public:
47 // Observers can listen for activity events. There is probably only one 48 // Observers can listen for activity events. There is probably only one
48 // observer: the activityLogPrivate API. 49 // observer: the activityLogPrivate API.
49 class Observer { 50 class Observer {
50 public: 51 public:
51 virtual void OnExtensionActivity(scoped_refptr<Action> activity) = 0; 52 virtual void OnExtensionActivity(scoped_refptr<Action> activity) = 0;
52 }; 53 };
53 54
54 static BrowserContextKeyedAPIFactory<ActivityLog>* GetFactoryInstance(); 55 static BrowserContextKeyedAPIFactory<ActivityLog>* GetFactoryInstance();
55 56
(...skipping 18 matching lines...) Expand all
74 void GetFilteredActions( 75 void GetFilteredActions(
75 const std::string& extension_id, 76 const std::string& extension_id,
76 const Action::ActionType type, 77 const Action::ActionType type,
77 const std::string& api_name, 78 const std::string& api_name,
78 const std::string& page_url, 79 const std::string& page_url,
79 const std::string& arg_url, 80 const std::string& arg_url,
80 const int days_ago, 81 const int days_ago,
81 const base::Callback 82 const base::Callback
82 <void(scoped_ptr<std::vector<scoped_refptr<Action> > >)>& callback); 83 <void(scoped_ptr<std::vector<scoped_refptr<Action> > >)>& callback);
83 84
84 // Extension::InstallObserver 85 // ExtensionRegistryObserver.
85 // We keep track of whether the whitelisted extension is installed; if it is, 86 // We keep track of whether the whitelisted extension is installed; if it is,
86 // we want to recompute whether to have logging enabled. 87 // we want to recompute whether to have logging enabled.
87 virtual void OnExtensionLoaded(const Extension* extension) OVERRIDE; 88 virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
88 virtual void OnExtensionUnloaded(const Extension* extension) OVERRIDE; 89 const Extension* extension) OVERRIDE;
89 virtual void OnExtensionUninstalled(const Extension* extension) OVERRIDE; 90 virtual void OnExtensionUnloaded(
91 content::BrowserContext* browser_context,
92 const Extension* extension,
93 UnloadedExtensionInfo::Reason reason) OVERRIDE;
94 virtual void OnExtensionUninstalled(content::BrowserContext* browser_context,
95 const Extension* extension) OVERRIDE;
90 96
91 // ApiActivityMonitor 97 // ApiActivityMonitor.
92 virtual void OnApiEventDispatched( 98 virtual void OnApiEventDispatched(
93 const std::string& extension_id, 99 const std::string& extension_id,
94 const std::string& event_name, 100 const std::string& event_name,
95 scoped_ptr<base::ListValue> event_args) OVERRIDE; 101 scoped_ptr<base::ListValue> event_args) OVERRIDE;
96 virtual void OnApiFunctionCalled( 102 virtual void OnApiFunctionCalled(
97 const std::string& extension_id, 103 const std::string& extension_id,
98 const std::string& api_name, 104 const std::string& api_name,
99 scoped_ptr<base::ListValue> event_args) OVERRIDE; 105 scoped_ptr<base::ListValue> event_args) OVERRIDE;
100 106
101 // KeyedService
102 virtual void Shutdown() OVERRIDE;
103
104 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 107 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
105 108
106 // Remove actions from the activity log database which IDs specified in the 109 // Remove actions from the activity log database which IDs specified in the
107 // action_ids array. 110 // action_ids array.
108 void RemoveActions(const std::vector<int64>& action_ids); 111 void RemoveActions(const std::vector<int64>& action_ids);
109 112
110 // Clean up URLs from the activity log database. 113 // Clean up URLs from the activity log database.
111 // If restrict_urls is empty then all URLs in the activity log database are 114 // If restrict_urls is empty then all URLs in the activity log database are
112 // removed, otherwise only those in restrict_urls are removed. 115 // removed, otherwise only those in restrict_urls are removed.
113 void RemoveURLs(const std::vector<GURL>& restrict_urls); 116 void RemoveURLs(const std::vector<GURL>& restrict_urls);
(...skipping 16 matching lines...) Expand all
130 133
131 // Specifies if the Watchdog app is active (installed & enabled). 134 // Specifies if the Watchdog app is active (installed & enabled).
132 // If so, we need to log to the database and stream to the API. 135 // If so, we need to log to the database and stream to the API.
133 bool IsWatchdogAppActive(); 136 bool IsWatchdogAppActive();
134 137
135 // Specifies if we need to record actions to the db. If so, we need to log to 138 // Specifies if we need to record actions to the db. If so, we need to log to
136 // the database. This is true if the Watchdog app is active *or* the 139 // the database. This is true if the Watchdog app is active *or* the
137 // --enable-extension-activity-logging flag is set. 140 // --enable-extension-activity-logging flag is set.
138 bool IsDatabaseEnabled(); 141 bool IsDatabaseEnabled();
139 142
140 // Delayed initialization of Install Tracker which waits until after the 143 // Delayed initialization of ExtensionRegistry which waits until after the
141 // ExtensionSystem/ExtensionService are done with their own setup. 144 // ExtensionSystem/ExtensionService are done with their own setup.
142 void InitInstallTracker(); 145 void StartObserving();
143 146
144 // TabHelper::ScriptExecutionObserver implementation. 147 // TabHelper::ScriptExecutionObserver implementation.
145 // Fires when a ContentScript is executed. 148 // Fires when a ContentScript is executed.
146 virtual void OnScriptsExecuted( 149 virtual void OnScriptsExecuted(
147 const content::WebContents* web_contents, 150 const content::WebContents* web_contents,
148 const ExecutingScriptsMap& extension_ids, 151 const ExecutingScriptsMap& extension_ids,
149 int32 page_id, 152 int32 page_id,
150 const GURL& on_url) OVERRIDE; 153 const GURL& on_url) OVERRIDE;
151 154
152 // At the moment, ActivityLog will use only one policy for summarization. 155 // At the moment, ActivityLog will use only one policy for summarization.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 // testing_mode_ also causes us to print to the console. 191 // testing_mode_ also causes us to print to the console.
189 bool testing_mode_; 192 bool testing_mode_;
190 // We need the DB, FILE, and IO threads to write to the database. 193 // We need the DB, FILE, and IO threads to write to the database.
191 // In some cases (tests), these threads might not exist, so we avoid 194 // In some cases (tests), these threads might not exist, so we avoid
192 // dispatching anything to the policies/database to prevent things from 195 // dispatching anything to the policies/database to prevent things from
193 // exploding. 196 // exploding.
194 bool has_threads_; 197 bool has_threads_;
195 198
196 // Used to track whether the whitelisted extension is installed. If it's 199 // Used to track whether the whitelisted extension is installed. If it's
197 // added or removed, enabled_ may change. 200 // added or removed, enabled_ may change.
198 InstallTracker* tracker_; 201 ScopedObserver<extensions::ExtensionRegistry,
202 extensions::ExtensionRegistryObserver>
203 extension_registry_observer_;
199 204
200 // Set if the watchdog app is installed and enabled. Maintained by 205 // Set if the watchdog app is installed and enabled. Maintained by
201 // kWatchdogExtensionActive pref variable. Since there are multiple valid 206 // kWatchdogExtensionActive pref variable. Since there are multiple valid
202 // extension IDs, this needs to be an int to count how many are installed. 207 // extension IDs, this needs to be an int to count how many are installed.
203 int watchdog_apps_active_; 208 int watchdog_apps_active_;
204 209
205 FRIEND_TEST_ALL_PREFIXES(ActivityLogApiTest, TriggerEvent); 210 FRIEND_TEST_ALL_PREFIXES(ActivityLogApiTest, TriggerEvent);
206 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, AppAndCommandLine); 211 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, AppAndCommandLine);
207 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, CommandLineSwitch); 212 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, CommandLineSwitch);
208 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, NoSwitch); 213 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, NoSwitch);
209 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, PrefSwitch); 214 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, PrefSwitch);
210 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, WatchdogSwitch); 215 FRIEND_TEST_ALL_PREFIXES(ActivityLogEnabledTest, WatchdogSwitch);
211 DISALLOW_COPY_AND_ASSIGN(ActivityLog); 216 DISALLOW_COPY_AND_ASSIGN(ActivityLog);
212 }; 217 };
213 218
214 template <> 219 template <>
215 void BrowserContextKeyedAPIFactory<ActivityLog>::DeclareFactoryDependencies(); 220 void BrowserContextKeyedAPIFactory<ActivityLog>::DeclareFactoryDependencies();
216 221
217 } // namespace extensions 222 } // namespace extensions
218 223
219 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_LOG_H_ 224 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_LOG_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698