| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
| 8 #include "content/browser/frame_host/frame_tree_node.h" | 8 #include "content/browser/frame_host/frame_tree_node.h" |
| 9 #include "content/browser/frame_host/render_frame_host_impl.h" | 9 #include "content/browser/frame_host/render_frame_host_impl.h" |
| 10 #include "content/browser/web_contents/web_contents_impl.h" | 10 #include "content/browser/web_contents/web_contents_impl.h" |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 // This should not cause the nested iframe to change its zoom. | 251 // This should not cause the nested iframe to change its zoom. |
| 252 host_zoom_map->SetZoomLevelForHost("b.com", new_zoom_level); | 252 host_zoom_map->SetZoomLevelForHost("b.com", new_zoom_level); |
| 253 | 253 |
| 254 EXPECT_DOUBLE_EQ( | 254 EXPECT_DOUBLE_EQ( |
| 255 1.0, GetMainFrameZoomFactor(web_contents(), main_frame_window_border)); | 255 1.0, GetMainFrameZoomFactor(web_contents(), main_frame_window_border)); |
| 256 EXPECT_EQ(scale_one_child_width, GetSubframeWidth(child)); | 256 EXPECT_EQ(scale_one_child_width, GetSubframeWidth(child)); |
| 257 EXPECT_EQ(scale_one_grandchild_width, GetSubframeWidth(grandchild)); | 257 EXPECT_EQ(scale_one_grandchild_width, GetSubframeWidth(grandchild)); |
| 258 | 258 |
| 259 // We exclude the remainder of this test on Android since Android does not | 259 // We exclude the remainder of this test on Android since Android does not |
| 260 // set page zoom levels for loading pages. | 260 // set page zoom levels for loading pages. |
| 261 // See RenderFrameImpl::SetHostZoomLevel(). | 261 // See RenderViewImpl::OnSetZoomLevelForLoadingURL(). |
| 262 #if !defined(OS_ANDROID) | 262 #if !defined(OS_ANDROID) |
| 263 // When we navigate so that b.com is the top-level site, then it has the | 263 // When we navigate so that b.com is the top-level site, then it has the |
| 264 // expected zoom. | 264 // expected zoom. |
| 265 GURL new_url = embedded_test_server()->GetURL("b.com", "/title1.html"); | 265 GURL new_url = embedded_test_server()->GetURL("b.com", "/title1.html"); |
| 266 EXPECT_TRUE(NavigateToURL(shell(), new_url)); | 266 EXPECT_TRUE(NavigateToURL(shell(), new_url)); |
| 267 EXPECT_DOUBLE_EQ( | 267 EXPECT_DOUBLE_EQ( |
| 268 new_zoom_factor, | 268 new_zoom_factor, |
| 269 GetMainFrameZoomFactor(web_contents(), main_frame_window_border)); | 269 GetMainFrameZoomFactor(web_contents(), main_frame_window_border)); |
| 270 #endif | 270 #endif |
| 271 } | 271 } |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 EXPECT_TRUE(IsLastCommittedEntryOfPageType(web_contents(), PAGE_TYPE_NORMAL)); | 471 EXPECT_TRUE(IsLastCommittedEntryOfPageType(web_contents(), PAGE_TYPE_NORMAL)); |
| 472 EXPECT_EQ(redirect_url, web_contents()->GetLastCommittedURL()); | 472 EXPECT_EQ(redirect_url, web_contents()->GetLastCommittedURL()); |
| 473 | 473 |
| 474 EXPECT_NEAR( | 474 EXPECT_NEAR( |
| 475 kZoomFactorForRedirectedHost, | 475 kZoomFactorForRedirectedHost, |
| 476 GetMainFrameZoomFactor(web_contents(), main_frame_window_border), | 476 GetMainFrameZoomFactor(web_contents(), main_frame_window_border), |
| 477 0.001); | 477 0.001); |
| 478 } | 478 } |
| 479 #endif | 479 #endif |
| 480 | 480 |
| 481 // Tests that on cross-site navigation from a page that has a subframe, the | |
| 482 // appropriate zoom is applied to the new page. | |
| 483 // crbug.com/673065 | |
| 484 // Note: We exclude the this test on Android since Android does not set page | |
| 485 // zoom levels for loading pages. | |
| 486 // See RenderFrameImpl::SetHostZoomLevel(). | |
| 487 #if !defined(OS_ANDROID) | |
| 488 IN_PROC_BROWSER_TEST_F(IFrameZoomBrowserTest, | |
| 489 SubframesDontBreakConnectionToRenderer) { | |
| 490 std::string top_level_host("a.com"); | |
| 491 GURL main_url(embedded_test_server()->GetURL( | |
| 492 top_level_host, "/page_with_iframe_and_link.html")); | |
| 493 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | |
| 494 NavigationEntry* entry = | |
| 495 web_contents()->GetController().GetLastCommittedEntry(); | |
| 496 ASSERT_TRUE(entry); | |
| 497 GURL loaded_url = HostZoomMap::GetURLFromEntry(entry); | |
| 498 EXPECT_EQ(top_level_host, loaded_url.host()); | |
| 499 | |
| 500 // The following calls must be made when the page's scale factor = 1.0. | |
| 501 double main_frame_window_border = GetMainframeWindowBorder(web_contents()); | |
| 502 | |
| 503 HostZoomMap* host_zoom_map = HostZoomMap::GetForWebContents(web_contents()); | |
| 504 double default_zoom_level = host_zoom_map->GetDefaultZoomLevel(); | |
| 505 EXPECT_EQ(0.0, default_zoom_level); | |
| 506 EXPECT_DOUBLE_EQ( | |
| 507 1.0, GetMainFrameZoomFactor(web_contents(), main_frame_window_border)); | |
| 508 | |
| 509 // Set a zoom for a host that will be navigated to below. | |
| 510 const double new_zoom_factor = 2.0; | |
| 511 const double new_zoom_level = | |
| 512 default_zoom_level + ZoomFactorToZoomLevel(new_zoom_factor); | |
| 513 host_zoom_map->SetZoomLevelForHost("foo.com", new_zoom_level); | |
| 514 | |
| 515 // Navigate forward in the same RFH to a site with that host via a | |
| 516 // renderer-initiated navigation. | |
| 517 { | |
| 518 const char kReplacePortNumber[] = | |
| 519 "window.domAutomationController.send(setPortNumber(%d));"; | |
| 520 uint16_t port_number = embedded_test_server()->port(); | |
| 521 bool success = false; | |
| 522 EXPECT_TRUE(ExecuteScriptAndExtractBool( | |
| 523 shell(), base::StringPrintf(kReplacePortNumber, port_number), | |
| 524 &success)); | |
| 525 TestNavigationObserver observer(shell()->web_contents()); | |
| 526 GURL url = embedded_test_server()->GetURL("foo.com", "/title2.html"); | |
| 527 success = false; | |
| 528 EXPECT_TRUE(ExecuteScriptAndExtractBool( | |
| 529 shell(), "window.domAutomationController.send(clickCrossSiteLink());", | |
| 530 &success)); | |
| 531 EXPECT_TRUE(success); | |
| 532 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | |
| 533 EXPECT_EQ(url, observer.last_navigation_url()); | |
| 534 EXPECT_TRUE(observer.last_navigation_succeeded()); | |
| 535 } | |
| 536 | |
| 537 // Check that the requested zoom has been applied to the new site. | |
| 538 // NOTE: Local observation on Linux has shown that this comparison has to be | |
| 539 // approximate. As the common failure mode would be that the zoom is ~1 | |
| 540 // instead of ~2, this approximation shouldn't be problematic. | |
| 541 EXPECT_NEAR( | |
| 542 new_zoom_factor, | |
| 543 GetMainFrameZoomFactor(web_contents(), main_frame_window_border), | |
| 544 .1); | |
| 545 } | |
| 546 #endif | |
| 547 | |
| 548 } // namespace content | 481 } // namespace content |
| OLD | NEW |