Force print dialog to the foreground.
Continuation of issue 9648009.
Fixes the problem with the print dialog being in the background when launched from the command line by the cloud print print driver.
BUG=112011
TEST=No visible changes for chromium.
Review URL: http://codereview.chromium.org/9706023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126797 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/printing/print_dialog_cloud.cc b/chrome/browser/printing/print_dialog_cloud.cc
index ea70c51f..a1e031c 100644
--- a/chrome/browser/printing/print_dialog_cloud.cc
+++ b/chrome/browser/printing/print_dialog_cloud.cc
@@ -38,6 +38,11 @@
#include "content/public/browser/web_contents_view.h"
#include "content/public/browser/web_ui.h"
#include "ui/base/l10n/l10n_util.h"
+
+#if defined(OS_WIN)
+#include "ui/base/win/foreground_helper.h"
+#endif
+
#include "webkit/glue/webpreferences.h"
#include "grit/generated_resources.h"
@@ -45,6 +50,7 @@
#if defined(USE_AURA)
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/views/html_dialog_view.h"
+#include "ui/aura/root_window.h"
#include "ui/views/widget/widget.h"
#endif
@@ -684,15 +690,35 @@
callback);
if (modal) {
DCHECK(browser);
+
#if defined(USE_AURA)
HtmlDialogView* html_view =
new HtmlDialogView(profile, browser, dialog_delegate);
views::Widget::CreateWindowWithParent(html_view,
browser->window()->GetNativeHandle());
html_view->InitDialog();
- html_view->GetWidget()->Show();
+ views::Widget* widget = html_view->GetWidget();
+ DCHECK(widget);
+ widget->Show();
+#if defined(OS_WIN)
+ gfx::NativeWindow window = widget->GetNativeWindow();
+#endif
#else
- browser->BrowserShowHtmlDialog(dialog_delegate, NULL, STYLE_GENERIC);
+#if defined(OS_WIN)
+ gfx::NativeWindow window =
+#endif
+ browser->BrowserShowHtmlDialog(dialog_delegate, NULL, STYLE_GENERIC);
+#endif
+#if defined(OS_WIN)
+ HWND dialog_handle;
+#if defined(USE_AURA)
+ dialog_handle = window->GetRootWindow()->GetAcceleratedWidget();
+#else
+ dialog_handle = window;
+#endif
+ if (::GetForegroundWindow() != dialog_handle) {
+ ui::ForegroundHelper::SetForeground(dialog_handle);
+ }
#endif
} else {
browser::ShowHtmlDialog(NULL,