OLD | NEW |
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 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
980 node->clearAttached(); | 980 node->clearAttached(); |
981 node->clearChildNeedsStyleRecalc(); | 981 node->clearChildNeedsStyleRecalc(); |
982 | 982 |
983 for (ShadowRoot* shadowRoot = node->youngestShadowRoot(); shadowRoot
; shadowRoot = shadowRoot->olderShadowRoot()) | 983 for (ShadowRoot* shadowRoot = node->youngestShadowRoot(); shadowRoot
; shadowRoot = shadowRoot->olderShadowRoot()) |
984 detachNode(shadowRoot, context); | 984 detachNode(shadowRoot, context); |
985 | 985 |
986 node = NodeTraversal::next(node, root); | 986 node = NodeTraversal::next(node, root); |
987 continue; | 987 continue; |
988 } | 988 } |
989 // Handle normal reattaches from style recalc (ex. display type changes) | 989 // Handle normal reattaches from style recalc (ex. display type changes) |
990 // or descendants of lazy attached nodes that got actually attached, for
example, | |
991 // by innerHTML or editing. | |
992 // FIXME: innerHTML and editing should also lazyAttach. | |
993 if (node->attached()) | 990 if (node->attached()) |
994 node->detach(context); | 991 node->detach(context); |
995 node = NodeTraversal::nextSkippingChildren(node, root); | 992 node = NodeTraversal::nextSkippingChildren(node, root); |
996 } | 993 } |
997 } | 994 } |
998 | 995 |
999 void Node::reattach(const AttachContext& context) | 996 void Node::reattach(const AttachContext& context) |
1000 { | 997 { |
1001 ASSERT(document().inStyleRecalc()); | |
1002 AttachContext reattachContext(context); | 998 AttachContext reattachContext(context); |
1003 reattachContext.performingReattach = true; | 999 reattachContext.performingReattach = true; |
1004 | 1000 |
1005 detachNode(this, reattachContext); | 1001 detachNode(this, reattachContext); |
1006 attach(reattachContext); | 1002 attach(reattachContext); |
1007 } | 1003 } |
1008 | 1004 |
1009 void Node::attach(const AttachContext&) | 1005 void Node::attach(const AttachContext&) |
1010 { | 1006 { |
| 1007 ASSERT(document().inStyleRecalc() || isDocumentNode()); |
1011 ASSERT(!attached()); | 1008 ASSERT(!attached()); |
1012 ASSERT(!renderer() || (renderer()->style() && (renderer()->parent() || rende
rer()->isRenderView()))); | 1009 ASSERT(!renderer() || (renderer()->style() && (renderer()->parent() || rende
rer()->isRenderView()))); |
1013 | 1010 |
1014 // If this node got a renderer it may be the previousRenderer() of sibling t
ext nodes and thus affect the | |
1015 // result of Text::textRendererIsNeeded() for those nodes. | |
1016 // FIXME: This loop is no longer required once we lazy attach all the time. | |
1017 if (renderer() && !document().inStyleRecalc()) { | |
1018 for (Node* next = nextSibling(); next; next = next->nextSibling()) { | |
1019 if (next->renderer()) | |
1020 break; | |
1021 if (!next->attached()) | |
1022 break; // Assume this means none of the following siblings are a
ttached. | |
1023 if (!next->isTextNode()) | |
1024 continue; | |
1025 ASSERT(!next->renderer()); | |
1026 toText(next)->reattach(); | |
1027 // If we again decided not to create a renderer for next, we can bai
l out the loop, | |
1028 // because it won't affect the result of Text::textRendererIsNeeded(
) for the rest | |
1029 // of sibling nodes. | |
1030 if (!next->renderer()) | |
1031 break; | |
1032 } | |
1033 } | |
1034 | |
1035 setAttached(); | 1011 setAttached(); |
1036 clearNeedsStyleRecalc(); | 1012 clearNeedsStyleRecalc(); |
1037 | 1013 |
1038 if (Document* doc = documentInternal()) { | 1014 if (Document* doc = documentInternal()) { |
1039 if (AXObjectCache* cache = doc->axObjectCache()) | 1015 if (AXObjectCache* cache = doc->axObjectCache()) |
1040 cache->updateCacheAfterNodeIsAttached(this); | 1016 cache->updateCacheAfterNodeIsAttached(this); |
1041 } | 1017 } |
1042 } | 1018 } |
1043 | 1019 |
1044 #ifndef NDEBUG | 1020 #ifndef NDEBUG |
(...skipping 1658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2703 node->showTreeForThis(); | 2679 node->showTreeForThis(); |
2704 } | 2680 } |
2705 | 2681 |
2706 void showNodePath(const WebCore::Node* node) | 2682 void showNodePath(const WebCore::Node* node) |
2707 { | 2683 { |
2708 if (node) | 2684 if (node) |
2709 node->showNodePathForThis(); | 2685 node->showNodePathForThis(); |
2710 } | 2686 } |
2711 | 2687 |
2712 #endif | 2688 #endif |
OLD | NEW |