Title: [95047] trunk
Revision
95047
Author
timothy_hor...@apple.com
Date
2011-09-13 14:54:02 -0700 (Tue, 13 Sep 2011)

Log Message

REGRESSION (64275): Shape pattern-image fill turns black
https://bugs.webkit.org/show_bug.cgi?id=51061
<rdar://problem/8504705>

Reviewed by Simon Fraser.

Source/WebCore:

When destroying a resource, register clients who are losing their
resource as having pending resources, so they can be resolved in the case a
resource with that id is re-registered.

Test: svg/custom/pending-resource-after-removal.xhtml

* rendering/svg/SVGResourcesCache.cpp:
(WebCore::SVGResourcesCache::resourceDestroyed):
* svg/SVGStyledElement.h:
(WebCore::toSVGStyledElement): Added.

LayoutTests:

Add a test ensuring that replacing a SVG pattern without changing
the id causes the clients to be updated properly.

* svg/custom/pending-resource-after-removal-expected.png: Added.
* svg/custom/pending-resource-after-removal-expected.txt: Added.
* svg/custom/pending-resource-after-removal.xhtml: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (95046 => 95047)


--- trunk/LayoutTests/ChangeLog	2011-09-13 21:50:01 UTC (rev 95046)
+++ trunk/LayoutTests/ChangeLog	2011-09-13 21:54:02 UTC (rev 95047)
@@ -1,3 +1,18 @@
+2011-09-13  Tim Horton  <timothy_hor...@apple.com>
+
+        REGRESSION (64275): Shape pattern-image fill turns black
+        https://bugs.webkit.org/show_bug.cgi?id=51061
+        <rdar://problem/8504705>
+
+        Reviewed by Simon Fraser.
+
+        Add a test ensuring that replacing a SVG pattern without changing
+        the id causes the clients to be updated properly.
+
+        * svg/custom/pending-resource-after-removal-expected.png: Added.
+        * svg/custom/pending-resource-after-removal-expected.txt: Added.
+        * svg/custom/pending-resource-after-removal.xhtml: Added.
+
 2011-09-13  Cary Clark  <carycl...@google.com>
 
         Unreviewed; new baselines (Skia on Mac)

Added: trunk/LayoutTests/svg/custom/pending-resource-after-removal-expected.png (0 => 95047)


