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

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

Issue 18878009: Add functions to clean URLs from the activity log (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix some comments Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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_DATABASE_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_DATABASE_H_
6 #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_DATABASE_H_ 6 #define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_DATABASE_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 // ActivityLogPolicy object. 54 // ActivityLogPolicy object.
55 // 5. ActivityDatabase::Close() finishes running by deleting the 55 // 5. ActivityDatabase::Close() finishes running by deleting the
56 // ActivityDatabase object. 56 // ActivityDatabase object.
57 // 57 //
58 // (This assumes the common case that the ActivityLogPolicy uses an 58 // (This assumes the common case that the ActivityLogPolicy uses an
59 // ActivityDatabase and implements the ActivityDatabase::Delegate interface. 59 // ActivityDatabase and implements the ActivityDatabase::Delegate interface.
60 // It is also possible for an ActivityLogPolicy to not use a database at all, 60 // It is also possible for an ActivityLogPolicy to not use a database at all,
61 // in which case ActivityLogPolicy::Close() should directly delete itself.) 61 // in which case ActivityLogPolicy::Close() should directly delete itself.)
62 class ActivityDatabase { 62 class ActivityDatabase {
63 public: 63 public:
64 // All the fields that need to be cleaned up when URLs are cleaned.
65 static const char* kURLFields[];
felt 2013/07/17 01:55:40 This constant should probably be moved into the Ac
mvrable 2013/07/17 16:41:23 If the history clearing code is in the ActivityDat
66
64 // Interface defining calls that the ActivityDatabase can make into a 67 // Interface defining calls that the ActivityDatabase can make into a
65 // ActivityLogPolicy instance to implement policy-specific behavior. Methods 68 // ActivityLogPolicy instance to implement policy-specific behavior. Methods
66 // are always invoked on the database thread. Classes other than 69 // are always invoked on the database thread. Classes other than
67 // ActivityDatabase should not call these methods. 70 // ActivityDatabase should not call these methods.
68 class Delegate { 71 class Delegate {
69 protected: 72 protected:
70 friend class ActivityDatabase; 73 friend class ActivityDatabase;
71 74
72 // A Delegate is never directly deleted; it should instead delete itself 75 // A Delegate is never directly deleted; it should instead delete itself
73 // after any final cleanup when OnDatabaseClose() is invoked. 76 // after any final cleanup when OnDatabaseClose() is invoked.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 // 1 = yesterday, etc. Only returns 1 day at a time. Actions are sorted from 117 // 1 = yesterday, etc. Only returns 1 day at a time. Actions are sorted from
115 // newest to oldest. 118 // newest to oldest.
116 scoped_ptr<std::vector<scoped_refptr<Action> > > GetActions( 119 scoped_ptr<std::vector<scoped_refptr<Action> > > GetActions(
117 const std::string& extension_id, const int days_ago); 120 const std::string& extension_id, const int days_ago);
118 121
119 // Handle errors in database writes. 122 // Handle errors in database writes.
120 void DatabaseErrorCallback(int error, sql::Statement* stmt); 123 void DatabaseErrorCallback(int error, sql::Statement* stmt);
121 124
122 bool is_db_valid() const { return valid_db_; } 125 bool is_db_valid() const { return valid_db_; }
123 126
127 // Cleans all instances of particular URLs from the database. Used when user
128 // cleans particular URLs from history. If the vector is empty then all URLS
129 // are cleaned from the db.
130 void RemoveURLs(const std::vector<GURL>& gurls);
131
132 // Removes a single URL from the db. If the top level domain of the gurl is
133 // empty then it does not attempt to remove anything from the db.
134 void RemoveURL(const GURL& gurl);
135
136 // Cleans all URL columns from the database.
137 void RemoveAllURLs();
138
139 // Constructs an SQL query to clear urls from the database. If url is the
140 // empty string then constructs a query to remove all urls.
141 static void ConstructRemoveURLQuery(const std::string& url,
142 std::string* query);
143
124 // For unit testing only. 144 // For unit testing only.
125 void SetBatchModeForTesting(bool batch_mode); 145 void SetBatchModeForTesting(bool batch_mode);
126 void SetClockForTesting(base::Clock* clock); 146 void SetClockForTesting(base::Clock* clock);
127 void SetTimerForTesting(int milliseconds); 147 void SetTimerForTesting(int milliseconds);
128 148
129 private: 149 private:
130 // This should never be invoked by another class. Use Close() to order a 150 // This should never be invoked by another class. Use Close() to order a
131 // suicide. 151 // suicide.
132 virtual ~ActivityDatabase(); 152 virtual ~ActivityDatabase();
133 153
134 sql::InitStatus InitializeTable(const char* table_name, 154 sql::InitStatus InitializeTable(const char* table_name,
135 const char* table_structure); 155 const char* table_structure);
136 156
137 // When we're in batched mode (which is on by default), we write to the db 157 // When we're in batched mode (which is on by default), we write to the db
138 // every X minutes instead of on every API call. This prevents the annoyance 158 // every X minutes instead of on every API call. This prevents the annoyance
139 // of writing to disk multiple times a second. 159 // of writing to disk multiple times a second.
140 void StartTimer(); 160 void StartTimer();
141 void RecordBatchedActions(); 161 void RecordBatchedActions();
142 162
143 // If an error is unrecoverable or occurred while we were trying to close 163 // If an error is unrecoverable or occurred while we were trying to close
144 // the database properly, we take "emergency" actions: break any outstanding 164 // the database properly, we take "emergency" actions: break any outstanding
145 // transactions, raze the database, and close. When next opened, the 165 // transactions, raze the database, and close. When next opened, the
146 // database will be empty. 166 // database will be empty.
147 void HardFailureClose(); 167 void HardFailureClose();
148 168
149 // Doesn't actually close the DB, but changes bools to prevent further writes 169 // Doesn't actually close the DB, but changes bools to prevent further writes
150 // or changes to it. 170 // or changes to it.
151 void SoftFailureClose(); 171 void SoftFailureClose();
152 172
173 // Gets the top level domain for the URL and removes a '/' if one is present
174 // at the end of the URL.
175 // TODO(karenlees): this is the same code used in the DOMAction::Record
176 // method. Is there anywhere to put this method so it can be used by parts of
177 // the code so they are kept in sync?
178 static std::string ExtractTLD(const GURL& gurl);
felt 2013/07/17 01:55:40 Maybe it could be a static method on the activity_
mvrable 2013/07/17 16:41:23 That would be a good location for it.
179
153 // For unit testing only. 180 // For unit testing only.
154 void RecordBatchedActionsWhileTesting(); 181 void RecordBatchedActionsWhileTesting();
155 182
156 // A reference a Delegate for policy-specific database behavior. See the 183 // A reference a Delegate for policy-specific database behavior. See the
157 // top-level comment for ActivityDatabase for comments on cleanup. 184 // top-level comment for ActivityDatabase for comments on cleanup.
158 Delegate* delegate_; 185 Delegate* delegate_;
159 186
160 base::Clock* testing_clock_; 187 base::Clock* testing_clock_;
161 sql::Connection db_; 188 sql::Connection db_;
162 bool valid_db_; 189 bool valid_db_;
163 bool batch_mode_; 190 bool batch_mode_;
164 std::vector<scoped_refptr<Action> > batched_actions_; 191 std::vector<scoped_refptr<Action> > batched_actions_;
165 base::RepeatingTimer<ActivityDatabase> timer_; 192 base::RepeatingTimer<ActivityDatabase> timer_;
166 bool already_closed_; 193 bool already_closed_;
167 bool did_init_; 194 bool did_init_;
168 195
169 DISALLOW_COPY_AND_ASSIGN(ActivityDatabase); 196 DISALLOW_COPY_AND_ASSIGN(ActivityDatabase);
170 }; 197 };
171 198
172 } // namespace extensions 199 } // namespace extensions
173 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_DATABASE_H_ 200 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_ACTIVITY_DATABASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698