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

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

Issue 1311783003: Devtools[LayoutEditor]: Rework layout-editor workflow (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@resize
Patch Set: Created 5 years, 4 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
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 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 : InspectorBaseAgent<InspectorDOMAgent, InspectorFrontend::DOM>("DOM") 310 : InspectorBaseAgent<InspectorDOMAgent, InspectorFrontend::DOM>("DOM")
311 , m_pageAgent(pageAgent) 311 , m_pageAgent(pageAgent)
312 , m_injectedScriptManager(injectedScriptManager) 312 , m_injectedScriptManager(injectedScriptManager)
313 , m_overlay(overlay) 313 , m_overlay(overlay)
314 , m_domListener(nullptr) 314 , m_domListener(nullptr)
315 , m_documentNodeToIdMap(adoptPtrWillBeNoop(new NodeToIdMap())) 315 , m_documentNodeToIdMap(adoptPtrWillBeNoop(new NodeToIdMap()))
316 , m_lastNodeId(1) 316 , m_lastNodeId(1)
317 , m_searchingForNode(NotSearching) 317 , m_searchingForNode(NotSearching)
318 , m_suppressAttributeModifiedEvent(false) 318 , m_suppressAttributeModifiedEvent(false)
319 , m_backendNodeIdToInspect(0) 319 , m_backendNodeIdToInspect(0)
320 , m_layoutEditorEnabled(false)
320 { 321 {
321 } 322 }
322 323
323 InspectorDOMAgent::~InspectorDOMAgent() 324 InspectorDOMAgent::~InspectorDOMAgent()
324 { 325 {
325 #if !ENABLE(OILPAN) 326 #if !ENABLE(OILPAN)
326 setDocument(nullptr); 327 setDocument(nullptr);
327 ASSERT(m_searchingForNode == NotSearching); 328 ASSERT(m_searchingForNode == NotSearching);
328 #endif 329 #endif
329 } 330 }
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
1120 nodeIds->addItem(pushNodePathToFrontend((it->value)[i].get())); 1121 nodeIds->addItem(pushNodePathToFrontend((it->value)[i].get()));
1121 } 1122 }
1122 1123
1123 void InspectorDOMAgent::discardSearchResults(ErrorString*, const String& searchI d) 1124 void InspectorDOMAgent::discardSearchResults(ErrorString*, const String& searchI d)
1124 { 1125 {
1125 m_searchResults.remove(searchId); 1126 m_searchResults.remove(searchId);
1126 } 1127 }
1127 1128
1128 bool InspectorDOMAgent::handleMousePress() 1129 bool InspectorDOMAgent::handleMousePress()
1129 { 1130 {
1130 if (m_searchingForNode == NotSearching) 1131 if (m_searchingForNode == NotSearching || (m_searchingForNode == SearchingIn LayoutEditor && m_layoutEditorEnabled))
1131 return false; 1132 return false;
1132 1133
1133 if (m_hoveredNodeForInspectMode) { 1134 if (m_hoveredNodeForInspectMode) {
1134 inspect(m_hoveredNodeForInspectMode.get()); 1135 inspect(m_hoveredNodeForInspectMode.get());
1135 m_hoveredNodeForInspectMode.clear(); 1136 m_hoveredNodeForInspectMode.clear();
1136 return true; 1137 return true;
1137 } 1138 }
1138 return false; 1139 return false;
1139 } 1140 }
1140 1141
1141 bool InspectorDOMAgent::handleGestureEvent(LocalFrame* frame, const PlatformGest ureEvent& event) 1142 bool InspectorDOMAgent::handleGestureEvent(LocalFrame* frame, const PlatformGest ureEvent& event)
1142 { 1143 {
1143 if (m_searchingForNode == NotSearching || event.type() != PlatformEvent::Ges tureTap) 1144 if (m_searchingForNode == NotSearching || event.type() != PlatformEvent::Ges tureTap || (m_searchingForNode == SearchingInLayoutEditor && m_layoutEditorEnabl ed))
1144 return false; 1145 return false;
1145 Node* node = hoveredNodeForEvent(frame, event, false); 1146 Node* node = hoveredNodeForEvent(frame, event, false);
1146 if (node && m_inspectModeHighlightConfig) { 1147 if (node && m_inspectModeHighlightConfig) {
1147 m_overlay->highlightNode(node, 0 /* eventTarget */, *m_inspectModeHighli ghtConfig, false); 1148 m_overlay->highlightNode(node, 0 /* eventTarget */, *m_inspectModeHighli ghtConfig, false);
1148 inspect(node); 1149 inspect(node);
1149 return true; 1150 return true;
1150 } 1151 }
1151 return false; 1152 return false;
1152 } 1153 }
1153 1154
1154 bool InspectorDOMAgent::handleTouchEvent(LocalFrame* frame, const PlatformTouchE vent& event) 1155 bool InspectorDOMAgent::handleTouchEvent(LocalFrame* frame, const PlatformTouchE vent& event)
1155 { 1156 {
1156 if (m_searchingForNode == NotSearching) 1157 if (m_searchingForNode == NotSearching || (m_searchingForNode == SearchingIn LayoutEditor && m_layoutEditorEnabled))
pfeldman 2015/08/25 21:25:29 extract method please
sergeyv 2015/08/26 02:25:49 Done.
1157 return false; 1158 return false;
1158 Node* node = hoveredNodeForEvent(frame, event, false); 1159 Node* node = hoveredNodeForEvent(frame, event, false);
1159 if (node && m_inspectModeHighlightConfig) { 1160 if (node && m_inspectModeHighlightConfig) {
1160 m_overlay->highlightNode(node, 0 /* eventTarget */, *m_inspectModeHighli ghtConfig, false); 1161 m_overlay->highlightNode(node, 0 /* eventTarget */, *m_inspectModeHighli ghtConfig, false);
1161 inspect(node); 1162 inspect(node);
1162 return true; 1163 return true;
1163 } 1164 }
1164 return false; 1165 return false;
1165 } 1166 }
1166 1167
1167 void InspectorDOMAgent::inspect(Node* inspectedNode) 1168 void InspectorDOMAgent::inspect(Node* inspectedNode)
1168 { 1169 {
1169 if (!inspectedNode) 1170 if (!inspectedNode)
1170 return; 1171 return;
1171 1172
1172 Node* node = inspectedNode; 1173 Node* node = inspectedNode;
1173 while (node && !node->isElementNode() && !node->isDocumentNode() && !node->i sDocumentFragment()) 1174 while (node && !node->isElementNode() && !node->isDocumentNode() && !node->i sDocumentFragment())
1174 node = node->parentOrShadowHostNode(); 1175 node = node->parentOrShadowHostNode();
1175 if (!node) 1176 if (!node)
1176 return; 1177 return;
1177 1178
1178 int backendNodeId = DOMNodeIds::idForNode(node); 1179 int backendNodeId = DOMNodeIds::idForNode(node);
1179 if (!frontend() || !enabled()) { 1180 if (!frontend() || !enabled()) {
1180 m_backendNodeIdToInspect = backendNodeId; 1181 m_backendNodeIdToInspect = backendNodeId;
1181 return; 1182 return;
1182 } 1183 }
1183 1184
1184 frontend()->inspectNodeRequested(backendNodeId); 1185 frontend()->inspectNodeRequested(backendNodeId);
1186
1187 if (m_searchingForNode == SearchingInLayoutEditor) {
1188 m_layoutEditorEnabled = true;
1189 m_overlay->setInspectModeEnabled(false);
1190 m_overlay->showLayoutEditorForNode(node, *m_inspectModeHighlightConfig.g et());
1191 }
1185 } 1192 }
1186 1193
1187 bool InspectorDOMAgent::handleMouseMove(LocalFrame* frame, const PlatformMouseEv ent& event) 1194 bool InspectorDOMAgent::handleMouseMove(LocalFrame* frame, const PlatformMouseEv ent& event)
1188 { 1195 {
1189 if (m_searchingForNode == NotSearching) 1196 if (m_searchingForNode == NotSearching || (m_searchingForNode == SearchingIn LayoutEditor && m_layoutEditorEnabled))
1190 return false; 1197 return false;
1191 1198
1192 if (!frame->view() || !frame->contentLayoutObject()) 1199 if (!frame->view() || !frame->contentLayoutObject())
1193 return true; 1200 return true;
1194 Node* node = hoveredNodeForEvent(frame, event, event.shiftKey()); 1201 Node* node = hoveredNodeForEvent(frame, event, event.shiftKey());
1195 1202
1196 // Do not highlight within user agent shadow root unless requested. 1203 // Do not highlight within user agent shadow root unless requested.
1197 if (m_searchingForNode != SearchingForUAShadow) { 1204 if (m_searchingForNode != SearchingForUAShadow) {
1198 ShadowRoot* shadowRoot = userAgentShadowRoot(node); 1205 ShadowRoot* shadowRoot = userAgentShadowRoot(node);
1199 if (shadowRoot) 1206 if (shadowRoot)
(...skipping 20 matching lines...) Expand all
1220 1227
1221 void InspectorDOMAgent::setSearchingForNode(ErrorString* errorString, SearchMode searchMode, JSONObject* highlightInspectorObject) 1228 void InspectorDOMAgent::setSearchingForNode(ErrorString* errorString, SearchMode searchMode, JSONObject* highlightInspectorObject)
1222 { 1229 {
1223 m_searchingForNode = searchMode; 1230 m_searchingForNode = searchMode;
1224 m_overlay->setInspectModeEnabled(searchMode != NotSearching); 1231 m_overlay->setInspectModeEnabled(searchMode != NotSearching);
1225 if (searchMode != NotSearching) { 1232 if (searchMode != NotSearching) {
1226 m_inspectModeHighlightConfig = highlightConfigFromInspectorObject(errorS tring, highlightInspectorObject); 1233 m_inspectModeHighlightConfig = highlightConfigFromInspectorObject(errorS tring, highlightInspectorObject);
1227 } else { 1234 } else {
1228 m_hoveredNodeForInspectMode.clear(); 1235 m_hoveredNodeForInspectMode.clear();
1229 hideHighlight(errorString); 1236 hideHighlight(errorString);
1237 m_overlay->showLayoutEditorForNode(nullptr, m_inspectModeHighlightConfig ? *m_inspectModeHighlightConfig : InspectorHighlightConfig());
1230 } 1238 }
1231 } 1239 }
1232 1240
1233 PassOwnPtr<InspectorHighlightConfig> InspectorDOMAgent::highlightConfigFromInspe ctorObject(ErrorString* errorString, JSONObject* highlightInspectorObject) 1241 PassOwnPtr<InspectorHighlightConfig> InspectorDOMAgent::highlightConfigFromInspe ctorObject(ErrorString* errorString, JSONObject* highlightInspectorObject)
1234 { 1242 {
1235 if (!highlightInspectorObject) { 1243 if (!highlightInspectorObject) {
1236 *errorString = "Internal error: highlight configuration parameter is mis sing"; 1244 *errorString = "Internal error: highlight configuration parameter is mis sing";
1237 return nullptr; 1245 return nullptr;
1238 } 1246 }
1239 1247
1240 OwnPtr<InspectorHighlightConfig> highlightConfig = adoptPtr(new InspectorHig hlightConfig()); 1248 OwnPtr<InspectorHighlightConfig> highlightConfig = adoptPtr(new InspectorHig hlightConfig());
1241 bool showInfo = false; // Default: false (do not show a tooltip). 1249 bool showInfo = false; // Default: false (do not show a tooltip).
1242 highlightInspectorObject->getBoolean("showInfo", &showInfo); 1250 highlightInspectorObject->getBoolean("showInfo", &showInfo);
1243 highlightConfig->showInfo = showInfo; 1251 highlightConfig->showInfo = showInfo;
1244 bool showRulers = false; // Default: false (do not show rulers). 1252 bool showRulers = false; // Default: false (do not show rulers).
1245 highlightInspectorObject->getBoolean("showRulers", &showRulers); 1253 highlightInspectorObject->getBoolean("showRulers", &showRulers);
1246 highlightConfig->showRulers = showRulers; 1254 highlightConfig->showRulers = showRulers;
1247 bool showExtensionLines = false; // Default: false (do not show extension li nes). 1255 bool showExtensionLines = false; // Default: false (do not show extension li nes).
1248 highlightInspectorObject->getBoolean("showExtensionLines", &showExtensionLin es); 1256 highlightInspectorObject->getBoolean("showExtensionLines", &showExtensionLin es);
1249 highlightConfig->showExtensionLines = showExtensionLines; 1257 highlightConfig->showExtensionLines = showExtensionLines;
1250 bool showLayoutEditor = false;
1251 highlightInspectorObject->getBoolean("showLayoutEditor", &showLayoutEditor);
1252 highlightConfig->showLayoutEditor = showLayoutEditor;
1253 bool displayAsMaterial = false; 1258 bool displayAsMaterial = false;
1254 highlightInspectorObject->getBoolean("displayAsMaterial", &displayAsMaterial ); 1259 highlightInspectorObject->getBoolean("displayAsMaterial", &displayAsMaterial );
1255 highlightConfig->displayAsMaterial = displayAsMaterial; 1260 highlightConfig->displayAsMaterial = displayAsMaterial;
1256 highlightConfig->content = parseConfigColor("contentColor", highlightInspect orObject); 1261 highlightConfig->content = parseConfigColor("contentColor", highlightInspect orObject);
1257 highlightConfig->contentOutline = parseConfigColor("contentOutlineColor", hi ghlightInspectorObject); 1262 highlightConfig->contentOutline = parseConfigColor("contentOutlineColor", hi ghlightInspectorObject);
1258 highlightConfig->padding = parseConfigColor("paddingColor", highlightInspect orObject); 1263 highlightConfig->padding = parseConfigColor("paddingColor", highlightInspect orObject);
1259 highlightConfig->border = parseConfigColor("borderColor", highlightInspector Object); 1264 highlightConfig->border = parseConfigColor("borderColor", highlightInspector Object);
1260 highlightConfig->margin = parseConfigColor("marginColor", highlightInspector Object); 1265 highlightConfig->margin = parseConfigColor("marginColor", highlightInspector Object);
1261 highlightConfig->eventTarget = parseConfigColor("eventTargetColor", highligh tInspectorObject); 1266 highlightConfig->eventTarget = parseConfigColor("eventTargetColor", highligh tInspectorObject);
1262 highlightConfig->shape = parseConfigColor("shapeColor", highlightInspectorOb ject); 1267 highlightConfig->shape = parseConfigColor("shapeColor", highlightInspectorOb ject);
1263 highlightConfig->shapeMargin = parseConfigColor("shapeMarginColor", highligh tInspectorObject); 1268 highlightConfig->shapeMargin = parseConfigColor("shapeMarginColor", highligh tInspectorObject);
1264 1269
1265 return highlightConfig.release(); 1270 return highlightConfig.release();
1266 } 1271 }
1267 1272
1268 void InspectorDOMAgent::setInspectModeEnabled(ErrorString* errorString, bool ena bled, const bool* inspectUAShadowDOM, const RefPtr<JSONObject>* highlightConfig) 1273 void InspectorDOMAgent::setInspectModeEnabled(ErrorString* errorString, bool ena bled, const String* mode, const RefPtr<JSONObject>* highlightConfig)
pfeldman 2015/08/25 21:25:29 There should be a node passed here, right?
sergeyv 2015/08/26 02:25:49 Yes, I'll add it in a separate patch.
1269 { 1274 {
1270 if (enabled && !pushDocumentUponHandlelessOperation(errorString)) 1275 if (enabled && !pushDocumentUponHandlelessOperation(errorString))
1271 return; 1276 return;
1272 SearchMode searchMode = enabled ? (asBool(inspectUAShadowDOM) ? SearchingFor UAShadow : SearchingForNormal) : NotSearching; 1277 SearchMode searchMode = SearchingForNormal;
1278 if (!enabled) {
1279 searchMode = NotSearching;
1280 } else if (!mode) {
1281 searchMode = SearchingForNormal;
1282 } else if (*mode == "showUAShadowDOM") {
1283 searchMode = SearchingForUAShadow;
1284 } else if (*mode == "showLayoutEditor") {
1285 searchMode = SearchingInLayoutEditor;
1286 m_layoutEditorEnabled = false;
pfeldman 2015/08/25 21:25:29 it will be enabled when the node comes as a parame
sergeyv 2015/08/26 02:25:49 Yep
1287 }
1288
1273 setSearchingForNode(errorString, searchMode, highlightConfig ? highlightConf ig->get() : nullptr); 1289 setSearchingForNode(errorString, searchMode, highlightConfig ? highlightConf ig->get() : nullptr);
1274 } 1290 }
1275 1291
1276 void InspectorDOMAgent::highlightRect(ErrorString*, int x, int y, int width, int height, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* outlineColor ) 1292 void InspectorDOMAgent::highlightRect(ErrorString*, int x, int y, int width, int height, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* outlineColor )
1277 { 1293 {
1278 OwnPtr<FloatQuad> quad = adoptPtr(new FloatQuad(FloatRect(x, y, width, heigh t))); 1294 OwnPtr<FloatQuad> quad = adoptPtr(new FloatQuad(FloatRect(x, y, width, heigh t)));
1279 innerHighlightQuad(quad.release(), color, outlineColor); 1295 innerHighlightQuad(quad.release(), color, outlineColor);
1280 } 1296 }
1281 1297
1282 void InspectorDOMAgent::highlightQuad(ErrorString* errorString, const RefPtr<JSO NArray>& quadArray, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* o utlineColor) 1298 void InspectorDOMAgent::highlightQuad(ErrorString* errorString, const RefPtr<JSO NArray>& quadArray, const RefPtr<JSONObject>* color, const RefPtr<JSONObject>* o utlineColor)
(...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after
2214 bool InspectorDOMAgent::pushDocumentUponHandlelessOperation(ErrorString* errorSt ring) 2230 bool InspectorDOMAgent::pushDocumentUponHandlelessOperation(ErrorString* errorSt ring)
2215 { 2231 {
2216 if (!m_documentNodeToIdMap->contains(m_document)) { 2232 if (!m_documentNodeToIdMap->contains(m_document)) {
2217 RefPtr<TypeBuilder::DOM::Node> root; 2233 RefPtr<TypeBuilder::DOM::Node> root;
2218 getDocument(errorString, root); 2234 getDocument(errorString, root);
2219 return errorString->isEmpty(); 2235 return errorString->isEmpty();
2220 } 2236 }
2221 return true; 2237 return true;
2222 } 2238 }
2223 2239
2240 void InspectorDOMAgent::resumeSearchingForNode(Node* startNode)
2241 {
2242 if (m_searchingForNode != SearchingInLayoutEditor)
2243 return;
2244
2245 m_layoutEditorEnabled = false;
2246 m_overlay->setInspectModeEnabled(true);
2247 if (startNode && m_inspectModeHighlightConfig) {
2248 m_hoveredNodeForInspectMode = startNode;
2249 m_overlay->highlightNode(startNode, 0, *m_inspectModeHighlightConfig, fa lse);
2250 }
2251
2252 }
2253
2224 DEFINE_TRACE(InspectorDOMAgent) 2254 DEFINE_TRACE(InspectorDOMAgent)
2225 { 2255 {
2226 visitor->trace(m_domListener); 2256 visitor->trace(m_domListener);
2227 visitor->trace(m_pageAgent); 2257 visitor->trace(m_pageAgent);
2228 visitor->trace(m_injectedScriptManager); 2258 visitor->trace(m_injectedScriptManager);
2229 visitor->trace(m_overlay); 2259 visitor->trace(m_overlay);
2230 #if ENABLE(OILPAN) 2260 #if ENABLE(OILPAN)
2231 visitor->trace(m_documentNodeToIdMap); 2261 visitor->trace(m_documentNodeToIdMap);
2232 visitor->trace(m_danglingNodeToIdMaps); 2262 visitor->trace(m_danglingNodeToIdMaps);
2233 visitor->trace(m_idToNode); 2263 visitor->trace(m_idToNode);
2234 visitor->trace(m_idToNodesMap); 2264 visitor->trace(m_idToNodesMap);
2235 visitor->trace(m_document); 2265 visitor->trace(m_document);
2236 visitor->trace(m_revalidateTask); 2266 visitor->trace(m_revalidateTask);
2237 visitor->trace(m_searchResults); 2267 visitor->trace(m_searchResults);
2238 #endif 2268 #endif
2239 visitor->trace(m_hoveredNodeForInspectMode); 2269 visitor->trace(m_hoveredNodeForInspectMode);
2240 visitor->trace(m_history); 2270 visitor->trace(m_history);
2241 visitor->trace(m_domEditor); 2271 visitor->trace(m_domEditor);
2242 InspectorBaseAgent::trace(visitor); 2272 InspectorBaseAgent::trace(visitor);
2243 } 2273 }
2244 2274
2245 } // namespace blink 2275 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698