Title: [91540] trunk/Source/WebCore
Revision
91540
Author
[email protected]
Date
2011-07-21 17:40:30 -0700 (Thu, 21 Jul 2011)

Log Message

Local files cannot load icons.
https://bugs.webkit.org/show_bug.cgi?id=62459

Previous policy only allowed favicons for pages whose protocol was part of HTTP family.
Changed that to allow to any url that's not empty and whose protocol is not "about".
Also added this check where it attempts to start loading the favicon, so it can avoid
wasting time downloading a resource that won't be stored and won't be used.

Patch by Rafael Brandao <[email protected]> on 2011-07-21
Reviewed by Adam Barth.

Test: manual-tests/resources/favicon-loads-for-local-files.html

* loader/icon/IconController.cpp:
(WebCore::IconController::startLoader): Added check to avoid to request a favicon
when there's no way to store it.

* loader/icon/IconDatabase.cpp:
(WebCore::IconDatabase::documentCanHaveIcon): Renamed function "pageCanHaveIcon"
to reflect better which url we're handling.

(WebCore::IconDatabase::synchronousIconForPageURL): Ditto.
(WebCore::IconDatabase::synchronousIconURLForPageURL): Ditto.
(WebCore::IconDatabase::retainIconForPageURL): Ditto.
(WebCore::IconDatabase::releaseIconForPageURL): Ditto.
(WebCore::IconDatabase::setIconURLForPageURL): Ditto.
(WebCore::IconDatabase::getOrCreatePageURLRecord): Ditto.
(WebCore::IconDatabase::importIconURLForPageURL): Ditto.
(WebCore::IconDatabase::performURLImport): Ditto.
* loader/icon/IconDatabase.h:
* loader/icon/IconDatabaseBase.h:
(WebCore::IconDatabaseBase::documentCanHaveIcon): Added it as virtual to replace its
default behavior of not allowing favicons when we have IconDatabase enabled.

* manual-tests/resources/favicon-loads-for-local-files.html: Added.
* manual-tests/resources/favicon.png: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (91539 => 91540)


--- trunk/Source/WebCore/ChangeLog	2011-07-22 00:36:26 UTC (rev 91539)
+++ trunk/Source/WebCore/ChangeLog	2011-07-22 00:40:30 UTC (rev 91540)
@@ -1,3 +1,41 @@
+2011-07-21  Rafael Brandao  <[email protected]>
+
+        Local files cannot load icons.
+        https://bugs.webkit.org/show_bug.cgi?id=62459
+        
+        Previous policy only allowed favicons for pages whose protocol was part of HTTP family.
+        Changed that to allow to any url that's not empty and whose protocol is not "about".
+        Also added this check where it attempts to start loading the favicon, so it can avoid
+        wasting time downloading a resource that won't be stored and won't be used.
+
+        Reviewed by Adam Barth.
+
+        Test: manual-tests/resources/favicon-loads-for-local-files.html
+
+        * loader/icon/IconController.cpp:
+        (WebCore::IconController::startLoader): Added check to avoid to request a favicon
+        when there's no way to store it.
+        
+        * loader/icon/IconDatabase.cpp:
+        (WebCore::IconDatabase::documentCanHaveIcon): Renamed function "pageCanHaveIcon"
+        to reflect better which url we're handling.
+        
+        (WebCore::IconDatabase::synchronousIconForPageURL): Ditto.
+        (WebCore::IconDatabase::synchronousIconURLForPageURL): Ditto.
+        (WebCore::IconDatabase::retainIconForPageURL): Ditto.
+        (WebCore::IconDatabase::releaseIconForPageURL): Ditto.
+        (WebCore::IconDatabase::setIconURLForPageURL): Ditto.
+        (WebCore::IconDatabase::getOrCreatePageURLRecord): Ditto.
+        (WebCore::IconDatabase::importIconURLForPageURL): Ditto.
+        (WebCore::IconDatabase::performURLImport): Ditto.
+        * loader/icon/IconDatabase.h:
+        * loader/icon/IconDatabaseBase.h:
+        (WebCore::IconDatabaseBase::documentCanHaveIcon): Added it as virtual to replace its
+        default behavior of not allowing favicons when we have IconDatabase enabled.
+        
+        * manual-tests/resources/favicon-loads-for-local-files.html: Added.
+        * manual-tests/resources/favicon.png: Added.
+
 2011-07-21  Kulanthaivel Palanichamy  <[email protected]>
 
         Fix for bug 64046 - Wrong image height in absolutely positioned div in

