| 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); | 
| }; | 
|  | 
|  |