Index: chrome/browser/printing/print_job_worker.cc |
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc |
index 34a3483b5e41ba79c37265728b9b66f9ab14364e..5edd02cbfb31eab728c559ddc60ac6d49eed24f0 100644 |
--- a/chrome/browser/printing/print_job_worker.cc |
+++ b/chrome/browser/printing/print_job_worker.cc |
@@ -93,6 +93,13 @@ void NotificationCallback(PrintJobWorkerOwner* print_job, |
content::Details<JobEventDetails>(details)); |
} |
+void PostOnOwnerThread(const scoped_refptr<PrintJobWorkerOwner>& owner, |
+ const PrintingContext::PrintSettingsCallback& callback, |
+ PrintingContext::Result result) { |
+ owner->PostTask(FROM_HERE, base::Bind(&HoldRefCallback, owner, |
+ base::Bind(callback, result))); |
+} |
+ |
} // namespace |
PrintJobWorker::PrintJobWorker(int render_process_id, |
@@ -219,21 +226,12 @@ void PrintJobWorker::GetSettingsWithUI( |
} |
#endif |
+ // weak_factory_ creates pointers valid only on owner_ thread. |
printing_context_->AskUserForSettings( |
- document_page_count, |
- has_selection, |
- is_scripted, |
- base::Bind(&PrintJobWorker::GetSettingsWithUIDone, |
- base::Unretained(this))); |
-} |
- |
-void PrintJobWorker::GetSettingsWithUIDone(PrintingContext::Result result) { |
- PostTask(FROM_HERE, |
- base::Bind(&HoldRefCallback, |
- make_scoped_refptr(owner_), |
- base::Bind(&PrintJobWorker::GetSettingsDone, |
- base::Unretained(this), |
- result))); |
+ document_page_count, has_selection, is_scripted, |
+ base::Bind(&PostOnOwnerThread, make_scoped_refptr(owner_), |
+ base::Bind(&PrintJobWorker::GetSettingsDone, |
+ weak_factory_.GetWeakPtr()))); |
} |
void PrintJobWorker::UseDefaultSettings() { |