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

Unified Diff: chrome/browser/extensions/activity_log/fullstream_ui_policy.cc

Issue 21646004: Compressed activity log database storage (Closed) Base URL: http://git.chromium.org/chromium/src.git@refactor-cleanups
Patch Set: Delete a debugging log message 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/activity_log/fullstream_ui_policy.cc
diff --git a/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc b/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc
index 24f54947e58b82dad5f53433cb8643ad58f715ed..94f637131f4c934702ac46d7c9ba937595761a23 100644
--- a/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc
+++ b/chrome/browser/extensions/activity_log/fullstream_ui_policy.cc
@@ -31,32 +31,6 @@ using content::BrowserThread;
namespace constants = activity_log_constants;
-namespace {
-
-// Key strings for passing parameters to the ProcessAction member function.
-const char kKeyReason[] = "fsuip.reason";
-const char kKeyDomainAction[] = "fsuip.domact";
-const char kKeyURLTitle[] = "fsuip.urltitle";
-const char kKeyDetailsString[] = "fsuip.details";
-
-// Obsolete database tables: these should be dropped from the database if
-// found.
-const char* kObsoleteTables[] = {"activitylog_apis", "activitylog_blocked",
- "activitylog_urls"};
-
-std::string Serialize(const base::Value* value) {
- std::string value_as_text;
- if (!value) {
- value_as_text = "null";
- } else {
- JSONStringValueSerializer serializer(&value_as_text);
- serializer.SerializeAndOmitBinaryValues(*value);
- }
- return value_as_text;
-}
-
-} // namespace
-
namespace extensions {
const char* FullStreamUIPolicy::kTableName = "activitylog_full";
@@ -68,7 +42,8 @@ const char* FullStreamUIPolicy::kTableFieldTypes[] = {
"LONGVARCHAR NOT NULL", "INTEGER", "INTEGER", "LONGVARCHAR", "LONGVARCHAR",
"LONGVARCHAR", "LONGVARCHAR", "LONGVARCHAR", "LONGVARCHAR"
};
-const int FullStreamUIPolicy::kTableFieldCount = arraysize(kTableContentFields);
+const int FullStreamUIPolicy::kTableFieldCount =
+ arraysize(FullStreamUIPolicy::kTableContentFields);
FullStreamUIPolicy::FullStreamUIPolicy(Profile* profile)
: ActivityLogDatabasePolicy(
@@ -78,17 +53,8 @@ FullStreamUIPolicy::FullStreamUIPolicy(Profile* profile)
FullStreamUIPolicy::~FullStreamUIPolicy() {}
bool FullStreamUIPolicy::InitDatabase(sql::Connection* db) {
- // Drop old database tables.
- for (size_t i = 0; i < arraysize(kObsoleteTables); i++) {
- const char* table_name = kObsoleteTables[i];
- if (db->DoesTableExist(table_name)) {
- std::string drop_statement =
- base::StringPrintf("DROP TABLE %s", table_name);
- if (!db->Execute(drop_statement.c_str())) {
- return false;
- }
- }
- }
+ if (!Util::DropObsoleteTables(db))
+ return false;
// Create the unified activity log entry table.
return ActivityDatabase::InitializeTable(db,
@@ -113,13 +79,6 @@ bool FullStreamUIPolicy::FlushDatabase(sql::Connection* db) {
sql::Statement statement(db->GetCachedStatement(
sql::StatementID(SQL_FROM_HERE), sql_str.c_str()));
- url_canon::Replacements<char> url_sanitizer;
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableExtensionActivityLogTesting)) {
- url_sanitizer.ClearQuery();
- url_sanitizer.ClearRef();
- }
-
Action::ActionVector::size_type i;
for (i = 0; i != queued_actions_.size(); ++i) {
const Action& action = *queued_actions_[i];
@@ -129,29 +88,21 @@ bool FullStreamUIPolicy::FlushDatabase(sql::Connection* db) {
statement.BindInt(2, static_cast<int>(action.action_type()));
statement.BindString(3, action.api_name());
if (action.args()) {
- statement.BindString(4, Serialize(action.args()));
+ statement.BindString(4, Util::Serialize(action.args()));
}
- if (action.page_url().is_valid()) {
- if (action.page_incognito()) {
- statement.BindString(5, constants::kIncognitoUrl);
- } else {
- statement.BindString(
- 5, action.page_url().ReplaceComponents(url_sanitizer).spec());
- }
+ std::string page_url_string = action.SerializePageUrl();
+ if (!page_url_string.empty()) {
+ statement.BindString(5, page_url_string);
}
- if (!action.page_title().empty() && !action.page_incognito()) {
+ if (!action.page_title().empty()) {
statement.BindString(6, action.page_title());
}
- if (action.arg_url().is_valid()) {
- if (action.arg_incognito()) {
- statement.BindString(7, constants::kIncognitoUrl);
- } else {
- statement.BindString(
- 7, action.arg_url().ReplaceComponents(url_sanitizer).spec());
- }
+ std::string arg_url_string = action.SerializePageUrl();
+ if (!arg_url_string.empty()) {
+ statement.BindString(5, arg_url_string);
}
if (action.other()) {
- statement.BindString(8, Serialize(action.other()));
+ statement.BindString(8, Util::Serialize(action.other()));
}
if (!statement.Run()) {
@@ -170,6 +121,10 @@ bool FullStreamUIPolicy::FlushDatabase(sql::Connection* db) {
scoped_ptr<Action::ActionVector> FullStreamUIPolicy::DoReadData(
const std::string& extension_id,
const int days_ago) {
+ // Ensure data is flushed to the database first so that we query over all
+ // data.
+ activity_database()->AdviseFlush(ActivityDatabase::kFlushImmediately);
+
DCHECK_GE(days_ago, 0);
scoped_ptr<Action::ActionVector> actions(new Action::ActionVector());
@@ -178,21 +133,9 @@ scoped_ptr<Action::ActionVector> FullStreamUIPolicy::DoReadData(
return actions.Pass();
}
- // Compute the time bounds for that day.
- base::Time morning_midnight = Now().LocalMidnight();
- int64 early_bound = 0;
- int64 late_bound = 0;
- if (days_ago == 0) {
- early_bound = morning_midnight.ToInternalValue();
- late_bound = base::Time::Max().ToInternalValue();
- } else {
- base::Time early_time = morning_midnight -
- base::TimeDelta::FromDays(days_ago);
- base::Time late_time = morning_midnight -
- base::TimeDelta::FromDays(days_ago-1);
- early_bound = early_time.ToInternalValue();
- late_bound = late_time.ToInternalValue();
- }
+ int64 early_bound;
+ int64 late_bound;
+ Util::ComputeDatabaseTimeBounds(Now(), days_ago, &early_bound, &late_bound);
std::string query_str = base::StringPrintf(
"SELECT time, action_type, api_name, args, page_url, page_title, "
"arg_url, other "
@@ -223,13 +166,9 @@ scoped_ptr<Action::ActionVector> FullStreamUIPolicy::DoReadData(
}
}
- GURL page_url(query.ColumnString(4));
- action->set_page_url(page_url);
-
+ action->ParsePageUrl(query.ColumnString(4));
action->set_page_title(query.ColumnString(5));
-
- GURL arg_url(query.ColumnString(6));
- action->set_arg_url(arg_url);
+ action->ParseArgUrl(query.ColumnString(6));
if (query.ColumnType(7) != sql::COLUMN_TYPE_NULL) {
scoped_ptr<Value> parsed_value(
@@ -277,22 +216,6 @@ void FullStreamUIPolicy::ReadData(
callback);
}
-std::string FullStreamUIPolicy::GetKey(ActivityLogPolicy::KeyType key_ty) const
-{
- switch (key_ty) {
- case PARAM_KEY_REASON:
- return std::string(kKeyReason);
- case PARAM_KEY_DOM_ACTION:
- return std::string(kKeyDomainAction);
- case PARAM_KEY_URL_TITLE:
- return std::string(kKeyURLTitle);
- case PARAM_KEY_DETAILS_STRING:
- return std::string(kKeyDetailsString);
- default:
- return std::string();
- }
-}
-
scoped_refptr<Action> FullStreamUIPolicy::ProcessArguments(
scoped_refptr<Action> action) const {
return action;
@@ -310,7 +233,7 @@ void FullStreamUIPolicy::ProcessAction(scoped_refptr<Action> action) {
void FullStreamUIPolicy::QueueAction(scoped_refptr<Action> action) {
if (activity_database()->is_db_valid()) {
queued_actions_.push_back(action);
- activity_database()->NotifyAction();
+ activity_database()->AdviseFlush(queued_actions_.size());
}
}

Powered by Google App Engine
This is Rietveld 408576698