// static PassOwnPtrWillBeRawPtr<WebDevToolsAgentImpl> WebDevToolsAgentImpl::create(WebLocalFrameImpl* frame, WebDevToolsAgentClient* client) { WebViewImpl* view = frame->viewImpl(); // TODO(dgozman): sometimes view->mainFrameImpl() does return null, even though |frame| is meant to be main frame. // See http://crbug.com/526162. bool isMainFrame = view && !frame->parent(); if (!isMainFrame) { WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, nullptr); if (frame->frameWidget()) agent->layerTreeViewChanged(toWebFrameWidgetImpl(frame->frameWidget())->layerTreeView()); return adoptPtrWillBeNoop(agent); } WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, InspectorOverlay::create(view)); // TODO(dgozman): we should actually pass the view instead of frame, but during // remote->local transition we cannot access mainFrameImpl() yet, so we have to store the // frame which will become the main frame later. agent->registerAgent(InspectorRenderingAgent::create(frame)); agent->registerAgent(InspectorEmulationAgent::create(frame, agent)); // 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(InspectorAccessibilityAgent::create(view->page())); agent->registerAgent(InspectorDOMStorageAgent::create(view->page())); agent->registerAgent(InspectorCacheStorageAgent::create()); agent->layerTreeViewChanged(view->layerTreeView()); return adoptPtrWillBeNoop(agent); }
Page* ChromeClientImpl::createWindow( Frame* frame, const FrameLoadRequest& r, const WindowFeatures& features, const NavigationAction& action) { if (!m_webView->client()) return 0; // FrameLoaderClientImpl may have given us a policy to use for the next new // window navigation. If not, determine the policy using the same logic as // show(). WebNavigationPolicy policy; if (m_nextNewWindowNavigationPolicy != WebNavigationPolicyIgnore) { policy = m_nextNewWindowNavigationPolicy; m_nextNewWindowNavigationPolicy = WebNavigationPolicyIgnore; } else policy = getNavigationPolicy(); WrappedResourceRequest request; if (!r.resourceRequest().isEmpty()) request.bind(r.resourceRequest()); else if (!action.resourceRequest().isEmpty()) request.bind(action.resourceRequest()); WebViewImpl* newView = static_cast<WebViewImpl*>( m_webView->client()->createView(WebFrameImpl::fromFrame(frame), request, features, r.frameName(), policy)); if (!newView) return 0; return newView->page(); }
TEST_F(DocumentLoaderTest, isCommittedButEmpty) { WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad("about:blank", true); EXPECT_TRUE(toLocalFrame(webViewImpl->page()->mainFrame()) ->loader() .documentLoader() ->isCommittedButEmpty()); }
// 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); }
Page* ChromeClientImpl::createWindow(LocalFrame* frame, const FrameLoadRequest& r, const WindowFeatures& features, NavigationPolicy navigationPolicy, ShouldSetOpener shouldSetOpener) { if (!m_webView->client()) return nullptr; WebNavigationPolicy policy = effectiveNavigationPolicy(navigationPolicy, features); ASSERT(frame->document()); Fullscreen::fullyExitFullscreen(*frame->document()); WebViewImpl* newView = toWebViewImpl( m_webView->client()->createView(WebLocalFrameImpl::fromFrame(frame), WrappedResourceRequest(r.resourceRequest()), features, r.frameName(), policy, shouldSetOpener == NeverSetOpener)); if (!newView) return nullptr; return newView->page(); }
Page* ChromeClientImpl::createWindow( Frame* frame, const FrameLoadRequest& r, const WindowFeatures& features, const NavigationAction&) { if (!m_webView->client()) return 0; WrappedResourceRequest request; if (!r.resourceRequest().isEmpty()) request.bind(r.resourceRequest()); WebViewImpl* newView = static_cast<WebViewImpl*>( m_webView->client()->createView(WebFrameImpl::fromFrame(frame), request, features, r.frameName())); if (!newView) return 0; return newView->page(); }
Page* ChromeClientImpl::createWindow(LocalFrame* frame, const FrameLoadRequest& r, const WindowFeatures& features, NavigationPolicy navigationPolicy, ShouldSendReferrer shouldSendReferrer) { if (!m_webView->client()) return 0; WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); if (policy == WebNavigationPolicyIgnore) policy = getNavigationPolicy(); ASSERT(frame->document()); DocumentFullscreen::webkitCancelFullScreen(*frame->document()); WebViewImpl* newView = toWebViewImpl( m_webView->client()->createView(WebFrameImpl::fromFrame(frame), WrappedResourceRequest(r.resourceRequest()), features, r.frameName(), policy, shouldSendReferrer == NeverSendReferrer)); if (!newView) return 0; return newView->page(); }
Page* ChromeClientImpl::createWindow( Frame* frame, const FrameLoadRequest& r, const WindowFeatures& features) { if (!m_webView->client()) return 0; WebViewImpl* newView = static_cast<WebViewImpl*>( m_webView->client()->createView(WebFrameImpl::fromFrame(frame), features, r.frameName())); if (!newView) return 0; // The request is empty when we are just being asked to open a blank window. // This corresponds to window.open(""), for example. if (!r.resourceRequest().isEmpty()) { WrappedResourceRequest request(r.resourceRequest()); newView->mainFrame()->loadRequest(request); } return newView->page(); }
Page* ChromeClientImpl::createWindow(LocalFrame* frame, const FrameLoadRequest& r, const WindowFeatures& features, NavigationPolicy navigationPolicy, ShouldSendReferrer shouldSendReferrer) { if (!m_webView->client()) return nullptr; WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); if (policy == WebNavigationPolicyIgnore) policy = getNavigationPolicy(features); else if (policy == WebNavigationPolicyNewBackgroundTab && getNavigationPolicy(m_windowFeatures) != WebNavigationPolicyNewBackgroundTab && !UIEventWithKeyState::newTabModifierSetFromIsolatedWorld()) policy = WebNavigationPolicyNewForegroundTab; ASSERT(frame->document()); Fullscreen::fullyExitFullscreen(*frame->document()); WebViewImpl* newView = toWebViewImpl( m_webView->client()->createView(WebLocalFrameImpl::fromFrame(frame), WrappedResourceRequest(r.resourceRequest()), features, r.frameName(), policy, shouldSendReferrer == NeverSendReferrer)); if (!newView) return nullptr; return newView->page(); }
TEST_F(WebFrameTest, DivAutoZoomParamsTest) { registerMockedHttpURLLoad("get_scale_for_auto_zoom_into_div_test.html"); WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_for_auto_zoom_into_div_test.html", true)); int pageWidth = 640; int pageHeight = 480; int divPosX = 200; int divPosY = 200; int divWidth = 200; int divHeight = 150; WebRect doubleTapPoint(250, 250, 0, 0); webViewImpl->resize(WebSize(pageWidth, pageHeight)); float scale; WebPoint scroll; // Test for Doubletap scaling // Tests for zooming in and out without clamping. // Set device scale and scale limits so we dont get clamped. webViewImpl->setDeviceScaleFactor(4); webViewImpl->setPageScaleFactorLimits(0, 4 / webViewImpl->deviceScaleFactor()); // Test zooming into div. webViewImpl->computeScaleAndScrollForHitRect(doubleTapPoint, WebViewImpl::DoubleTap, scale, scroll); float scaledDivWidth = divWidth * scale; float scaledDivHeight = divHeight * scale; int hScroll = ((divPosX * scale) - ((pageWidth - scaledDivWidth) / 2)) / scale; int vScroll = ((divPosY * scale) - ((pageHeight - scaledDivHeight) / 2)) / scale; EXPECT_NEAR(pageWidth / divWidth, scale, 0.1); EXPECT_EQ(hScroll, scroll.x); EXPECT_EQ(vScroll, scroll.y); // Test zoom out to overview scale. webViewImpl->applyScrollAndScale(WebSize(scroll.x, scroll.y), scale / webViewImpl->pageScaleFactor()); webViewImpl->computeScaleAndScrollForHitRect(doubleTapPoint, WebViewImpl::DoubleTap, scale, scroll); EXPECT_FLOAT_EQ(1, scale); EXPECT_EQ(WebPoint(0, 0), scroll); // Tests for clamped scaling. // Test clamp to device scale: webViewImpl->applyScrollAndScale(WebSize(scroll.x, scroll.y), scale / webViewImpl->pageScaleFactor()); webViewImpl->setDeviceScaleFactor(2.5); webViewImpl->computeScaleAndScrollForHitRect(doubleTapPoint, WebViewImpl::DoubleTap, scale, scroll); EXPECT_FLOAT_EQ(2.5, scale); // Test clamp to minimum scale: webViewImpl->applyScrollAndScale(WebSize(scroll.x, scroll.y), scale / webViewImpl->pageScaleFactor()); webViewImpl->setPageScaleFactorLimits(1.5 / webViewImpl->deviceScaleFactor(), 4 / webViewImpl->deviceScaleFactor()); webViewImpl->computeScaleAndScrollForHitRect(doubleTapPoint, WebViewImpl::DoubleTap, scale, scroll); EXPECT_FLOAT_EQ(1.5, scale); EXPECT_EQ(WebPoint(0, 0), scroll); // Test clamp to maximum scale: webViewImpl->applyScrollAndScale(WebSize(scroll.x, scroll.y), scale / webViewImpl->pageScaleFactor()); webViewImpl->setDeviceScaleFactor(4); webViewImpl->setPageScaleFactorLimits(0, 3 / webViewImpl->deviceScaleFactor()); webViewImpl->computeScaleAndScrollForHitRect(doubleTapPoint, WebViewImpl::DoubleTap, scale, scroll); EXPECT_FLOAT_EQ(3, scale); // Test for Non-doubletap scaling webViewImpl->setPageScaleFactor(1, WebPoint(0, 0)); webViewImpl->setDeviceScaleFactor(4); webViewImpl->setPageScaleFactorLimits(0, 4 / webViewImpl->deviceScaleFactor()); // Test zooming into div. webViewImpl->computeScaleAndScrollForHitRect(WebRect(250, 250, 10, 10), WebViewImpl::FindInPage, scale, scroll); EXPECT_NEAR(pageWidth / divWidth, scale, 0.1); // Drop any pending fake mouse events from zooming before leaving the test. webViewImpl->page()->mainFrame()->eventHandler()->clear(); }