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

Side by Side Diff: Source/core/dom/Element.h

Issue 202633006: Use an unsigned of flags in ElementRareData (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add back clearHasPendingResources() 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 | « no previous file | Source/core/dom/Element.cpp » ('j') | Source/core/dom/ElementRareData.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013 Appl e Inc. All rights reserved. 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013 Appl e Inc. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 AffectedSelectorVisited = 1 << 6 68 AffectedSelectorVisited = 1 << 6
69 }; 69 };
70 typedef int AffectedSelectorMask; 70 typedef int AffectedSelectorMask;
71 71
72 enum SpellcheckAttributeState { 72 enum SpellcheckAttributeState {
73 SpellcheckAttributeTrue, 73 SpellcheckAttributeTrue,
74 SpellcheckAttributeFalse, 74 SpellcheckAttributeFalse,
75 SpellcheckAttributeDefault 75 SpellcheckAttributeDefault
76 }; 76 };
77 77
78 enum ElementFlags {
79 TabIndexWasSetExplicitly = 1 << 0,
80 NeedsFocusAppearanceUpdateSoonAfterAttach = 1 << 1,
81 StyleAffectedByEmpty = 1 << 2,
82 IsInCanvasSubtree = 1 << 3,
83 ContainsFullScreenElement = 1 << 4,
84 IsInTopLayer = 1 << 5,
85 HasPendingResources = 1 << 6,
86 ChildrenAffectedByFocus = 1 << 7,
87 ChildrenAffectedByHover = 1 << 8,
88 ChildrenAffectedByActive = 1 << 9,
89 ChildrenAffectedByDrag = 1 << 10,
90 ChildrenAffectedByFirstChildRules = 1 << 11,
91 ChildrenAffectedByLastChildRules = 1 << 12,
92 ChildrenAffectedByDirectAdjacentRules = 1 << 13,
93 ChildrenAffectedByForwardPositionalRules = 1 << 14,
94 ChildrenAffectedByBackwardPositionalRules = 1 << 15,
95
96 // If any of these flags are set we cannot share style.
97 ElementFlagsPreventingStyleSharing =
98 ChildrenAffectedByFocus
99 | ChildrenAffectedByHover
100 | ChildrenAffectedByActive
101 | ChildrenAffectedByDrag
102 | ChildrenAffectedByFirstChildRules
103 | ChildrenAffectedByLastChildRules
104 | ChildrenAffectedByDirectAdjacentRules
105 | ChildrenAffectedByForwardPositionalRules
106 | ChildrenAffectedByBackwardPositionalRules,
107 };
108
78 class Element : public ContainerNode { 109 class Element : public ContainerNode {
79 public: 110 public:
80 static PassRefPtr<Element> create(const QualifiedName&, Document*); 111 static PassRefPtr<Element> create(const QualifiedName&, Document*);
81 virtual ~Element(); 112 virtual ~Element();
82 113
83 DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecopy); 114 DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecopy);
84 DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecut); 115 DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecut);
85 DEFINE_ATTRIBUTE_EVENT_LISTENER(beforepaste); 116 DEFINE_ATTRIBUTE_EVENT_LISTENER(beforepaste);
86 DEFINE_ATTRIBUTE_EVENT_LISTENER(copy); 117 DEFINE_ATTRIBUTE_EVENT_LISTENER(copy);
87 DEFINE_ATTRIBUTE_EVENT_LISTENER(cut); 118 DEFINE_ATTRIBUTE_EVENT_LISTENER(cut);
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 349
319 bool hasAuthorShadowRoot() const { return shadowRoot(); } 350 bool hasAuthorShadowRoot() const { return shadowRoot(); }
320 virtual void didAddShadowRoot(ShadowRoot&); 351 virtual void didAddShadowRoot(ShadowRoot&);
321 ShadowRoot* userAgentShadowRoot() const; 352 ShadowRoot* userAgentShadowRoot() const;
322 ShadowRoot& ensureUserAgentShadowRoot(); 353 ShadowRoot& ensureUserAgentShadowRoot();
323 bool isInDescendantTreeOf(const Element* shadowHost) const; 354 bool isInDescendantTreeOf(const Element* shadowHost) const;
324 355
325 RenderStyle* computedStyle(PseudoId = NOPSEUDO); 356 RenderStyle* computedStyle(PseudoId = NOPSEUDO);
326 357
327 // Methods for indicating the style is affected by dynamic updates (e.g., ch ildren changing, our position changing in our sibling list, etc.) 358 // Methods for indicating the style is affected by dynamic updates (e.g., ch ildren changing, our position changing in our sibling list, etc.)
328 bool styleAffectedByEmpty() const { return hasRareData() && rareDataStyleAff ectedByEmpty(); } 359 bool styleAffectedByEmpty() const { return hasElementFlag(StyleAffectedByEmp ty); }
329 bool childrenAffectedByFocus() const { return hasRareData() && rareDataChild renAffectedByFocus(); } 360 void setStyleAffectedByEmpty() { setElementFlag(StyleAffectedByEmpty); }
330 bool childrenAffectedByHover() const { return hasRareData() && rareDataChild renAffectedByHover(); } 361
331 bool childrenAffectedByActive() const { return hasRareData() && rareDataChil drenAffectedByActive(); } 362 bool childrenAffectedByFocus() const { return hasElementFlag(ChildrenAffecte dByFocus); }
332 bool childrenAffectedByDrag() const { return hasRareData() && rareDataChildr enAffectedByDrag(); } 363 void setChildrenAffectedByFocus() { setElementFlag(ChildrenAffectedByFocus); }
333 bool childrenAffectedByPositionalRules() const { return hasRareData() && (ra reDataChildrenAffectedByForwardPositionalRules() || rareDataChildrenAffectedByBa ckwardPositionalRules()); } 364
334 bool childrenAffectedByFirstChildRules() const { return hasRareData() && rar eDataChildrenAffectedByFirstChildRules(); } 365 bool childrenAffectedByHover() const { return hasElementFlag(ChildrenAffecte dByHover); }
335 bool childrenAffectedByLastChildRules() const { return hasRareData() && rare DataChildrenAffectedByLastChildRules(); } 366 void setChildrenAffectedByHover() { setElementFlag(ChildrenAffectedByHover); }
336 bool childrenAffectedByDirectAdjacentRules() const { return hasRareData() && rareDataChildrenAffectedByDirectAdjacentRules(); } 367
337 bool childrenAffectedByForwardPositionalRules() const { return hasRareData() && rareDataChildrenAffectedByForwardPositionalRules(); } 368 bool childrenAffectedByActive() const { return hasElementFlag(ChildrenAffect edByActive); }
338 bool childrenAffectedByBackwardPositionalRules() const { return hasRareData( ) && rareDataChildrenAffectedByBackwardPositionalRules(); } 369 void setChildrenAffectedByActive() { setElementFlag(ChildrenAffectedByActive ); }
370
371 bool childrenAffectedByDrag() const { return hasElementFlag(ChildrenAffected ByDrag); }
372 void setChildrenAffectedByDrag() { setElementFlag(ChildrenAffectedByDrag); }
373
374 bool childrenAffectedByPositionalRules() const { return hasElementFlag(Child renAffectedByForwardPositionalRules) || hasElementFlag(ChildrenAffectedByBackwar dPositionalRules); }
375
376 bool childrenAffectedByFirstChildRules() const { return hasElementFlag(Child renAffectedByFirstChildRules); }
377 void setChildrenAffectedByFirstChildRules() { setElementFlag(ChildrenAffecte dByFirstChildRules); }
378
379 bool childrenAffectedByLastChildRules() const { return hasElementFlag(Childr enAffectedByLastChildRules); }
380 void setChildrenAffectedByLastChildRules() { setElementFlag(ChildrenAffected ByLastChildRules); }
381
382 bool childrenAffectedByDirectAdjacentRules() const { return hasElementFlag(C hildrenAffectedByDirectAdjacentRules); }
383 void setChildrenAffectedByDirectAdjacentRules() { setElementFlag(ChildrenAff ectedByDirectAdjacentRules); }
384
385 bool childrenAffectedByForwardPositionalRules() const { return hasElementFla g(ChildrenAffectedByForwardPositionalRules); }
386 void setChildrenAffectedByForwardPositionalRules() { setElementFlag(Children AffectedByForwardPositionalRules); }
387
388 bool childrenAffectedByBackwardPositionalRules() const { return hasElementFl ag(ChildrenAffectedByBackwardPositionalRules); }
389 void setChildrenAffectedByBackwardPositionalRules() { setElementFlag(Childre nAffectedByBackwardPositionalRules); }
390
391 void setIsInCanvasSubtree(bool value) { setElementFlag(IsInCanvasSubtree, va lue); }
392 bool isInCanvasSubtree() const { return hasElementFlag(IsInCanvasSubtree); }
393
339 unsigned childIndex() const { return hasRareData() ? rareDataChildIndex() : 0; } 394 unsigned childIndex() const { return hasRareData() ? rareDataChildIndex() : 0; }
340
341 bool childrenSupportStyleSharing() const;
342
343 void setStyleAffectedByEmpty();
344 void setChildrenAffectedByFocus();
345 void setChildrenAffectedByHover();
346 void setChildrenAffectedByActive();
347 void setChildrenAffectedByDrag();
348 void setChildrenAffectedByFirstChildRules();
349 void setChildrenAffectedByLastChildRules();
350 void setChildrenAffectedByDirectAdjacentRules();
351 void setChildrenAffectedByForwardPositionalRules();
352 void setChildrenAffectedByBackwardPositionalRules();
353 void setChildIndex(unsigned); 395 void setChildIndex(unsigned);
354 396
355 void setIsInCanvasSubtree(bool); 397 bool childrenSupportStyleSharing() const { return !hasElementFlag(ElementFla gsPreventingStyleSharing); }
356 bool isInCanvasSubtree() const;
357 398
358 bool isUpgradedCustomElement() { return customElementState() == Upgraded; } 399 bool isUpgradedCustomElement() { return customElementState() == Upgraded; }
359 bool isUnresolvedCustomElement() { return customElementState() == WaitingFor Upgrade; } 400 bool isUnresolvedCustomElement() { return customElementState() == WaitingFor Upgrade; }
360 401
361 AtomicString computeInheritedLanguage() const; 402 AtomicString computeInheritedLanguage() const;
362 Locale& locale() const; 403 Locale& locale() const;
363 404
364 virtual void accessKeyAction(bool /*sendToAnyEvent*/) { } 405 virtual void accessKeyAction(bool /*sendToAnyEvent*/) { }
365 406
366 virtual bool isURLAttribute(const Attribute&) const { return false; } 407 virtual bool isURLAttribute(const Attribute&) const { return false; }
367 virtual bool isHTMLContentAttribute(const Attribute&) const { return false; } 408 virtual bool isHTMLContentAttribute(const Attribute&) const { return false; }
368 409
369 KURL getURLAttribute(const QualifiedName&) const; 410 KURL getURLAttribute(const QualifiedName&) const;
370 KURL getNonEmptyURLAttribute(const QualifiedName&) const; 411 KURL getNonEmptyURLAttribute(const QualifiedName&) const;
371 412
372 virtual const AtomicString imageSourceURL() const; 413 virtual const AtomicString imageSourceURL() const;
373 virtual Image* imageContents() { return 0; } 414 virtual Image* imageContents() { return 0; }
374 415
375 virtual void focus(bool restorePreviousSelection = true, FocusType = FocusTy peNone); 416 virtual void focus(bool restorePreviousSelection = true, FocusType = FocusTy peNone);
376 virtual void updateFocusAppearance(bool restorePreviousSelection); 417 virtual void updateFocusAppearance(bool restorePreviousSelection);
377 virtual void blur(); 418 virtual void blur();
378 // Whether this element can receive focus at all. Most elements are not 419 // Whether this element can receive focus at all. Most elements are not
379 // focusable but some elements, such as form controls and links, are. Unlike 420 // focusable but some elements, such as form controls and links, are. Unlike
380 // rendererIsFocusable(), this method may be called when layout is not up to 421 // rendererIsFocusable(), this method may be called when layout is not up to
381 // date, so it must not use the renderer to determine focusability. 422 // date, so it must not use the renderer to determine focusability.
382 virtual bool supportsFocus() const; 423 virtual bool supportsFocus() const { return hasElementFlag(TabIndexWasSetExp licitly); }
383 // Whether the node can actually be focused. 424 // Whether the node can actually be focused.
384 bool isFocusable() const; 425 bool isFocusable() const;
385 virtual bool isKeyboardFocusable() const; 426 virtual bool isKeyboardFocusable() const;
386 virtual bool isMouseFocusable() const; 427 virtual bool isMouseFocusable() const;
387 virtual void dispatchFocusEvent(Element* oldFocusedElement, FocusType); 428 virtual void dispatchFocusEvent(Element* oldFocusedElement, FocusType);
388 virtual void dispatchBlurEvent(Element* newFocusedElement); 429 virtual void dispatchBlurEvent(Element* newFocusedElement);
389 void dispatchFocusInEvent(const AtomicString& eventType, Element* oldFocused Element); 430 void dispatchFocusInEvent(const AtomicString& eventType, Element* oldFocused Element);
390 void dispatchFocusOutEvent(const AtomicString& eventType, Element* newFocuse dElement); 431 void dispatchFocusOutEvent(const AtomicString& eventType, Element* newFocuse dElement);
391 432
392 String innerText(); 433 String innerText();
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 virtual bool isFrameElementBase() const { return false; } 502 virtual bool isFrameElementBase() const { return false; }
462 virtual bool isPasswordGeneratorButtonElement() const { return false; } 503 virtual bool isPasswordGeneratorButtonElement() const { return false; }
463 virtual bool isClearButtonElement() const { return false; } 504 virtual bool isClearButtonElement() const { return false; }
464 505
465 virtual bool canContainRangeEndPoint() const OVERRIDE { return true; } 506 virtual bool canContainRangeEndPoint() const OVERRIDE { return true; }
466 507
467 // Used for disabled form elements; if true, prevents mouse events from bein g dispatched 508 // Used for disabled form elements; if true, prevents mouse events from bein g dispatched
468 // to event listeners, and prevents DOMActivate events from being sent at al l. 509 // to event listeners, and prevents DOMActivate events from being sent at al l.
469 virtual bool isDisabledFormControl() const { return false; } 510 virtual bool isDisabledFormControl() const { return false; }
470 511
471 bool hasPendingResources() const; 512 bool hasPendingResources() const { return hasElementFlag(HasPendingResources ); }
472 void setHasPendingResources(); 513 void setHasPendingResources(bool value) { setElementFlag(HasPendingResources ); }
473 void clearHasPendingResources(); 514 void clearHasPendingResources() { clearFlag(HasPendingResources); }
474 virtual void buildPendingResource() { }; 515 virtual void buildPendingResource() { };
475 516
476 enum { 517 enum {
477 ALLOW_KEYBOARD_INPUT = 1 << 0, 518 ALLOW_KEYBOARD_INPUT = 1 << 0,
478 LEGACY_MOZILLA_REQUEST = 1 << 1, 519 LEGACY_MOZILLA_REQUEST = 1 << 1,
479 }; 520 };
480 521
481 void webkitRequestFullScreen(unsigned short flags); 522 void webkitRequestFullScreen(unsigned short flags);
482 bool containsFullScreenElement() const; 523 bool containsFullScreenElement() const { return hasElementFlag(ContainsFullS creenElement); }
483 void setContainsFullScreenElement(bool); 524 void setContainsFullScreenElement(bool);
484 void setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(bool); 525 void setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(bool);
485 526
486 // W3C API 527 // W3C API
487 void webkitRequestFullscreen(); 528 void webkitRequestFullscreen();
488 529
489 bool isInTopLayer() const; 530 bool isInTopLayer() const { return hasElementFlag(IsInTopLayer); }
490 void setIsInTopLayer(bool); 531 void setIsInTopLayer(bool);
491 532
492 void webkitRequestPointerLock(); 533 void webkitRequestPointerLock();
493 534
494 bool isSpellCheckingEnabled() const; 535 bool isSpellCheckingEnabled() const;
495 536
496 // FIXME: public for RenderTreeBuilder, we shouldn't expose this though. 537 // FIXME: public for RenderTreeBuilder, we shouldn't expose this though.
497 PassRefPtr<RenderStyle> styleForRenderer(); 538 PassRefPtr<RenderStyle> styleForRenderer();
498 539
499 bool hasID() const; 540 bool hasID() const;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 // classAttributeChanged() exists to share code between 597 // classAttributeChanged() exists to share code between
557 // parseAttribute (called via setAttribute()) and 598 // parseAttribute (called via setAttribute()) and
558 // svgAttributeChanged (called when element.className.baseValue is set) 599 // svgAttributeChanged (called when element.className.baseValue is set)
559 void classAttributeChanged(const AtomicString& newClassString); 600 void classAttributeChanged(const AtomicString& newClassString);
560 601
561 PassRefPtr<RenderStyle> originalStyleForRenderer(); 602 PassRefPtr<RenderStyle> originalStyleForRenderer();
562 603
563 Node* insertAdjacent(const String& where, Node* newChild, ExceptionState&); 604 Node* insertAdjacent(const String& where, Node* newChild, ExceptionState&);
564 605
565 private: 606 private:
607 bool hasElementFlag(ElementFlags mask) const { return hasRareData() && hasEl ementFlagInternal(mask); }
608 void setElementFlag(ElementFlags, bool value = true);
609 void clearElementFlag(ElementFlags);
610 bool hasElementFlagInternal(ElementFlags) const;
611
566 void styleAttributeChanged(const AtomicString& newStyleString, AttributeModi ficationReason); 612 void styleAttributeChanged(const AtomicString& newStyleString, AttributeModi ficationReason);
567 613
568 void updatePresentationAttributeStyle(); 614 void updatePresentationAttributeStyle();
569 615
570 void inlineStyleChanged(); 616 void inlineStyleChanged();
571 PropertySetCSSStyleDeclaration* inlineStyleCSSOMWrapper(); 617 PropertySetCSSStyleDeclaration* inlineStyleCSSOMWrapper();
572 void setInlineStyleFromString(const AtomicString&); 618 void setInlineStyleFromString(const AtomicString&);
573 619
574 StyleRecalcChange recalcOwnStyle(StyleRecalcChange); 620 StyleRecalcChange recalcOwnStyle(StyleRecalcChange);
575 void recalcChildStyle(StyleRecalcChange); 621 void recalcChildStyle(StyleRecalcChange);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 inline void updateCallbackSelectors(RenderStyle* oldStyle, RenderStyle* newS tyle); 674 inline void updateCallbackSelectors(RenderStyle* oldStyle, RenderStyle* newS tyle);
629 inline void removeCallbackSelectors(); 675 inline void removeCallbackSelectors();
630 inline void addCallbackSelectors(); 676 inline void addCallbackSelectors();
631 677
632 // cloneNode is private so that non-virtual cloneElementWithChildren and clo neElementWithoutChildren 678 // cloneNode is private so that non-virtual cloneElementWithChildren and clo neElementWithoutChildren
633 // are used instead. 679 // are used instead.
634 virtual PassRefPtr<Node> cloneNode(bool deep) OVERRIDE; 680 virtual PassRefPtr<Node> cloneNode(bool deep) OVERRIDE;
635 virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren(); 681 virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren();
636 682
637 QualifiedName m_tagName; 683 QualifiedName m_tagName;
638 bool rareDataStyleAffectedByEmpty() const; 684
639 bool rareDataChildrenAffectedByFocus() const;
640 bool rareDataChildrenAffectedByHover() const;
641 bool rareDataChildrenAffectedByActive() const;
642 bool rareDataChildrenAffectedByDrag() const;
643 bool rareDataChildrenAffectedByFirstChildRules() const;
644 bool rareDataChildrenAffectedByLastChildRules() const;
645 bool rareDataChildrenAffectedByDirectAdjacentRules() const;
646 bool rareDataChildrenAffectedByForwardPositionalRules() const;
647 bool rareDataChildrenAffectedByBackwardPositionalRules() const;
648 unsigned rareDataChildIndex() const; 685 unsigned rareDataChildIndex() const;
649 686
650 SpellcheckAttributeState spellcheckAttributeState() const; 687 SpellcheckAttributeState spellcheckAttributeState() const;
651 688
652 void updateNamedItemRegistration(const AtomicString& oldName, const AtomicSt ring& newName); 689 void updateNamedItemRegistration(const AtomicString& oldName, const AtomicSt ring& newName);
653 void updateExtraNamedItemRegistration(const AtomicString& oldName, const Ato micString& newName); 690 void updateExtraNamedItemRegistration(const AtomicString& oldName, const Ato micString& newName);
654 691
655 void createUniqueElementData(); 692 void createUniqueElementData();
656 693
657 bool shouldInvalidateDistributionWhenAttributeChanged(ElementShadow*, const QualifiedName&, const AtomicString&); 694 bool shouldInvalidateDistributionWhenAttributeChanged(ElementShadow*, const QualifiedName&, const AtomicString&);
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 template <> inline bool isElementOfType<const thisType>(const Element& eleme nt) { return element.predicate; } \ 929 template <> inline bool isElementOfType<const thisType>(const Element& eleme nt) { return element.predicate; } \
893 DEFINE_NODE_TYPE_CASTS(thisType, predicate) 930 DEFINE_NODE_TYPE_CASTS(thisType, predicate)
894 931
895 #define DEFINE_ELEMENT_TYPE_CASTS_WITH_FUNCTION(thisType) \ 932 #define DEFINE_ELEMENT_TYPE_CASTS_WITH_FUNCTION(thisType) \
896 template <> inline bool isElementOfType<const thisType>(const Element& eleme nt) { return is##thisType(element); } \ 933 template <> inline bool isElementOfType<const thisType>(const Element& eleme nt) { return is##thisType(element); } \
897 DEFINE_NODE_TYPE_CASTS_WITH_FUNCTION(thisType) 934 DEFINE_NODE_TYPE_CASTS_WITH_FUNCTION(thisType)
898 935
899 } // namespace 936 } // namespace
900 937
901 #endif 938 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/core/dom/Element.cpp » ('j') | Source/core/dom/ElementRareData.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698