summaryrefslogtreecommitdiffstats
path: root/printing
diff options
context:
space:
mode:
authorvitalybuka <vitalybuka@chromium.org>2015-02-23 10:30:49 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-23 18:31:25 +0000
commita58ec6a8c37ed1146206c2e4143b58249bdf5255 (patch)
tree346d75082c00971e2519ff2f8282f2cda1e266e6 /printing
parenta68bc5fc4270c417e758a5b5b4e094b1d8b97c1c (diff)
downloadchromium_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.cc8
-rw-r--r--printing/printing_context_win.cc2
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.