where_str += where_next + "time BETWEEN ? AND ?";
std::string query_str = base::StringPrintf(
"SELECT extension_id,time,action_type,api_name,args,page_url,page_title,"
- "arg_url,other FROM %s %s %s ORDER BY time DESC LIMIT 300",
+ "arg_url,other,rowid FROM %s %s %s ORDER BY time DESC LIMIT 300",
kTableName,
where_str.empty() ? "" : "WHERE",
where_str.c_str());
new Action(query.ColumnString(0),
base::Time::FromInternalValue(query.ColumnInt64(1)),
static_cast<Action::ActionType>(query.ColumnInt(2)),
- query.ColumnString(3));
+ query.ColumnString(3), query.ColumnInt64(9));
if (query.ColumnType(4) != sql::COLUMN_TYPE_NULL) {
scoped_ptr<base::Value> parsed_value(
return actions.Pass();
}
+void FullStreamUIPolicy::DoRemoveActions(const std::vector<int64>& action_ids) {
+ if (action_ids.empty())
+ return;
+
+ sql::Connection* db = GetDatabaseConnection();
+ if (!db) {
+ LOG(ERROR) << "Unable to connect to database";
+ return;
+ }
+
+ // Flush data first so the activity removal affects queued-up data as well.
+ activity_database()->AdviseFlush(ActivityDatabase::kFlushImmediately);
+
+ sql::Transaction transaction(db);
+ if (!transaction.Begin())
+ return;
+
+ std::string statement_str =
+ base::StringPrintf("DELETE FROM %s WHERE rowid = ?", kTableName);
+ sql::Statement statement(db->GetCachedStatement(
+ sql::StatementID(SQL_FROM_HERE), statement_str.c_str()));
+ for (size_t i = 0; i < action_ids.size(); i++) {
+ statement.Reset(true);
+ statement.BindInt64(0, action_ids[i]);
+ if (!statement.Run()) {
+ LOG(ERROR) << "Removing activities from database failed: "
+ << statement.GetSQLStatement();
+ return;
+ }
+ }
+
+ if (!transaction.Commit()) {
+ LOG(ERROR) << "Removing activities from database failed";
+ }
+}
+
void FullStreamUIPolicy::DoRemoveURLs(const std::vector<GURL>& restrict_urls) {
sql::Connection* db = GetDatabaseConnection();
if (!db) {
callback);
}
+void FullStreamUIPolicy::RemoveActions(const std::vector<int64>& action_ids) {
+ ScheduleAndForget(this, &FullStreamUIPolicy::DoRemoveActions, action_ids);
+}
+
void FullStreamUIPolicy::RemoveURLs(const std::vector<GURL>& restrict_urls) {
ScheduleAndForget(this, &FullStreamUIPolicy::DoRemoveURLs, restrict_urls);
}