Modified: trunk/Source/WebCore/loader/icon/IconController.cpp (91539 => 91540)


--- trunk/Source/WebCore/loader/icon/IconController.cpp	2011-07-22 00:36:26 UTC (rev 91539)
+++ trunk/Source/WebCore/loader/icon/IconController.cpp	2011-07-22 00:40:30 UTC (rev 91540)
@@ -113,6 +113,10 @@
     if (!iconDatabase().isEnabled())
         return;
 
+    ASSERT(!m_frame->tree()->parent());
+    if (!iconDatabase().documentCanHaveIcon(m_frame->document()->url()))
+        return;
+
     KURL iconURL(url());
     String urlString(iconURL.string());
     if (urlString.isEmpty())

Modified: trunk/Source/WebCore/loader/icon/IconDatabase.cpp (91539 => 91540)


--- trunk/Source/WebCore/loader/icon/IconDatabase.cpp	2011-07-22 00:36:26 UTC (rev 91539)
+++ trunk/Source/WebCore/loader/icon/IconDatabase.cpp	2011-07-22 00:40:30 UTC (rev 91540)
@@ -99,9 +99,9 @@
     return defaultClient;
 }
 
-static inline bool pageCanHaveIcon(const String& pageURL)
+bool IconDatabase::documentCanHaveIcon(const String& documentURL) const
 {
-    return protocolIsInHTTPFamily(pageURL);
+    return !documentURL.isEmpty() && !protocolIs(documentURL, "about");
 }
 
 // ************************
@@ -223,7 +223,7 @@
     // pageURLOriginal cannot be stored without being deep copied first.  
     // We should go our of our way to only copy it if we have to store it
     
-    if (!isOpen() || !pageCanHaveIcon(pageURLOriginal))
+    if (!isOpen() || !documentCanHaveIcon(pageURLOriginal))
         return 0;
 
     MutexLocker locker(m_urlAndIconLock);
@@ -310,7 +310,7 @@
     // Cannot do anything with pageURLOriginal that would end up storing it without deep copying first
     // Also, in the case we have a real answer for the caller, we must deep copy that as well
     
-    if (!isOpen() || !pageCanHaveIcon(pageURLOriginal))
+    if (!isOpen() || !documentCanHaveIcon(pageURLOriginal))
         return String();
         
     MutexLocker locker(m_urlAndIconLock);
@@ -400,7 +400,7 @@
     
     // Cannot do anything with pageURLOriginal that would end up storing it without deep copying first
     
-    if (!isEnabled() || !pageCanHaveIcon(pageURLOriginal))
+    if (!isEnabled() || !documentCanHaveIcon(pageURLOriginal))
         return;
        
     MutexLocker locker(m_urlAndIconLock);
@@ -444,7 +444,7 @@
         
     // Cannot do anything with pageURLOriginal that would end up storing it without deep copying first
     
-    if (!isEnabled() || !pageCanHaveIcon(pageURLOriginal))
+    if (!isEnabled() || !documentCanHaveIcon(pageURLOriginal))
         return;
     
     MutexLocker locker(m_urlAndIconLock);
@@ -579,7 +579,7 @@
     
     ASSERT(!iconURLOriginal.isEmpty());
         
-    if (!isOpen() || !pageCanHaveIcon(pageURLOriginal))
+    if (!isOpen() || !documentCanHaveIcon(pageURLOriginal))
         return;
     
     String iconURL, pageURL;
@@ -889,7 +889,7 @@
     // Clients of getOrCreatePageURLRecord() are required to acquire the m_urlAndIconLock before calling this method
     ASSERT(!m_urlAndIconLock.tryLock());
 
