| Index: content/browser/zoom_browsertest.cc
|
| diff --git a/content/browser/zoom_browsertest.cc b/content/browser/zoom_browsertest.cc
|
| index 1b1d5461aa55767b135956c1484d122540ce9bce..38b2753400e745dc77814766896b038fa098f035 100644
|
| --- a/content/browser/zoom_browsertest.cc
|
| +++ b/content/browser/zoom_browsertest.cc
|
| @@ -371,7 +371,7 @@ IN_PROC_BROWSER_TEST_F(IFrameZoomBrowserTest, SubframesDontZoomIndependently) {
|
|
|
| // We exclude the remainder of this test on Android since Android does not
|
| // set page zoom levels for loading pages.
|
| - // See RenderViewImpl::OnSetZoomLevelForLoadingURL().
|
| + // See RenderFrameImpl::SetHostZoomLevel().
|
| #if !defined(OS_ANDROID)
|
| // When we navigate so that b.com is the top-level site, then it has the
|
| // expected zoom.
|
| @@ -591,4 +591,71 @@ IN_PROC_BROWSER_TEST_F(IFrameZoomBrowserTest,
|
| }
|
| #endif
|
|
|
| +// Tests that on cross-site navigation from a page that has a subframe, the
|
| +// appropriate zoom is applied to the new page.
|
| +// crbug.com/673065
|
| +// Note: We exclude the this test on Android since Android does not set page
|
| +// zoom levels for loading pages.
|
| +// See RenderFrameImpl::SetHostZoomLevel().
|
| +#if !defined(OS_ANDROID)
|
| +IN_PROC_BROWSER_TEST_F(IFrameZoomBrowserTest,
|
| + SubframesDontBreakConnectionToRenderer) {
|
| + std::string top_level_host("a.com");
|
| + GURL main_url(embedded_test_server()->GetURL(
|
| + top_level_host, "/page_with_iframe_and_link.html"));
|
| + EXPECT_TRUE(NavigateToURL(shell(), main_url));
|
| + NavigationEntry* entry =
|
| + web_contents()->GetController().GetLastCommittedEntry();
|
| + ASSERT_TRUE(entry);
|
| + GURL loaded_url = HostZoomMap::GetURLFromEntry(entry);
|
| + EXPECT_EQ(top_level_host, loaded_url.host());
|
| +
|
| + // The following calls must be made when the page's scale factor = 1.0.
|
| + double main_frame_window_border = GetMainframeWindowBorder(web_contents());
|
| +
|
| + HostZoomMap* host_zoom_map = HostZoomMap::GetForWebContents(web_contents());
|
| + double default_zoom_level = host_zoom_map->GetDefaultZoomLevel();
|
| + EXPECT_EQ(0.0, default_zoom_level);
|
| + EXPECT_DOUBLE_EQ(
|
| + 1.0, GetMainFrameZoomFactor(web_contents(), main_frame_window_border));
|
| +
|
| + // Set a zoom for a host that will be navigated to below.
|
| + const double new_zoom_factor = 2.0;
|
| + const double new_zoom_level =
|
| + default_zoom_level + ZoomFactorToZoomLevel(new_zoom_factor);
|
| + host_zoom_map->SetZoomLevelForHost("foo.com", new_zoom_level);
|
| +
|
| + // Navigate forward in the same RFH to a site with that host via a
|
| + // renderer-initiated navigation.
|
| + {
|
| + const char kReplacePortNumber[] =
|
| + "window.domAutomationController.send(setPortNumber(%d));";
|
| + uint16_t port_number = embedded_test_server()->port();
|
| + bool success = false;
|
| + EXPECT_TRUE(ExecuteScriptAndExtractBool(
|
| + shell(), base::StringPrintf(kReplacePortNumber, port_number),
|
| + &success));
|
| + TestNavigationObserver observer(shell()->web_contents());
|
| + GURL url = embedded_test_server()->GetURL("foo.com", "/title2.html");
|
| + success = false;
|
| + EXPECT_TRUE(ExecuteScriptAndExtractBool(
|
| + shell(), "window.domAutomationController.send(clickCrossSiteLink());",
|
| + &success));
|
| + EXPECT_TRUE(success);
|
| + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
|
| + EXPECT_EQ(url, observer.last_navigation_url());
|
| + EXPECT_TRUE(observer.last_navigation_succeeded());
|
| + }
|
| +
|
| + // Check that the requested zoom has been applied to the new site.
|
| + // NOTE: Local observation on Linux has shown that this comparison has to be
|
| + // approximate. As the common failure mode would be that the zoom is ~1
|
| + // instead of ~2, this approximation shouldn't be problematic.
|
| + EXPECT_NEAR(
|
| + new_zoom_factor,
|
| + GetMainFrameZoomFactor(web_contents(), main_frame_window_border),
|
| + .1);
|
| +}
|
| +#endif
|
| +
|
| } // namespace content
|
|
|