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

Side by Side Diff: third_party/WebKit/Source/core/dom/TreeScope.cpp

Issue 1939303002: Enable accessible name of a control to include multiple <label> elements. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't modify visited set when computing aria-labelledby Created 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All Rights Reserved. 2 * Copyright (C) 2011 Google Inc. All Rights Reserved.
3 * Copyright (C) 2012 Apple Inc. All rights reserved. 3 * Copyright (C) 2012 Apple Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
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 26 matching lines...) Expand all
37 #include "core/dom/StyleChangeReason.h" 37 #include "core/dom/StyleChangeReason.h"
38 #include "core/dom/TreeScopeAdopter.h" 38 #include "core/dom/TreeScopeAdopter.h"
39 #include "core/dom/shadow/ElementShadow.h" 39 #include "core/dom/shadow/ElementShadow.h"
40 #include "core/dom/shadow/ShadowRoot.h" 40 #include "core/dom/shadow/ShadowRoot.h"
41 #include "core/editing/DOMSelection.h" 41 #include "core/editing/DOMSelection.h"
42 #include "core/events/EventPath.h" 42 #include "core/events/EventPath.h"
43 #include "core/frame/FrameView.h" 43 #include "core/frame/FrameView.h"
44 #include "core/frame/LocalFrame.h" 44 #include "core/frame/LocalFrame.h"
45 #include "core/html/HTMLAnchorElement.h" 45 #include "core/html/HTMLAnchorElement.h"
46 #include "core/html/HTMLFrameOwnerElement.h" 46 #include "core/html/HTMLFrameOwnerElement.h"
47 #include "core/html/HTMLLabelElement.h"
48 #include "core/html/HTMLMapElement.h" 47 #include "core/html/HTMLMapElement.h"
49 #include "core/layout/HitTestResult.h" 48 #include "core/layout/HitTestResult.h"
50 #include "core/layout/api/LayoutViewItem.h" 49 #include "core/layout/api/LayoutViewItem.h"
51 #include "core/page/FocusController.h" 50 #include "core/page/FocusController.h"
52 #include "core/page/Page.h" 51 #include "core/page/Page.h"
53 #include "wtf/Vector.h" 52 #include "wtf/Vector.h"
54 53
55 namespace blink { 54 namespace blink {
56 55
57 using namespace HTMLNames; 56 using namespace HTMLNames;
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 if (!pointWithScrollAndZoomIfPossible(document, hitPoint)) 295 if (!pointWithScrollAndZoomIfPossible(document, hitPoint))
297 return HeapVector<Member<Element>>(); 296 return HeapVector<Member<Element>>();
298 297
299 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | H itTestRequest::ListBased | HitTestRequest::PenetratingList); 298 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | H itTestRequest::ListBased | HitTestRequest::PenetratingList);
300 HitTestResult result(request, hitPoint); 299 HitTestResult result(request, hitPoint);
301 document.layoutViewItem().hitTest(result); 300 document.layoutViewItem().hitTest(result);
302 301
303 return elementsFromHitTestResult(result); 302 return elementsFromHitTestResult(result);
304 } 303 }
305 304
306 void TreeScope::addLabel(const AtomicString& forAttributeValue, HTMLLabelElement * element)
307 {
308 DCHECK(m_labelsByForAttribute);
309 m_labelsByForAttribute->add(forAttributeValue, element);
310 }
311
312 void TreeScope::removeLabel(const AtomicString& forAttributeValue, HTMLLabelElem ent* element)
313 {
314 DCHECK(m_labelsByForAttribute);
315 m_labelsByForAttribute->remove(forAttributeValue, element);
316 }
317
318 HTMLLabelElement* TreeScope::labelElementForId(const AtomicString& forAttributeV alue)
319 {
320 if (forAttributeValue.isEmpty())
321 return nullptr;
322
323 if (!m_labelsByForAttribute) {
324 // Populate the map on first access.
325 m_labelsByForAttribute = DocumentOrderedMap::create();
326 for (HTMLLabelElement& label : Traversal<HTMLLabelElement>::startsAfter( rootNode())) {
327 const AtomicString& forValue = label.fastGetAttribute(forAttr);
328 if (!forValue.isEmpty())
329 addLabel(forValue, &label);
330 }
331 }
332
333 return toHTMLLabelElement(m_labelsByForAttribute->getElementByLabelForAttrib ute(forAttributeValue, this));
334 }
335
336 DOMSelection* TreeScope::getSelection() const 305 DOMSelection* TreeScope::getSelection() const
337 { 306 {
338 if (!rootNode().document().frame()) 307 if (!rootNode().document().frame())
339 return nullptr; 308 return nullptr;
340 309
341 if (m_selection) 310 if (m_selection)
342 return m_selection.get(); 311 return m_selection.get();
343 312
344 // FIXME: The correct selection in Shadow DOM requires that Position can hav e a ShadowRoot 313 // FIXME: The correct selection in Shadow DOM requires that Position can hav e a ShadowRoot
345 // as a container. 314 // as a container.
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 496
528 DEFINE_TRACE(TreeScope) 497 DEFINE_TRACE(TreeScope)
529 { 498 {
530 visitor->trace(m_rootNode); 499 visitor->trace(m_rootNode);
531 visitor->trace(m_document); 500 visitor->trace(m_document);
532 visitor->trace(m_parentTreeScope); 501 visitor->trace(m_parentTreeScope);
533 visitor->trace(m_idTargetObserverRegistry); 502 visitor->trace(m_idTargetObserverRegistry);
534 visitor->trace(m_selection); 503 visitor->trace(m_selection);
535 visitor->trace(m_elementsById); 504 visitor->trace(m_elementsById);
536 visitor->trace(m_imageMapsByName); 505 visitor->trace(m_imageMapsByName);
537 visitor->trace(m_labelsByForAttribute);
538 visitor->trace(m_scopedStyleResolver); 506 visitor->trace(m_scopedStyleResolver);
539 visitor->trace(m_radioButtonGroupScope); 507 visitor->trace(m_radioButtonGroupScope);
540 } 508 }
541 509
542 } // namespace blink 510 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/TreeScope.h ('k') | third_party/WebKit/Source/core/html/HTMLLabelElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698