| 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
|
|
|