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" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
129 , m_overlay(&overlay) | 130 , m_overlay(&overlay) |
130 { } | 131 { } |
131 | 132 |
132 RawPtrWillBeMember<ChromeClient> m_client; | 133 RawPtrWillBeMember<ChromeClient> m_client; |
133 RawPtrWillBeMember<InspectorOverlayImpl> m_overlay; | 134 RawPtrWillBeMember<InspectorOverlayImpl> m_overlay; |
134 }; | 135 }; |
135 | 136 |
136 | 137 |
137 InspectorOverlayImpl::InspectorOverlayImpl(WebViewImpl* webViewImpl) | 138 InspectorOverlayImpl::InspectorOverlayImpl(WebViewImpl* webViewImpl) |
138 : m_webViewImpl(webViewImpl) | 139 : m_webViewImpl(webViewImpl) |
139 , m_inspectModeEnabled(false) | |
140 , m_overlayHost(InspectorOverlayHost::create()) | 140 , m_overlayHost(InspectorOverlayHost::create()) |
141 , m_drawViewSize(false) | 141 , m_drawViewSize(false) |
142 , m_drawViewSizeWithGrid(false) | 142 , m_drawViewSizeWithGrid(false) |
143 , m_resizeTimerActive(false) | 143 , m_resizeTimerActive(false) |
144 , m_omitTooltip(false) | 144 , m_omitTooltip(false) |
145 , m_timer(this, &InspectorOverlayImpl::onTimer) | 145 , m_timer(this, &InspectorOverlayImpl::onTimer) |
146 , m_suspendCount(0) | 146 , m_suspendCount(0) |
147 , m_inLayout(false) | 147 , m_inLayout(false) |
148 , m_needsUpdate(false) | 148 , m_needsUpdate(false) |
149 , m_searchingForNode(InspectorDOMAgent::NotSearching) | |
149 { | 150 { |
150 } | 151 } |
151 | 152 |
152 InspectorOverlayImpl::~InspectorOverlayImpl() | 153 InspectorOverlayImpl::~InspectorOverlayImpl() |
153 { | 154 { |
154 ASSERT(!m_overlayPage); | 155 ASSERT(!m_overlayPage); |
155 } | 156 } |
156 | 157 |
157 DEFINE_TRACE(InspectorOverlayImpl) | 158 DEFINE_TRACE(InspectorOverlayImpl) |
158 { | 159 { |
159 visitor->trace(m_highlightNode); | 160 visitor->trace(m_highlightNode); |
160 visitor->trace(m_eventTargetNode); | 161 visitor->trace(m_eventTargetNode); |
161 visitor->trace(m_overlayPage); | 162 visitor->trace(m_overlayPage); |
162 visitor->trace(m_overlayChromeClient); | 163 visitor->trace(m_overlayChromeClient); |
163 visitor->trace(m_overlayHost); | 164 visitor->trace(m_overlayHost); |
164 visitor->trace(m_debuggerAgent); | 165 visitor->trace(m_debuggerAgent); |
166 visitor->trace(m_domAgent); | |
165 visitor->trace(m_layoutEditor); | 167 visitor->trace(m_layoutEditor); |
168 visitor->trace(m_hoveredNodeForInspectMode); | |
166 } | 169 } |
167 | 170 |
168 void InspectorOverlayImpl::init(InspectorCSSAgent* cssAgent, InspectorDebuggerAg ent* debuggerAgent) | 171 void InspectorOverlayImpl::init(InspectorCSSAgent* cssAgent, InspectorDebuggerAg ent* debuggerAgent, InspectorDOMAgent* domAgent) |
169 { | 172 { |
170 m_layoutEditor = LayoutEditor::create(cssAgent); | 173 m_layoutEditor = LayoutEditor::create(cssAgent); |
171 m_debuggerAgent = debuggerAgent; | 174 m_debuggerAgent = debuggerAgent; |
175 m_domAgent = domAgent; | |
172 m_overlayHost->setListener(this); | 176 m_overlayHost->setListener(this); |
173 } | 177 } |
174 | 178 |
175 void InspectorOverlayImpl::invalidate() | 179 void InspectorOverlayImpl::invalidate() |
176 { | 180 { |
177 if (!m_pageOverlay) | 181 if (!m_pageOverlay) |
178 m_pageOverlay = PageOverlay::create(m_webViewImpl, new InspectorPageOver layDelegate(*this)); | 182 m_pageOverlay = PageOverlay::create(m_webViewImpl, new InspectorPageOver layDelegate(*this)); |
179 | 183 |
180 m_pageOverlay->update(); | 184 m_pageOverlay->update(); |
181 } | 185 } |
182 | 186 |
183 void InspectorOverlayImpl::layout() | 187 void InspectorOverlayImpl::layout() |
184 { | 188 { |
185 if (isEmpty()) | 189 if (isEmpty()) |
186 return; | 190 return; |
187 | 191 |
188 TemporaryChange<bool> scoped(m_inLayout, true); | 192 TemporaryChange<bool> scoped(m_inLayout, true); |
189 if (m_needsUpdate) { | 193 if (m_needsUpdate) { |
190 m_needsUpdate = false; | 194 m_needsUpdate = false; |
191 rebuildOverlayPage(); | 195 rebuildOverlayPage(); |
192 } | 196 } |
193 overlayMainFrame()->view()->updateAllLifecyclePhases(); | 197 overlayMainFrame()->view()->updateAllLifecyclePhases(); |
194 } | 198 } |
195 | 199 |
196 bool InspectorOverlayImpl::handleInputEvent(const WebInputEvent& inputEvent) | 200 bool InspectorOverlayImpl::handleInputEvent(const WebInputEvent& inputEvent) |
197 { | 201 { |
198 bool handled = false; | 202 bool handled = false; |
199 if (isEmpty()) | |
dgozman
2015/09/01 00:53:29
Please bring it back.
sergeyv
2015/09/01 03:41:20
Done. Had to change isEmpty method: now it is not
| |
200 return handled; | |
201 | 203 |
202 if (WebInputEvent::isGestureEventType(inputEvent.type) && inputEvent.type == WebInputEvent::GestureTap) { | 204 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). | 205 // 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)); | 206 PlatformGestureEvent gestureEvent = PlatformGestureEventBuilder(m_webVie wImpl->mainFrameImpl()->frameView(), static_cast<const WebGestureEvent&>(inputEv ent)); |
207 handled = handleGestureEvent(m_webViewImpl->mainFrameImpl()->frame(), ge stureEvent); | |
dgozman
2015/09/01 00:53:29
Let's drop the first parameter.
sergeyv
2015/09/01 03:41:20
Done.
| |
208 if (handled) | |
209 return true; | |
210 | |
205 overlayMainFrame()->eventHandler().handleGestureEvent(gestureEvent); | 211 overlayMainFrame()->eventHandler().handleGestureEvent(gestureEvent); |
206 } | 212 } |
207 if (WebInputEvent::isMouseEventType(inputEvent.type) && inputEvent.type != W ebInputEvent::MouseEnter) { | 213 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. | 214 // 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)); | 215 PlatformMouseEvent mouseEvent = PlatformMouseEventBuilder(m_webViewImpl- >mainFrameImpl()->frameView(), static_cast<const WebMouseEvent&>(inputEvent)); |
216 | |
217 if (mouseEvent.type() == PlatformEvent::MouseMoved) | |
218 handled = handleMouseMove(m_webViewImpl->mainFrameImpl()->frame(), m ouseEvent); | |
219 else if (mouseEvent.type() == PlatformEvent::MousePressed) | |
220 handled = handleMousePress(); | |
221 | |
222 if (handled) | |
223 return true; | |
224 | |
210 if (mouseEvent.type() == PlatformEvent::MouseMoved) | 225 if (mouseEvent.type() == PlatformEvent::MouseMoved) |
211 handled = overlayMainFrame()->eventHandler().handleMouseMoveEvent(mo useEvent); | 226 handled = overlayMainFrame()->eventHandler().handleMouseMoveEvent(mo useEvent); |
212 if (mouseEvent.type() == PlatformEvent::MousePressed) | 227 if (mouseEvent.type() == PlatformEvent::MousePressed) |
213 handled = overlayMainFrame()->eventHandler().handleMousePressEvent(m ouseEvent); | 228 handled = overlayMainFrame()->eventHandler().handleMousePressEvent(m ouseEvent); |
214 if (mouseEvent.type() == PlatformEvent::MouseReleased) | 229 if (mouseEvent.type() == PlatformEvent::MouseReleased) |
215 handled = overlayMainFrame()->eventHandler().handleMouseReleaseEvent (mouseEvent); | 230 handled = overlayMainFrame()->eventHandler().handleMouseReleaseEvent (mouseEvent); |
216 } | 231 } |
232 | |
dgozman
2015/09/01 00:53:29
Two blank lines at the same time!
sergeyv
2015/09/01 03:41:20
Done.
| |
233 | |
217 if (WebInputEvent::isTouchEventType(inputEvent.type)) { | 234 if (WebInputEvent::isTouchEventType(inputEvent.type)) { |
218 PlatformTouchEvent touchEvent = PlatformTouchEventBuilder(m_webViewImpl- >mainFrameImpl()->frameView(), static_cast<const WebTouchEvent&>(inputEvent)); | 235 PlatformTouchEvent touchEvent = PlatformTouchEventBuilder(m_webViewImpl- >mainFrameImpl()->frameView(), static_cast<const WebTouchEvent&>(inputEvent)); |
236 handled = handleTouchEvent(m_webViewImpl->mainFrameImpl()->frame(), touc hEvent); | |
237 if (handled) | |
238 return true; | |
219 overlayMainFrame()->eventHandler().handleTouchEvent(touchEvent); | 239 overlayMainFrame()->eventHandler().handleTouchEvent(touchEvent); |
220 } | 240 } |
221 if (WebInputEvent::isKeyboardEventType(inputEvent.type)) { | 241 if (WebInputEvent::isKeyboardEventType(inputEvent.type)) { |
222 PlatformKeyboardEvent keyboardEvent = PlatformKeyboardEventBuilder(stati c_cast<const WebKeyboardEvent&>(inputEvent)); | 242 PlatformKeyboardEvent keyboardEvent = PlatformKeyboardEventBuilder(stati c_cast<const WebKeyboardEvent&>(inputEvent)); |
223 overlayMainFrame()->eventHandler().keyEvent(keyboardEvent); | 243 overlayMainFrame()->eventHandler().keyEvent(keyboardEvent); |
224 } | 244 } |
225 | 245 |
226 return handled; | 246 return handled; |
227 } | 247 } |
228 | 248 |
229 void InspectorOverlayImpl::setPausedInDebuggerMessage(const String* message) | 249 void InspectorOverlayImpl::setPausedInDebuggerMessage(const String* message) |
230 { | 250 { |
231 m_pausedInDebuggerMessage = message ? *message : String(); | 251 m_pausedInDebuggerMessage = message ? *message : String(); |
232 update(); | 252 update(); |
233 } | 253 } |
234 | 254 |
235 void InspectorOverlayImpl::setInspectModeEnabled(bool enabled) | |
236 { | |
237 m_inspectModeEnabled = enabled; | |
238 update(); | |
239 } | |
240 | |
241 void InspectorOverlayImpl::hideHighlight() | 255 void InspectorOverlayImpl::hideHighlight() |
242 { | 256 { |
243 if (m_layoutEditor) | 257 if (m_layoutEditor) |
244 m_layoutEditor->setNode(nullptr); | 258 m_layoutEditor->setNode(nullptr); |
245 m_highlightNode.clear(); | 259 m_highlightNode.clear(); |
246 m_eventTargetNode.clear(); | 260 m_eventTargetNode.clear(); |
247 m_highlightQuad.clear(); | 261 m_highlightQuad.clear(); |
248 update(); | 262 update(); |
249 } | 263 } |
250 | 264 |
251 void InspectorOverlayImpl::highlightNode(Node* node, Node* eventTarget, const In spectorHighlightConfig& highlightConfig, bool omitTooltip) | 265 void InspectorOverlayImpl::highlightNode(Node* node, Node* eventTarget, const In spectorHighlightConfig& highlightConfig, bool omitTooltip) |
252 { | 266 { |
253 m_nodeHighlightConfig = highlightConfig; | 267 m_nodeHighlightConfig = highlightConfig; |
254 m_highlightNode = node; | 268 m_highlightNode = node; |
255 if (m_layoutEditor && highlightConfig.showLayoutEditor) | 269 if (m_layoutEditor && highlightConfig.showLayoutEditor) |
256 m_layoutEditor->setNode(node); | 270 m_layoutEditor->setNode(node); |
257 m_eventTargetNode = eventTarget; | 271 m_eventTargetNode = eventTarget; |
258 m_omitTooltip = omitTooltip; | 272 m_omitTooltip = omitTooltip; |
259 update(); | 273 update(); |
260 } | 274 } |
261 | 275 |
276 void InspectorOverlayImpl::setSearchingForNode(InspectorDOMAgent::SearchMode sea rchMode, PassOwnPtr<InspectorHighlightConfig> highlightConfig) | |
277 { | |
278 m_searchingForNode = searchMode; | |
279 update(); | |
dgozman
2015/09/01 00:53:29
We can probably rename this in a follow-up.
sergeyv
2015/09/01 03:41:20
Yep
| |
280 | |
281 if (searchMode != InspectorDOMAgent::NotSearching) { | |
282 m_inspectModeHighlightConfig = highlightConfig; | |
283 } else { | |
284 m_hoveredNodeForInspectMode.clear(); | |
285 hideHighlight(); | |
286 } | |
287 } | |
288 | |
262 void InspectorOverlayImpl::highlightQuad(PassOwnPtr<FloatQuad> quad, const Inspe ctorHighlightConfig& highlightConfig) | 289 void InspectorOverlayImpl::highlightQuad(PassOwnPtr<FloatQuad> quad, const Inspe ctorHighlightConfig& highlightConfig) |
263 { | 290 { |
264 m_quadHighlightConfig = highlightConfig; | 291 m_quadHighlightConfig = highlightConfig; |
265 m_highlightQuad = quad; | 292 m_highlightQuad = quad; |
266 m_omitTooltip = false; | 293 m_omitTooltip = false; |
267 update(); | 294 update(); |
268 } | 295 } |
269 | 296 |
270 bool InspectorOverlayImpl::isEmpty() | 297 bool InspectorOverlayImpl::isEmpty() |
271 { | 298 { |
272 if (m_suspendCount) | 299 if (m_suspendCount) |
273 return true; | 300 return true; |
274 bool hasAlwaysVisibleElements = m_highlightNode || m_eventTargetNode || m_hi ghlightQuad || (m_resizeTimerActive && m_drawViewSize); | 301 bool hasAlwaysVisibleElements = m_highlightNode || m_eventTargetNode || m_hi ghlightQuad || (m_resizeTimerActive && m_drawViewSize); |
275 bool hasInvisibleInInspectModeElements = !m_pausedInDebuggerMessage.isNull() ; | 302 bool hasInvisibleInInspectModeElements = !m_pausedInDebuggerMessage.isNull() ; |
276 return !(hasAlwaysVisibleElements || (hasInvisibleInInspectModeElements && ! m_inspectModeEnabled)); | 303 return !(hasAlwaysVisibleElements || (hasInvisibleInInspectModeElements && m _searchingForNode == InspectorDOMAgent::NotSearching)); |
277 } | 304 } |
278 | 305 |
279 void InspectorOverlayImpl::update() | 306 void InspectorOverlayImpl::update() |
280 { | 307 { |
281 if (isEmpty()) { | 308 if (isEmpty()) { |
282 if (m_pageOverlay) | 309 if (m_pageOverlay) |
283 m_pageOverlay.clear(); | 310 m_pageOverlay.clear(); |
284 return; | 311 return; |
285 } | 312 } |
286 m_needsUpdate = true; | 313 m_needsUpdate = true; |
287 m_webViewImpl->page()->chromeClient().scheduleAnimation(); | 314 m_webViewImpl->page()->chromeClient().scheduleAnimation(); |
288 } | 315 } |
289 | 316 |
290 void InspectorOverlayImpl::rebuildOverlayPage() | 317 void InspectorOverlayImpl::rebuildOverlayPage() |
291 { | 318 { |
292 FrameView* view = m_webViewImpl->mainFrameImpl()->frameView(); | 319 FrameView* view = m_webViewImpl->mainFrameImpl()->frameView(); |
293 if (!view) | 320 if (!view) |
294 return; | 321 return; |
295 | 322 |
296 IntRect visibleRectInDocument = view->scrollableArea()->visibleContentRect() ; | 323 IntRect visibleRectInDocument = view->scrollableArea()->visibleContentRect() ; |
297 IntSize viewportSize = m_webViewImpl->page()->frameHost().visualViewport().s ize(); | 324 IntSize viewportSize = m_webViewImpl->page()->frameHost().visualViewport().s ize(); |
298 toLocalFrame(overlayPage()->mainFrame())->view()->resize(viewportSize); | 325 toLocalFrame(overlayPage()->mainFrame())->view()->resize(viewportSize); |
299 reset(viewportSize, visibleRectInDocument.location()); | 326 reset(viewportSize, visibleRectInDocument.location()); |
300 | 327 |
301 drawNodeHighlight(); | 328 drawNodeHighlight(); |
302 drawQuadHighlight(); | 329 drawQuadHighlight(); |
303 if (!m_inspectModeEnabled) | 330 if (m_searchingForNode == InspectorDOMAgent::NotSearching) |
304 drawPausedInDebuggerMessage(); | 331 drawPausedInDebuggerMessage(); |
305 drawViewSize(); | 332 drawViewSize(); |
306 } | 333 } |
307 | 334 |
308 static PassRefPtr<JSONObject> buildObjectForSize(const IntSize& size) | 335 static PassRefPtr<JSONObject> buildObjectForSize(const IntSize& size) |
309 { | 336 { |
310 RefPtr<JSONObject> result = JSONObject::create(); | 337 RefPtr<JSONObject> result = JSONObject::create(); |
311 result->setNumber("width", size.width()); | 338 result->setNumber("width", size.width()); |
312 result->setNumber("height", size.height()); | 339 result->setNumber("height", size.height()); |
313 return result.release(); | 340 return result.release(); |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
460 | 487 |
461 void InspectorOverlayImpl::clear() | 488 void InspectorOverlayImpl::clear() |
462 { | 489 { |
463 if (m_overlayPage) { | 490 if (m_overlayPage) { |
464 m_overlayPage->willBeDestroyed(); | 491 m_overlayPage->willBeDestroyed(); |
465 m_overlayPage.clear(); | 492 m_overlayPage.clear(); |
466 m_overlayChromeClient.clear(); | 493 m_overlayChromeClient.clear(); |
467 } | 494 } |
468 m_resizeTimerActive = false; | 495 m_resizeTimerActive = false; |
469 m_pausedInDebuggerMessage = String(); | 496 m_pausedInDebuggerMessage = String(); |
470 m_inspectModeEnabled = false; | 497 m_searchingForNode = InspectorDOMAgent::NotSearching; |
471 m_timer.stop(); | 498 m_timer.stop(); |
472 hideHighlight(); | 499 hideHighlight(); |
473 } | 500 } |
474 | 501 |
475 void InspectorOverlayImpl::overlayResumed() | 502 void InspectorOverlayImpl::overlayResumed() |
476 { | 503 { |
477 if (m_debuggerAgent) { | 504 if (m_debuggerAgent) { |
478 ErrorString error; | 505 ErrorString error; |
479 m_debuggerAgent->resume(&error); | 506 m_debuggerAgent->resume(&error); |
480 } | 507 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
522 } | 549 } |
523 update(); | 550 update(); |
524 } | 551 } |
525 | 552 |
526 void InspectorOverlayImpl::setShowViewportSizeOnResize(bool show, bool showGrid) | 553 void InspectorOverlayImpl::setShowViewportSizeOnResize(bool show, bool showGrid) |
527 { | 554 { |
528 m_drawViewSize = show; | 555 m_drawViewSize = show; |
529 m_drawViewSizeWithGrid = showGrid; | 556 m_drawViewSizeWithGrid = showGrid; |
530 } | 557 } |
531 | 558 |
559 Node* hoveredNodeForPoint(LocalFrame* frame, const IntPoint& pointInRootFrame, b ool ignorePointerEventsNone) | |
dgozman
2015/09/01 00:53:29
These should go to anonymous namespace.
sergeyv
2015/09/01 03:41:20
Done.
| |
560 { | |
561 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move | HitTestR equest::ReadOnly | HitTestRequest::AllowChildFrameContent; | |
562 if (ignorePointerEventsNone) | |
563 hitType |= HitTestRequest::IgnorePointerEventsNone; | |
564 HitTestRequest request(hitType); | |
565 HitTestResult result(request, frame->view()->rootFrameToContents(pointInRoot Frame)); | |
566 frame->contentLayoutObject()->hitTest(result); | |
567 Node* node = result.innerPossiblyPseudoNode(); | |
568 while (node && node->nodeType() == Node::TEXT_NODE) | |
569 node = node->parentNode(); | |
570 return node; | |
571 } | |
572 | |
573 Node* hoveredNodeForEvent(LocalFrame* frame, const PlatformGestureEvent& event, bool ignorePointerEventsNone) | |
574 { | |
575 return hoveredNodeForPoint(frame, event.position(), ignorePointerEventsNone) ; | |
576 } | |
577 | |
578 Node* hoveredNodeForEvent(LocalFrame* frame, const PlatformMouseEvent& event, bo ol ignorePointerEventsNone) | |
579 { | |
580 return hoveredNodeForPoint(frame, event.position(), ignorePointerEventsNone) ; | |
581 } | |
582 | |
583 Node* hoveredNodeForEvent(LocalFrame* frame, const PlatformTouchEvent& event, bo ol ignorePointerEventsNone) | |
584 { | |
585 const Vector<PlatformTouchPoint>& points = event.touchPoints(); | |
586 if (!points.size()) | |
587 return nullptr; | |
588 return hoveredNodeForPoint(frame, roundedIntPoint(points[0].pos()), ignorePo interEventsNone); | |
589 } | |
590 | |
591 bool InspectorOverlayImpl::handleMouseMove(LocalFrame* frame, const PlatformMous eEvent& event) | |
592 { | |
593 if (m_searchingForNode == InspectorDOMAgent::NotSearching) | |
594 return false; | |
595 | |
596 if (!frame->view() || !frame->contentLayoutObject()) | |
597 return true; | |
dgozman
2015/09/01 00:53:29
false
sergeyv
2015/09/01 03:41:20
Done.
| |
598 Node* node = hoveredNodeForEvent(frame, event, event.shiftKey()); | |
599 | |
600 // Do not highlight within user agent shadow root unless requested. | |
601 if (m_searchingForNode != InspectorDOMAgent::SearchingForUAShadow) { | |
602 ShadowRoot* shadowRoot = InspectorDOMAgent::userAgentShadowRoot(node); | |
603 if (shadowRoot) | |
604 node = shadowRoot->host(); | |
605 } | |
606 | |
607 // Shadow roots don't have boxes - use host element instead. | |
608 if (node && node->isShadowRoot()) | |
609 node = node->parentOrShadowHostNode(); | |
610 | |
611 if (!node) | |
612 return true; | |
613 | |
614 Node* eventTarget = event.shiftKey() ? hoveredNodeForEvent(frame, event, fal se) : nullptr; | |
615 if (eventTarget == node) | |
616 eventTarget = 0; | |
dgozman
2015/09/01 00:53:29
nullptr
sergeyv
2015/09/01 03:41:20
Done.
| |
617 | |
618 if (node && m_inspectModeHighlightConfig) { | |
619 m_hoveredNodeForInspectMode = node; | |
620 highlightNode(node, eventTarget, *m_inspectModeHighlightConfig, event.ct rlKey() || event.metaKey()); | |
621 } | |
622 return true; | |
623 } | |
624 | |
625 bool InspectorOverlayImpl::handleMousePress() | |
626 { | |
627 if (m_searchingForNode == InspectorDOMAgent::NotSearching) | |
628 return false; | |
629 | |
630 if (m_hoveredNodeForInspectMode) { | |
631 if (m_domAgent) | |
632 m_domAgent->inspect(m_hoveredNodeForInspectMode.get()); | |
633 m_hoveredNodeForInspectMode.clear(); | |
634 return true; | |
635 } | |
636 return false; | |
637 } | |
638 | |
639 bool InspectorOverlayImpl::handleGestureEvent(LocalFrame* frame, const PlatformG estureEvent& event) | |
640 { | |
641 if (m_searchingForNode == InspectorDOMAgent::NotSearching || event.type() != PlatformEvent::GestureTap) | |
642 return false; | |
643 Node* node = hoveredNodeForEvent(frame, event, false); | |
644 if (node && m_inspectModeHighlightConfig) { | |
645 highlightNode(node, 0 /* eventTarget */, *m_inspectModeHighlightConfig, false); | |
dgozman
2015/09/01 00:53:29
nullptr
sergeyv
2015/09/01 03:41:20
Done.
| |
646 if (m_domAgent) | |
647 m_domAgent->inspect(node); | |
648 return true; | |
649 } | |
650 return false; | |
651 } | |
652 | |
653 bool InspectorOverlayImpl::handleTouchEvent(LocalFrame* frame, const PlatformTou chEvent& event) | |
654 { | |
655 if (m_searchingForNode == InspectorDOMAgent::NotSearching) | |
656 return false; | |
657 Node* node = hoveredNodeForEvent(frame, event, false); | |
658 if (node && m_inspectModeHighlightConfig) { | |
659 highlightNode(node, 0 /* eventTarget */, *m_inspectModeHighlightConfig, false); | |
dgozman
2015/09/01 00:53:29
0 -> nullptr
sergeyv
2015/09/01 03:41:20
Done.
| |
660 if (m_domAgent) | |
661 m_domAgent->inspect(node); | |
662 return true; | |
663 } | |
664 return false; | |
665 } | |
666 | |
532 } // namespace blink | 667 } // namespace blink |
OLD | NEW |