| Index: Source/web/WebDevToolsAgentImpl.cpp
|
| diff --git a/Source/web/WebDevToolsAgentImpl.cpp b/Source/web/WebDevToolsAgentImpl.cpp
|
| index 2ff512f877ec1d538902889581a4d735c1f9fccb..6cb9c6eb46754210790c62c870c2b6ef5af39ad5 100644
|
| --- a/Source/web/WebDevToolsAgentImpl.cpp
|
| +++ b/Source/web/WebDevToolsAgentImpl.cpp
|
| @@ -34,11 +34,13 @@
|
| #include "InspectorBackendDispatcher.h"
|
| #include "InspectorFrontend.h"
|
| #include "InspectorProtocolVersion.h"
|
| +#include "RuntimeEnabledFeatures.h"
|
| #include "WebDataSource.h"
|
| #include "WebDevToolsAgentClient.h"
|
| #include "WebFrameImpl.h"
|
| #include "WebInputEventConversion.h"
|
| #include "WebMemoryUsageInfo.h"
|
| +#include "WebSettings.h"
|
| #include "WebViewClient.h"
|
| #include "WebViewImpl.h"
|
| #include "bindings/v8/PageScriptDebugServer.h"
|
| @@ -187,170 +189,6 @@ private:
|
| OwnPtr<WebDevToolsAgent::MessageDescriptor> m_descriptor;
|
| };
|
|
|
| -class DeviceMetricsSupport {
|
| -public:
|
| - DeviceMetricsSupport(WebViewImpl* webView)
|
| - : m_webView(webView)
|
| - , m_fitWindow(false)
|
| - , m_originalZoomFactor(0)
|
| - {
|
| - }
|
| -
|
| - ~DeviceMetricsSupport()
|
| - {
|
| - restore();
|
| - }
|
| -
|
| - void setDeviceMetrics(int width, int height, float textZoomFactor, bool fitWindow)
|
| - {
|
| - WebCore::FrameView* view = frameView();
|
| - if (!view)
|
| - return;
|
| -
|
| - m_emulatedFrameSize = WebSize(width, height);
|
| - m_fitWindow = fitWindow;
|
| - m_originalZoomFactor = 0;
|
| - m_webView->setTextZoomFactor(textZoomFactor);
|
| - applySizeOverrideInternal(view, FitWindowAllowed);
|
| - autoZoomPageToFitWidth(&view->frame());
|
| -
|
| - m_webView->sendResizeEventAndRepaint();
|
| - }
|
| -
|
| - void autoZoomPageToFitWidthOnNavigation(Frame* frame)
|
| - {
|
| - FrameView* frameView = frame->view();
|
| - applySizeOverrideInternal(frameView, FitWindowNotAllowed);
|
| - m_originalZoomFactor = 0;
|
| - applySizeOverrideInternal(frameView, FitWindowAllowed);
|
| - autoZoomPageToFitWidth(frame);
|
| - }
|
| -
|
| - void autoZoomPageToFitWidth(Frame* frame)
|
| - {
|
| - frame->setTextZoomFactor(m_webView->textZoomFactor());
|
| - ensureOriginalZoomFactor(frame->view());
|
| - Document* document = frame->document();
|
| - float numerator = document->renderView() ? document->renderView()->viewWidth() : frame->view()->contentsWidth();
|
| - float factor = m_originalZoomFactor * (numerator / m_emulatedFrameSize.width);
|
| - frame->setPageAndTextZoomFactors(factor, m_webView->textZoomFactor());
|
| - document->styleResolverChanged(RecalcStyleImmediately);
|
| - document->updateLayout();
|
| - }
|
| -
|
| - void webViewResized()
|
| - {
|
| - if (!m_fitWindow)
|
| - return;
|
| -
|
| - applySizeOverrideIfNecessary();
|
| - autoZoomPageToFitWidth(m_webView->mainFrameImpl()->frame());
|
| - }
|
| -
|
| - void applySizeOverrideIfNecessary()
|
| - {
|
| - FrameView* view = frameView();
|
| - if (!view)
|
| - return;
|
| -
|
| - applySizeOverrideInternal(view, FitWindowAllowed);
|
| - }
|
| -
|
| -private:
|
| - enum FitWindowFlag { FitWindowAllowed, FitWindowNotAllowed };
|
| -
|
| - void ensureOriginalZoomFactor(FrameView* frameView)
|
| - {
|
| - if (m_originalZoomFactor)
|
| - return;
|
| -
|
| - m_webView->setPageScaleFactor(1, WebPoint());
|
| - m_webView->setZoomLevel(0);
|
| - WebSize scaledEmulatedSize = scaledEmulatedFrameSize(frameView);
|
| - double denominator = frameView->contentsWidth();
|
| - if (!denominator)
|
| - denominator = 1;
|
| - m_originalZoomFactor = static_cast<double>(scaledEmulatedSize.width) / denominator;
|
| - }
|
| -
|
| - void restore()
|
| - {
|
| - WebCore::FrameView* view = frameView();
|
| - if (!view)
|
| - return;
|
| -
|
| - m_webView->setZoomLevel(0);
|
| - m_webView->setTextZoomFactor(1);
|
| - view->setHorizontalScrollbarLock(false);
|
| - view->setVerticalScrollbarLock(false);
|
| - view->setScrollbarModes(ScrollbarAuto, ScrollbarAuto, false, false);
|
| - view->setFrameRect(IntRect(IntPoint(), IntSize(m_webView->size())));
|
| - m_webView->sendResizeEventAndRepaint();
|
| - }
|
| -
|
| - WebSize scaledEmulatedFrameSize(FrameView* frameView)
|
| - {
|
| - if (!m_fitWindow)
|
| - return m_emulatedFrameSize;
|
| -
|
| - WebSize scrollbarDimensions = forcedScrollbarDimensions(frameView);
|
| -
|
| - int overrideWidth = m_emulatedFrameSize.width;
|
| - int overrideHeight = m_emulatedFrameSize.height;
|
| -
|
| - WebSize webViewSize = m_webView->size();
|
| - int availableViewWidth = max(webViewSize.width - scrollbarDimensions.width, 1);
|
| - int availableViewHeight = max(webViewSize.height - scrollbarDimensions.height, 1);
|
| -
|
| - double widthRatio = static_cast<double>(overrideWidth) / availableViewWidth;
|
| - double heightRatio = static_cast<double>(overrideHeight) / availableViewHeight;
|
| - double dimensionRatio = max(widthRatio, heightRatio);
|
| - overrideWidth = static_cast<int>(ceil(static_cast<double>(overrideWidth) / dimensionRatio));
|
| - overrideHeight = static_cast<int>(ceil(static_cast<double>(overrideHeight) / dimensionRatio));
|
| -
|
| - return WebSize(overrideWidth, overrideHeight);
|
| - }
|
| -
|
| - WebSize forcedScrollbarDimensions(FrameView* frameView)
|
| - {
|
| - frameView->setScrollbarModes(ScrollbarAlwaysOn, ScrollbarAlwaysOn, true, true);
|
| -
|
| - int verticalScrollbarWidth = 0;
|
| - int horizontalScrollbarHeight = 0;
|
| - if (Scrollbar* verticalBar = frameView->verticalScrollbar())
|
| - verticalScrollbarWidth = !verticalBar->isOverlayScrollbar() ? verticalBar->width() : 0;
|
| - if (Scrollbar* horizontalBar = frameView->horizontalScrollbar())
|
| - horizontalScrollbarHeight = !horizontalBar->isOverlayScrollbar() ? horizontalBar->height() : 0;
|
| - return WebSize(verticalScrollbarWidth, horizontalScrollbarHeight);
|
| - }
|
| -
|
| - void applySizeOverrideInternal(FrameView* frameView, FitWindowFlag fitWindowFlag)
|
| - {
|
| - WebSize scrollbarDimensions = forcedScrollbarDimensions(frameView);
|
| -
|
| - WebSize effectiveEmulatedSize = (fitWindowFlag == FitWindowAllowed) ? scaledEmulatedFrameSize(frameView) : m_emulatedFrameSize;
|
| - int overrideWidth = effectiveEmulatedSize.width + scrollbarDimensions.width;
|
| - int overrideHeight = effectiveEmulatedSize.height + scrollbarDimensions.height;
|
| -
|
| - if (IntSize(overrideWidth, overrideHeight) != frameView->size())
|
| - frameView->resize(overrideWidth, overrideHeight);
|
| -
|
| - Document* doc = frameView->frame().document();
|
| - doc->styleResolverChanged(RecalcStyleImmediately);
|
| - doc->updateLayout();
|
| - }
|
| -
|
| - WebCore::FrameView* frameView()
|
| - {
|
| - return m_webView->mainFrameImpl() ? m_webView->mainFrameImpl()->frameView() : 0;
|
| - }
|
| -
|
| - WebViewImpl* m_webView;
|
| - WebSize m_emulatedFrameSize;
|
| - bool m_fitWindow;
|
| - double m_originalZoomFactor;
|
| -};
|
| -
|
| WebDevToolsAgentImpl::WebDevToolsAgentImpl(
|
| WebViewImpl* webViewImpl,
|
| WebDevToolsAgentClient* client)
|
| @@ -358,6 +196,8 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl(
|
| , m_client(client)
|
| , m_webViewImpl(webViewImpl)
|
| , m_attached(false)
|
| + , m_deviceMetricsEnabled(false)
|
| + , m_isOverlayScrollbarsEnabled(false)
|
| {
|
| ASSERT(m_hostId > 0);
|
| ClientMessageLoopAdapter::ensureClientMessageLoopCreated(m_client);
|
| @@ -440,23 +280,10 @@ void WebDevToolsAgentImpl::didCreateScriptContext(WebFrameImpl* webframe, int wo
|
| frame->script()->setContextDebugId(m_hostId);
|
| }
|
|
|
| -void WebDevToolsAgentImpl::mainFrameViewCreated(WebFrameImpl* webFrame)
|
| -{
|
| - if (m_metricsSupport)
|
| - m_metricsSupport->applySizeOverrideIfNecessary();
|
| -}
|
| -
|
| -bool WebDevToolsAgentImpl::metricsOverridden()
|
| -{
|
| - return !!m_metricsSupport;
|
| -}
|
| -
|
| void WebDevToolsAgentImpl::webViewResized(const WebSize& size)
|
| {
|
| - if (m_metricsSupport)
|
| - m_metricsSupport->webViewResized();
|
| if (InspectorController* ic = inspectorController())
|
| - ic->webViewResized(m_metricsSupport ? IntSize(size.width, size.height) : IntSize());
|
| + ic->webViewResized(IntSize());
|
| }
|
|
|
| bool WebDevToolsAgentImpl::handleInputEvent(WebCore::Page* page, const WebInputEvent& inputEvent)
|
| @@ -488,29 +315,21 @@ bool WebDevToolsAgentImpl::handleInputEvent(WebCore::Page* page, const WebInputE
|
| void WebDevToolsAgentImpl::overrideDeviceMetrics(int width, int height, float fontScaleFactor, bool fitWindow)
|
| {
|
| if (!width && !height) {
|
| - if (m_metricsSupport)
|
| - m_metricsSupport.clear();
|
| - if (InspectorController* ic = inspectorController())
|
| - ic->webViewResized(IntSize());
|
| - return;
|
| - }
|
| -
|
| - if (!m_metricsSupport)
|
| - m_metricsSupport = adoptPtr(new DeviceMetricsSupport(m_webViewImpl));
|
| -
|
| - m_metricsSupport->setDeviceMetrics(width, height, fontScaleFactor, fitWindow);
|
| - if (InspectorController* ic = inspectorController()) {
|
| - WebSize size = m_webViewImpl->size();
|
| - ic->webViewResized(IntSize(size.width, size.height));
|
| + if (m_deviceMetricsEnabled) {
|
| + RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(m_isOverlayScrollbarsEnabled);
|
| + m_client->disableDeviceEmulation();
|
| + }
|
| + m_deviceMetricsEnabled = false;
|
| + } else {
|
| + if (!m_deviceMetricsEnabled) {
|
| + m_isOverlayScrollbarsEnabled = RuntimeEnabledFeatures::overlayScrollbarsEnabled();
|
| + RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(true);
|
| + }
|
| + m_client->enableDeviceEmulation(IntSize(width, height), IntRect(0, 0, width, height), 2, fitWindow);
|
| + m_deviceMetricsEnabled = true;
|
| }
|
| }
|
|
|
| -void WebDevToolsAgentImpl::autoZoomPageToFitWidth()
|
| -{
|
| - if (m_metricsSupport)
|
| - m_metricsSupport->autoZoomPageToFitWidthOnNavigation(m_webViewImpl->mainFrameImpl()->frame());
|
| -}
|
| -
|
| void WebDevToolsAgentImpl::getAllocatedObjects(HashSet<const void*>& set)
|
| {
|
| class CountingVisitor : public WebDevToolsAgentClient::AllocatedObjectVisitor {
|
|
|