| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 #include "bindings/core/v8/V8InspectorOverlayHost.h" | 33 #include "bindings/core/v8/V8InspectorOverlayHost.h" |
| 34 #include "core/dom/Node.h" | 34 #include "core/dom/Node.h" |
| 35 #include "core/frame/FrameHost.h" | 35 #include "core/frame/FrameHost.h" |
| 36 #include "core/frame/FrameView.h" | 36 #include "core/frame/FrameView.h" |
| 37 #include "core/frame/LocalFrame.h" | 37 #include "core/frame/LocalFrame.h" |
| 38 #include "core/frame/Settings.h" | 38 #include "core/frame/Settings.h" |
| 39 #include "core/input/EventHandler.h" | 39 #include "core/input/EventHandler.h" |
| 40 #include "core/inspector/InspectorDebuggerAgent.h" | 40 #include "core/inspector/InspectorDebuggerAgent.h" |
| 41 #include "core/inspector/InspectorOverlayHost.h" | 41 #include "core/inspector/InspectorOverlayHost.h" |
| 42 #include "core/inspector/LayoutEditor.h" | 42 #include "core/inspector/LayoutEditor.h" |
| 43 #include "core/layout/LayoutView.h" |
| 43 #include "core/loader/EmptyClients.h" | 44 #include "core/loader/EmptyClients.h" |
| 44 #include "core/loader/FrameLoadRequest.h" | 45 #include "core/loader/FrameLoadRequest.h" |
| 45 #include "core/page/ChromeClient.h" | 46 #include "core/page/ChromeClient.h" |
| 46 #include "core/page/Page.h" | 47 #include "core/page/Page.h" |
| 47 #include "platform/JSONValues.h" | 48 #include "platform/JSONValues.h" |
| 48 #include "platform/ScriptForbiddenScope.h" | 49 #include "platform/ScriptForbiddenScope.h" |
| 49 #include "platform/graphics/GraphicsContext.h" | 50 #include "platform/graphics/GraphicsContext.h" |
| 50 #include "public/platform/Platform.h" | 51 #include "public/platform/Platform.h" |
| 51 #include "public/platform/WebData.h" | 52 #include "public/platform/WebData.h" |
| 52 #include "web/PageOverlay.h" | 53 #include "web/PageOverlay.h" |
| 53 #include "web/WebGraphicsContextImpl.h" | 54 #include "web/WebGraphicsContextImpl.h" |
| 54 #include "web/WebInputEventConversion.h" | 55 #include "web/WebInputEventConversion.h" |
| 55 #include "web/WebLocalFrameImpl.h" | 56 #include "web/WebLocalFrameImpl.h" |
| 56 #include "web/WebViewImpl.h" | 57 #include "web/WebViewImpl.h" |
| 57 #include <v8.h> | 58 #include <v8.h> |
| 58 | 59 |
| 59 namespace blink { | 60 namespace blink { |
| 60 | 61 |
| 62 namespace { |
| 63 |
| 64 Node* hoveredNodeForPoint(LocalFrame* frame, const IntPoint& pointInRootFrame, b
ool ignorePointerEventsNone) |
| 65 { |
| 66 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move | HitTestR
equest::ReadOnly | HitTestRequest::AllowChildFrameContent; |
| 67 if (ignorePointerEventsNone) |
| 68 hitType |= HitTestRequest::IgnorePointerEventsNone; |
| 69 HitTestRequest request(hitType); |
| 70 HitTestResult result(request, frame->view()->rootFrameToContents(pointInRoot
Frame)); |
| 71 frame->contentLayoutObject()->hitTest(result); |
| 72 Node* node = result.innerPossiblyPseudoNode(); |
| 73 while (node && node->nodeType() == Node::TEXT_NODE) |
| 74 node = node->parentNode(); |
| 75 return node; |
| 76 } |
| 77 |
| 78 Node* hoveredNodeForEvent(LocalFrame* frame, const PlatformGestureEvent& event,
bool ignorePointerEventsNone) |
| 79 { |
| 80 return hoveredNodeForPoint(frame, event.position(), ignorePointerEventsNone)
; |
| 81 } |
| 82 |
| 83 Node* hoveredNodeForEvent(LocalFrame* frame, const PlatformMouseEvent& event, bo
ol ignorePointerEventsNone) |
| 84 { |
| 85 return hoveredNodeForPoint(frame, event.position(), ignorePointerEventsNone)
; |
| 86 } |
| 87 |
| 88 Node* hoveredNodeForEvent(LocalFrame* frame, const PlatformTouchEvent& event, bo
ol ignorePointerEventsNone) |
| 89 { |
| 90 const Vector<PlatformTouchPoint>& points = event.touchPoints(); |
| 91 if (!points.size()) |
| 92 return nullptr; |
| 93 return hoveredNodeForPoint(frame, roundedIntPoint(points[0].pos()), ignorePo
interEventsNone); |
| 94 } |
| 95 } // namespace |
| 96 |
| 61 class InspectorOverlayImpl::InspectorPageOverlayDelegate final : public PageOver
lay::Delegate { | 97 class InspectorOverlayImpl::InspectorPageOverlayDelegate final : public PageOver
lay::Delegate { |
| 62 public: | 98 public: |
| 63 explicit InspectorPageOverlayDelegate(InspectorOverlayImpl& overlay) | 99 explicit InspectorPageOverlayDelegate(InspectorOverlayImpl& overlay) |
| 64 : m_overlay(&overlay) | 100 : m_overlay(&overlay) |
| 65 { } | 101 { } |
| 66 | 102 |
| 67 DEFINE_INLINE_VIRTUAL_TRACE() | 103 DEFINE_INLINE_VIRTUAL_TRACE() |
| 68 { | 104 { |
| 69 visitor->trace(m_overlay); | 105 visitor->trace(m_overlay); |
| 70 PageOverlay::Delegate::trace(visitor); | 106 PageOverlay::Delegate::trace(visitor); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 , m_overlay(&overlay) | 165 , m_overlay(&overlay) |
| 130 { } | 166 { } |
| 131 | 167 |
| 132 RawPtrWillBeMember<ChromeClient> m_client; | 168 RawPtrWillBeMember<ChromeClient> m_client; |
| 133 RawPtrWillBeMember<InspectorOverlayImpl> m_overlay; | 169 RawPtrWillBeMember<InspectorOverlayImpl> m_overlay; |
| 134 }; | 170 }; |
| 135 | 171 |
| 136 | 172 |
| 137 InspectorOverlayImpl::InspectorOverlayImpl(WebViewImpl* webViewImpl) | 173 InspectorOverlayImpl::InspectorOverlayImpl(WebViewImpl* webViewImpl) |
| 138 : m_webViewImpl(webViewImpl) | 174 : m_webViewImpl(webViewImpl) |
| 139 , m_inspectModeEnabled(false) | |
| 140 , m_overlayHost(InspectorOverlayHost::create()) | 175 , m_overlayHost(InspectorOverlayHost::create()) |
| 141 , m_drawViewSize(false) | 176 , m_drawViewSize(false) |
| 142 , m_drawViewSizeWithGrid(false) | 177 , m_drawViewSizeWithGrid(false) |
| 143 , m_resizeTimerActive(false) | 178 , m_resizeTimerActive(false) |
| 144 , m_omitTooltip(false) | 179 , m_omitTooltip(false) |
| 145 , m_timer(this, &InspectorOverlayImpl::onTimer) | 180 , m_timer(this, &InspectorOverlayImpl::onTimer) |
| 146 , m_suspendCount(0) | 181 , m_suspendCount(0) |
| 147 , m_inLayout(false) | 182 , m_inLayout(false) |
| 148 , m_needsUpdate(false) | 183 , m_needsUpdate(false) |
| 184 , m_inspectMode(InspectorDOMAgent::NotSearching) |
| 149 { | 185 { |
| 150 } | 186 } |
| 151 | 187 |
| 152 InspectorOverlayImpl::~InspectorOverlayImpl() | 188 InspectorOverlayImpl::~InspectorOverlayImpl() |
| 153 { | 189 { |
| 154 ASSERT(!m_overlayPage); | 190 ASSERT(!m_overlayPage); |
| 155 } | 191 } |
| 156 | 192 |
| 157 DEFINE_TRACE(InspectorOverlayImpl) | 193 DEFINE_TRACE(InspectorOverlayImpl) |
| 158 { | 194 { |
| 159 visitor->trace(m_highlightNode); | 195 visitor->trace(m_highlightNode); |
| 160 visitor->trace(m_eventTargetNode); | 196 visitor->trace(m_eventTargetNode); |
| 161 visitor->trace(m_overlayPage); | 197 visitor->trace(m_overlayPage); |
| 162 visitor->trace(m_overlayChromeClient); | 198 visitor->trace(m_overlayChromeClient); |
| 163 visitor->trace(m_overlayHost); | 199 visitor->trace(m_overlayHost); |
| 164 visitor->trace(m_debuggerAgent); | 200 visitor->trace(m_debuggerAgent); |
| 201 visitor->trace(m_domAgent); |
| 165 visitor->trace(m_layoutEditor); | 202 visitor->trace(m_layoutEditor); |
| 203 visitor->trace(m_hoveredNodeForInspectMode); |
| 166 } | 204 } |
| 167 | 205 |
| 168 void InspectorOverlayImpl::init(InspectorCSSAgent* cssAgent, InspectorDebuggerAg
ent* debuggerAgent) | 206 void InspectorOverlayImpl::init(InspectorCSSAgent* cssAgent, InspectorDebuggerAg
ent* debuggerAgent, InspectorDOMAgent* domAgent) |
| 169 { | 207 { |
| 170 m_layoutEditor = LayoutEditor::create(cssAgent); | 208 m_layoutEditor = LayoutEditor::create(cssAgent); |
| 171 m_debuggerAgent = debuggerAgent; | 209 m_debuggerAgent = debuggerAgent; |
| 210 m_domAgent = domAgent; |
| 172 m_overlayHost->setListener(this); | 211 m_overlayHost->setListener(this); |
| 173 } | 212 } |
| 174 | 213 |
| 175 void InspectorOverlayImpl::invalidate() | 214 void InspectorOverlayImpl::invalidate() |
| 176 { | 215 { |
| 177 if (!m_pageOverlay) | 216 if (!m_pageOverlay) |
| 178 m_pageOverlay = PageOverlay::create(m_webViewImpl, new InspectorPageOver
layDelegate(*this)); | 217 m_pageOverlay = PageOverlay::create(m_webViewImpl, new InspectorPageOver
layDelegate(*this)); |
| 179 | 218 |
| 180 m_pageOverlay->update(); | 219 m_pageOverlay->update(); |
| 181 } | 220 } |
| 182 | 221 |
| 183 void InspectorOverlayImpl::layout() | 222 void InspectorOverlayImpl::layout() |
| 184 { | 223 { |
| 185 if (isEmpty()) | 224 if (isEmpty()) |
| 186 return; | 225 return; |
| 187 | 226 |
| 188 TemporaryChange<bool> scoped(m_inLayout, true); | 227 TemporaryChange<bool> scoped(m_inLayout, true); |
| 189 if (m_needsUpdate) { | 228 if (m_needsUpdate) { |
| 190 m_needsUpdate = false; | 229 m_needsUpdate = false; |
| 191 rebuildOverlayPage(); | 230 rebuildOverlayPage(); |
| 192 } | 231 } |
| 193 overlayMainFrame()->view()->updateAllLifecyclePhases(); | 232 overlayMainFrame()->view()->updateAllLifecyclePhases(); |
| 194 } | 233 } |
| 195 | 234 |
| 196 bool InspectorOverlayImpl::handleInputEvent(const WebInputEvent& inputEvent) | 235 bool InspectorOverlayImpl::handleInputEvent(const WebInputEvent& inputEvent) |
| 197 { | 236 { |
| 198 bool handled = false; | 237 bool handled = false; |
| 238 |
| 199 if (isEmpty()) | 239 if (isEmpty()) |
| 200 return handled; | 240 return false; |
| 201 | 241 |
| 202 if (WebInputEvent::isGestureEventType(inputEvent.type) && inputEvent.type ==
WebInputEvent::GestureTap) { | 242 if (WebInputEvent::isGestureEventType(inputEvent.type) && inputEvent.type ==
WebInputEvent::GestureTap) { |
| 203 // Only let GestureTab in (we only need it and we know PlatformGestureEv
entBuilder supports it). | 243 // Only let GestureTab in (we only need it and we know PlatformGestureEv
entBuilder supports it). |
| 204 PlatformGestureEvent gestureEvent = PlatformGestureEventBuilder(m_webVie
wImpl->mainFrameImpl()->frameView(), static_cast<const WebGestureEvent&>(inputEv
ent)); | 244 PlatformGestureEvent gestureEvent = PlatformGestureEventBuilder(m_webVie
wImpl->mainFrameImpl()->frameView(), static_cast<const WebGestureEvent&>(inputEv
ent)); |
| 245 handled = handleGestureEvent(gestureEvent); |
| 246 if (handled) |
| 247 return true; |
| 248 |
| 205 overlayMainFrame()->eventHandler().handleGestureEvent(gestureEvent); | 249 overlayMainFrame()->eventHandler().handleGestureEvent(gestureEvent); |
| 206 } | 250 } |
| 207 if (WebInputEvent::isMouseEventType(inputEvent.type) && inputEvent.type != W
ebInputEvent::MouseEnter) { | 251 if (WebInputEvent::isMouseEventType(inputEvent.type) && inputEvent.type != W
ebInputEvent::MouseEnter) { |
| 208 // PlatformMouseEventBuilder does not work with MouseEnter type, so we f
ilter it out manually. | 252 // PlatformMouseEventBuilder does not work with MouseEnter type, so we f
ilter it out manually. |
| 209 PlatformMouseEvent mouseEvent = PlatformMouseEventBuilder(m_webViewImpl-
>mainFrameImpl()->frameView(), static_cast<const WebMouseEvent&>(inputEvent)); | 253 PlatformMouseEvent mouseEvent = PlatformMouseEventBuilder(m_webViewImpl-
>mainFrameImpl()->frameView(), static_cast<const WebMouseEvent&>(inputEvent)); |
| 254 |
| 255 if (mouseEvent.type() == PlatformEvent::MouseMoved) |
| 256 handled = handleMouseMove(mouseEvent); |
| 257 else if (mouseEvent.type() == PlatformEvent::MousePressed) |
| 258 handled = handleMousePress(); |
| 259 |
| 260 if (handled) |
| 261 return true; |
| 262 |
| 210 if (mouseEvent.type() == PlatformEvent::MouseMoved) | 263 if (mouseEvent.type() == PlatformEvent::MouseMoved) |
| 211 handled = overlayMainFrame()->eventHandler().handleMouseMoveEvent(mo
useEvent); | 264 handled = overlayMainFrame()->eventHandler().handleMouseMoveEvent(mo
useEvent); |
| 212 if (mouseEvent.type() == PlatformEvent::MousePressed) | 265 if (mouseEvent.type() == PlatformEvent::MousePressed) |
| 213 handled = overlayMainFrame()->eventHandler().handleMousePressEvent(m
ouseEvent); | 266 handled = overlayMainFrame()->eventHandler().handleMousePressEvent(m
ouseEvent); |
| 214 if (mouseEvent.type() == PlatformEvent::MouseReleased) | 267 if (mouseEvent.type() == PlatformEvent::MouseReleased) |
| 215 handled = overlayMainFrame()->eventHandler().handleMouseReleaseEvent
(mouseEvent); | 268 handled = overlayMainFrame()->eventHandler().handleMouseReleaseEvent
(mouseEvent); |
| 216 } | 269 } |
| 270 |
| 217 if (WebInputEvent::isTouchEventType(inputEvent.type)) { | 271 if (WebInputEvent::isTouchEventType(inputEvent.type)) { |
| 218 PlatformTouchEvent touchEvent = PlatformTouchEventBuilder(m_webViewImpl-
>mainFrameImpl()->frameView(), static_cast<const WebTouchEvent&>(inputEvent)); | 272 PlatformTouchEvent touchEvent = PlatformTouchEventBuilder(m_webViewImpl-
>mainFrameImpl()->frameView(), static_cast<const WebTouchEvent&>(inputEvent)); |
| 273 handled = handleTouchEvent(touchEvent); |
| 274 if (handled) |
| 275 return true; |
| 219 overlayMainFrame()->eventHandler().handleTouchEvent(touchEvent); | 276 overlayMainFrame()->eventHandler().handleTouchEvent(touchEvent); |
| 220 } | 277 } |
| 221 if (WebInputEvent::isKeyboardEventType(inputEvent.type)) { | 278 if (WebInputEvent::isKeyboardEventType(inputEvent.type)) { |
| 222 PlatformKeyboardEvent keyboardEvent = PlatformKeyboardEventBuilder(stati
c_cast<const WebKeyboardEvent&>(inputEvent)); | 279 PlatformKeyboardEvent keyboardEvent = PlatformKeyboardEventBuilder(stati
c_cast<const WebKeyboardEvent&>(inputEvent)); |
| 223 overlayMainFrame()->eventHandler().keyEvent(keyboardEvent); | 280 overlayMainFrame()->eventHandler().keyEvent(keyboardEvent); |
| 224 } | 281 } |
| 225 | 282 |
| 226 return handled; | 283 return handled; |
| 227 } | 284 } |
| 228 | 285 |
| 229 void InspectorOverlayImpl::setPausedInDebuggerMessage(const String* message) | 286 void InspectorOverlayImpl::setPausedInDebuggerMessage(const String* message) |
| 230 { | 287 { |
| 231 m_pausedInDebuggerMessage = message ? *message : String(); | 288 m_pausedInDebuggerMessage = message ? *message : String(); |
| 232 update(); | 289 update(); |
| 233 } | 290 } |
| 234 | 291 |
| 235 void InspectorOverlayImpl::setInspectModeEnabled(bool enabled) | |
| 236 { | |
| 237 m_inspectModeEnabled = enabled; | |
| 238 update(); | |
| 239 } | |
| 240 | |
| 241 void InspectorOverlayImpl::hideHighlight() | 292 void InspectorOverlayImpl::hideHighlight() |
| 242 { | 293 { |
| 243 if (m_layoutEditor) | 294 if (m_layoutEditor) |
| 244 m_layoutEditor->setNode(nullptr); | 295 m_layoutEditor->setNode(nullptr); |
| 245 m_highlightNode.clear(); | 296 m_highlightNode.clear(); |
| 246 m_eventTargetNode.clear(); | 297 m_eventTargetNode.clear(); |
| 247 m_highlightQuad.clear(); | 298 m_highlightQuad.clear(); |
| 248 update(); | 299 update(); |
| 249 } | 300 } |
| 250 | 301 |
| 302 void InspectorOverlayImpl::highlightNode(Node* node, const InspectorHighlightCon
fig& highlightConfig, bool omitTooltip) |
| 303 { |
| 304 highlightNode(node, nullptr, highlightConfig, omitTooltip); |
| 305 } |
| 306 |
| 251 void InspectorOverlayImpl::highlightNode(Node* node, Node* eventTarget, const In
spectorHighlightConfig& highlightConfig, bool omitTooltip) | 307 void InspectorOverlayImpl::highlightNode(Node* node, Node* eventTarget, const In
spectorHighlightConfig& highlightConfig, bool omitTooltip) |
| 252 { | 308 { |
| 253 m_nodeHighlightConfig = highlightConfig; | 309 m_nodeHighlightConfig = highlightConfig; |
| 254 m_highlightNode = node; | 310 m_highlightNode = node; |
| 255 if (m_layoutEditor && highlightConfig.showLayoutEditor) | 311 if (m_layoutEditor && highlightConfig.showLayoutEditor) |
| 256 m_layoutEditor->setNode(node); | 312 m_layoutEditor->setNode(node); |
| 257 m_eventTargetNode = eventTarget; | 313 m_eventTargetNode = eventTarget; |
| 258 m_omitTooltip = omitTooltip; | 314 m_omitTooltip = omitTooltip; |
| 259 update(); | 315 update(); |
| 260 } | 316 } |
| 261 | 317 |
| 318 void InspectorOverlayImpl::setInspectMode(InspectorDOMAgent::SearchMode searchMo
de, PassOwnPtr<InspectorHighlightConfig> highlightConfig) |
| 319 { |
| 320 m_inspectMode = searchMode; |
| 321 update(); |
| 322 |
| 323 if (searchMode != InspectorDOMAgent::NotSearching) { |
| 324 m_inspectModeHighlightConfig = highlightConfig; |
| 325 } else { |
| 326 m_hoveredNodeForInspectMode.clear(); |
| 327 hideHighlight(); |
| 328 } |
| 329 } |
| 330 |
| 262 void InspectorOverlayImpl::highlightQuad(PassOwnPtr<FloatQuad> quad, const Inspe
ctorHighlightConfig& highlightConfig) | 331 void InspectorOverlayImpl::highlightQuad(PassOwnPtr<FloatQuad> quad, const Inspe
ctorHighlightConfig& highlightConfig) |
| 263 { | 332 { |
| 264 m_quadHighlightConfig = highlightConfig; | 333 m_quadHighlightConfig = highlightConfig; |
| 265 m_highlightQuad = quad; | 334 m_highlightQuad = quad; |
| 266 m_omitTooltip = false; | 335 m_omitTooltip = false; |
| 267 update(); | 336 update(); |
| 268 } | 337 } |
| 269 | 338 |
| 270 bool InspectorOverlayImpl::isEmpty() | 339 bool InspectorOverlayImpl::isEmpty() |
| 271 { | 340 { |
| 272 if (m_suspendCount) | 341 if (m_suspendCount) |
| 273 return true; | 342 return true; |
| 274 bool hasAlwaysVisibleElements = m_highlightNode || m_eventTargetNode || m_hi
ghlightQuad || (m_resizeTimerActive && m_drawViewSize); | 343 bool hasVisibleElements = m_highlightNode || m_eventTargetNode || m_highligh
tQuad || (m_resizeTimerActive && m_drawViewSize) || !m_pausedInDebuggerMessage.
isNull(); |
| 275 bool hasInvisibleInInspectModeElements = !m_pausedInDebuggerMessage.isNull()
; | 344 return !hasVisibleElements && m_inspectMode == InspectorDOMAgent::NotSearchi
ng; |
| 276 return !(hasAlwaysVisibleElements || (hasInvisibleInInspectModeElements && !
m_inspectModeEnabled)); | |
| 277 } | 345 } |
| 278 | 346 |
| 279 void InspectorOverlayImpl::update() | 347 void InspectorOverlayImpl::update() |
| 280 { | 348 { |
| 281 if (isEmpty()) { | 349 if (isEmpty()) { |
| 282 if (m_pageOverlay) | 350 if (m_pageOverlay) |
| 283 m_pageOverlay.clear(); | 351 m_pageOverlay.clear(); |
| 284 return; | 352 return; |
| 285 } | 353 } |
| 286 m_needsUpdate = true; | 354 m_needsUpdate = true; |
| 287 m_webViewImpl->page()->chromeClient().scheduleAnimation(); | 355 m_webViewImpl->page()->chromeClient().scheduleAnimation(); |
| 288 } | 356 } |
| 289 | 357 |
| 290 void InspectorOverlayImpl::rebuildOverlayPage() | 358 void InspectorOverlayImpl::rebuildOverlayPage() |
| 291 { | 359 { |
| 292 FrameView* view = m_webViewImpl->mainFrameImpl()->frameView(); | 360 FrameView* view = m_webViewImpl->mainFrameImpl()->frameView(); |
| 293 if (!view) | 361 if (!view) |
| 294 return; | 362 return; |
| 295 | 363 |
| 296 IntRect visibleRectInDocument = view->scrollableArea()->visibleContentRect()
; | 364 IntRect visibleRectInDocument = view->scrollableArea()->visibleContentRect()
; |
| 297 IntSize viewportSize = m_webViewImpl->page()->frameHost().visualViewport().s
ize(); | 365 IntSize viewportSize = m_webViewImpl->page()->frameHost().visualViewport().s
ize(); |
| 298 toLocalFrame(overlayPage()->mainFrame())->view()->resize(viewportSize); | 366 toLocalFrame(overlayPage()->mainFrame())->view()->resize(viewportSize); |
| 299 reset(viewportSize, visibleRectInDocument.location()); | 367 reset(viewportSize, visibleRectInDocument.location()); |
| 300 | 368 |
| 301 drawNodeHighlight(); | 369 drawNodeHighlight(); |
| 302 drawQuadHighlight(); | 370 drawQuadHighlight(); |
| 303 if (!m_inspectModeEnabled) | 371 drawPausedInDebuggerMessage(); |
| 304 drawPausedInDebuggerMessage(); | |
| 305 drawViewSize(); | 372 drawViewSize(); |
| 306 } | 373 } |
| 307 | 374 |
| 308 static PassRefPtr<JSONObject> buildObjectForSize(const IntSize& size) | 375 static PassRefPtr<JSONObject> buildObjectForSize(const IntSize& size) |
| 309 { | 376 { |
| 310 RefPtr<JSONObject> result = JSONObject::create(); | 377 RefPtr<JSONObject> result = JSONObject::create(); |
| 311 result->setNumber("width", size.width()); | 378 result->setNumber("width", size.width()); |
| 312 result->setNumber("height", size.height()); | 379 result->setNumber("height", size.height()); |
| 313 return result.release(); | 380 return result.release(); |
| 314 } | 381 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 337 if (!m_highlightQuad) | 404 if (!m_highlightQuad) |
| 338 return; | 405 return; |
| 339 | 406 |
| 340 InspectorHighlight highlight; | 407 InspectorHighlight highlight; |
| 341 highlight.appendQuad(*m_highlightQuad, m_quadHighlightConfig.content, m_quad
HighlightConfig.contentOutline); | 408 highlight.appendQuad(*m_highlightQuad, m_quadHighlightConfig.content, m_quad
HighlightConfig.contentOutline); |
| 342 evaluateInOverlay("drawHighlight", highlight.asJSONObject()); | 409 evaluateInOverlay("drawHighlight", highlight.asJSONObject()); |
| 343 } | 410 } |
| 344 | 411 |
| 345 void InspectorOverlayImpl::drawPausedInDebuggerMessage() | 412 void InspectorOverlayImpl::drawPausedInDebuggerMessage() |
| 346 { | 413 { |
| 347 if (!m_pausedInDebuggerMessage.isNull()) | 414 if (m_inspectMode == InspectorDOMAgent::NotSearching && !m_pausedInDebuggerM
essage.isNull()) |
| 348 evaluateInOverlay("drawPausedInDebuggerMessage", m_pausedInDebuggerMessa
ge); | 415 evaluateInOverlay("drawPausedInDebuggerMessage", m_pausedInDebuggerMessa
ge); |
| 349 } | 416 } |
| 350 | 417 |
| 351 void InspectorOverlayImpl::drawViewSize() | 418 void InspectorOverlayImpl::drawViewSize() |
| 352 { | 419 { |
| 353 if (m_resizeTimerActive && m_drawViewSize) | 420 if (m_resizeTimerActive && m_drawViewSize) |
| 354 evaluateInOverlay("drawViewSize", m_drawViewSizeWithGrid ? "true" : "fal
se"); | 421 evaluateInOverlay("drawViewSize", m_drawViewSizeWithGrid ? "true" : "fal
se"); |
| 355 } | 422 } |
| 356 | 423 |
| 357 Page* InspectorOverlayImpl::overlayPage() | 424 Page* InspectorOverlayImpl::overlayPage() |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 | 527 |
| 461 void InspectorOverlayImpl::clear() | 528 void InspectorOverlayImpl::clear() |
| 462 { | 529 { |
| 463 if (m_overlayPage) { | 530 if (m_overlayPage) { |
| 464 m_overlayPage->willBeDestroyed(); | 531 m_overlayPage->willBeDestroyed(); |
| 465 m_overlayPage.clear(); | 532 m_overlayPage.clear(); |
| 466 m_overlayChromeClient.clear(); | 533 m_overlayChromeClient.clear(); |
| 467 } | 534 } |
| 468 m_resizeTimerActive = false; | 535 m_resizeTimerActive = false; |
| 469 m_pausedInDebuggerMessage = String(); | 536 m_pausedInDebuggerMessage = String(); |
| 470 m_inspectModeEnabled = false; | 537 m_inspectMode = InspectorDOMAgent::NotSearching; |
| 471 m_timer.stop(); | 538 m_timer.stop(); |
| 472 hideHighlight(); | 539 hideHighlight(); |
| 473 } | 540 } |
| 474 | 541 |
| 475 void InspectorOverlayImpl::overlayResumed() | 542 void InspectorOverlayImpl::overlayResumed() |
| 476 { | 543 { |
| 477 if (m_debuggerAgent) { | 544 if (m_debuggerAgent) { |
| 478 ErrorString error; | 545 ErrorString error; |
| 479 m_debuggerAgent->resume(&error); | 546 m_debuggerAgent->resume(&error); |
| 480 } | 547 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 } | 589 } |
| 523 update(); | 590 update(); |
| 524 } | 591 } |
| 525 | 592 |
| 526 void InspectorOverlayImpl::setShowViewportSizeOnResize(bool show, bool showGrid) | 593 void InspectorOverlayImpl::setShowViewportSizeOnResize(bool show, bool showGrid) |
| 527 { | 594 { |
| 528 m_drawViewSize = show; | 595 m_drawViewSize = show; |
| 529 m_drawViewSizeWithGrid = showGrid; | 596 m_drawViewSizeWithGrid = showGrid; |
| 530 } | 597 } |
| 531 | 598 |
| 599 bool InspectorOverlayImpl::handleMouseMove(const PlatformMouseEvent& event) |
| 600 { |
| 601 if (m_inspectMode == InspectorDOMAgent::NotSearching) |
| 602 return false; |
| 603 |
| 604 LocalFrame* frame = m_webViewImpl->mainFrameImpl()->frame(); |
| 605 if (!frame->view() || !frame->contentLayoutObject()) |
| 606 return false; |
| 607 Node* node = hoveredNodeForEvent(frame, event, event.shiftKey()); |
| 608 |
| 609 // Do not highlight within user agent shadow root unless requested. |
| 610 if (m_inspectMode != InspectorDOMAgent::SearchingForUAShadow) { |
| 611 ShadowRoot* shadowRoot = InspectorDOMAgent::userAgentShadowRoot(node); |
| 612 if (shadowRoot) |
| 613 node = shadowRoot->host(); |
| 614 } |
| 615 |
| 616 // Shadow roots don't have boxes - use host element instead. |
| 617 if (node && node->isShadowRoot()) |
| 618 node = node->parentOrShadowHostNode(); |
| 619 |
| 620 if (!node) |
| 621 return true; |
| 622 |
| 623 Node* eventTarget = event.shiftKey() ? hoveredNodeForEvent(m_webViewImpl->ma
inFrameImpl()->frame(), event, false) : nullptr; |
| 624 if (eventTarget == node) |
| 625 eventTarget = nullptr; |
| 626 |
| 627 if (node && m_inspectModeHighlightConfig) { |
| 628 m_hoveredNodeForInspectMode = node; |
| 629 highlightNode(node, eventTarget, *m_inspectModeHighlightConfig, event.ct
rlKey() || event.metaKey()); |
| 630 } |
| 631 return true; |
| 632 } |
| 633 |
| 634 bool InspectorOverlayImpl::handleMousePress() |
| 635 { |
| 636 if (m_inspectMode == InspectorDOMAgent::NotSearching) |
| 637 return false; |
| 638 |
| 639 if (m_hoveredNodeForInspectMode) { |
| 640 if (m_domAgent) |
| 641 m_domAgent->inspect(m_hoveredNodeForInspectMode.get()); |
| 642 m_hoveredNodeForInspectMode.clear(); |
| 643 return true; |
| 644 } |
| 645 return false; |
| 646 } |
| 647 |
| 648 bool InspectorOverlayImpl::handleGestureEvent(const PlatformGestureEvent& event) |
| 649 { |
| 650 if (m_inspectMode == InspectorDOMAgent::NotSearching || event.type() != Plat
formEvent::GestureTap) |
| 651 return false; |
| 652 Node* node = hoveredNodeForEvent(m_webViewImpl->mainFrameImpl()->frame(), ev
ent, false); |
| 653 if (node && m_inspectModeHighlightConfig) { |
| 654 highlightNode(node, *m_inspectModeHighlightConfig, false); |
| 655 if (m_domAgent) |
| 656 m_domAgent->inspect(node); |
| 657 return true; |
| 658 } |
| 659 return false; |
| 660 } |
| 661 |
| 662 bool InspectorOverlayImpl::handleTouchEvent(const PlatformTouchEvent& event) |
| 663 { |
| 664 if (m_inspectMode == InspectorDOMAgent::NotSearching) |
| 665 return false; |
| 666 Node* node = hoveredNodeForEvent(m_webViewImpl->mainFrameImpl()->frame(), ev
ent, false); |
| 667 if (node && m_inspectModeHighlightConfig) { |
| 668 highlightNode(node, *m_inspectModeHighlightConfig, false); |
| 669 if (m_domAgent) |
| 670 m_domAgent->inspect(node); |
| 671 return true; |
| 672 } |
| 673 return false; |
| 674 } |
| 675 |
| 532 } // namespace blink | 676 } // namespace blink |
| OLD | NEW |