OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Neither the name of Google Inc. nor the names of its | 10 * * Neither the name of Google Inc. nor the names of its |
11 * contributors may be used to endorse or promote products derived from | 11 * contributors may be used to endorse or promote products derived from |
12 * this software without specific prior written permission. | 12 * this software without specific prior written permission. |
13 * | 13 * |
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
15 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 15 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
16 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 16 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
17 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 17 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
18 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 18 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
19 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 19 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
20 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 20 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 */ | 25 */ |
26 | 26 |
27 #include "config.h" | 27 #include "config.h" |
28 #include "core/dom/NodeRenderingTraversal.h" | 28 #include "core/dom/NodeRenderingTraversal.h" |
29 | 29 |
| 30 #include "HTMLNames.h" |
30 #include "core/dom/PseudoElement.h" | 31 #include "core/dom/PseudoElement.h" |
31 #include "core/dom/shadow/ComposedTreeWalker.h" | 32 #include "core/dom/shadow/ComposedTreeWalker.h" |
32 #include "core/rendering/RenderObject.h" | 33 #include "core/rendering/RenderObject.h" |
33 | 34 |
34 namespace WebCore { | 35 namespace WebCore { |
35 | 36 |
36 namespace NodeRenderingTraversal { | 37 namespace NodeRenderingTraversal { |
37 | 38 |
38 static bool isRendererReparented(const RenderObject* renderer) | 39 static bool isRendererReparented(const RenderObject* renderer) |
39 { | 40 { |
40 if (!renderer->node()->isElementNode()) | 41 if (!renderer->node()->isElementNode()) |
41 return false; | 42 return false; |
42 if (renderer->style() && !renderer->style()->flowThread().isEmpty()) | 43 if (renderer->style() && !renderer->style()->flowThread().isEmpty()) |
43 return true; | 44 return true; |
44 if (toElement(renderer->node())->shouldBeReparentedUnderRenderView(renderer-
>style())) | 45 Element& element = toElement(*renderer->node()); |
| 46 if (element.isInTopLayer()) |
| 47 return true; |
| 48 // FIXME: The spec should not require magical behavior for <dialog>. |
| 49 if (element.hasTagName(HTMLNames::dialogTag) && renderer->style()->position(
) == AbsolutePosition) |
45 return true; | 50 return true; |
46 return false; | 51 return false; |
47 } | 52 } |
48 | 53 |
49 void ParentDetails::didTraverseInsertionPoint(const InsertionPoint* insertionPoi
nt) | 54 void ParentDetails::didTraverseInsertionPoint(const InsertionPoint* insertionPoi
nt) |
50 { | 55 { |
51 if (!m_insertionPoint) { | 56 if (!m_insertionPoint) { |
52 m_insertionPoint = insertionPoint; | 57 m_insertionPoint = insertionPoint; |
53 m_resetStyleInheritance = m_resetStyleInheritance || insertionPoint->re
setStyleInheritance(); | 58 m_resetStyleInheritance = m_resetStyleInheritance || insertionPoint->re
setStyleInheritance(); |
54 } | 59 } |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 RenderObject* previousSiblingRenderer(const Node* node) | 127 RenderObject* previousSiblingRenderer(const Node* node) |
123 { | 128 { |
124 for (Node* sibling = NodeRenderingTraversal::previousSibling(node); sibling;
sibling = NodeRenderingTraversal::previousSibling(sibling)) { | 129 for (Node* sibling = NodeRenderingTraversal::previousSibling(node); sibling;
sibling = NodeRenderingTraversal::previousSibling(sibling)) { |
125 RenderObject* renderer = sibling->renderer(); | 130 RenderObject* renderer = sibling->renderer(); |
126 if (renderer && !isRendererReparented(renderer)) | 131 if (renderer && !isRendererReparented(renderer)) |
127 return renderer; | 132 return renderer; |
128 } | 133 } |
129 return 0; | 134 return 0; |
130 } | 135 } |
131 | 136 |
| 137 RenderObject* nextInTopLayer(const Element* element) |
| 138 { |
| 139 if (!element->isInTopLayer()) |
| 140 return 0; |
| 141 const Vector<RefPtr<Element> >& topLayerElements = element->document().topLa
yerElements(); |
| 142 size_t position = topLayerElements.find(element); |
| 143 ASSERT(position != kNotFound); |
| 144 for (size_t i = position + 1; i < topLayerElements.size(); ++i) { |
| 145 if (RenderObject* renderer = topLayerElements[i]->renderer()) |
| 146 return renderer; |
| 147 } |
| 148 return 0; |
| 149 } |
| 150 |
132 } | 151 } |
133 | 152 |
134 } // namespace | 153 } // namespace |
OLD | NEW |