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

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

Issue 899163003: Move rendering/RenderObject to layout/LayoutObject. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 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/Document.h ('k') | Source/core/dom/DocumentMarkerController.cpp » ('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 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // The origin of the Document is the origin it was assigned when its bro wsing context was created. 308 // The origin of the Document is the origin it was assigned when its bro wsing context was created.
309 // 309 //
310 // Note: We generalize this to all "blank" URLs and invalid URLs because we 310 // Note: We generalize this to all "blank" URLs and invalid URLs because we
311 // treat all of these URLs as about:blank. 311 // treat all of these URLs as about:blank.
312 // 312 //
313 return url.isEmpty() || url.protocolIsAbout(); 313 return url.isEmpty() || url.protocolIsAbout();
314 } 314 }
315 315
316 static Widget* widgetForElement(const Element& focusedElement) 316 static Widget* widgetForElement(const Element& focusedElement)
317 { 317 {
318 RenderObject* renderer = focusedElement.renderer(); 318 LayoutObject* renderer = focusedElement.renderer();
319 if (!renderer || !renderer->isRenderPart()) 319 if (!renderer || !renderer->isRenderPart())
320 return 0; 320 return 0;
321 return toRenderPart(renderer)->widget(); 321 return toRenderPart(renderer)->widget();
322 } 322 }
323 323
324 static bool acceptsEditingFocus(const Element& element) 324 static bool acceptsEditingFocus(const Element& element)
325 { 325 {
326 ASSERT(element.hasEditableStyle()); 326 ASSERT(element.hasEditableStyle());
327 327
328 return element.document().frame() && element.rootEditableElement(); 328 return element.document().frame() && element.rootEditableElement();
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 return 0; 1246 return 0;
1247 1247
1248 return TreeScope::elementFromPoint(x, y); 1248 return TreeScope::elementFromPoint(x, y);
1249 } 1249 }
1250 1250
1251 PassRefPtrWillBeRawPtr<Range> Document::caretRangeFromPoint(int x, int y) 1251 PassRefPtrWillBeRawPtr<Range> Document::caretRangeFromPoint(int x, int y)
1252 { 1252 {
1253 if (!renderView()) 1253 if (!renderView())
1254 return nullptr; 1254 return nullptr;
1255 HitTestResult result = hitTestInDocument(this, x, y); 1255 HitTestResult result = hitTestInDocument(this, x, y);
1256 RenderObject* renderer = result.renderer(); 1256 LayoutObject* renderer = result.renderer();
1257 if (!renderer) 1257 if (!renderer)
1258 return nullptr; 1258 return nullptr;
1259 1259
1260 Node* node = renderer->node(); 1260 Node* node = renderer->node();
1261 Node* shadowAncestorNode = ancestorInThisScope(node); 1261 Node* shadowAncestorNode = ancestorInThisScope(node);
1262 if (shadowAncestorNode != node) { 1262 if (shadowAncestorNode != node) {
1263 unsigned offset = shadowAncestorNode->nodeIndex(); 1263 unsigned offset = shadowAncestorNode->nodeIndex();
1264 ContainerNode* container = shadowAncestorNode->parentNode(); 1264 ContainerNode* container = shadowAncestorNode->parentNode();
1265 return Range::create(*this, container, offset, container, offset); 1265 return Range::create(*this, container, offset, container, offset);
1266 } 1266 }
(...skipping 3924 matching lines...) Expand 10 before | Expand all | Expand 10 after
5191 PluginDocument* pluginDocument = toPluginDocument(doc); 5191 PluginDocument* pluginDocument = toPluginDocument(doc);
5192 node = pluginDocument->pluginNode(); 5192 node = pluginDocument->pluginNode();
5193 } 5193 }
5194 if (!node && doc->isHTMLDocument()) 5194 if (!node && doc->isHTMLDocument())
5195 node = doc->body(); 5195 node = doc->body();
5196 if (!node) 5196 if (!node)
5197 node = doc->documentElement(); 5197 node = doc->documentElement();
5198 return node; 5198 return node;
5199 } 5199 }
5200 5200
5201 void Document::adjustFloatQuadsForScrollAndAbsoluteZoom(Vector<FloatQuad>& quads , RenderObject& renderer) 5201 void Document::adjustFloatQuadsForScrollAndAbsoluteZoom(Vector<FloatQuad>& quads , LayoutObject& renderer)
5202 { 5202 {
5203 if (!view()) 5203 if (!view())
5204 return; 5204 return;
5205 5205
5206 LayoutRect visibleContentRect = view()->visualViewportRect(); 5206 LayoutRect visibleContentRect = view()->visualViewportRect();
5207 for (size_t i = 0; i < quads.size(); ++i) { 5207 for (size_t i = 0; i < quads.size(); ++i) {
5208 quads[i].move(-FloatSize(visibleContentRect.x().toFloat(), visibleConten tRect.y().toFloat())); 5208 quads[i].move(-FloatSize(visibleContentRect.x().toFloat(), visibleConten tRect.y().toFloat()));
5209 adjustFloatQuadForAbsoluteZoom(quads[i], renderer); 5209 adjustFloatQuadForAbsoluteZoom(quads[i], renderer);
5210 } 5210 }
5211 } 5211 }
5212 5212
5213 void Document::adjustFloatRectForScrollAndAbsoluteZoom(FloatRect& rect, RenderOb ject& renderer) 5213 void Document::adjustFloatRectForScrollAndAbsoluteZoom(FloatRect& rect, LayoutOb ject& renderer)
5214 { 5214 {
5215 if (!view()) 5215 if (!view())
5216 return; 5216 return;
5217 5217
5218 LayoutRect visibleContentRect = view()->visualViewportRect(); 5218 LayoutRect visibleContentRect = view()->visualViewportRect();
5219 rect.move(-FloatSize(visibleContentRect.x().toFloat(), visibleContentRect.y( ).toFloat())); 5219 rect.move(-FloatSize(visibleContentRect.x().toFloat(), visibleContentRect.y( ).toFloat()));
5220 adjustFloatRectForAbsoluteZoom(rect, renderer); 5220 adjustFloatRectForAbsoluteZoom(rect, renderer);
5221 } 5221 }
5222 5222
5223 bool Document::hasActiveParser() 5223 bool Document::hasActiveParser()
5224 { 5224 {
5225 return m_activeParserCount || (m_parser && m_parser->processingData()); 5225 return m_activeParserCount || (m_parser && m_parser->processingData());
5226 } 5226 }
5227 5227
5228 void Document::setContextFeatures(ContextFeatures& features) 5228 void Document::setContextFeatures(ContextFeatures& features)
5229 { 5229 {
5230 m_contextFeatures = PassRefPtrWillBeRawPtr<ContextFeatures>(features); 5230 m_contextFeatures = PassRefPtrWillBeRawPtr<ContextFeatures>(features);
5231 } 5231 }
5232 5232
5233 static RenderObject* nearestCommonHoverAncestor(RenderObject* obj1, RenderObject * obj2) 5233 static LayoutObject* nearestCommonHoverAncestor(LayoutObject* obj1, LayoutObject * obj2)
5234 { 5234 {
5235 if (!obj1 || !obj2) 5235 if (!obj1 || !obj2)
5236 return 0; 5236 return 0;
5237 5237
5238 for (RenderObject* currObj1 = obj1; currObj1; currObj1 = currObj1->hoverAnce stor()) { 5238 for (LayoutObject* currObj1 = obj1; currObj1; currObj1 = currObj1->hoverAnce stor()) {
5239 for (RenderObject* currObj2 = obj2; currObj2; currObj2 = currObj2->hover Ancestor()) { 5239 for (LayoutObject* currObj2 = obj2; currObj2; currObj2 = currObj2->hover Ancestor()) {
5240 if (currObj1 == currObj2) 5240 if (currObj1 == currObj2)
5241 return currObj1; 5241 return currObj1;
5242 } 5242 }
5243 } 5243 }
5244 5244
5245 return 0; 5245 return 0;
5246 } 5246 }
5247 5247
5248 void Document::updateHoverActiveState(const HitTestRequest& request, Element* in nerElement, const PlatformMouseEvent* event) 5248 void Document::updateHoverActiveState(const HitTestRequest& request, Element* in nerElement, const PlatformMouseEvent* event)
5249 { 5249 {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
5294 // Check to see if the hovered node has changed. 5294 // Check to see if the hovered node has changed.
5295 // If it hasn't, we do not need to do anything. 5295 // If it hasn't, we do not need to do anything.
5296 Node* newHoverNode = innerElementInDocument; 5296 Node* newHoverNode = innerElementInDocument;
5297 while (newHoverNode && !newHoverNode->renderer()) 5297 while (newHoverNode && !newHoverNode->renderer())
5298 newHoverNode = newHoverNode->parentOrShadowHostNode(); 5298 newHoverNode = newHoverNode->parentOrShadowHostNode();
5299 5299
5300 // Update our current hover node. 5300 // Update our current hover node.
5301 setHoverNode(newHoverNode); 5301 setHoverNode(newHoverNode);
5302 5302
5303 // We have two different objects. Fetch their renderers. 5303 // We have two different objects. Fetch their renderers.
5304 RenderObject* oldHoverObj = oldHoverNode ? oldHoverNode->renderer() : 0; 5304 LayoutObject* oldHoverObj = oldHoverNode ? oldHoverNode->renderer() : 0;
5305 RenderObject* newHoverObj = newHoverNode ? newHoverNode->renderer() : 0; 5305 LayoutObject* newHoverObj = newHoverNode ? newHoverNode->renderer() : 0;
5306 5306
5307 // Locate the common ancestor render object for the two renderers. 5307 // Locate the common ancestor render object for the two renderers.
5308 RenderObject* ancestor = nearestCommonHoverAncestor(oldHoverObj, newHoverObj ); 5308 LayoutObject* ancestor = nearestCommonHoverAncestor(oldHoverObj, newHoverObj );
5309 RefPtrWillBeRawPtr<Node> ancestorNode(ancestor ? ancestor->node() : 0); 5309 RefPtrWillBeRawPtr<Node> ancestorNode(ancestor ? ancestor->node() : 0);
5310 5310
5311 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> nodesToRemoveFromChain; 5311 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> nodesToRemoveFromChain;
5312 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> nodesToAddToChain; 5312 WillBeHeapVector<RefPtrWillBeMember<Node>, 32> nodesToAddToChain;
5313 5313
5314 if (oldHoverObj != newHoverObj) { 5314 if (oldHoverObj != newHoverObj) {
5315 // If the old hovered node is not nil but it's renderer is, it was proba bly detached as part of the :hover style 5315 // If the old hovered node is not nil but it's renderer is, it was proba bly detached as part of the :hover style
5316 // (for instance by setting display:none in the :hover pseudo-class). In this case, the old hovered element (and its ancestors) 5316 // (for instance by setting display:none in the :hover pseudo-class). In this case, the old hovered element (and its ancestors)
5317 // must be updated, to ensure it's normal style is re-applied. 5317 // must be updated, to ensure it's normal style is re-applied.
5318 if (oldHoverNode && !oldHoverObj) { 5318 if (oldHoverNode && !oldHoverObj) {
5319 for (Node* node = oldHoverNode.get(); node; node = node->parentNode( )) { 5319 for (Node* node = oldHoverNode.get(); node; node = node->parentNode( )) {
5320 if (!mustBeInActiveChain || (node->isElementNode() && toElement( node)->inActiveChain())) 5320 if (!mustBeInActiveChain || (node->isElementNode() && toElement( node)->inActiveChain()))
5321 nodesToRemoveFromChain.append(node); 5321 nodesToRemoveFromChain.append(node);
5322 } 5322 }
5323 5323
5324 } 5324 }
5325 5325
5326 // The old hover path only needs to be cleared up to (and not including) the common ancestor; 5326 // The old hover path only needs to be cleared up to (and not including) the common ancestor;
5327 for (RenderObject* curr = oldHoverObj; curr && curr != ancestor; curr = curr->hoverAncestor()) { 5327 for (LayoutObject* curr = oldHoverObj; curr && curr != ancestor; curr = curr->hoverAncestor()) {
5328 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr ->node()->inActiveChain())) 5328 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr ->node()->inActiveChain()))
5329 nodesToRemoveFromChain.append(curr->node()); 5329 nodesToRemoveFromChain.append(curr->node());
5330 } 5330 }
5331 } 5331 }
5332 5332
5333 // Now set the hover state for our new object up to the root. 5333 // Now set the hover state for our new object up to the root.
5334 for (RenderObject* curr = newHoverObj; curr; curr = curr->hoverAncestor()) { 5334 for (LayoutObject* curr = newHoverObj; curr; curr = curr->hoverAncestor()) {
5335 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr->no de()->inActiveChain())) 5335 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr->no de()->inActiveChain()))
5336 nodesToAddToChain.append(curr->node()); 5336 nodesToAddToChain.append(curr->node());
5337 } 5337 }
5338 5338
5339 // mouseenter and mouseleave events do not bubble, so they are dispatched if f there is a capturing 5339 // mouseenter and mouseleave events do not bubble, so they are dispatched if f there is a capturing
5340 // event handler on an ancestor or a normal event handler on the element its elf. This special 5340 // event handler on an ancestor or a normal event handler on the element its elf. This special
5341 // handling is necessary to avoid O(n^2) capturing event handler checks. We' ll check the previously 5341 // handling is necessary to avoid O(n^2) capturing event handler checks. We' ll check the previously
5342 // hovered node's ancestor tree for 'mouseleave' handlers here, then check t he newly hovered node's 5342 // hovered node's ancestor tree for 'mouseleave' handlers here, then check t he newly hovered node's
5343 // ancestor tree for 'mouseenter' handlers after dispatching the 'mouseleave ' events (as the handler 5343 // ancestor tree for 'mouseenter' handlers after dispatching the 'mouseleave ' events (as the handler
5344 // for 'mouseleave' might set a capturing 'mouseenter' handler, odd as that might be). 5344 // for 'mouseleave' might set a capturing 'mouseenter' handler, odd as that might be).
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
5772 #ifndef NDEBUG 5772 #ifndef NDEBUG
5773 using namespace blink; 5773 using namespace blink;
5774 void showLiveDocumentInstances() 5774 void showLiveDocumentInstances()
5775 { 5775 {
5776 WeakDocumentSet& set = liveDocumentSet(); 5776 WeakDocumentSet& set = liveDocumentSet();
5777 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 5777 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
5778 for (Document* document : set) 5778 for (Document* document : set)
5779 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data()); 5779 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data());
5780 } 5780 }
5781 #endif 5781 #endif
OLDNEW
« no previous file with comments | « Source/core/dom/Document.h ('k') | Source/core/dom/DocumentMarkerController.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698