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

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

Issue 21646004: Compressed activity log database storage (Closed) Base URL: http://git.chromium.org/chromium/src.git@refactor-cleanups
Patch Set: Factor out dropping of obsolete tables and use in all policies Created 7 years, 4 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
(Empty)
1 // 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 #ifndef CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_COUNTING_POLICY_H_
6 #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_COUNTING_POLICY_H_
7
8 #include <string>
9
10 #include "base/containers/hash_tables.h"
11 #include "chrome/browser/extensions/activity_log/activity_database.h"
12 #include "chrome/browser/extensions/activity_log/activity_log_policy.h"
13 #include "chrome/browser/extensions/activity_log/database_interned_string.h"
14
15 namespace extensions {
16
17 // A policy for logging the stream of actions, but without arguments.
18 class CountingPolicy : public ActivityLogDatabasePolicy {
19 public:
20 explicit CountingPolicy(Profile* profile);
21 virtual ~CountingPolicy();
22
23 virtual void ProcessAction(scoped_refptr<Action> action) OVERRIDE;
24
25 virtual void ReadData(
26 const std::string& extension_id,
27 const int day,
28 const base::Callback
29 <void(scoped_ptr<Action::ActionVector>)>& callback) OVERRIDE;
30
31 virtual void Close() OVERRIDE;
32
33 // Gets or sets the amount of time that old records are kept in the database.
34 const base::TimeDelta& retention_time() const { return retention_time_; }
35 void set_retention_time(const base::TimeDelta& delta) {
36 retention_time_ = delta;
37 }
38
39 // The main database table, and the name for a read-only view that
40 // decompresses string values for easier parsing.
41 static const char* kTableName;
42 static const char* kReadViewName;
43
44 protected:
45 // The ActivityDatabase::Delegate interface. These are always called from
46 // the database thread.
47 virtual bool InitDatabase(sql::Connection* db) OVERRIDE;
48 virtual bool FlushDatabase(sql::Connection* db) OVERRIDE;
49 virtual void OnDatabaseFailure() OVERRIDE;
50 virtual void OnDatabaseClose() OVERRIDE;
51
52 private:
53 // Adds an Action to those to be written out; this is an internal method used
54 // by ProcessAction and is called on the database thread.
55 void QueueAction(scoped_refptr<Action> action);
56
57 // Internal method to read data from the database; called on the database
58 // thread.
59 scoped_ptr<Action::ActionVector> DoReadData(
60 const std::string& extension_id,
61 const int days_ago);
62
63 // Cleans old records from the activity log database.
64 bool CleanOlderThan(sql::Connection* db, const base::Time& cutoff);
65
66 // Cleans unused interned strings from the database. This should be run
67 // after deleting rows from the main log table to clean out stale values.
68 bool CleanStringTables(sql::Connection* db);
69
70 // API calls for which complete arguments should be logged.
71 std::set<std::string> api_arg_whitelist_;
72
73 // Tables for mapping strings to integers for shrinking database storage
74 // requirements. URLs are kept in a separate table from other strings to
75 // make history clearing simpler.
76 DatabaseStringTable string_table_;
77 DatabaseStringTable url_table_;
78
79 // Tracks any pending updates to be written to the database, if write
80 // batching is turned on. Should only be accessed from the database thread.
81 // TODO(mvrable): Do in-memory aggregation as well.
82 Action::ActionVector queued_actions_;
83
84 // Whether the policy is in the process of being shut down.
85 bool closing_;
86
87 // The amount of time old activity log records should be kept in the
88 // database. This time is subtracted from the current time, rounded down to
89 // midnight, and rows older than this are deleted from the database when
90 // cleaning runs.
91 base::TimeDelta retention_time_;
92
93 // The time at which old activity log records were last cleaned out of the
94 // database (only tracked for this browser session). Old records are deleted
95 // on the first database flush, and then every 12 hours subsequently.
96 base::Time last_database_cleaning_time_;
97
98 FRIEND_TEST_ALL_PREFIXES(CountingPolicyTest, MergingAndExpiring);
99 };
100
101 } // namespace extensions
102
103 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_COUNTING_POLICY_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698