--- trunk/LayoutTests/svg/custom/pending-resource-after-removal-expected.png	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/pending-resource-after-removal-expected.png	2011-09-13 21:54:02 UTC (rev 95047)
@@ -0,0 +1,61 @@
+\x89PNG
+
+
+IHDR X\x9Av\x82p)tEXtchecksum3aa16a092fe25416b039cd3ea92f1ead7ۗ^iCCPICC Profilex\x85T\xDFk\xD3P\xFE\xDAe\x9D\xB0\xE1\x8B:g	>h\x91ndStC\x9C\xB6kW\xBA\xCDZ\xEA6\xB7!H\x9B\xA6m\\x9A\xC6$\xED~\xB0ًo:\xC5w\xF1>\xF9كo{\x92
+\xC6a\xF8\xAC\x88"L\xF6"\xB3\x9E\x9B4M'S\xB9\xF7\xBB\xDF\xF9\xEE9'\xE7\xE4^\xA0\xF9qZ\xD3/USO\xC5\xC2\xFC\xC4\xE4\xDF\xF2^C+\xFChM\x8B\x86J&G@Ӳy\xEF\xB3\xF3\xC6lt\xEEo߫\xFEc՚\x95\xF0 \xBE\x945\xC4"\xE1Y\xA0i\\xD4t\xE0։\xEF\x9D15\xC2\xCDLsX\xA7	g8oc\x81ግ#\x96f45@\x9A	\xC2\xC5B:K\xB8@8\x98i\xE0\xF3
+\xD8΁\xE4'&\xA9\x92.\x8B<\xABER/\xE5dE\xB2\xF6\xF0s\x83\xF2_\xB0\xA8\x94雭\xE7\x8Dm\x9AN\xD1|\x8A\xDE9}p\x8C\xE6\xD5\xC1?_\xBDA\xB8\x9DpX6\xE3\xA35~B\xCD$\xAE&\xBD\xE7\xEEti\x98\xEDe\x9A\x97Y)%$\xBCbT\xAE3li\xE6\x89\x9A\xE6\xD3\xED\xF4P\x92\xB0\x9F4\xBF43Y\xF3\xE3\xEDP\x95\xEB1\xC5\xF5\xF6KF\xF4\xBA\xBD\xD7ۑ\x93\xE35>\xA7)\xD6@\xFE\xBD\xF7\xF5r\x8A\xE5y\x92\xF0\xEB\xB4\x8D\xD5\xF4[\x92:V\xDB\xDB\xE4ͦ#\xC3\xC4wQ?HB\x82\x8Ed(\xE0\x91Ba\x9AcĪ\xF8L"J\xA4\xD2itTy\xB28\xD6;(\x93\x96\xEDGx\xC9_\xB8^\xF5[\xB2\xB8\xF6\xE0\xFB\x9E\xDD%׎\xBC\x85ŷ\xA3\xD8Q\x{DD41}麲\x9Aua\xA5\xA3n\xE17\xB9\xE5\x9Bm\xABQ\xFE\x8A\xE5\xB1H^e\xCAO\x82Q\xD7u6\xE6\x90S\x97\xFCu\xCF2\x94\xEE%vX\xBA\xAC\xF0^\xF8*l
+O\x85—\xBF\xD4\xC8\xCEޭˀq,>\xAB\x9ES\xCD\xC6\xEC%\xD2L\xD2\xEBd\xB8\xBF\x8A\xF5B\xC6\xF9\x901CZ\x9D\xBE$M\x9C\x8A9\xF2\xDAP'w\x82\xEB\xE6\xE2\/\xD7\x9E\xBB\xCC]\xE1\xFA\xB9\xAD.r#\x8E\xC2\xF5E|!\xF0\xBE3\xBE>_\xB7o\x88a\xA7۾\xD3d\xEB\xA31Z\xEB\xBBӑ\xBA\xA2\xB1z\x94\x8F\xDB'\xF6=\x8E\xAA\xB2\xB1\xBE\xB1~V+\xB4\xA2cjJ\xB3tO%mN\x97\xF3\x93\xEF\x84|\x88\xAE-\x89\x8F\xABbW\x90O+
+o\x99^\x97I\xAFH\xD9.\xB0;\x8F\xED\xB6S\xD6]\xE6i_s9\xF3*p\xE9\xFD\xC3\xEB.7U^\xC0\xD1s.\xA03u\xE4	\xB0|^,\xEB\xDB<\x9E\xB7\x80\x91;\xDBc\xAD=ma\xBA\x8B>V\xAB\xDBt.[\xBB\xAB՟Ϫ\xD5\xDD\xE7\xE4x\xA3\xFC\xA9#
+\xD6¡_2 IDATx\xEDٱ
+\xC30A;\x8B'\x9B+\xC0
+\xBF>\x95\xBE9@\xA1\xFB\xFA]\xE7rx8_\xCF\xE3\xC6% @ 
+|b'#@\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xC8L& @\x80 @\xA0
+ UNG\x80 @\x80\xC0,`\x80\xCCd @\x80\xAA\x80R\xE5t @\x80\xCC\xF7y\xCE\	 @\x80 \xFC\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\xF4\xF3%-hIDAT\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@0@\x9A\x9B\x8A @\x80\x81 `\x804	 @\x80M\xC0in* @\x80\x82\x80\xD0$ @\x804\xA4\xB9\xA9 @\x80H@\x93 @\x80 \xD0\x90\xE6\xA6"@\x80 @  MB\x80 @\x80@\xF87O\xA7\x98\x946?IEND\xAEB`\x82
\ No newline at end of file

Added: trunk/LayoutTests/svg/custom/pending-resource-after-removal-expected.txt (0 => 95047)


