Title: [143300] trunk
- Revision
- 143300
- Author
- [email protected]
- Date
- 2013-02-18 23:31:43 -0800 (Mon, 18 Feb 2013)
Log Message
:before/:after pseudo elements do not always apply to the proper element
https://bugs.webkit.org/show_bug.cgi?id=93925
Reviewed by Dimitri Glazkov.
Source/WebCore:
Disable sharing a style with siblings if :after or :before pseudo style
is unique.
Test: fast/css/before-after-pseudo-class.html
* css/StyleResolver.cpp:
(WebCore::StyleResolver::canShareStyleWithElement):
Added a new condition, hasUniquePseudoStyle.
* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::hasUniquePseudoStyle):
Added to check whether any pseudo style has unique bit or not.
(WebCore):
* rendering/style/RenderStyle.h:
LayoutTests:
* fast/css/before-after-pseudo-class-expected.html: Added.
* fast/css/before-after-pseudo-class.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (143299 => 143300)
--- trunk/LayoutTests/ChangeLog 2013-02-19 07:22:32 UTC (rev 143299)
+++ trunk/LayoutTests/ChangeLog 2013-02-19 07:31:43 UTC (rev 143300)
@@ -1,3 +1,13 @@
+2013-02-18 Takashi Sakamoto <[email protected]>
+
+ :before/:after pseudo elements do not always apply to the proper element
+ https://bugs.webkit.org/show_bug.cgi?id=93925
+
+ Reviewed by Dimitri Glazkov.
+
+ * fast/css/before-after-pseudo-class-expected.html: Added.
+ * fast/css/before-after-pseudo-class.html: Added.
+
2013-02-18 Andy Estes <[email protected]>
Focusing a new frame (via window.focus()) should blur the active element in the current frame
Added: trunk/LayoutTests/fast/css/before-after-pseudo-class-expected.html (0 => 143300)
--- trunk/LayoutTests/fast/css/before-after-pseudo-class-expected.html (rev 0)
+++ trunk/LayoutTests/fast/css/before-after-pseudo-class-expected.html 2013-02-19 07:31:43 UTC (rev 143300)
@@ -0,0 +1,13 @@
+<!doctype html>
+<html>
+<body>
+<p>
+ <div>GoogleGoogle</div>
+ <div>Example</div>
+</p>
+<div>
+ <div>WikipediaWikipedia</div>
+ <div>Example2</div>
+</div>
+</body>
+</html>
Added: trunk/LayoutTests/fast/css/before-after-pseudo-class.html (0 => 143300)
--- trunk/LayoutTests/fast/css/before-after-pseudo-class.html (rev 0)
+++ trunk/LayoutTests/fast/css/before-after-pseudo-class.html 2013-02-19 07:31:43 UTC (rev 143300)
@@ -0,0 +1,22 @@
+<!doctype html>
+<html>
+<head>
+<style type="text/css">
+div[rel^="http://www.google.com"]:before { content:"Google" }
+div[rel^="http://www.wikipedia.org"]:after { content:"Wikipedia" }
+</style>
+</head>
+<body>
+<!-- Test for Bug 93925 https://bugs.webkit.org/show_bug.cgi?id=93925 -->
+<!-- :before/:after pseudo elements do not always apply to the proper element -->
+<!-- The test passes if "GoogleGoogle", "Example", "WikipediaWikipedia", and "Example2" are shown.-->
+<p>
+ <div rel="http://www.google.com">Google</div>
+ <div rel="http://www.example.com">Example</div>
+</p>
+<div>
+ <div rel="http://www.wikipedia.org">Wikipedia</div>
+ <div rel="http://www2.example.com">Example2</div>
+</div>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (143299 => 143300)
--- trunk/Source/WebCore/ChangeLog 2013-02-19 07:22:32 UTC (rev 143299)
+++ trunk/Source/WebCore/ChangeLog 2013-02-19 07:31:43 UTC (rev 143300)
@@ -1,3 +1,24 @@
+2013-02-18 Takashi Sakamoto <[email protected]>
+
+ :before/:after pseudo elements do not always apply to the proper element
+ https://bugs.webkit.org/show_bug.cgi?id=93925
+
+ Reviewed by Dimitri Glazkov.
+
+ Disable sharing a style with siblings if :after or :before pseudo style
+ is unique.
+
+ Test: fast/css/before-after-pseudo-class.html
+
+ * css/StyleResolver.cpp:
+ (WebCore::StyleResolver::canShareStyleWithElement):
+ Added a new condition, hasUniquePseudoStyle.
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::hasUniquePseudoStyle):
+ Added to check whether any pseudo style has unique bit or not.
+ (WebCore):
+ * rendering/style/RenderStyle.h:
+
2013-02-18 Andy Estes <[email protected]>
Focusing a new frame (via window.focus()) should blur the active element in the current frame
Modified: trunk/Source/WebCore/css/StyleResolver.cpp (143299 => 143300)
--- trunk/Source/WebCore/css/StyleResolver.cpp 2013-02-19 07:22:32 UTC (rev 143299)
+++ trunk/Source/WebCore/css/StyleResolver.cpp 2013-02-19 07:31:43 UTC (rev 143300)
@@ -1013,6 +1013,8 @@
return false;
if (style->unique())
return false;
+ if (style->hasUniquePseudoStyle())
+ return false;
if (element->tagQName() != state.element()->tagQName())
return false;
if (element->inlineStyle())
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (143299 => 143300)
--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2013-02-19 07:22:32 UTC (rev 143299)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2013-02-19 07:31:43 UTC (rev 143300)
@@ -261,6 +261,20 @@
noninherited_flags._pseudoBits |= pseudoBit(pseudo);
}
+bool RenderStyle::hasUniquePseudoStyle() const
+{
+ if (!m_cachedPseudoStyles || styleType() != NOPSEUDO)
+ return false;
+
+ for (size_t i = 0; i < m_cachedPseudoStyles->size(); ++i) {
+ RenderStyle* pseudoStyle = m_cachedPseudoStyles->at(i).get();
+ if (pseudoStyle->unique())
+ return true;
+ }
+
+ return false;
+}
+
RenderStyle* RenderStyle::getCachedPseudoStyle(PseudoId pid) const
{
if (!m_cachedPseudoStyles || !m_cachedPseudoStyles->size())
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (143299 => 143300)
--- trunk/Source/WebCore/rendering/style/RenderStyle.h 2013-02-19 07:22:32 UTC (rev 143299)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h 2013-02-19 07:31:43 UTC (rev 143300)
@@ -423,6 +423,7 @@
bool hasAnyPublicPseudoStyles() const;
bool hasPseudoStyle(PseudoId pseudo) const;
void setHasPseudoStyle(PseudoId pseudo);
+ bool hasUniquePseudoStyle() const;
// attribute getter methods
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes