Index: third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp |
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp |
index 0e9e59125c415510332b050f0fc3e2f23be002ac..b2cf4e9ef9bfbce2244c7d4a97079f34cdfc9190 100644 |
--- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp |
+++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp |
@@ -44,8 +44,10 @@ |
#include "core/fetch/ResourceFetcher.h" |
#include "core/fetch/ScriptResource.h" |
#include "core/frame/FrameHost.h" |
+#include "core/frame/FrameView.h" |
#include "core/frame/LocalFrame.h" |
#include "core/frame/Settings.h" |
+#include "core/frame/VisualViewport.h" |
#include "core/html/HTMLFrameOwnerElement.h" |
#include "core/html/VoidCallback.h" |
#include "core/html/imports/HTMLImportLoader.h" |
@@ -858,6 +860,43 @@ void InspectorPageAgent::setBlockedEventsWarningThreshold(ErrorString*, |
host->settings().setBlockedMainThreadEventsWarningThreshold(threshold); |
} |
+void InspectorPageAgent::getLayoutMetrics( |
+ ErrorString*, |
+ std::unique_ptr<protocol::Page::LayoutViewport>* outLayoutViewport, |
+ std::unique_ptr<protocol::Page::VisualViewport>* outVisualViewport) { |
+ LocalFrame* mainFrame = m_inspectedFrames->root(); |
+ VisualViewport& visualViewport = mainFrame->host()->visualViewport(); |
+ |
+ mainFrame->document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
+ |
+ IntRect visibleContents = mainFrame->view()->visibleContentRect(); |
+ *outLayoutViewport = protocol::Page::LayoutViewport::create() |
+ .setPageX(visibleContents.x()) |
+ .setPageY(visibleContents.y()) |
+ .setClientWidth(visibleContents.width()) |
+ .setClientHeight(visibleContents.height()) |
+ .build(); |
+ |
+ FrameView* frameView = mainFrame->view(); |
+ ScrollOffset pageOffset = frameView->getScrollableArea()->scrollOffset(); |
+ float pageZoom = mainFrame->pageZoomFactor(); |
+ FloatRect visibleRect = visualViewport.visibleRect(); |
+ float scale = visualViewport.scale(); |
+ float scrollbarWidth = frameView->verticalScrollbarWidth() / scale; |
+ float scrollbarHeight = frameView->horizontalScrollbarHeight() / scale; |
+ |
+ *outVisualViewport = |
+ protocol::Page::VisualViewport::create() |
+ .setOffsetX(adjustScrollForAbsoluteZoom(visibleRect.x(), pageZoom)) |
+ .setOffsetY(adjustScrollForAbsoluteZoom(visibleRect.y(), pageZoom)) |
+ .setPageX(adjustScrollForAbsoluteZoom(pageOffset.width(), pageZoom)) |
+ .setPageY(adjustScrollForAbsoluteZoom(pageOffset.height(), pageZoom)) |
+ .setClientWidth(visibleRect.width() - scrollbarWidth) |
+ .setClientHeight(visibleRect.height() - scrollbarHeight) |
+ .setScale(scale) |
+ .build(); |
+} |
+ |
DEFINE_TRACE(InspectorPageAgent) { |
visitor->trace(m_inspectedFrames); |
visitor->trace(m_inspectorResourceContentLoader); |