TEST_F(ProgrammaticScrollTest, RestoreScrollPositionAndViewStateWithScale) { registerMockedHttpURLLoad("long_scroll.html"); FrameTestHelpers::WebViewHelper webViewHelper; WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "long_scroll.html", true, 0, 0); webView->resize(WebSize(1000, 1000)); webView->layout(); WebViewImpl* webViewImpl = toWebViewImpl(webView); LocalFrame* frame = webViewImpl->mainFrameImpl()->frame(); frame->loader().setLoadType(FrameLoadTypeBackForward); webViewImpl->setPageScaleFactor(3.0f); webViewImpl->mainFrame()->setScrollOffset(WebSize(0, 500)); frame->view()->setWasScrolledByUser(false); frame->loader().currentItem()->setPageScaleFactor(2); frame->loader().currentItem()->setScrollPoint(WebPoint(0, 200)); // Flip back the wasScrolledByUser flag which was set to true by setPageScaleFactor // because otherwise FrameLoader::restoreScrollPositionAndViewState does nothing. frame->view()->setWasScrolledByUser(false); frame->loader().restoreScrollPositionAndViewState(); // Expect that both scroll and scale were restored. EXPECT_EQ(2.0f, webViewImpl->pageScaleFactor()); EXPECT_EQ(200, webViewImpl->mainFrameImpl()->scrollOffset().height); }
// static PassOwnPtrWillBeRawPtr<WebDevToolsAgentImpl> WebDevToolsAgentImpl::create(WebLocalFrameImpl* frame, WebDevToolsAgentClient* client) { WebViewImpl* view = frame->viewImpl(); bool isMainFrame = view && view->mainFrameImpl() == frame; if (!isMainFrame) { WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, frame->inspectorOverlay()); if (frame->frameWidget()) agent->layerTreeViewChanged(frame->frameWidget()->layerTreeView()); return adoptPtrWillBeNoop(agent); } WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, view->inspectorOverlay()); agent->registerAgent(InspectorRenderingAgent::create(view)); agent->registerAgent(InspectorEmulationAgent::create(view)); // TODO(dgozman): migrate each of the following agents to frame once module is ready. agent->registerAgent(InspectorDatabaseAgent::create(view->page())); agent->registerAgent(DeviceOrientationInspectorAgent::create(view->page())); agent->registerAgent(InspectorFileSystemAgent::create(view->page())); agent->registerAgent(InspectorIndexedDBAgent::create(view->page())); agent->registerAgent(InspectorAccessibilityAgent::create(view->page())); agent->registerAgent(InspectorDOMStorageAgent::create(view->page())); agent->registerAgent(InspectorCacheStorageAgent::create()); agent->layerTreeViewChanged(view->layerTreeView()); return adoptPtrWillBeNoop(agent); }
TEST_F(WebFrameTest, FixedLayoutInitializeAtMinimumPageScale) { registerMockedHttpURLLoad("fixed_layout.html"); FixedLayoutTestWebViewClient client; client.m_screenInfo.horizontalDPI = 160; int viewportWidth = 640; int viewportHeight = 480; client.m_windowRect = WebRect(0, 0, viewportWidth, viewportHeight); // Make sure we initialize to minimum scale, even if the window size // only becomes available after the load begins. WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout.html", true, 0, &client)); webViewImpl->enableFixedLayoutMode(true); webViewImpl->settings()->setViewportEnabled(true); webViewImpl->resize(WebSize(viewportWidth, viewportHeight)); int defaultFixedLayoutWidth = 980; float minimumPageScaleFactor = viewportWidth / (float) defaultFixedLayoutWidth; EXPECT_EQ(minimumPageScaleFactor, webViewImpl->pageScaleFactor()); // Assume the user has pinch zoomed to page scale factor 2. float userPinchPageScaleFactor = 2; webViewImpl->setPageScaleFactorPreservingScrollOffset(userPinchPageScaleFactor); webViewImpl->mainFrameImpl()->frameView()->layout(); // Make sure we don't reset to initial scale if the page continues to load. bool isNewNavigation; webViewImpl->didCommitLoad(&isNewNavigation, false); webViewImpl->didChangeContentsSize(); EXPECT_EQ(userPinchPageScaleFactor, webViewImpl->pageScaleFactor()); // Make sure we don't reset to initial scale if the viewport size changes. webViewImpl->resize(WebSize(viewportWidth, viewportHeight + 100)); EXPECT_EQ(userPinchPageScaleFactor, webViewImpl->pageScaleFactor()); }