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

Unified Diff: chrome/browser/sessions/base_session_service.cc

Issue 11446033: Convert SessionService to use new CancelableTaskTracker (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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/sessions/base_session_service.cc
diff --git a/chrome/browser/sessions/base_session_service.cc b/chrome/browser/sessions/base_session_service.cc
index a30981e47c096d70ebea1db6098885abd011dd6f..a05d30b01b14e28233e70db16450c24abaf849ce 100644
--- a/chrome/browser/sessions/base_session_service.cc
+++ b/chrome/browser/sessions/base_session_service.cc
@@ -22,17 +22,6 @@
using content::BrowserThread;
using content::NavigationEntry;
-// InternalGetCommandsRequest -------------------------------------------------
-
-BaseSessionService::InternalGetCommandsRequest::InternalGetCommandsRequest(
- const CallbackType& callback)
- : CancelableRequest<InternalGetCommandsCallback>(callback) {
-}
-
-BaseSessionService::InternalGetCommandsRequest::~InternalGetCommandsRequest() {
- STLDeleteElements(&commands);
-}
-
// BaseSessionService ---------------------------------------------------------
namespace {
@@ -51,6 +40,24 @@ void WriteStringToPickle(Pickle& pickle, int* bytes_written, int max_bytes,
}
}
+// Helper used by ScheduleGetLastSessionCommands. It runs callback on TaskRunner
+// thread if it's not canceled.
+void RunIfNotCanceled(
+ const CancelableTaskTracker::IsCanceledCallback& is_canceled,
+ base::TaskRunner* task_runner,
+ const BaseSessionService::InternalGetCommandsCallback& callback,
+ ScopedVector<SessionCommand> commands) {
+ if (is_canceled.Run())
+ return;
+
+ if (task_runner->RunsTasksOnCurrentThread()) {
+ callback.Run(commands.Pass());
+ } else {
+ task_runner->PostTask(FROM_HERE,
+ base::Bind(callback, base::Passed(&commands)));
+ }
+}
+
} // namespace
// Delay between when a command is received, and when we save it to the
@@ -259,16 +266,22 @@ bool BaseSessionService::ShouldTrackEntry(const GURL& url) {
return url.is_valid();
}
-BaseSessionService::Handle BaseSessionService::ScheduleGetLastSessionCommands(
- InternalGetCommandsRequest* request,
- CancelableRequestConsumerBase* consumer) {
- scoped_refptr<InternalGetCommandsRequest> request_wrapper(request);
- AddRequest(request, consumer);
+CancelableTaskTracker::TaskId
+ BaseSessionService::ScheduleGetLastSessionCommands(
+ const InternalGetCommandsCallback& callback,
+ CancelableTaskTracker* tracker) {
+ CancelableTaskTracker::IsCanceledCallback is_canceled;
+ CancelableTaskTracker::TaskId id = tracker->NewTrackedTaskId(&is_canceled);
+
+ InternalGetCommandsCallback callback_runner =
+ base::Bind(&RunIfNotCanceled,
+ is_canceled, base::MessageLoopProxy::current(), callback);
+
RunTaskOnBackendThread(
FROM_HERE,
base::Bind(&SessionBackend::ReadLastSessionCommands, backend(),
- request_wrapper));
- return request->handle();
+ is_canceled, callback_runner));
+ return id;
}
bool BaseSessionService::RunTaskOnBackendThread(

Powered by Google App Engine
This is Rietveld 408576698