Chromium Code Reviews| Index: chrome/browser/extensions/activity_log/activity_database.cc |
| diff --git a/chrome/browser/extensions/activity_log/activity_database.cc b/chrome/browser/extensions/activity_log/activity_database.cc |
| index 2123e5a7f6a7afe649a25ccd928a5dd889baecd3..78e1931b1b1a83125f5f0ff6d78309906773d7a3 100644 |
| --- a/chrome/browser/extensions/activity_log/activity_database.cc |
| +++ b/chrome/browser/extensions/activity_log/activity_database.cc |
| @@ -34,6 +34,9 @@ bool SortActionsByTime(const scoped_refptr<extensions::Action> a, |
| namespace extensions { |
| +const char* ActivityDatabase::kURLFields[] = |
| + {"url_tld", "url_title", "url_path"}; |
| + |
| ActivityDatabase::ActivityDatabase(ActivityDatabase::Delegate* delegate) |
| : delegate_(delegate), |
| testing_clock_(NULL), |
| @@ -261,4 +264,88 @@ void ActivityDatabase::SetTimerForTesting(int ms) { |
| &ActivityDatabase::RecordBatchedActionsWhileTesting); |
| } |
| +std::string ActivityDatabase::ExtractTLD(const GURL& gurl) { |
|
mvrable
2013/07/17 16:41:23
I know you just took the name from the DOMAction c
karenlees
2013/08/08 23:36:37
No longer need this method.
karenlees
2013/08/08 23:36:37
Method no longer needed, removed.
|
| + std::string url_tld = gurl.GetOrigin().spec(); |
| + if ((url_tld.size() > 0) && (url_tld[url_tld.size()-1] == '/')) { |
| + url_tld.erase(url_tld.size()-1); |
| + } |
| + return url_tld; |
| +} |
| + |
| +void ActivityDatabase::ConstructRemoveURLQuery(const std::string& url, |
| + std::string* query) { |
| + if (arraysize(kURLFields) < 1) { |
| + DLOG(INFO) << "No fields to clean"; |
| + return; |
| + } |
| + |
| + std::string set_fields_str = base::StringPrintf("%s=''", kURLFields[0]); |
| + for (uint32_t i = 1; i < arraysize(kURLFields); i++) { |
| + set_fields_str = base::StringPrintf("%s,%s=''", set_fields_str.c_str(), |
|
mvrable
2013/07/17 16:41:23
Personal preference: I would use NULL rather than
karenlees
2013/08/08 23:36:37
I like NULL, updated.
|
| + kURLFields[i]); |
| + } |
| + |
| + if (url.empty()) { |
| + // Set fields to empty string for all rows. |
| + *query = base::StringPrintf("UPDATE %s SET %s", |
| + DOMAction::kTableName, |
| + set_fields_str.c_str()); |
| + } else { |
| + // Set fields to empty string if the row has the url. |
| + // TODO(karenlees): for the moment this matches anything with the same top |
| + // level domain. After the database refactoring it should match the extact |
| + // URLs in the column. For now it's better to clean too much than too |
| + // little. |
| + *query = base::StringPrintf("UPDATE %s SET %s " |
| + "WHERE url_tld='%s'", |
|
mvrable
2013/07/17 16:41:23
You shouldn't insert the URL directly into the que
karenlees
2013/08/08 23:36:37
I like safe, updated.
|
| + DOMAction::kTableName, |
| + set_fields_str.c_str(), |
| + ExtractTLD(GURL(url)).c_str()); |
| + } |
| +} |
| + |
| +void ActivityDatabase::RemoveURLs(const std::vector<GURL>& gurls) { |
| + DLOG(INFO) << "Removing URLs from the activity log"; |
| + if (!gurls.empty()) { |
| + for (uint32_t i = 0; i < gurls.size(); ++i) { |
| + RemoveURL(gurls[i]); |
| + } |
| + } else { |
| + RemoveAllURLs(); |
| + } |
| +} |
| + |
| +void ActivityDatabase::RemoveURL(const GURL& gurl) { |
| + std::string tld = ExtractTLD(gurl); |
| + if (tld.empty()) { |
| + LOG(ERROR) << "Top level domain was empty, cannot delete."; |
| + return; |
| + } |
| + |
| + std::string remove_urls_str; |
| + ConstructRemoveURLQuery(tld, &remove_urls_str); |
| + sql::Statement remove_statement( |
| + db_.GetCachedStatement(SQL_FROM_HERE, remove_urls_str.c_str())); |
| + if (!remove_statement.is_valid()) { |
| + DLOG(ERROR) << "Invalid sql statement from: " << remove_urls_str.c_str(); |
| + return; |
| + } |
| + DLOG(INFO) << "Running: " << remove_urls_str.c_str(); |
| + remove_statement.Run(); |
| +} |
| + |
| +void ActivityDatabase::RemoveAllURLs() { |
| + DLOG(INFO) << "Removing all URLs from the activity log"; |
| + std::string remove_urls_str; |
| + ConstructRemoveURLQuery("", &remove_urls_str); |
| + sql::Statement remove_statement( |
| + db_.GetCachedStatement(SQL_FROM_HERE, remove_urls_str.c_str())); |
| + if (!remove_statement.is_valid()) { |
| + DLOG(ERROR) << "Invalid sql statement from: " << remove_urls_str.c_str(); |
| + return; |
| + } |
| + DLOG(INFO) << "Running: " << remove_urls_str.c_str(); |
| + remove_statement.Run(); |
| +} |
| + |
| } // namespace extensions |