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

Unified Diff: chrome/browser/history/history_service.cc

Issue 164703002: Don't leak WebHistoryService::Request on HistoryService shutdown. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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
« no previous file with comments | « chrome/browser/history/history_service.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/history/history_service.cc
diff --git a/chrome/browser/history/history_service.cc b/chrome/browser/history/history_service.cc
index 4799efa42f4eecbbb5c45cd10e0576abbed6c527..98a4c0993aa9334c20c0a213422511d094ab9103 100644
--- a/chrome/browser/history/history_service.cc
+++ b/chrome/browser/history/history_service.cc
@@ -29,6 +29,7 @@
#include "base/message_loop/message_loop.h"
#include "base/path_service.h"
#include "base/prefs/pref_service.h"
+#include "base/stl_util.h"
#include "base/thread_task_runner_handle.h"
#include "base/threading/thread.h"
#include "base/time/time.h"
@@ -114,14 +115,6 @@ class URLIteratorFromURLRows
DISALLOW_COPY_AND_ASSIGN(URLIteratorFromURLRows);
};
-// Callback from WebHistoryService::ExpireWebHistory().
-void ExpireWebHistoryComplete(
- history::WebHistoryService::Request* request,
- bool success) {
- // Ignore the result and delete the request.
- delete request;
-}
-
} // namespace
// Sends messages from the backend to us on the main thread. This must be a
@@ -293,6 +286,9 @@ void HistoryService::Cleanup() {
return;
}
+ // Cancel all pending WebHistoryService requests.
+ STLDeleteElements(&pending_web_history_service_requests_);
+
weak_ptr_factory_.InvalidateWeakPtrs();
// Unload the backend.
@@ -999,6 +995,15 @@ void HistoryService::ScheduleTask(SchedulePriority priority,
thread_->message_loop()->PostTask(FROM_HERE, task);
}
+// Callback from WebHistoryService::ExpireWebHistory().
+void HistoryService::WebHistoryServiceRequestComplete(
+ history::WebHistoryService::Request* request,
+ bool success) {
+ // Ignore the result and delete the request.
+ pending_web_history_service_requests_.erase(request);
+ delete request;
+}
+
// static
bool HistoryService::CanAddURL(const GURL& url) {
if (!url.is_valid())
@@ -1167,10 +1172,12 @@ void HistoryService::ExpireLocalAndRemoteHistoryBetween(
scoped_ptr<history::WebHistoryService::Request> request =
sky 2014/02/19 17:33:21 This seems like a hack to me. Expiring history doe
web_history->ExpireHistoryBetween(
restrict_urls, begin_time, end_time,
- base::Bind(&ExpireWebHistoryComplete));
+ base::Bind(&HistoryService::WebHistoryServiceRequestComplete,
+ weak_ptr_factory_.GetWeakPtr()));
- // The request will be freed when the callback is called.
- CHECK(request.release());
+ // The request will be freed when the callback is called, or on
+ // HistoryService shutdown.
+ pending_web_history_service_requests_.insert(request.release());
}
ExpireHistoryBetween(restrict_urls, begin_time, end_time, callback, tracker);
}
« no previous file with comments | « chrome/browser/history/history_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698