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

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: Fix tsan bug 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
« no previous file with comments | « chrome/browser/webdata/web_data_service.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..d7ea003c364de5b2cc348331bad77f6cd313a5c3 100644
--- a/chrome/browser/webdata/web_data_service.cc
+++ b/chrome/browser/webdata/web_data_service.cc
@@ -80,6 +80,7 @@ WDKeywordsResult::~WDKeywordsResult() {}
WebDataService::WebDataService()
: is_running_(false),
db_(NULL),
+ request_manager_(new WebDataRequestManager()),
app_locale_(AutofillCountry::ApplicationLocale()),
autocomplete_syncable_service_(NULL),
autofill_profile_syncable_service_(NULL),
@@ -127,7 +128,7 @@ void WebDataService::UnloadDatabase() {
}
void WebDataService::CancelRequest(Handle h) {
- request_manager_.CancelRequest(h);
+ request_manager_->CancelRequest(h);
}
content::NotificationSource WebDataService::GetNotificationSource() {
@@ -422,10 +423,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 +523,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(NULL, request_manager_.get()));
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 +539,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(consumer, request_manager_.get()));
+ 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->SetResult(task.Run());
}
- request->RequestComplete();
+ request_manager_->RequestCompleted(request.Pass());
}
void WebDataService::ScheduleCommit() {
@@ -922,11 +922,11 @@ scoped_ptr<WDTypedResult> WebDataService::GetAutofillProfilesImpl() {
std::vector<AutofillProfile*> profiles;
db_->GetAutofillTable()->GetAutofillProfiles(&profiles);
return scoped_ptr<WDTypedResult>(
- new WDResult<std::vector<AutofillProfile*> >(
+ new WDDestroyableResult<std::vector<AutofillProfile*> >(
AUTOFILL_PROFILES_RESULT,
+ profiles,
base::Bind(&WebDataService::DestroyAutofillProfileResult,
- base::Unretained(this)),
- profiles));
+ base::Unretained(this))));
}
void WebDataService::EmptyMigrationTrashImpl(bool notify_sync) {
@@ -1035,11 +1035,11 @@ scoped_ptr<WDTypedResult> WebDataService::GetCreditCardsImpl() {
std::vector<CreditCard*> credit_cards;
db_->GetAutofillTable()->GetCreditCards(&credit_cards);
return scoped_ptr<WDTypedResult>(
- new WDResult<std::vector<CreditCard*> >(
+ new WDDestroyableResult<std::vector<CreditCard*> >(
AUTOFILL_CREDITCARDS_RESULT,
+ credit_cards,
base::Bind(&WebDataService::DestroyAutofillCreditCardResult,
- base::Unretained(this)),
- credit_cards));
+ base::Unretained(this))));
}
void WebDataService::RemoveAutofillProfilesAndCreditCardsModifiedBetweenImpl(
« no previous file with comments | « chrome/browser/webdata/web_data_service.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698