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

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

Issue 16561003: DevTools: Inspect element mode does not select element in ShadowDOM (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: For landing Created 7 years, 6 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
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 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 } 148 }
149 149
150 static Node* hoveredNodeForPoint(Frame* frame, const IntPoint& point, bool ignor ePointerEventsNone) 150 static Node* hoveredNodeForPoint(Frame* frame, const IntPoint& point, bool ignor ePointerEventsNone)
151 { 151 {
152 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move | HitTestR equest::ReadOnly | HitTestRequest::AllowChildFrameContent; 152 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move | HitTestR equest::ReadOnly | HitTestRequest::AllowChildFrameContent;
153 if (ignorePointerEventsNone) 153 if (ignorePointerEventsNone)
154 hitType |= HitTestRequest::IgnorePointerEventsNone; 154 hitType |= HitTestRequest::IgnorePointerEventsNone;
155 HitTestRequest request(hitType); 155 HitTestRequest request(hitType);
156 HitTestResult result(frame->view()->windowToContents(point)); 156 HitTestResult result(frame->view()->windowToContents(point));
157 frame->contentRenderer()->hitTest(request, result); 157 frame->contentRenderer()->hitTest(request, result);
158 result.setToShadowHostIfInUserAgentShadowRoot();
159 Node* node = result.innerNode(); 158 Node* node = result.innerNode();
160 while (node && node->nodeType() == Node::TEXT_NODE) 159 while (node && node->nodeType() == Node::TEXT_NODE)
161 node = node->parentNode(); 160 node = node->parentNode();
162 return node; 161 return node;
163 } 162 }
164 163
165 static Node* hoveredNodeForEvent(Frame* frame, const PlatformMouseEvent& event, bool ignorePointerEventsNone) 164 static Node* hoveredNodeForEvent(Frame* frame, const PlatformMouseEvent& event, bool ignorePointerEventsNone)
166 { 165 {
167 return hoveredNodeForPoint(frame, event.position(), ignorePointerEventsNone) ; 166 return hoveredNodeForPoint(frame, event.position(), ignorePointerEventsNone) ;
168 } 167 }
(...skipping 1197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1366 break; 1365 break;
1367 } 1366 }
1368 1367
1369 RefPtr<TypeBuilder::DOM::Node> value = TypeBuilder::DOM::Node::create() 1368 RefPtr<TypeBuilder::DOM::Node> value = TypeBuilder::DOM::Node::create()
1370 .setNodeId(id) 1369 .setNodeId(id)
1371 .setNodeType(static_cast<int>(node->nodeType())) 1370 .setNodeType(static_cast<int>(node->nodeType()))
1372 .setNodeName(nodeName) 1371 .setNodeName(nodeName)
1373 .setLocalName(localName) 1372 .setLocalName(localName)
1374 .setNodeValue(nodeValue); 1373 .setNodeValue(nodeValue);
1375 1374
1376 if (node->isContainerNode()) { 1375 bool forcePushChildren = false;
1377 int nodeCount = innerChildNodeCount(node);
1378 value->setChildNodeCount(nodeCount);
1379 RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > children = buildArra yForContainerChildren(node, depth, nodesMap);
1380 if (children->length() > 0)
1381 value->setChildren(children.release());
1382 }
1383
1384 if (node->isElementNode()) { 1376 if (node->isElementNode()) {
1385 Element* element = toElement(node); 1377 Element* element = toElement(node);
1386 value->setAttributes(buildArrayForElementAttributes(element)); 1378 value->setAttributes(buildArrayForElementAttributes(element));
1387 if (node->isFrameOwnerElement()) { 1379 if (node->isFrameOwnerElement()) {
1388 HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElemen t*>(node); 1380 HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElemen t*>(node);
1389 Frame* frame = frameOwner->contentFrame(); 1381 Frame* frame = frameOwner->contentFrame();
1390 if (frame) 1382 if (frame)
1391 value->setFrameId(m_pageAgent->frameId(frame)); 1383 value->setFrameId(m_pageAgent->frameId(frame));
1392 Document* doc = frameOwner->contentDocument(); 1384 Document* doc = frameOwner->contentDocument();
1393 if (doc) 1385 if (doc)
1394 value->setContentDocument(buildObjectForNode(doc, 0, nodesMap)); 1386 value->setContentDocument(buildObjectForNode(doc, 0, nodesMap));
1395 } 1387 }
1396 1388
1397 ElementShadow* shadow = element->shadow(); 1389 ElementShadow* shadow = element->shadow();
1398 if (shadow) { 1390 if (shadow) {
1399 RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > shadowRoots = Ty peBuilder::Array<TypeBuilder::DOM::Node>::create(); 1391 RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > shadowRoots = Ty peBuilder::Array<TypeBuilder::DOM::Node>::create();
1400 for (ShadowRoot* root = shadow->youngestShadowRoot(); root; root = r oot->olderShadowRoot()) 1392 for (ShadowRoot* root = shadow->youngestShadowRoot(); root; root = r oot->olderShadowRoot())
1401 shadowRoots->addItem(buildObjectForNode(root, 0, nodesMap)); 1393 shadowRoots->addItem(buildObjectForNode(root, 0, nodesMap));
1402 value->setShadowRoots(shadowRoots); 1394 value->setShadowRoots(shadowRoots);
1395 forcePushChildren = true;
1403 } 1396 }
1404 1397
1405 if (element->hasTagName(templateTag)) 1398 if (element->hasTagName(templateTag)) {
1406 value->setTemplateContent(buildObjectForNode(static_cast<HTMLTemplat eElement*>(element)->content(), 0, nodesMap)); 1399 value->setTemplateContent(buildObjectForNode(static_cast<HTMLTemplat eElement*>(element)->content(), 0, nodesMap));
1400 forcePushChildren = true;
1401 }
1407 } else if (node->isDocumentNode()) { 1402 } else if (node->isDocumentNode()) {
1408 Document* document = toDocument(node); 1403 Document* document = toDocument(node);
1409 value->setDocumentURL(documentURLString(document)); 1404 value->setDocumentURL(documentURLString(document));
1410 value->setBaseURL(documentBaseURLString(document)); 1405 value->setBaseURL(documentBaseURLString(document));
1411 value->setXmlVersion(document->xmlVersion()); 1406 value->setXmlVersion(document->xmlVersion());
1412 } else if (node->nodeType() == Node::DOCUMENT_TYPE_NODE) { 1407 } else if (node->nodeType() == Node::DOCUMENT_TYPE_NODE) {
1413 DocumentType* docType = static_cast<DocumentType*>(node); 1408 DocumentType* docType = static_cast<DocumentType*>(node);
1414 value->setPublicId(docType->publicId()); 1409 value->setPublicId(docType->publicId());
1415 value->setSystemId(docType->systemId()); 1410 value->setSystemId(docType->systemId());
1416 value->setInternalSubset(docType->internalSubset()); 1411 value->setInternalSubset(docType->internalSubset());
1417 } else if (node->isAttributeNode()) { 1412 } else if (node->isAttributeNode()) {
1418 Attr* attribute = static_cast<Attr*>(node); 1413 Attr* attribute = static_cast<Attr*>(node);
1419 value->setName(attribute->name()); 1414 value->setName(attribute->name());
1420 value->setValue(attribute->value()); 1415 value->setValue(attribute->value());
1421 } 1416 }
1417
1418 if (node->isContainerNode()) {
1419 int nodeCount = innerChildNodeCount(node);
1420 value->setChildNodeCount(nodeCount);
1421 if (forcePushChildren && !depth)
1422 depth = 1;
1423 RefPtr<TypeBuilder::Array<TypeBuilder::DOM::Node> > children = buildArra yForContainerChildren(node, depth, nodesMap);
1424 if (children->length() > 0 || depth) // Push children along with shadow in any case.
1425 value->setChildren(children.release());
1426 }
1427
1422 return value.release(); 1428 return value.release();
1423 } 1429 }
1424 1430
1425 PassRefPtr<TypeBuilder::Array<String> > InspectorDOMAgent::buildArrayForElementA ttributes(Element* element) 1431 PassRefPtr<TypeBuilder::Array<String> > InspectorDOMAgent::buildArrayForElementA ttributes(Element* element)
1426 { 1432 {
1427 RefPtr<TypeBuilder::Array<String> > attributesValue = TypeBuilder::Array<Str ing>::create(); 1433 RefPtr<TypeBuilder::Array<String> > attributesValue = TypeBuilder::Array<Str ing>::create();
1428 // Go through all attributes and serialize them. 1434 // Go through all attributes and serialize them.
1429 if (!element->hasAttributes()) 1435 if (!element->hasAttributes())
1430 return attributesValue.release(); 1436 return attributesValue.release();
1431 unsigned numAttrs = element->attributeCount(); 1437 unsigned numAttrs = element->attributeCount();
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 1828
1823 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m ainWorldScriptState(frame)); 1829 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m ainWorldScriptState(frame));
1824 if (injectedScript.hasNoValue()) 1830 if (injectedScript.hasNoValue())
1825 return 0; 1831 return 0;
1826 1832
1827 return injectedScript.wrapNode(node, objectGroup); 1833 return injectedScript.wrapNode(node, objectGroup);
1828 } 1834 }
1829 1835
1830 } // namespace WebCore 1836 } // namespace WebCore
1831 1837
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698