Index: chrome/browser/ui/webui/print_preview/print_preview_ui_browsertest.cc |
=================================================================== |
--- chrome/browser/ui/webui/print_preview/print_preview_ui_browsertest.cc (revision 233351) |
+++ chrome/browser/ui/webui/print_preview/print_preview_ui_browsertest.cc (working copy) |
@@ -3,17 +3,29 @@ |
// found in the LICENSE file. |
#include "base/command_line.h" |
+#include "base/prefs/pref_service.h" |
+#include "base/strings/utf_string_conversions.h" |
#include "chrome/app/chrome_command_ids.h" |
+#include "chrome/browser/content_settings/host_content_settings_map.h" |
+#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_commands.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
#include "chrome/test/base/in_process_browser_test.h" |
+#include "chrome/test/base/ui_test_utils.h" |
#include "content/public/browser/web_contents_observer.h" |
+#include "content/public/test/browser_test_utils.h" |
#include "content/public/test/test_navigation_observer.h" |
#include "content/public/test/test_utils.h" |
+#if defined(OS_WIN) && defined(USE_AURA) |
+#include "content/public/browser/web_contents_view.h" |
+#include "ui/aura/root_window.h" |
+#endif |
+ |
namespace { |
class PrintPreviewTest : public InProcessBrowserTest { |
@@ -65,4 +77,63 @@ |
ASSERT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ADVANCED_PRINT)); |
} |
+#if defined(OS_WIN) && defined(USE_AURA) |
+ |
+BOOL CALLBACK EnumerateChildren(HWND hwnd, LPARAM l_param) { |
+ HWND* child = reinterpret_cast<HWND*>(l_param); |
+ *child = hwnd; |
+ // The first child window is the plugin, then its children. So stop |
+ // enumerating after the first callback. |
+ return FALSE; |
+} |
+ |
+// This test verifies that constrained windows aren't covered by windowed NPAPI |
+// plugins. The code which fixes this is in WebContentsViewAura::WindowObserver. |
+IN_PROC_BROWSER_TEST_F(PrintPreviewTest, WindowedNPAPIPluginHidden) { |
+ browser()->profile()->GetPrefs()->SetBoolean(prefs::kPluginsAlwaysAuthorize, |
+ true); |
+ |
+ // First load the page and wait for the NPAPI plugin's window to display. |
+ string16 expected_title(ASCIIToUTF16("ready")); |
+ content::WebContents* tab = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ content::TitleWatcher title_watcher(tab, expected_title); |
+ |
+ GURL url = ui_test_utils::GetTestUrl( |
+ base::FilePath().AppendASCII("printing"), |
+ base::FilePath().AppendASCII("npapi_plugin.html")); |
+ ui_test_utils::NavigateToURL(browser(), url); |
+ |
+ EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
+ |
+ // Now get the region of the plugin before and after the print preview is |
+ // shown. They should be different. |
+ HWND hwnd = |
+ tab->GetView()->GetNativeView()->GetDispatcher()->GetAcceleratedWidget(); |
+ HWND child = NULL; |
+ EnumChildWindows(hwnd, EnumerateChildren,reinterpret_cast<LPARAM>(&child)); |
+ |
+ RECT region_before, region_after; |
+ int result = GetWindowRgnBox(child, ®ion_before); |
+ ASSERT_EQ(result, SIMPLEREGION); |
+ |
+ // Now print preview. |
+ Print(); |
+ |
+ result = GetWindowRgnBox(child, ®ion_after); |
+ if (result == NULLREGION) { |
+ // Depending on the browser window size, the plugin could be full covered. |
+ return; |
+ } |
+ |
+ ASSERT_EQ(result, SIMPLEREGION); |
+ bool rects_equal = |
+ region_before.left == region_after.left && |
+ region_before.top == region_after.top && |
+ region_before.right == region_after.right && |
+ region_before.bottom == region_after.bottom; |
+ ASSERT_FALSE(rects_equal); |
+} |
+#endif |
+ |
} // namespace |