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

Unified Diff: chrome/browser/webdata/web_data_service.cc

Issue 11862010: Fix WebDataRequest ownership gap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 11 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
Index: chrome/browser/webdata/web_data_service.cc
diff --git a/chrome/browser/webdata/web_data_service.cc b/chrome/browser/webdata/web_data_service.cc
index f7016e7ebfc3e2630f3e3e0ca5fb79bd12ab37b1..2f8ce214cdb2362ced2e7c9a7e2cad6b23b3b5e9 100644
--- a/chrome/browser/webdata/web_data_service.cc
+++ b/chrome/browser/webdata/web_data_service.cc
@@ -422,10 +422,6 @@ bool WebDataService::InitWithPath(const FilePath& path) {
return true;
}
-void WebDataService::RequestCompleted(Handle h) {
- request_manager_.RequestCompleted(h);
-}
-
////////////////////////////////////////////////////////////////////////////////
//
// The following methods are executed in Chrome_WebDataThread.
@@ -526,11 +522,12 @@ void WebDataService::ScheduleTask(const tracked_objects::Location& from_here,
void WebDataService::ScheduleDBTask(
const tracked_objects::Location& from_here,
const base::Closure& task) {
- WebDataRequest* request =
- new WebDataRequest(this, NULL, &request_manager_);
+ scoped_ptr<WebDataRequest> request(
+ new WebDataRequest(this, NULL, &request_manager_));
if (is_running_) {
BrowserThread::PostTask(BrowserThread::DB, from_here,
- base::Bind(&WebDataService::DBTaskWrapper, this, task, request));
+ base::Bind(&WebDataService::DBTaskWrapper, this, task,
+ base::Passed(&request)));
} else {
NOTREACHED() << "Task scheduled after Shutdown()";
}
@@ -541,33 +538,35 @@ WebDataService::Handle WebDataService::ScheduleDBTaskWithResult(
const ResultTask& task,
WebDataServiceConsumer* consumer) {
DCHECK(consumer);
- WebDataRequest* request =
- new WebDataRequest(this, consumer, &request_manager_);
+ scoped_ptr<WebDataRequest> request(
+ new WebDataRequest(this, consumer, &request_manager_));
+ WebDataService::Handle handle = request->GetHandle();
if (is_running_) {
BrowserThread::PostTask(BrowserThread::DB, from_here,
- base::Bind(&WebDataService::DBResultTaskWrapper, this, task, request));
+ base::Bind(&WebDataService::DBResultTaskWrapper, this, task,
+ base::Passed(&request)));
} else {
NOTREACHED() << "Task scheduled after Shutdown()";
}
- return request->GetHandle();
+ return handle;
}
void WebDataService::DBTaskWrapper(const base::Closure& task,
- WebDataRequest* request) {
+ scoped_ptr<WebDataRequest> request) {
InitializeDatabaseIfNecessary();
if (db_ && !request->IsCancelled()) {
task.Run();
}
- request->RequestComplete();
+ request_manager_.RequestCompleted(request.Pass());
}
void WebDataService::DBResultTaskWrapper(const ResultTask& task,
- WebDataRequest* request) {
+ scoped_ptr<WebDataRequest> request) {
InitializeDatabaseIfNecessary();
if (db_ && !request->IsCancelled()) {
request->SetResult(task.Run().Pass());
}
- request->RequestComplete();
+ request_manager_.RequestCompleted(request.Pass());
}
void WebDataService::ScheduleCommit() {

Powered by Google App Engine
This is Rietveld 408576698