diff options
author | tsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-24 20:08:46 +0000 |
---|---|---|
committer | tsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-24 20:08:46 +0000 |
commit | 5e73e5a36634589b1dfef43f4ed3fe82376fa436 (patch) | |
tree | f2a1e3982b1c29192430603fe61fdd9add2664bd /chrome/browser/printing | |
parent | 201aa408dae4f21ba3df7f1c2ea62465b73d37fc (diff) | |
download | chromium_src-5e73e5a36634589b1dfef43f4ed3fe82376fa436.zip chromium_src-5e73e5a36634589b1dfef43f4ed3fe82376fa436.tar.gz chromium_src-5e73e5a36634589b1dfef43f4ed3fe82376fa436.tar.bz2 |
Check for possibility of NULL WebUI returns in PrintPreviewDialogController.
This is a case that is easily hit with the IPC fuzzer, and is easy to
handle. Fixing this helps the testcases to run further.
BUG=337535
Review URL: https://codereview.chromium.org/131343005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@246948 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/printing')
-rw-r--r-- | chrome/browser/printing/print_preview_dialog_controller.cc | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/chrome/browser/printing/print_preview_dialog_controller.cc b/chrome/browser/printing/print_preview_dialog_controller.cc index e190f01..1a54dc1 100644 --- a/chrome/browser/printing/print_preview_dialog_controller.cc +++ b/chrome/browser/printing/print_preview_dialog_controller.cc @@ -407,10 +407,12 @@ void PrintPreviewDialogController::OnRenderProcessExited( for (size_t i = 0; i < closed_preview_dialogs.size(); ++i) { RemovePreviewDialog(closed_preview_dialogs[i]); - PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( - closed_preview_dialogs[i]->GetWebUI()->GetController()); - if (print_preview_ui) - print_preview_ui->OnPrintPreviewDialogClosed(); + if (content::WebUI* web_ui = closed_preview_dialogs[i]->GetWebUI()) { + PrintPreviewUI* print_preview_ui = + static_cast<PrintPreviewUI*>(web_ui->GetController()); + if (print_preview_ui) + print_preview_ui->OnPrintPreviewDialogClosed(); + } } for (size_t i = 0; i < closed_initiators.size(); ++i) @@ -529,10 +531,12 @@ void PrintPreviewDialogController::RemoveInitiator( PrintViewManager::FromWebContents(initiator)->PrintPreviewDone(); // initiator is closed. Close the print preview dialog too. - PrintPreviewUI* print_preview_ui = - static_cast<PrintPreviewUI*>(preview_dialog->GetWebUI()->GetController()); - if (print_preview_ui) - print_preview_ui->OnInitiatorClosed(); + if (content::WebUI* web_ui = preview_dialog->GetWebUI()) { + PrintPreviewUI* print_preview_ui = + static_cast<PrintPreviewUI*>(web_ui->GetController()); + if (print_preview_ui) + print_preview_ui->OnInitiatorClosed(); + } } void PrintPreviewDialogController::RemovePreviewDialog( @@ -549,10 +553,12 @@ void PrintPreviewDialogController::RemovePreviewDialog( // Print preview WebContents is destroyed. Notify |PrintPreviewUI| to // abort the initiator preview request. - PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>( - preview_dialog->GetWebUI()->GetController()); - if (print_preview_ui) - print_preview_ui->OnPrintPreviewDialogDestroyed(); + if (content::WebUI* web_ui = preview_dialog->GetWebUI()) { + PrintPreviewUI* print_preview_ui = + static_cast<PrintPreviewUI*>(web_ui->GetController()); + if (print_preview_ui) + print_preview_ui->OnPrintPreviewDialogDestroyed(); + } preview_operations_.erase(preview_operations_.begin() + i); delete operation; |