Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(526)

Side by Side Diff: Source/core/inspector/InspectorDOMAgent.cpp

Issue 197283031: DevTools: fix author shadow dom inspection mode, speacial-case ua. Fix crash from the bug. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: For landing Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/inspector/InspectorDOMAgent.h ('k') | Source/devtools/front_end/DOMAgent.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 if (!node) 416 if (!node)
417 return 0; 417 return 0;
418 418
419 if (node->nodeType() != Node::ELEMENT_NODE) { 419 if (node->nodeType() != Node::ELEMENT_NODE) {
420 *errorString = "Node is not an Element"; 420 *errorString = "Node is not an Element";
421 return 0; 421 return 0;
422 } 422 }
423 return toElement(node); 423 return toElement(node);
424 } 424 }
425 425
426 static ShadowRoot* userAgentShadowRoot(Node* node)
427 {
428 if (!node || !node->isInShadowTree())
429 return 0;
430
431 Node* candidate = node;
432 while (candidate && !candidate->isShadowRoot())
433 candidate = candidate->parentOrShadowHostNode();
434 ASSERT(candidate);
435 ShadowRoot* shadowRoot = toShadowRoot(candidate);
436
437 return shadowRoot->type() == ShadowRoot::UserAgentShadowRoot ? shadowRoot : 0;
438 }
439
426 Node* InspectorDOMAgent::assertEditableNode(ErrorString* errorString, int nodeId ) 440 Node* InspectorDOMAgent::assertEditableNode(ErrorString* errorString, int nodeId )
427 { 441 {
428 Node* node = assertNode(errorString, nodeId); 442 Node* node = assertNode(errorString, nodeId);
429 if (!node) 443 if (!node)
430 return 0; 444 return 0;
431 445
432 if (node->isInShadowTree()) { 446 if (node->isInShadowTree()) {
433 if (node->isShadowRoot()) { 447 if (node->isShadowRoot()) {
434 *errorString = "Cannot edit shadow roots"; 448 *errorString = "Cannot edit shadow roots";
435 return 0; 449 return 0;
436 } 450 }
437 Node* candidate = node; 451 if (userAgentShadowRoot(node)) {
438 while (candidate && !candidate->isShadowRoot())
439 candidate = candidate->parentElementOrShadowRoot();
440 if (!candidate || (candidate->isShadowRoot() && toShadowRoot(candidate)- >type() == ShadowRoot::UserAgentShadowRoot)) {
441 *errorString = "Cannot edit nodes from user-agent shadow trees"; 452 *errorString = "Cannot edit nodes from user-agent shadow trees";
442 return 0; 453 return 0;
443 } 454 }
444 } 455 }
445 456
446 if (node->isPseudoElement()) { 457 if (node->isPseudoElement()) {
447 *errorString = "Cannot edit pseudo elements"; 458 *errorString = "Cannot edit pseudo elements";
448 return 0; 459 return 0;
449 } 460 }
450 461
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
1120 } 1131 }
1121 return false; 1132 return false;
1122 } 1133 }
1123 1134
1124 void InspectorDOMAgent::inspect(Node* inspectedNode) 1135 void InspectorDOMAgent::inspect(Node* inspectedNode)
1125 { 1136 {
1126 if (!m_frontend || !inspectedNode) 1137 if (!m_frontend || !inspectedNode)
1127 return; 1138 return;
1128 1139
1129 Node* node = inspectedNode; 1140 Node* node = inspectedNode;
1130 if (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCU MENT_NODE) 1141 while (node && node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE && node->nodeType() != Node::DOCUMENT_FRAGMENT_NODE)
1131 node = node->parentNode(); 1142 node = node->parentOrShadowHostNode();
1143
1144 if (!node)
1145 return;
1132 1146
1133 int nodeId = pushNodePathToFrontend(node); 1147 int nodeId = pushNodePathToFrontend(node);
1134 if (nodeId) 1148 if (nodeId)
1135 m_frontend->inspectNodeRequested(nodeId); 1149 m_frontend->inspectNodeRequested(nodeId);
1136 } 1150 }
1137 1151
1138 void InspectorDOMAgent::handleMouseMove(LocalFrame* frame, const PlatformMouseEv ent& event) 1152 void InspectorDOMAgent::handleMouseMove(LocalFrame* frame, const PlatformMouseEv ent& event)
1139 { 1153 {
1140 if (m_searchingForNode == NotSearching) 1154 if (m_searchingForNode == NotSearching)
1141 return; 1155 return;
1142 1156
1143 if (!frame->view() || !frame->contentRenderer()) 1157 if (!frame->view() || !frame->contentRenderer())
1144 return; 1158 return;
1145 Node* node = hoveredNodeForEvent(frame, event, event.shiftKey()); 1159 Node* node = hoveredNodeForEvent(frame, event, event.shiftKey());
1146 1160
1147 while (m_searchingForNode != SearchingForShadow && node && node->isInShadowT ree()) 1161 // Do not highlight within UA shadow root unless requested.
1162 if (m_searchingForNode != SearchingForUAShadow) {
1163 ShadowRoot* uaShadowRoot = userAgentShadowRoot(node);
1164 if (uaShadowRoot)
1165 node = uaShadowRoot->host();
1166 }
1167
1168 // Shadow roots don't have boxes - use host element instead.
1169 if (node && node->isShadowRoot())
1148 node = node->parentOrShadowHostNode(); 1170 node = node->parentOrShadowHostNode();
1149 1171
1172 if (!node)
1173 return;
1174
1150 Node* eventTarget = event.shiftKey() ? hoveredNodeForEvent(frame, event, fal se) : 0; 1175 Node* eventTarget = event.shiftKey() ? hoveredNodeForEvent(frame, event, fal se) : 0;
1151 if (eventTarget == node) 1176 if (eventTarget == node)
1152 eventTarget = 0; 1177 eventTarget = 0;
1153 1178
1154 if (node && m_inspectModeHighlightConfig) 1179 if (node && m_inspectModeHighlightConfig)
1155 m_overlay->highlightNode(node, eventTarget, *m_inspectModeHighlightConfi g); 1180 m_overlay->highlightNode(node, eventTarget, *m_inspectModeHighlightConfi g);
1156 } 1181 }
1157 1182
1158 void InspectorDOMAgent::setSearchingForNode(ErrorString* errorString, SearchMode searchMode, JSONObject* highlightInspectorObject) 1183 void InspectorDOMAgent::setSearchingForNode(ErrorString* errorString, SearchMode searchMode, JSONObject* highlightInspectorObject)
1159 { 1184 {
(...skipping 26 matching lines...) Expand all
1186 highlightConfig->showRulers = showRulers; 1211 highlightConfig->showRulers = showRulers;
1187 highlightConfig->content = parseConfigColor("contentColor", highlightInspect orObject); 1212 highlightConfig->content = parseConfigColor("contentColor", highlightInspect orObject);
1188 highlightConfig->contentOutline = parseConfigColor("contentOutlineColor", hi ghlightInspectorObject); 1213 highlightConfig->contentOutline = parseConfigColor("contentOutlineColor", hi ghlightInspectorObject);
1189 highlightConfig->padding = parseConfigColor("paddingColor", highlightInspect orObject); 1214 highlightConfig->padding = parseConfigColor("paddingColor", highlightInspect orObject);
1190 highlightConfig->border = parseConfigColor("borderColor", highlightInspector Object); 1215 highlightConfig->border = parseConfigColor("borderColor", highlightInspector Object);
1191 highlightConfig->margin = parseConfigColor("marginColor", highlightInspector Object); 1216 highlightConfig->margin = parseConfigColor("marginColor", highlightInspector Object);
1192 highlightConfig->eventTarget = parseConfigColor("eventTargetColor", highligh tInspectorObject); 1217 highlightConfig->eventTarget = parseConfigColor("eventTargetColor", highligh tInspectorObject);
1193 return highlightConfig.release(); 1218 return highlightConfig.release();
1194 } 1219 }
1195 1220
1196 void InspectorDOMAgent::setInspectModeEnabled(ErrorString* errorString, bool ena bled, const bool* inspectShadowDOM, const RefPtr<JSONObject>* highlightConfig) 1221 void InspectorDOMAgent::setInspectModeEnabled(ErrorString* errorString, bool ena bled, const bool* inspectUAShadowDOM, const RefPtr<JSONObject>* highlightConfig)
1197 { 1222 {
1198 if (enabled && !pushDocumentUponHandlelessOperation(errorString)) 1223 if (enabled && !pushDocumentUponHandlelessOperation(errorString))
1199 return; 1224 return;
1200 SearchMode searchMode = enabled ? (inspectShadowDOM && *inspectShadowDOM ? S earchingForShadow : SearchingForNormal) : NotSearching; 1225 SearchMode searchMode = enabled ? (inspectUAShadowDOM && *inspectUAShadowDOM ? SearchingForUAShadow : SearchingForNormal) : NotSearching;
1201 setSearchingForNode(errorString, searchMode, highlightConfig ? highlightConf ig->get() : 0); 1226 setSearchingForNode(errorString, searchMode, highlightConfig ? highlightConf ig->get() : 0);
1202 } 1227 }
1203 1228
1204 void InspectorDOMAgent::highlightRect(ErrorString*, int x, int y, int width, int height, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* outlineColor ) 1229 void InspectorDOMAgent::highlightRect(ErrorString*, int x, int y, int width, int height, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* outlineColor )
1205 { 1230 {
1206 OwnPtr<FloatQuad> quad = adoptPtr(new FloatQuad(FloatRect(x, y, width, heigh t))); 1231 OwnPtr<FloatQuad> quad = adoptPtr(new FloatQuad(FloatRect(x, y, width, heigh t)));
1207 innerHighlightQuad(quad.release(), color, outlineColor); 1232 innerHighlightQuad(quad.release(), color, outlineColor);
1208 } 1233 }
1209 1234
1210 void InspectorDOMAgent::highlightQuad(ErrorString* errorString, const RefPtr<JSO NArray>& quadArray, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* o utlineColor) 1235 void InspectorDOMAgent::highlightQuad(ErrorString* errorString, const RefPtr<JSO NArray>& quadArray, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* o utlineColor)
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
2072 if (!m_documentNodeToIdMap.contains(m_document)) { 2097 if (!m_documentNodeToIdMap.contains(m_document)) {
2073 RefPtr<TypeBuilder::DOM::Node> root; 2098 RefPtr<TypeBuilder::DOM::Node> root;
2074 getDocument(errorString, root); 2099 getDocument(errorString, root);
2075 return errorString->isEmpty(); 2100 return errorString->isEmpty();
2076 } 2101 }
2077 return true; 2102 return true;
2078 } 2103 }
2079 2104
2080 } // namespace WebCore 2105 } // namespace WebCore
2081 2106
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorDOMAgent.h ('k') | Source/devtools/front_end/DOMAgent.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698