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

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

Issue 572043002: Support getComputedStyle for non-rendered pseudo elements. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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
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 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * (C) 2007 David Smith (catfish.man@gmail.com) 6 * (C) 2007 David Smith (catfish.man@gmail.com)
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
8 * (C) 2007 Eric Seidel (eric@webkit.org) 8 * (C) 2007 Eric Seidel (eric@webkit.org)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 2380 matching lines...) Expand 10 before | Expand all | Expand 10 after
2391 if (!hasRareData() && size == defaultMinimumSizeForResizing()) 2391 if (!hasRareData() && size == defaultMinimumSizeForResizing())
2392 return; 2392 return;
2393 ensureElementRareData().setMinimumSizeForResizing(size); 2393 ensureElementRareData().setMinimumSizeForResizing(size);
2394 } 2394 }
2395 2395
2396 RenderStyle* Element::computedStyle(PseudoId pseudoElementSpecifier) 2396 RenderStyle* Element::computedStyle(PseudoId pseudoElementSpecifier)
2397 { 2397 {
2398 if (PseudoElement* element = pseudoElement(pseudoElementSpecifier)) 2398 if (PseudoElement* element = pseudoElement(pseudoElementSpecifier))
2399 return element->computedStyle(); 2399 return element->computedStyle();
2400 2400
2401 if (!inActiveDocument()) {
2402 // FIXME: Try to do better than this. Ensure that styleForElement() work s for elements that are not in the
2403 // document tree and figure out when to destroy the computed style for s uch elements.
2404 return 0;
2405 }
2406
2401 // FIXME: Find and use the renderer from the pseudo element instead of the a ctual element so that the 'length' 2407 // FIXME: Find and use the renderer from the pseudo element instead of the a ctual element so that the 'length'
2402 // properties, which are only known by the renderer because it did the layou t, will be correct and so that the 2408 // properties, which are only known by the renderer because it did the layou t, will be correct and so that the
2403 // values returned for the ":selection" pseudo-element will be correct. 2409 // values returned for the ":selection" pseudo-element will be correct.
2404 if (RenderStyle* usedStyle = renderStyle()) { 2410 RenderStyle* elementStyle = renderStyle();
2405 if (pseudoElementSpecifier) { 2411 if (!elementStyle) {
2406 RenderStyle* cachedPseudoStyle = usedStyle->getCachedPseudoStyle(pse udoElementSpecifier); 2412 ElementRareData& rareData = ensureElementRareData();
2407 return cachedPseudoStyle ? cachedPseudoStyle : usedStyle; 2413 if (!rareData.computedStyle())
2408 } else 2414 rareData.setComputedStyle(document().styleForElementIgnoringPendingS tylesheets(this));
2409 return usedStyle; 2415 elementStyle = rareData.computedStyle();
2410 } 2416 }
2411 2417
2412 if (!inActiveDocument()) 2418 if (!pseudoElementSpecifier)
2413 // FIXME: Try to do better than this. Ensure that styleForElement() work s for elements that are not in the 2419 return elementStyle;
2414 // document tree and figure out when to destroy the computed style for s uch elements.
2415 return 0;
2416 2420
2417 ElementRareData& rareData = ensureElementRareData(); 2421 if (RenderStyle* pseudoElementStyle = elementStyle->getCachedPseudoStyle(pse udoElementSpecifier))
2418 if (!rareData.computedStyle()) 2422 return pseudoElementStyle;
2419 rareData.setComputedStyle(document().styleForElementIgnoringPendingStyle sheets(this)); 2423
2420 return pseudoElementSpecifier ? rareData.computedStyle()->getCachedPseudoSty le(pseudoElementSpecifier) : rareData.computedStyle(); 2424 RefPtr<RenderStyle> result = document().ensureStyleResolver().pseudoStyleFor Element(this, PseudoStyleRequest(pseudoElementSpecifier, PseudoStyleRequest::For ComputedStyle), elementStyle);
2425 ASSERT(result);
2426 return elementStyle->addCachedPseudoStyle(result.release());
2421 } 2427 }
2422 2428
2423 AtomicString Element::computeInheritedLanguage() const 2429 AtomicString Element::computeInheritedLanguage() const
2424 { 2430 {
2425 const Node* n = this; 2431 const Node* n = this;
2426 AtomicString value; 2432 AtomicString value;
2427 // The language property is inherited, so we iterate over the parents to fin d the first language. 2433 // The language property is inherited, so we iterate over the parents to fin d the first language.
2428 do { 2434 do {
2429 if (n->isElementNode()) { 2435 if (n->isElementNode()) {
2430 if (const ElementData* elementData = toElement(n)->elementData()) { 2436 if (const ElementData* elementData = toElement(n)->elementData()) {
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after
3248 return v8::Handle<v8::Object>(); 3254 return v8::Handle<v8::Object>();
3249 3255
3250 wrapper->SetPrototype(binding->prototype()); 3256 wrapper->SetPrototype(binding->prototype());
3251 3257
3252 wrapperType->refObject(toScriptWrappableBase()); 3258 wrapperType->refObject(toScriptWrappableBase());
3253 V8DOMWrapper::associateObjectWithWrapperNonTemplate(this, wrapperType, wrapp er, isolate); 3259 V8DOMWrapper::associateObjectWithWrapperNonTemplate(this, wrapperType, wrapp er, isolate);
3254 return wrapper; 3260 return wrapper;
3255 } 3261 }
3256 3262
3257 } // namespace blink 3263 } // namespace blink
OLDNEW
« Source/core/css/resolver/StyleResolver.cpp ('K') | « Source/core/css/resolver/StyleResolver.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698