diff options
author | vitalybuka <vitalybuka@chromium.org> | 2015-02-23 10:30:49 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-23 18:31:25 +0000 |
commit | a58ec6a8c37ed1146206c2e4143b58249bdf5255 (patch) | |
tree | 346d75082c00971e2519ff2f8282f2cda1e266e6 /printing | |
parent | a68bc5fc4270c417e758a5b5b4e094b1d8b97c1c (diff) | |
download | chromium_src-a58ec6a8c37ed1146206c2e4143b58249bdf5255.zip chromium_src-a58ec6a8c37ed1146206c2e4143b58249bdf5255.tar.gz chromium_src-a58ec6a8c37ed1146206c2e4143b58249bdf5255.tar.bz2 |
Block nested system print dialogs on Windows.
Browser needs to allow nested tasks to update backgroud tabs.
If rendered requests new system dialog, asan build crashes in COMDLG32.dll
NOTRY=true
BUG=451753
Review URL: https://codereview.chromium.org/934393003
Cr-Commit-Position: refs/heads/master@{#317611}
Diffstat (limited to 'printing')
-rw-r--r-- | printing/printing_context_system_dialog_win.cc | 8 | ||||
-rw-r--r-- | printing/printing_context_win.cc | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/printing/printing_context_system_dialog_win.cc b/printing/printing_context_system_dialog_win.cc index 19fc4271..b89f1a4e 100644 --- a/printing/printing_context_system_dialog_win.cc +++ b/printing/printing_context_system_dialog_win.cc @@ -4,6 +4,7 @@ #include "printing/printing_context_system_dialog_win.h" +#include "base/auto_reset.h" #include "base/message_loop/message_loop.h" #include "printing/backend/win_helper.h" #include "printing/print_settings_initializer_win.h" @@ -84,6 +85,13 @@ void PrintingContextSytemDialogWin::Cancel() { } HRESULT PrintingContextSytemDialogWin::ShowPrintDialog(PRINTDLGEX* options) { + // Runs always on the UI thread. + static bool is_dialog_shown = false; + if (is_dialog_shown) + return E_FAIL; + // Block opening dialog from nested task. It crashes PrintDlgEx. + base::AutoReset<bool> auto_reset(&is_dialog_shown, true); + // Note that this cannot use ui::BaseShellDialog as the print dialog is // system modal: opening it from a background thread can cause Windows to // get the wrong Z-order which will make the print dialog appear behind the diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc index 7822429..9d1df52 100644 --- a/printing/printing_context_win.cc +++ b/printing/printing_context_win.cc @@ -359,7 +359,7 @@ PrintingContext::Result PrintingContextWin::InitializeSettings( HWND PrintingContextWin::GetRootWindow(gfx::NativeView view) { HWND window = NULL; - if (view) + if (view && view->GetHost()) window = view->GetHost()->GetAcceleratedWidget(); if (!window) { // TODO(maruel): crbug.com/1214347 Get the right browser window instead. |