| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 #include "chrome/browser/extensions/activity_log/fullstream_ui_policy.h" | 5 #include "chrome/browser/extensions/activity_log/fullstream_ui_policy.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 if (query.ColumnType(8) != sql::COLUMN_TYPE_NULL) { | 198 if (query.ColumnType(8) != sql::COLUMN_TYPE_NULL) { |
| 199 scoped_ptr<Value> parsed_value( | 199 scoped_ptr<Value> parsed_value( |
| 200 base::JSONReader::Read(query.ColumnString(8))); | 200 base::JSONReader::Read(query.ColumnString(8))); |
| 201 if (parsed_value && parsed_value->IsType(Value::TYPE_DICTIONARY)) { | 201 if (parsed_value && parsed_value->IsType(Value::TYPE_DICTIONARY)) { |
| 202 action->set_other(make_scoped_ptr( | 202 action->set_other(make_scoped_ptr( |
| 203 static_cast<DictionaryValue*>(parsed_value.release()))); | 203 static_cast<DictionaryValue*>(parsed_value.release()))); |
| 204 } | 204 } |
| 205 } | 205 } |
| 206 actions->push_back(action); | 206 actions->push_back(action); |
| 207 } | 207 } |
| 208 | |
| 209 return actions.Pass(); | 208 return actions.Pass(); |
| 210 } | 209 } |
| 211 | 210 |
| 212 scoped_ptr<Action::ActionVector> FullStreamUIPolicy::DoReadData( | 211 scoped_ptr<Action::ActionVector> FullStreamUIPolicy::DoReadData( |
| 213 const std::string& extension_id, | 212 const std::string& extension_id, |
| 214 const int days_ago) { | 213 const int days_ago) { |
| 215 // Ensure data is flushed to the database first so that we query over all | 214 // Ensure data is flushed to the database first so that we query over all |
| 216 // data. | 215 // data. |
| 217 activity_database()->AdviseFlush(ActivityDatabase::kFlushImmediately); | 216 activity_database()->AdviseFlush(ActivityDatabase::kFlushImmediately); |
| 218 | 217 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 LOG(WARNING) << "Unable to parse other: '" << query.ColumnString(7) | 270 LOG(WARNING) << "Unable to parse other: '" << query.ColumnString(7) |
| 272 << "'"; | 271 << "'"; |
| 273 } | 272 } |
| 274 } | 273 } |
| 275 | 274 |
| 276 actions->push_back(action); | 275 actions->push_back(action); |
| 277 } | 276 } |
| 278 return actions.Pass(); | 277 return actions.Pass(); |
| 279 } | 278 } |
| 280 | 279 |
| 280 void FullStreamUIPolicy::DoRemoveURLs(const std::vector<GURL>& restrict_urls) { |
| 281 sql::Connection* db = GetDatabaseConnection(); |
| 282 if (!db) { |
| 283 LOG(ERROR) << "Unable to connect to database"; |
| 284 return; |
| 285 } |
| 286 |
| 287 // Make sure any queued in memory are sent to the database before cleaning. |
| 288 activity_database()->AdviseFlush(ActivityDatabase::kFlushImmediately); |
| 289 |
| 290 // If no restrictions then then all URLs need to be removed. |
| 291 if (restrict_urls.empty()) { |
| 292 sql::Statement statement; |
| 293 std::string sql_str = base::StringPrintf( |
| 294 "UPDATE %s SET page_url=NULL,page_title=NULL,arg_url=NULL", |
| 295 kTableName); |
| 296 statement.Assign(db->GetCachedStatement( |
| 297 sql::StatementID(SQL_FROM_HERE), sql_str.c_str())); |
| 298 |
| 299 if (!statement.Run()) { |
| 300 LOG(ERROR) << "Removing URLs from database failed: " |
| 301 << statement.GetSQLStatement(); |
| 302 } |
| 303 return; |
| 304 } |
| 305 |
| 306 // If URLs are specified then restrict to only those URLs. |
| 307 for (size_t i = 0; i < restrict_urls.size(); ++i) { |
| 308 if (!restrict_urls[i].is_valid()) { |
| 309 continue; |
| 310 } |
| 311 |
| 312 // Remove any matching page url info. |
| 313 sql::Statement statement; |
| 314 std::string sql_str = base::StringPrintf( |
| 315 "UPDATE %s SET page_url=NULL,page_title=NULL WHERE page_url=?", |
| 316 kTableName); |
| 317 statement.Assign(db->GetCachedStatement( |
| 318 sql::StatementID(SQL_FROM_HERE), sql_str.c_str())); |
| 319 statement.BindString(0, restrict_urls[i].spec()); |
| 320 |
| 321 if (!statement.Run()) { |
| 322 LOG(ERROR) << "Removing page URL from database failed: " |
| 323 << statement.GetSQLStatement(); |
| 324 } |
| 325 |
| 326 // Remove any matching arg urls. |
| 327 sql_str = base::StringPrintf("UPDATE %s SET arg_url=NULL WHERE arg_url=?", |
| 328 kTableName); |
| 329 statement.Assign(db->GetCachedStatement( |
| 330 sql::StatementID(SQL_FROM_HERE), sql_str.c_str())); |
| 331 statement.BindString(0, restrict_urls[i].spec()); |
| 332 |
| 333 if (!statement.Run()) { |
| 334 LOG(ERROR) << "Removing arg URL from database failed: " |
| 335 << statement.GetSQLStatement(); |
| 336 } |
| 337 } |
| 338 } |
| 339 |
| 281 void FullStreamUIPolicy::OnDatabaseFailure() { | 340 void FullStreamUIPolicy::OnDatabaseFailure() { |
| 282 queued_actions_.clear(); | 341 queued_actions_.clear(); |
| 283 } | 342 } |
| 284 | 343 |
| 285 void FullStreamUIPolicy::OnDatabaseClose() { | 344 void FullStreamUIPolicy::OnDatabaseClose() { |
| 286 delete this; | 345 delete this; |
| 287 } | 346 } |
| 288 | 347 |
| 289 void FullStreamUIPolicy::Close() { | 348 void FullStreamUIPolicy::Close() { |
| 290 // The policy object should have never been created if there's no DB thread. | 349 // The policy object should have never been created if there's no DB thread. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 321 base::Bind(&FullStreamUIPolicy::DoReadFilteredData, | 380 base::Bind(&FullStreamUIPolicy::DoReadFilteredData, |
| 322 base::Unretained(this), | 381 base::Unretained(this), |
| 323 extension_id, | 382 extension_id, |
| 324 type, | 383 type, |
| 325 api_name, | 384 api_name, |
| 326 page_url, | 385 page_url, |
| 327 arg_url), | 386 arg_url), |
| 328 callback); | 387 callback); |
| 329 } | 388 } |
| 330 | 389 |
| 390 void FullStreamUIPolicy::RemoveURLs(const std::vector<GURL>& restrict_urls) { |
| 391 ScheduleAndForget(this, &FullStreamUIPolicy::DoRemoveURLs, restrict_urls); |
| 392 } |
| 393 |
| 331 scoped_refptr<Action> FullStreamUIPolicy::ProcessArguments( | 394 scoped_refptr<Action> FullStreamUIPolicy::ProcessArguments( |
| 332 scoped_refptr<Action> action) const { | 395 scoped_refptr<Action> action) const { |
| 333 return action; | 396 return action; |
| 334 } | 397 } |
| 335 | 398 |
| 336 void FullStreamUIPolicy::ProcessAction(scoped_refptr<Action> action) { | 399 void FullStreamUIPolicy::ProcessAction(scoped_refptr<Action> action) { |
| 337 // TODO(mvrable): Right now this argument stripping updates the Action object | 400 // TODO(mvrable): Right now this argument stripping updates the Action object |
| 338 // in place, which isn't good if there are other users of the object. When | 401 // in place, which isn't good if there are other users of the object. When |
| 339 // database writing is moved to policy class, the modifications should be | 402 // database writing is moved to policy class, the modifications should be |
| 340 // made locally. | 403 // made locally. |
| 341 action = ProcessArguments(action); | 404 action = ProcessArguments(action); |
| 342 ScheduleAndForget(this, &FullStreamUIPolicy::QueueAction, action); | 405 ScheduleAndForget(this, &FullStreamUIPolicy::QueueAction, action); |
| 343 } | 406 } |
| 344 | 407 |
| 345 void FullStreamUIPolicy::QueueAction(scoped_refptr<Action> action) { | 408 void FullStreamUIPolicy::QueueAction(scoped_refptr<Action> action) { |
| 346 if (activity_database()->is_db_valid()) { | 409 if (activity_database()->is_db_valid()) { |
| 347 queued_actions_.push_back(action); | 410 queued_actions_.push_back(action); |
| 348 activity_database()->AdviseFlush(queued_actions_.size()); | 411 activity_database()->AdviseFlush(queued_actions_.size()); |
| 349 } | 412 } |
| 350 } | 413 } |
| 351 | 414 |
| 352 } // namespace extensions | 415 } // namespace extensions |
| OLD | NEW |