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 @@
#include "base/metrics/histogram_functions.h"
#include "base/scoped_observer.h"
#include "base/stl_util.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "base/values.h"
#include "components/history/core/browser/history_service.h"
#include "components/history/core/browser/history_types.h"
......@@ -127,7 +129,8 @@ RepeatableQueriesService::RepeatableQueriesService(
search_provider_observer_(std::make_unique<SearchProviderObserver>(
template_url_service,
base::BindRepeating(&RepeatableQueriesService::SearchProviderChanged,
base::Unretained(this)))) {
base::Unretained(this)))),
deletion_task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})) {
DCHECK(history_service_);
DCHECK(template_url_service_);
DCHECK(url_loader_factory_);
......@@ -460,8 +463,18 @@ void RepeatableQueriesService::DeletionResponseLoaded(
void RepeatableQueriesService::DeleteRepeatableQueryFromURLDatabase(
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.
history::URLDatabase* url_db = history_service_->InMemoryDatabase();
if (!url_db)
return;
......
......@@ -19,8 +19,13 @@
class SearchProviderObserver;
class TemplateURLService;
namespace base {
class SequencedTaskRunner;
} // namespace base
namespace history {
class HistoryService;
class URLDatabase;
} // namespace history
namespace network {
......@@ -135,6 +140,8 @@ class RepeatableQueriesService : public KeyedService {
// Deletes |query| from the in-memory URLDatabase.
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.
void DeleteRepeatableQueryFromServer(const std::string& deletion_url);
......@@ -169,6 +176,9 @@ class RepeatableQueriesService : public KeyedService {
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};
};
......
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