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

Side by Side Diff: Source/core/dom/NodeRenderingContext.cpp

Issue 23819007: Have Node::document() return a reference instead of a pointer (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase on master Created 7 years, 3 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 | « Source/core/dom/NodeIterator.cpp ('k') | Source/core/dom/Position.h » ('j') | 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 * (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, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
7 * Copyright (C) 2011 Google Inc. All rights reserved. 7 * Copyright (C) 2011 Google Inc. All rights reserved.
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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 if (element && element->shouldBeReparentedUnderRenderView(m_style.get())) { 72 if (element && element->shouldBeReparentedUnderRenderView(m_style.get())) {
73 // FIXME: Reparented renderers not in the top layer should probably be 73 // FIXME: Reparented renderers not in the top layer should probably be
74 // ordered in DOM tree order. We don't have a good way to do that yet, 74 // ordered in DOM tree order. We don't have a good way to do that yet,
75 // since NodeRenderingTraversal isn't aware of reparenting. It's safe to 75 // since NodeRenderingTraversal isn't aware of reparenting. It's safe to
76 // just append for now; it doesn't disrupt the top layer rendering as 76 // just append for now; it doesn't disrupt the top layer rendering as
77 // the layer collection in RenderLayer only requires that top layer 77 // the layer collection in RenderLayer only requires that top layer
78 // renderers are orderered correctly relative to each other. 78 // renderers are orderered correctly relative to each other.
79 if (!element->isInTopLayer()) 79 if (!element->isInTopLayer())
80 return 0; 80 return 0;
81 81
82 const Vector<RefPtr<Element> >& topLayerElements = element->document()-> topLayerElements(); 82 const Vector<RefPtr<Element> >& topLayerElements = element->document().t opLayerElements();
83 size_t position = topLayerElements.find(element); 83 size_t position = topLayerElements.find(element);
84 ASSERT(position != notFound); 84 ASSERT(position != notFound);
85 for (size_t i = position + 1; i < topLayerElements.size(); ++i) { 85 for (size_t i = position + 1; i < topLayerElements.size(); ++i) {
86 if (RenderObject* renderer = topLayerElements[i]->renderer()) 86 if (RenderObject* renderer = topLayerElements[i]->renderer())
87 return renderer; 87 return renderer;
88 } 88 }
89 return 0; 89 return 0;
90 } 90 }
91 91
92 if (m_parentFlowRenderer) 92 if (m_parentFlowRenderer)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 137
138 if (m_node->isElementNode() && toElement(m_node)->shouldBeReparentedUnderRen derView(m_style.get())) { 138 if (m_node->isElementNode() && toElement(m_node)->shouldBeReparentedUnderRen derView(m_style.get())) {
139 // The parent renderer of reparented elements is the RenderView, but onl y 139 // The parent renderer of reparented elements is the RenderView, but onl y
140 // if the normal parent would have had a renderer. 140 // if the normal parent would have had a renderer.
141 // FIXME: This behavior isn't quite right as the spec for top layer 141 // FIXME: This behavior isn't quite right as the spec for top layer
142 // only talks about display: none ancestors so putting a <dialog> inside 142 // only talks about display: none ancestors so putting a <dialog> inside
143 // an <optgroup> seems like it should still work even though this check 143 // an <optgroup> seems like it should still work even though this check
144 // will prevent it. 144 // will prevent it.
145 if (!m_renderingParent || !m_renderingParent->renderer()) 145 if (!m_renderingParent || !m_renderingParent->renderer())
146 return 0; 146 return 0;
147 return m_node->document()->renderView(); 147 return m_node->document().renderView();
148 } 148 }
149 149
150 if (m_parentFlowRenderer) 150 if (m_parentFlowRenderer)
151 return m_parentFlowRenderer; 151 return m_parentFlowRenderer;
152 152
153 return m_renderingParent ? m_renderingParent->renderer() : 0; 153 return m_renderingParent ? m_renderingParent->renderer() : 0;
154 } 154 }
155 155
156 bool NodeRenderingContext::shouldCreateRenderer() const 156 bool NodeRenderingContext::shouldCreateRenderer() const
157 { 157 {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 void NodeRenderingContext::moveToFlowThreadIfNeeded() 192 void NodeRenderingContext::moveToFlowThreadIfNeeded()
193 { 193 {
194 if (!RuntimeEnabledFeatures::cssRegionsEnabled()) 194 if (!RuntimeEnabledFeatures::cssRegionsEnabled())
195 return; 195 return;
196 196
197 Element* element = toElement(m_node); 197 Element* element = toElement(m_node);
198 198
199 if (!element->shouldMoveToFlowThread(m_style.get())) 199 if (!element->shouldMoveToFlowThread(m_style.get()))
200 return; 200 return;
201 201
202 ASSERT(m_node->document()->renderView()); 202 ASSERT(m_node->document().renderView());
203 FlowThreadController* flowThreadController = m_node->document()->renderView( )->flowThreadController(); 203 FlowThreadController* flowThreadController = m_node->document().renderView() ->flowThreadController();
204 m_parentFlowRenderer = flowThreadController->ensureRenderFlowThreadWithName( m_style->flowThread()); 204 m_parentFlowRenderer = flowThreadController->ensureRenderFlowThreadWithName( m_style->flowThread());
205 flowThreadController->registerNamedFlowContentNode(m_node, m_parentFlowRende rer); 205 flowThreadController->registerNamedFlowContentNode(m_node, m_parentFlowRende rer);
206 } 206 }
207 207
208 void NodeRenderingContext::createRendererForElementIfNeeded() 208 void NodeRenderingContext::createRendererForElementIfNeeded()
209 { 209 {
210 ASSERT(!m_node->renderer()); 210 ASSERT(!m_node->renderer());
211 211
212 Element* element = toElement(m_node); 212 Element* element = toElement(m_node);
213 213
(...skipping 26 matching lines...) Expand all
240 240
241 // Make sure the RenderObject already knows it is going to be added to a Ren derFlowThread before we set the style 241 // Make sure the RenderObject already knows it is going to be added to a Ren derFlowThread before we set the style
242 // for the first time. Otherwise code using inRenderFlowThread() in the styl eWillChange and styleDidChange will fail. 242 // for the first time. Otherwise code using inRenderFlowThread() in the styl eWillChange and styleDidChange will fail.
243 newRenderer->setFlowThreadState(parentRenderer->flowThreadState()); 243 newRenderer->setFlowThreadState(parentRenderer->flowThreadState());
244 244
245 RenderObject* nextRenderer = this->nextRenderer(); 245 RenderObject* nextRenderer = this->nextRenderer();
246 element->setRenderer(newRenderer); 246 element->setRenderer(newRenderer);
247 newRenderer->setAnimatableStyle(m_style.release()); // setAnimatableStyle() can depend on renderer() already being set. 247 newRenderer->setAnimatableStyle(m_style.release()); // setAnimatableStyle() can depend on renderer() already being set.
248 248
249 if (FullscreenElementStack::isActiveFullScreenElement(element)) { 249 if (FullscreenElementStack::isActiveFullScreenElement(element)) {
250 newRenderer = RenderFullScreen::wrapRenderer(newRenderer, parentRenderer , element->document()); 250 newRenderer = RenderFullScreen::wrapRenderer(newRenderer, parentRenderer , &element->document());
251 if (!newRenderer) 251 if (!newRenderer)
252 return; 252 return;
253 } 253 }
254 254
255 // Note: Adding newRenderer instead of renderer(). renderer() may be a child of newRenderer. 255 // Note: Adding newRenderer instead of renderer(). renderer() may be a child of newRenderer.
256 parentRenderer->addChild(newRenderer, nextRenderer); 256 parentRenderer->addChild(newRenderer, nextRenderer);
257 } 257 }
258 258
259 void NodeRenderingContext::createRendererForTextIfNeeded() 259 void NodeRenderingContext::createRendererForTextIfNeeded()
260 { 260 {
261 ASSERT(!m_node->renderer()); 261 ASSERT(!m_node->renderer());
262 262
263 Text* textNode = toText(m_node); 263 Text* textNode = toText(m_node);
264 264
265 if (!shouldCreateRenderer()) 265 if (!shouldCreateRenderer())
266 return; 266 return;
267 267
268 RenderObject* parentRenderer = this->parentRenderer(); 268 RenderObject* parentRenderer = this->parentRenderer();
269 269
270 if (m_parentDetails.resetStyleInheritance()) 270 if (m_parentDetails.resetStyleInheritance())
271 m_style = textNode->document()->styleResolver()->defaultStyleForElement( ); 271 m_style = textNode->document().styleResolver()->defaultStyleForElement() ;
272 else 272 else
273 m_style = parentRenderer->style(); 273 m_style = parentRenderer->style();
274 274
275 if (!textNode->textRendererIsNeeded(*this)) 275 if (!textNode->textRendererIsNeeded(*this))
276 return; 276 return;
277 277
278 RenderText* newRenderer = textNode->createTextRenderer(m_style.get()); 278 RenderText* newRenderer = textNode->createTextRenderer(m_style.get());
279 if (!parentRenderer->isChildAllowed(newRenderer, m_style.get())) { 279 if (!parentRenderer->isChildAllowed(newRenderer, m_style.get())) {
280 newRenderer->destroy(); 280 newRenderer->destroy();
281 return; 281 return;
282 } 282 }
283 283
284 // Make sure the RenderObject already knows it is going to be added to a Ren derFlowThread before we set the style 284 // Make sure the RenderObject already knows it is going to be added to a Ren derFlowThread before we set the style
285 // for the first time. Otherwise code using inRenderFlowThread() in the styl eWillChange and styleDidChange will fail. 285 // for the first time. Otherwise code using inRenderFlowThread() in the styl eWillChange and styleDidChange will fail.
286 newRenderer->setFlowThreadState(parentRenderer->flowThreadState()); 286 newRenderer->setFlowThreadState(parentRenderer->flowThreadState());
287 287
288 RenderObject* nextRenderer = this->nextRenderer(); 288 RenderObject* nextRenderer = this->nextRenderer();
289 textNode->setRenderer(newRenderer); 289 textNode->setRenderer(newRenderer);
290 // Parent takes care of the animations, no need to call setAnimatableStyle. 290 // Parent takes care of the animations, no need to call setAnimatableStyle.
291 newRenderer->setStyle(m_style.release()); 291 newRenderer->setStyle(m_style.release());
292 parentRenderer->addChild(newRenderer, nextRenderer); 292 parentRenderer->addChild(newRenderer, nextRenderer);
293 } 293 }
294 294
295 } 295 }
OLDNEW
« no previous file with comments | « Source/core/dom/NodeIterator.cpp ('k') | Source/core/dom/Position.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698