-    if (!pageCanHaveIcon(pageURL))
+    if (!documentCanHaveIcon(pageURL))
         return 0;
 
     PageURLRecord* pageRecord = m_pageURLToRecordMap.get(pageURL);
@@ -927,7 +927,7 @@
     // This function is only for setting actual existing url mappings so assert that neither of these URLs are empty
     ASSERT(!iconURL.isEmpty());
     ASSERT(!pageURL.isEmpty());
-    ASSERT(pageCanHaveIcon(pageURL));
+    ASSERT(documentCanHaveIcon(pageURL));
     
     setIconURLForPageURLInSQLDatabase(iconURL, pageURL);    
 }
@@ -1234,7 +1234,7 @@
             // so go ahead and actually create a pageURLRecord for this url even though it's not retained.
             // If database cleanup *is* allowed, we don't want to bother pulling in a page url from disk that noone is actually interested
             // in - we'll prune it later instead!
-            if (!pageRecord && databaseCleanupCounter && pageCanHaveIcon(pageURL)) {
+            if (!pageRecord && databaseCleanupCounter && documentCanHaveIcon(pageURL)) {
                 pageRecord = new PageURLRecord(pageURL);
                 m_pageURLToRecordMap.set(pageURL, pageRecord);
             }

Modified: trunk/Source/WebCore/loader/icon/IconDatabase.h (91539 => 91540)


--- trunk/Source/WebCore/loader/icon/IconDatabase.h	2011-07-22 00:36:26 UTC (rev 91539)
+++ trunk/Source/WebCore/loader/icon/IconDatabase.h	2011-07-22 00:40:30 UTC (rev 91540)
@@ -136,6 +136,7 @@
 public:
     virtual bool isOpen() const;
     virtual String databasePath() const;
+    virtual bool documentCanHaveIcon(const String& documentURL) const;
     static String defaultDatabaseFilename();
 
 private:

Modified: trunk/Source/WebCore/loader/icon/IconDatabaseBase.h (91539 => 91540)


--- trunk/Source/WebCore/loader/icon/IconDatabaseBase.h	2011-07-22 00:36:26 UTC (rev 91539)
+++ trunk/Source/WebCore/loader/icon/IconDatabaseBase.h	2011-07-22 00:40:30 UTC (rev 91540)
@@ -165,6 +165,7 @@
 
     // Used internally by WebCore
     virtual bool isEnabled() const { return false; }
+    virtual bool documentCanHaveIcon(const String&) const { return false; }
         
     virtual void retainIconForPageURL(const String&) { }
     virtual void releaseIconForPageURL(const String&) { }

Added: trunk/Source/WebCore/manual-tests/resources/favicon-loads-for-local-files.html (0 => 91540)


--- trunk/Source/WebCore/manual-tests/resources/favicon-loads-for-local-files.html	                        (rev 0)
+++ trunk/Source/WebCore/manual-tests/resources/favicon-loads-for-local-files.html	2011-07-22 00:40:30 UTC (rev 91540)
@@ -0,0 +1,10 @@
+<html>
+<head>
+</head>
+<link type="image/png" href="" sizes="64x64" rel="icon" />
+<body>
+<p>It's expected that you see a favicon displayed for this page when you open it as a local file.</p>
+<p>The favicon looks like this:</p>
+<img src=""
+</body>
+</html>

Added: trunk/Source/WebCore/manual-tests/resources/favicon.png (0 => 91540)


--- trunk/Source/WebCore/manual-tests/resources/favicon.png	                        (rev 0)
+++ trunk/Source/WebCore/manual-tests/resources/favicon.png	2011-07-22 00:40:30 UTC (rev 91540)
@@ -0,0 +1,35 @@
+\x89PNG
+
+
+IHDR00W\xF9\x87bKGD\xFE\xFE\xFE\xEBԂ	pHYsHHF\xC9k>	vpAg00\xCE\xEE\x8CW\xA2IDATh\xDE՚k\x90Wu\xC7\xF7\xDE\xEE\x9E\xF7\xCE\xEC{\xB5\xF2ʒ-		=\x8C	\xB2\x838؀\xCD#8ś&\x89S@A\xE2\x8A]\x93\x90P\xA1 !\xAET>\xE4a\x81\xC2I\xB0C\xF1\xC1\x86H Ơ\xB2y8\x8E,[\xC9\xD2J\xB2\xBCZ\xEDj߻\xB33ӯ{o>t\xCF\xEC\xECC\xD6
+\xFC\x85Su\xAA{zzz\xFE\xFF{\xFE\xE7\xDCۧ[Xk\xF9u6\xE7ź\x90B4wWl\xDBͶo\xED\x8B0z\xE2W\xB9Fh\x99\x96m\xFB\xED\xDE\xDDt\x93zs\xDF\xFE\xB2d~))\xF0v\xC0Nӳ\x9D\x8A\xA2\t\xB2\xB9^\xC6\xF5hqf2\x9C8;\xDB\xDA\x88So\xEE\xC0\*\x91K&\x90\x82W\xA9\xBB\xA5/\xDB\xEB\x96z\xDF%\xBD\xEC[\xAD\xCA\xF1\x84\xCC\x8Cp\x8AJǁ5a
+\xFB\xC2\xEAH[\xA3\x8F؅\xF1o4F\x8E\x88j\xB5 \\xE1MB\xEB&\xB2nm\xA3\xEEP\xA9\xE4{\xB6\xEF\xBBS\xBA\xD9uto\xF0z6]U\xEE\xE8\xD9"A\xA4	\xE2\x98 \x8A	˜F\x98\xEC7\x82\xEB\xCF\xE0\xD4F\xCAM\x9Cs\xE3\xF7D\xF3\xE3'\xEA\x933\xB5 \x98\xAF\x8D\x94H\x94\x920/
+\x81\xBCܮknx\x9F\x9B)}f\xDBK_Y޺k\xE9\xC51~\xA4	B\x9D\x8F"\xFC(\xC6c\xFC0\xA2F\xF8A\xF2\xC0`\x90\xC14\xB9\x85#2~\x96\xAD\xD5\xEF
+\xEA3ggǎ\xCD\xFAss\x8BmD⋑\xB8hjJ&\xB7\xED\xAA\xFEr\xFF\xA6\xEF\x9C\xDC\xCEr9\xEBv劔
+\x82؀H\xB3\xD3Z\x8C\x95h\xEB\xE0\x8B\xA3\x8ER8\xD2\xE0(\x83R\x82H\xAC\xED\xF5\xB0\xD8\xFD[\x8E?z\xA3U\xC7\xF69\x9E\xFC\xA7\xA1\xEC+{\xFE\x8B\xD3g\xE6\x81\xE0!\xE2\x92\x94\xB3\xF0\xE5=\xD7^\x95-\xF6=ܕs\xFB;\xFA\xCF
+\xED\xE7\xC9\xE5\x8Bd\\x84F`P\xB4c\xD1Ơ\x95D+E\xAC\xAE#\x89\xB4D)I\xA4\x93\xB5\xD6"\x8D\x8FVe\xAD\xF3\xDAJ~\xEE\xD05\xB5p\xA5\xB0\xF1\xBD\xE9߫4\xEA\x8DTR\xFA\x924\xC1\xF7\xFC\xC6\xEBnʖ\xCAT\xB2\x95b\xCFi,\xCCnv^}a\xAC[#\xAF\xAD%\xD6\xD7$\xA0\x9B#\xAE\x94D\xCA\xBC\x92\x89@\xA7\xD3Aq\xFA\xFF\xE8*\xA413\x88\xAF.+\xD53ݷ\xB0y\xC73\xA3K	\x886<v-9\xC9\x80,\xEC\xBEvW\xB6\xD8\xF1\xC0\xA6\xDEb\xA5k\xF0,\x8E+\x91¡p+W\xE19
+\xB7\xE9J\xE1\xAAh"\x99\xB88R\xA2D\xEA\xAA\xED/x\x85\x88\xF2\xC0\xBAK\xC8,/\xE0T\xF6\xF7\xBE\xE6O\x80\xD0\x81,\xE0!\xE4\xBA!da׮ގr\xEFw7\xF5+\xE5
+gp\x81\xE3(\xACv\xE8\xED߈\xEB8-\xE0\x8E\x948J\xA2\xD2}%\xB29\xF2R"\xA5@\xA5\xBE4\xF7A\xECt`\xB5\xD6\xB5H\xF7\xD0	\xBA\xF3DzYiޑ\xDF\xFE\xF2\x9BS\xA5t\x9B\x94h\xBF\xC0Z\x9Aҩto\xFB\xE6@%7\xD09\xF8<ʑ-\xF7rpf\xF8%\x93w\xE0\xAA	\xBC6.\xA4@\x8A\xB8\xC9\xF7M\x8B\xDC.\xA2F\x88\xB51RI\x84\xE4:g\xC9\xE4ꮪl\xB83\xBB\xE1\xF2\xAD)\xF8"\x90ܕ\x98׊\x80\xAC\\xFD\xDA7=\xEF\xAA\xFEMsB9jitE&+\xEC\xE3|\xEB?\xFE\x96\xA3\x87\xC3ˁK)[\x80\xA5\x90m\xE0Yr\xC0b\xA9\x8B<\xD3\xE5V~$\xF9bɗ\xA7\xB0NW\xD9\xDD\xF8\x92?KAR_%%\xB9\xC6\xE8;\xC5r\xF96\xF62\x99\x9CM.\xAE$\x8E\x93\xB8R\x8AL1\xC2\xED|\x9A\x93\xC3\xF7\xF3\x83o~\x898
+\xA0\xA4\x84HD\xE9~<%XA\xABS\xF9\xEBYl\x92He\xE7\xE4BJ\xF1ipʛr[^\xFA\x8AT>y \xB72
++# {^\xF9\x86\xDF\xEB\xEB\xE8̖ǒ\xF0\xABDω\x84\x8E#\xC9(\x81W\xAC\xD108v\xF0G\x88\xB6Eh\xBBHŊcq\xE3\x87Ͳ{\x9D`U\x923mU\xAB\xA3\xF74^4[r{\x86\xEEJq\xE6R_\x96-\xCD\xD96\x97\x{DE23}\x98\x8B<7\xA5\xB2hV\x96ĥR)2Ѭ\x9B5L\x8D\x9FH\xCA+\xA4\xE2Xik-~\xC6\xF1\xB2o\xF2\xF5\x93ttՖ"\xA0\xD2\xDCqb
+ų\x80םݸ\xF9\xCAt\xE4\x9B\x9C&\xF6\xF6\x88\xFC\x8E\x97\xF7\x9B\xF2\xE5\xF1\x96nI\xF5-\x85rUR\xAD\xA4>\xEF\xE2W3\xF8\x8B\xAAs3~\x9BNh\xD8\xF6\xB5\xB3%\x8Cc\xEAA\x806zE-\xD2\xC9Q\xB2%Z#/\x9BLI\xB2\xA59\\xBDXpz6\xBD>\xC5\xEA\xA5\@
+!D\xFBD&r\xF9\xF2\xDB*\x99wr!\xD9\xD2,B\xA0DRQ\x82\xD8P=w\xFB\xAE{#\xA16aL\xA6\xA3\xDC,ac\xAC\xC5Z\x83\xB1\x86(\x8A\xA9\xF9a\xA5Ǜ\x9E\xFCa\xD7\xECOٸs)e\xAA5\x99L\x8A\xDA$\xD5J2\xDE<Q\xDC{#\xF0/)\xF0eXF\xC0+T\xDEW\xAA\xACu'\x95\xFC\xA9\xB5ǵ[\xA5\xD27*\x93.\xDA"\xFC(Bk\x836\xD1x\x8CLx\xA1c\xF2\x8E&\xCAj"\xD7\xE7\xB1\xD6\xC4ڀ\xB5tt\x9C\xA5\qIƂ\xD1\xA3ڸ\xE8\xD8wV	\xC3Lw\xD7˶\xDF\xEEH]W\x8E\xBD\xAC\xAC\xCFM\x86_\xFB\xF6\xFD\xA7\x9Ft\xDA\xF5/$s\x99\xAC\x9DKd\xD01Zh\xACc,\xA5
+'y\xF4\xE1g\xFF[\xFE0\xA4	#\x8D\x84,6|\xFA3\x8F󛯝\xE4\xE2\xE6\xE5u\x9Cg<\xE8|W\xF3S\xA3f9\xF0\xF0\x9C<\xB3,\x99\x8C\x97C8X\xC6Z\x84i,\xC6\xB0+\xD2\xF0*C\xCD\xA3\xEEG4Z\xA4\xCB\xE5(Y\xAC)\xC8\xE4\xE4:\x80\xFDr\xA6\xB5\xC1o\xC4% \xB7D\xA0\xA7Nj\xB4'\x9F%\xB7p\x8C\>K&\x9B\xC1s\x9D$y\xA5\xC4XMG\x84a\xC4\xCCL\xC0\xE4\xF44\xC2\xCB\x86\x9A0N<\xD2s\x89w\xA9Z[\x94\x97\xF6\x9B\xD8z\x80j(w]\xD1\xE3e
+\xE3\xEB?\xF016&\x8AN\xA4\x92\xD2&	im\xB0j\x9A\xE9\x89q:\xFA6\xC41aŚ(\xD6\\xEC&)\x8E,\x8F}{\x92\x9F\xFF\xEF\xA7\x8F.r\xFE\xACO.\xAFږg\xEB\x9E"\xFB\xDF\xD4\xCB\xD0\xD6\xFCzx\xB4U\xA1\xE0\xFC\\xE0_.;\x8B\x97\xB18(Ǡ\xB5i-\xBE\x925\x8ChU	kB
+/J\xC0'\xB7\x92I.\xBC\x81\xE7\x8E\xD5\xF8\xC7?=\xCE\xF9\xD9\xF1Z5\xE6\xD8\xC1\x8E\\xE0;\xF7\x8Fq\xD3{x\xEF\x97_826\xE9x\xB4\x84:\xE6L#\x8EB\xBB\xE3\xD5\xEFB\xE9\xD7Ҙ\xD9Mu\xAA\x97зđN<N\\xC7\xAD
+aZ\x81\x82\xF4\xBE7L\xC9\\x88\xC0C_哷^~\xA5c\xF9\xEEWǸ\xFB\x87\x98.0\xF6\xC9\xC6Y\xFEC\x85\x91f\xEF>\x88\x92\x82\xFA\xDC4\x87\xFDWJ\xFDO\xA1\x83A}B\x9C'[!:\x91\xF9~\x94H'\x8Ct\x89x\xCD8\xFA\xE4~\xFE\xF9\xD6 \x84`\xEB\x9E"W\xEC*\xB2eg\x81\xDA|\xCC\xE9\xA35\x9E\xFE\xC9,\xD5\xD9d\xB6\xDE\xE7\xEF?z\x9C\xBFz`\xCF\xDA1\xEB,; Ĺ\xB9\xF9\x99
+\xF9b%\x99\xDAev\xDD\xF8A\xFF\xCF\xE7\xF1
+\xC3\xF4l~\x95\x81-<\xF8\x95\xC1N\xC8\xF0\x83\x88H\xA7	\x9Cv$VF h\xEE\xFD\x8B\xE3-\xF0\xA5N\x97\xB7\xBC\x90׿s`Y\xB5\xD2ڲ8\xF3\x85\xBF晟\xCCp\xFA\xE8"\xFF\xF9o\xA3\xFC\xF6\xEFo\\x93D{\xAD\xB3q\xB0\xF8\xE0Թgc?L\xDA \xF5 B+\x8F+\xF7\xFF~u\xE3'\x9F\xC4x\xAF\xBE\x99\xCE+\xF7\xD1\xA2\xB4\xF3\x90\xB4P\xFC(\x89\xC0J_\xFF\xE2s\x93J	\xDE{\xFB&\xDE\xF2\xFE\xC1e\xE0Ϗ\xF8\xDC\xF9փ<\xFB\xD4\xBFw'\xDB\xF7\x96\x96~\xFF\xA5\xB3\xD4\x96\xAF\xA1\x84H" \xA1գ4\xF1\xFC\xC4C\xD3\xE7~1\xEF\x87\xF5 LI\x84h'\xCB\xE5\xFB?@\xE7\xF6\xEB\x93ci\xAB\xA4\xE9~\x9B\xE9r\xA2ݎ<1\xDF\xDA\xDF{]\x85\xFDo\xEE]\xF6\xFD\xF9\x9FO\xDDv\x84\xE9\xF1\x90{?q\x82\x9F~\x8A?\xFA\xECv\/!\xFA\x86\xA7<\xB7"\x84Y\x81\xEA\xF1##Q\xA3\xBAP\xAB\xD7h\x8D \xA4D4\x82\x88\xD0J\x9Cr>%\xD7\x9FI\xFB@\xD1r\xD6\xC0\xE8\xE9F\xEB\xF3\xB5\xAF\xEBF9b\xF8\x85\x99$B\xD6‰\xA7\xE9\xD9\xE0\xB1qK\xAEu\xDE\xF0\xE1\xC5G\xA0-)\xB4\x89\xFC\xAFL\x8F\xF2a\x9C\x82OH\xD4[d\xF0\x93\xCFQ\x9D|\x8E\x86\xB6fa?J\xB5K\xE8ܙQ`Z\xF2ٺ\xA7tA\xF0B\xC0
+o\xEB\xE3ݷo`\xF3\x8EB\xEBܑ\xE1\xFAri\x87\xDBYI`\xEEؑN\xE6C\xB2\xB2}@8\xDEҊ4=\xC1XK0\xFE$\xB2\xFA\x94\xAAQ\x8B\xB7a6\xDCLl!\xD2&\x9DȖ.\xEAyKcd-x\xB1&\xF8\xE6\xF7Z[\xBC\xCC:\x96!+#\xD0\xCC\xC7k\xBA>Om\xF4\x89ZЖ\xCC\xF5 dq\xEA\xB5_'\xFF\x90\xFE
+c\xF4\xF6W\xE9\xEF>\x8C}߯ū{O\xBD3d\xF3
+H\xEA\xFB\xB3\x87\xAA\xCC\xCFD\xABF\xBEi\x8F~c\x82\xFB\xFE\xE6\xA7\x8E\xD6Z\xC7W\xCF\xCC\xE9\xBB\xE2\xA8\xA2\x85g\xBB\xDF,\x8C\x9C\xAFW\xC7\xAD/\x9C':\xF55
+\xB58H_\x95B!C\xA1\x90\xA1\xB3S\xB0y\xE83\xFF\x8D\x88\xACe\x83\x9B\x97\xB4\xFC\xF8w\xA7(U\6\xA5\x80\xA4\xECs/]}^\xEB\x9CG<\xCF\xE7\xFE\xFC\xA3\xA7\x96ds\xE5\xAE²k\xA69\xB0\x9C@
+\xD1\xD4\xC9\xF7ȱ\xC7f\x82\xFA<j\xE2{\xF4u\xA6\xB3k\x96lV\x91ɺ\xE4\xF2
+\xC5,\xF9B\x86RIr\xC5\xE6a\xCA\xF3\xDFG\xD8h\x81]\xD7,-\x99\x9F~|\x96'\x99\xE6\xEE{w\xB2\xFB\x9A27\xBC\xAD\x8F\xDB>q\x9F\xFC\xF2\xEEe$~\xFC_S\xE88\xD1b\xA1䰵\xAD\xAC\xB6\xDBZb3@X?u\xFC\xB8Y\xFFpv\xEA\xC7s\x96q\@
+Ѻ\xF1v]E.\xEFᤷ\x99\xAE\x83\xFD\xC3\xE4\xE7\xB6\xEA\x82\xEF\xFC\xF0}\x83\x99t\x90\xE0\x8B\x9F\xE6\x87M\xF0\xF1\xCF\xED\xE4}wm\xC6\xCBH\xFA3|\xF2˻\xA9\xF4x\xAB~\xD3{\xE8\xBF,\xBB&\x81U\xBDQk\xADBh X<z\xF0\x91\xE2\xDE\xE2ߑ\xEF\xF9ظ}y\xBE\xF6zGQ\x8E&E\xBA6\xB2\xC4q\xB2\xF0S*'IښK\xA6\xC1G\xFEz\x9F\xF9\xC0\xCFѱ%\xF0
+\xF7}\xF6\x8F<x\x9E]\xD7t\xB0\xFD\xAA\xE6\xA6C\x9E}\xAAJc1^rv2\xE4B\xB6fs\xD7ZkҶvc\xF1\x99_*\xEDx\xF9\x84c7\xDCS\x{DFA1}˟9M~j\x98\xCB\xC7p\\xC3\xF0\xA9\xCD<\xCA\xF9sd\xBCIbQ$i(/\xB7m{K\xBC\xFB\x8F7\xF1\xE0F\xFD\xA4\xAC\x9E9^\xE3\xCC\xF1\xDFy`\x8C\xB2G\xBF1A&\xAB\xB8\xF5\xA3\x9B\xD7%\xA1\xA6i\x92\x87\xF5걃\xDF\xD2\xE7\x867;\xF5\xD8X$;\xA2\xD9\xF2[>\xF7
+N\x9E\xA0\x9A\xDB\xC7|\xD7͌\xF1zF\xE7_E\xBD|\xDD/\xF8\xE6[\xF9\xD4}\xBB\x97\xD5\xF7\xB5,\x9BW\K_+'WR\xAC\xB8\xEB\x8F\xC0J)\xD4F\x9E=\xE4\xCDLܔ\xD9ڸS,\xFF\xBF\xB2\xA7\xDC(_-\xADp@\x94"\xCAq1\xBB\xFC%>\xFD\x95=\xFC\xF0\xA1	\x8E\xAA2\xFA\\x83ى\x90l^\xD23\x90ahk\x9E\xAB_\xDD\xC9K\xF7\x95\x99\xB8\xE7#\xBF`\xFF\x9Bz\xB9\xE5\xB6\xC1K#\xD0F\xA2)J\xD6fu\xF8\xF4\x8F>\xEDt\xF6ޗ\xDBҸ[\xB8\xF9WE\xF9\x8D\x9E\xCE\x8D\xD7	6\xE9\xF8\x88\x8B\xDC*%\xB8\xF1\xED\xFD\xDC\xF8\xF6~\xEA\xD5\xA9Dk\xBEhZ\xDF`\x86\xCF~u/^V.k
+\xAF\x9B\xC0
+\xCDg\xBA:\x9E\x9D\x8C\xAA\xB3?\xB8\xCB\xCD\xE7+\xDE\xE0\xAFq\xCA\xB7\xE5\xEE\xB2*\x8Bu\xF2B\xEAz+3\xF9,_\xBA0\x8C\x95\xA4V\xC2[ד\xFA695ID@\xD5\xEB~4|\xE4[p\xE4{\x80画\xBA\x9Dby \xFF\xBAҧ\xA1p\xF9z	\xFC*\xB6\xEEW
+\x9A\x93\x9C\xA29\xD9\xC5$\xF9\xD1l\xF7e\xE2\xF9\x99j<?3\xEAW_2|\xE0ۺa\x8Cu\xD2{\xD7Ē=\xE9L*\xB0\x91n1\xE9\xB6\xFD\xDCU0\xACA5\xEAz0/ƓzEۓ\xFAԳ@\x85\xA4\xA7߬t\xAD\xD7
+X\xFE\x84\xBE\xFDI}\xF3\x9C\x8Ec\xDB\xD6f_\x8Cw%V\xBEv\xB0\x92\x94d\xED\xF7$V\xBD/q	\xDD\xCA\xC7_\x89\xC0dh#t\xB1\xB7U^\x947V\xFEI\x90\xA6\xBF\x8A\xF1\x8A\xD1%tEXtcreate-date2009-10-05T16:25:02+10:004~\xF9%tEXtmodify-date2009-10-05T16:25:02+10:00E\x85\xCDIEND\xAEB`\x82
\ No newline at end of file
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to