Commit 49dbb543 authored by Moe Ahmadi's avatar Moe Ahmadi Committed by Commit Bot

[NTP][RQ] Makes deletion of queries from in-memory URL DB asynchronous

Deletion from the in-memory URL DB can be slow: http://shortn/_eSkRG8RvpV
This CL makes the deletion of queries from the in-memory URL DB async
by posting the deletion task to a sequenced task runner on the UI thread.

Fixed: 1110077
Change-Id: Ia8099093eea6efde952bfbb58cd182b06174f8e7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2531654Reviewed-by: default avatarRamya Nagarajan <ramyan@chromium.org>
Commit-Queue: Moe Ahmadi <mahmadi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826399}
parent 1669457b
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/scoped_observer.h" #include "base/scoped_observer.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "base/values.h" #include "base/values.h"
#include "components/history/core/browser/history_service.h" #include "components/history/core/browser/history_service.h"
#include "components/history/core/browser/history_types.h" #include "components/history/core/browser/history_types.h"
...@@ -127,7 +129,8 @@ RepeatableQueriesService::RepeatableQueriesService( ...@@ -127,7 +129,8 @@ RepeatableQueriesService::RepeatableQueriesService(
search_provider_observer_(std::make_unique<SearchProviderObserver>( search_provider_observer_(std::make_unique<SearchProviderObserver>(
template_url_service, template_url_service,
base::BindRepeating(&RepeatableQueriesService::SearchProviderChanged, base::BindRepeating(&RepeatableQueriesService::SearchProviderChanged,
base::Unretained(this)))) { base::Unretained(this)))),
deletion_task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})) {
DCHECK(history_service_); DCHECK(history_service_);
DCHECK(template_url_service_); DCHECK(template_url_service_);
DCHECK(url_loader_factory_); DCHECK(url_loader_factory_);
...@@ -460,8 +463,18 @@ void RepeatableQueriesService::DeletionResponseLoaded( ...@@ -460,8 +463,18 @@ void RepeatableQueriesService::DeletionResponseLoaded(
void RepeatableQueriesService::DeleteRepeatableQueryFromURLDatabase( void RepeatableQueriesService::DeleteRepeatableQueryFromURLDatabase(
const base::string16& query) { const base::string16& query) {
deletion_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(
&RepeatableQueriesService::DeleteRepeatableQueryFromURLDatabaseTask,
weak_ptr_factory_.GetWeakPtr(), query,
history_service_->InMemoryDatabase()));
}
void RepeatableQueriesService::DeleteRepeatableQueryFromURLDatabaseTask(
const base::string16& query,
history::URLDatabase* url_db) {
// Fail if the in-memory URL database is not available. // Fail if the in-memory URL database is not available.
history::URLDatabase* url_db = history_service_->InMemoryDatabase();
if (!url_db) if (!url_db)
return; return;
......
...@@ -19,8 +19,13 @@ ...@@ -19,8 +19,13 @@
class SearchProviderObserver; class SearchProviderObserver;
class TemplateURLService; class TemplateURLService;
namespace base {
class SequencedTaskRunner;
} // namespace base
namespace history { namespace history {
class HistoryService; class HistoryService;
class URLDatabase;
} // namespace history } // namespace history
namespace network { namespace network {
...@@ -135,6 +140,8 @@ class RepeatableQueriesService : public KeyedService { ...@@ -135,6 +140,8 @@ class RepeatableQueriesService : public KeyedService {
// Deletes |query| from the in-memory URLDatabase. // Deletes |query| from the in-memory URLDatabase.
void DeleteRepeatableQueryFromURLDatabase(const base::string16& query); void DeleteRepeatableQueryFromURLDatabase(const base::string16& query);
void DeleteRepeatableQueryFromURLDatabaseTask(const base::string16& query,
history::URLDatabase* url_db);
// Deletes the query with |deletion_url| from the server. // Deletes the query with |deletion_url| from the server.
void DeleteRepeatableQueryFromServer(const std::string& deletion_url); void DeleteRepeatableQueryFromServer(const std::string& deletion_url);
...@@ -169,6 +176,9 @@ class RepeatableQueriesService : public KeyedService { ...@@ -169,6 +176,9 @@ class RepeatableQueriesService : public KeyedService {
std::vector<std::unique_ptr<network::SimpleURLLoader>> loaders_; std::vector<std::unique_ptr<network::SimpleURLLoader>> loaders_;
// The TaskRunner to which deletion tasks are posted.
scoped_refptr<base::SequencedTaskRunner> deletion_task_runner_;
base::WeakPtrFactory<RepeatableQueriesService> weak_ptr_factory_{this}; base::WeakPtrFactory<RepeatableQueriesService> weak_ptr_factory_{this};
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment