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

Side by Side Diff: Source/core/html/HTMLElement.cpp

Issue 302433015: Use correct offset when attribute auto is present (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Removes hasDirectionAutoAttribute function and sets all nodes in setHasDirAutoFlagRecursively with … Created 6 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
« no previous file with comments | « Source/core/dom/Position.cpp ('k') | no next file » | 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) 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 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
5 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 5 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
6 * Copyright (C) 2011 Motorola Mobility. All rights reserved. 6 * Copyright (C) 2011 Motorola Mobility. 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 20 matching lines...) Expand all
31 #include "XMLNames.h" 31 #include "XMLNames.h"
32 #include "bindings/v8/ExceptionState.h" 32 #include "bindings/v8/ExceptionState.h"
33 #include "bindings/v8/ScriptEventListener.h" 33 #include "bindings/v8/ScriptEventListener.h"
34 #include "core/css/CSSMarkup.h" 34 #include "core/css/CSSMarkup.h"
35 #include "core/css/CSSValuePool.h" 35 #include "core/css/CSSValuePool.h"
36 #include "core/css/StylePropertySet.h" 36 #include "core/css/StylePropertySet.h"
37 #include "core/dom/DocumentFragment.h" 37 #include "core/dom/DocumentFragment.h"
38 #include "core/dom/ExceptionCode.h" 38 #include "core/dom/ExceptionCode.h"
39 #include "core/dom/NodeTraversal.h" 39 #include "core/dom/NodeTraversal.h"
40 #include "core/dom/Text.h" 40 #include "core/dom/Text.h"
41 #include "core/dom/shadow/ShadowRoot.h"
41 #include "core/editing/markup.h" 42 #include "core/editing/markup.h"
42 #include "core/events/EventListener.h" 43 #include "core/events/EventListener.h"
43 #include "core/events/KeyboardEvent.h" 44 #include "core/events/KeyboardEvent.h"
44 #include "core/frame/Settings.h" 45 #include "core/frame/Settings.h"
45 #include "core/html/HTMLBRElement.h" 46 #include "core/html/HTMLBRElement.h"
46 #include "core/html/HTMLFormElement.h" 47 #include "core/html/HTMLFormElement.h"
47 #include "core/html/HTMLInputElement.h" 48 #include "core/html/HTMLInputElement.h"
48 #include "core/html/HTMLTemplateElement.h" 49 #include "core/html/HTMLTemplateElement.h"
49 #include "core/html/HTMLTextFormControlElement.h" 50 #include "core/html/HTMLTextFormControlElement.h"
50 #include "core/html/parser/HTMLParserIdioms.h" 51 #include "core/html/parser/HTMLParserIdioms.h"
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 return node->isHTMLElement() && (isHTMLBDIElement(*node) || toHTMLElement(no de)->hasAttribute(dirAttr)); 631 return node->isHTMLElement() && (isHTMLBDIElement(*node) || toHTMLElement(no de)->hasAttribute(dirAttr));
631 } 632 }
632 633
633 static void setHasDirAutoFlagRecursively(Node* firstNode, bool flag, Node* lastN ode = 0) 634 static void setHasDirAutoFlagRecursively(Node* firstNode, bool flag, Node* lastN ode = 0)
634 { 635 {
635 firstNode->setSelfOrAncestorHasDirAutoAttribute(flag); 636 firstNode->setSelfOrAncestorHasDirAutoAttribute(flag);
636 637
637 Node* node = firstNode->firstChild(); 638 Node* node = firstNode->firstChild();
638 639
639 while (node) { 640 while (node) {
640 if (node->selfOrAncestorHasDirAutoAttribute() == flag)
641 return;
642
643 if (elementAffectsDirectionality(node)) { 641 if (elementAffectsDirectionality(node)) {
644 if (node == lastNode) 642 if (node == lastNode)
645 return; 643 return;
646 node = NodeTraversal::nextSkippingChildren(*node, firstNode); 644 node = NodeTraversal::nextSkippingChildren(*node, firstNode);
647 continue; 645 continue;
648 } 646 }
649 node->setSelfOrAncestorHasDirAutoAttribute(flag); 647 node->setSelfOrAncestorHasDirAutoAttribute(flag);
650 if (node == lastNode) 648 if (node == lastNode)
651 return; 649 return;
652 node = NodeTraversal::next(*node, firstNode); 650 node = NodeTraversal::next(*node, firstNode);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 return; 744 return;
747 } 745 }
748 } 746 }
749 } 747 }
750 } 748 }
751 749
752 void HTMLElement::calculateAndAdjustDirectionality() 750 void HTMLElement::calculateAndAdjustDirectionality()
753 { 751 {
754 Node* strongDirectionalityTextNode; 752 Node* strongDirectionalityTextNode;
755 TextDirection textDirection = directionality(&strongDirectionalityTextNode); 753 TextDirection textDirection = directionality(&strongDirectionalityTextNode);
756 setHasDirAutoFlagRecursively(this, true, strongDirectionalityTextNode); 754 if (hasDirectionAuto()) {
755 setHasDirAutoFlagRecursively(this, true, strongDirectionalityTextNode);
756 if (userAgentShadowRoot())
757 setHasDirAutoFlagRecursively(userAgentShadowRoot(), true);
esprehn 2014/06/11 17:38:07 This should be doing: for(ShadowRoot* root = youn
Habib Virji 2014/06/11 17:48:11 Done.
758 } else {
759 setHasDirAutoFlagRecursively(this, false, strongDirectionalityTextNode);
760 if (userAgentShadowRoot())
761 setHasDirAutoFlagRecursively(userAgentShadowRoot(), false);
762 }
757 if (renderer() && renderer()->style() && renderer()->style()->direction() != textDirection) 763 if (renderer() && renderer()->style() && renderer()->style()->direction() != textDirection)
758 setNeedsStyleRecalc(SubtreeStyleChange); 764 setNeedsStyleRecalc(SubtreeStyleChange);
759 } 765 }
760 766
761 void HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged(Node* beforeC hange, int childCountDelta) 767 void HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged(Node* beforeC hange, int childCountDelta)
762 { 768 {
763 if (document().renderView() && childCountDelta < 0) { 769 if (document().renderView() && childCountDelta < 0) {
764 Node* node = beforeChange ? NodeTraversal::nextSkippingChildren(*beforeC hange) : 0; 770 Node* node = beforeChange ? NodeTraversal::nextSkippingChildren(*beforeC hange) : 0;
765 for (int counter = 0; node && counter < childCountDelta; counter++, node = NodeTraversal::nextSkippingChildren(*node)) { 771 for (int counter = 0; node && counter < childCountDelta; counter++, node = NodeTraversal::nextSkippingChildren(*node)) {
766 if (elementAffectsDirectionality(node)) 772 if (elementAffectsDirectionality(node))
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 #ifndef NDEBUG 961 #ifndef NDEBUG
956 962
957 // For use in the debugger 963 // For use in the debugger
958 void dumpInnerHTML(WebCore::HTMLElement*); 964 void dumpInnerHTML(WebCore::HTMLElement*);
959 965
960 void dumpInnerHTML(WebCore::HTMLElement* element) 966 void dumpInnerHTML(WebCore::HTMLElement* element)
961 { 967 {
962 printf("%s\n", element->innerHTML().ascii().data()); 968 printf("%s\n", element->innerHTML().ascii().data());
963 } 969 }
964 #endif 970 #endif
OLDNEW
« no previous file with comments | « Source/core/dom/Position.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698