Index: chrome/browser/extensions/activity_log/activity_log.h |
diff --git a/chrome/browser/extensions/activity_log/activity_log.h b/chrome/browser/extensions/activity_log/activity_log.h |
index 97af9162a50db5727a59f02d9dd65bd15a542c12..423de346f1d9f1d80a592023539295e5981c3d58 100644 |
--- a/chrome/browser/extensions/activity_log/activity_log.h |
+++ b/chrome/browser/extensions/activity_log/activity_log.h |
@@ -9,16 +9,14 @@ |
#include <string> |
#include <vector> |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
#include "base/callback.h" |
-#include "base/containers/hash_tables.h" |
#include "base/memory/singleton.h" |
#include "base/observer_list_threadsafe.h" |
#include "base/synchronization/lock.h" |
#include "base/threading/thread.h" |
#include "chrome/browser/extensions/activity_log/activity_actions.h" |
#include "chrome/browser/extensions/activity_log/activity_database.h" |
+#include "chrome/browser/extensions/activity_log/activity_log_policy.h" |
#include "chrome/browser/extensions/install_observer.h" |
#include "chrome/browser/extensions/install_tracker.h" |
#include "chrome/browser/extensions/tab_helper.h" |
@@ -27,13 +25,13 @@ |
#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" |
#include "components/browser_context_keyed_service/browser_context_keyed_service.h" |
#include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h" |
-#include "content/public/browser/browser_thread.h" |
class Profile; |
using content::BrowserThread; |
namespace extensions { |
class Extension; |
+class ActivityLogPolicy; |
// A utility for tracing interesting activity for each extension. |
// It writes to an ActivityDatabase on a separate thread to record the activity. |
@@ -88,7 +86,7 @@ class ActivityLog : public BrowserContextKeyedService, |
void LogBlockedAction(const std::string& extension_id, |
const std::string& blocked_call, // e.g., tabs.get |
ListValue* args, // argument values |
- const BlockedAction::Reason reason, // why it's blocked |
+ BlockedAction::Reason reason, // why it's blocked |
const std::string& extra); // extra logging info |
// Log an interaction between an extension and a URL. |
@@ -143,12 +141,22 @@ class ActivityLog : public BrowserContextKeyedService, |
virtual void OnShutdown() OVERRIDE {} |
// For unit tests only. |
+ // TODO(felt) In the future, when we'll have multiple policies, it might |
+ // be needed to rename the argument. |
void SetArgumentLoggingForTesting(bool log_arguments); |
static void RecomputeLoggingIsEnabled(bool profile_enabled); |
// BrowserContextKeyedService |
virtual void Shutdown() OVERRIDE; |
+ // At the moment, ActivityLog will use only one policy for summarization |
+ // (POLICY_NOARGS by default). This static member function can be used |
+ // to change the default type, but has to be called before the first |
+ // GetInstance call. |
+ // TODO(dbabic,felt) ActivityLog should support multiple policies at the |
+ // same time, so this will need to be changed later. |
+ void SetDefaultPolicy(ActivityLogPolicy::PolicyType policy_type); |
+ |
private: |
friend class ActivityLogFactory; |
@@ -172,61 +180,33 @@ class ActivityLog : public BrowserContextKeyedService, |
int32 page_id, |
const GURL& on_url) OVERRIDE; |
- // The Schedule methods dispatch the calls to the database on a |
- // separate thread. We dispatch to the UI thread if the DB thread doesn't |
- // exist, which should only happen in tests where there is no DB thread. |
- template<typename DatabaseFunc> |
- void ScheduleAndForget(DatabaseFunc func) { |
- if (!has_threads_) return; |
- BrowserThread::PostTask(BrowserThread::DB, |
- FROM_HERE, |
- base::Bind(func, base::Unretained(db_))); |
- } |
- |
- template<typename DatabaseFunc, typename ArgA> |
- void ScheduleAndForget(DatabaseFunc func, ArgA a) { |
- if (!has_threads_) return; |
- BrowserThread::PostTask(BrowserThread::DB, |
- FROM_HERE, |
- base::Bind(func, base::Unretained(db_), a)); |
- } |
- |
- template<typename DatabaseFunc, typename ArgA, typename ArgB> |
- void ScheduleAndForget(DatabaseFunc func, ArgA a, ArgB b) { |
- if (!has_threads_) return; |
- BrowserThread::PostTask(BrowserThread::DB, |
- FROM_HERE, |
- base::Bind(func, base::Unretained(db_), a, b)); |
- } |
- |
typedef ObserverListThreadSafe<Observer> ObserverList; |
scoped_refptr<ObserverList> observers_; |
- // The database wrapper that does the actual database I/O. |
- // We initialize this on the same thread as the ActivityLog, but then |
- // subsequent operations occur on the DB thread. Instead of destructing the |
- // ActivityDatabase, we call its Close() method on the DB thread and it |
- // commits suicide. |
- extensions::ActivityDatabase* db_; |
+ // The policy object takes care of data summarization, compression, and |
+ // logging |
+ extensions::ActivityLogPolicy* policy_; |
+ |
+ // TODO(dbabic,felt) change this into a list of policy types later. |
+ ActivityLogPolicy::PolicyType policy_type_; |
+ Profile* profile_; |
+ // TODO(felt) These two flags could use a comment. |
+ bool enabled_; |
+ bool first_time_checking_; |
// testing_mode_ controls whether to log API call arguments. By default, we |
// don't log most arguments to avoid saving too much data. In testing mode, |
// argument collection is enabled. We also whitelist some arguments for |
// collection regardless of whether this bool is true. |
// When testing_mode_ is enabled, we also print to the console. |
bool testing_mode_; |
- base::hash_set<std::string> arg_whitelist_api_; |
- |
- Profile* profile_; |
- bool enabled_; |
- bool first_time_checking_; |
- InstallTracker* tracker_; |
- |
// We need the DB, FILE, and IO threads to operate. In some cases (tests), |
// these threads might not exist, so we avoid dispatching anything to the |
// ActivityDatabase to prevent things from exploding. |
bool has_threads_; |
+ InstallTracker* tracker_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ActivityLog); |
}; |