--- trunk/LayoutTests/svg/custom/pending-resource-after-removal-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/pending-resource-after-removal-expected.txt	2011-09-13 21:54:02 UTC (rev 95047)
@@ -0,0 +1,11 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x8
+  RenderBlock {html} at (0,0) size 800x8
+    RenderBody {body} at (8,8) size 784x0
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (0,0) size 200x200
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
+      RenderSVGResourcePattern {pattern} [id="pat"] [patternUnits=userSpaceOnUse] [patternContentUnits=userSpaceOnUse]
+        RenderSVGPath {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
+    RenderSVGPath {rect} at (0,0) size 200x200 [fill={[type=PATTERN] [id="pat"]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]

Added: trunk/LayoutTests/svg/custom/pending-resource-after-removal.xhtml (0 => 95047)


--- trunk/LayoutTests/svg/custom/pending-resource-after-removal.xhtml	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/pending-resource-after-removal.xhtml	2011-09-13 21:54:02 UTC (rev 95047)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title>The rectangle should be green.</title></head>
+<script>
+
+var W = 200;
+var H = 200;
+var SVGNS = "http://www.w3.org/2000/svg";
+var currentColor = 0;
+var colors = ["red", "green"];
+
+function resetFill(parentNode) {
+    var rootPattern = document.createElementNS(SVGNS, "pattern");
+    rootPattern.setAttribute("id", "pat");
+    rootPattern.setAttribute("patternUnits", "userSpaceOnUse");
+    rootPattern.setAttribute("width", W);
+    rootPattern.setAttribute("height", H);
+    parentNode.appendChild(rootPattern);
+
+    var rect = document.createElementNS(SVGNS, "rect");
+    rect.setAttribute("width", W);
+    rect.setAttribute("height", H);
+    rect.setAttribute("fill", colors[currentColor++]);
+    rootPattern.appendChild(rect);
+    
+    return rect;
+}
+
+function updateFill() {
+    var el = document.getElementById("shape");
+    var defs = document.getElementById("defs");
+
+    while (defs.firstChild)
+        defs.removeChild(defs.firstChild);
+
+    resetFill(defs);
+
+    el.setAttribute("fill", "url(#pat)");
+
+    if(currentColor == 2)
+        if(window.layoutTestController)
+            layoutTestController.notifyDone();
+}
+
+function test() {
+    if(window.layoutTestController)
+        layoutTestController.waitUntilDone();
+
+    updateFill();
+
+    setTimeout("updateFill()", 0);
+}
+</script>
+<body _onload_="test()">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position: absolute; top: 0px; left: 0px; bottom: 0px; right: 0px">
+<defs id="defs"></defs>
+<rect id="shape" width="200" height="200"></rect>
+</svg>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (95046 => 95047)


--- trunk/Source/WebCore/ChangeLog	2011-09-13 21:50:01 UTC (rev 95046)
+++ trunk/Source/WebCore/ChangeLog	2011-09-13 21:54:02 UTC (rev 95047)
@@ -1,3 +1,22 @@
+2011-09-13  Tim Horton  <timothy_hor...@apple.com>
+
+        REGRESSION (64275): Shape pattern-image fill turns black
+        https://bugs.webkit.org/show_bug.cgi?id=51061
+        <rdar://problem/8504705>
+
+        Reviewed by Simon Fraser.
+
+        When destroying a resource, register clients who are losing their
+        resource as having pending resources, so they can be resolved in the case a
+        resource with that id is re-registered.
+
+        Test: svg/custom/pending-resource-after-removal.xhtml
+
+        * rendering/svg/SVGResourcesCache.cpp:
+        (WebCore::SVGResourcesCache::resourceDestroyed):
+        * svg/SVGStyledElement.h:
+        (WebCore::toSVGStyledElement): Added.
+
 2011-09-13  Eric Seidel  <e...@webkit.org>
 
         Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5

Modified: trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp (95046 => 95047)


--- trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp	2011-09-13 21:50:01 UTC (rev 95046)
+++ trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp	2011-09-13 21:54:02 UTC (rev 95047)
@@ -21,10 +21,12 @@
 #include "SVGResourcesCache.h"
 
 #if ENABLE(SVG)
+#include "HTMLNames.h"
 #include "RenderSVGResourceContainer.h"
 #include "SVGDocumentExtensions.h"
 #include "SVGResources.h"
 #include "SVGResourcesCycleSolver.h"
+#include "SVGStyledElement.h"
 
 namespace WebCore {
 
@@ -160,8 +162,16 @@
     cache->removeResourcesFromRenderObject(resource);
 
     HashMap<RenderObject*, SVGResources*>::iterator end = cache->m_cache.end();
-    for (HashMap<RenderObject*, SVGResources*>::iterator it = cache->m_cache.begin(); it != end; ++it)
+    for (HashMap<RenderObject*, SVGResources*>::iterator it = cache->m_cache.begin(); it != end; ++it) {
         it->second->resourceDestroyed(resource);
+
+        // Mark users of destroyed resources as pending resolution based on the id of the old resource.
+        Element* resourceElement = toElement(resource->node());
+        SVGStyledElement* clientElement = toSVGStyledElement(it->first->node());
+        SVGDocumentExtensions* extensions = clientElement->document()->accessSVGExtensions();
+
+        extensions->addPendingResource(resourceElement->fastGetAttribute(HTMLNames::idAttr), clientElement);
+    }
 }
 
 }

Modified: trunk/Source/WebCore/svg/SVGStyledElement.h (95046 => 95047)


--- trunk/Source/WebCore/svg/SVGStyledElement.h	2011-09-13 21:50:01 UTC (rev 95046)
+++ trunk/Source/WebCore/svg/SVGStyledElement.h	2011-09-13 21:54:02 UTC (rev 95047)
@@ -96,6 +96,12 @@
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+inline SVGStyledElement* toSVGStyledElement(Node* node)
+{
+    ASSERT(!node || (node->isStyledElement() && node->isSVGElement()));
+    return static_cast<SVGStyledElement*>(node);
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to