[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

inferno at chromium.org inferno at chromium.org
Wed Dec 22 15:59:52 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 28ad8d802f91a496df893aba3008d7e6e05e1508
Author: inferno at chromium.org <inferno at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Nov 17 20:11:56 2010 +0000

    2010-11-17  Cris Neckar  <cdn at chromium.org>
    
            Reviewed by Adam Barth.
    
            Modified codepath for object fallback content which has failed to load.
            Refactored CachedResource error handling to use more granular statuses instead of a boolean value.
            https://bugs.webkit.org/show_bug.cgi?id=46921
    
            Test: fast/html/object-image-nested-fallback.html
    
            * html/HTMLObjectElement.cpp:
            (WebCore::HTMLObjectElement::renderFallbackContent):
            * loader/cache/CachedCSSStyleSheet.cpp:
            (WebCore::CachedCSSStyleSheet::error):
            * loader/cache/CachedCSSStyleSheet.h:
            * loader/cache/CachedFont.cpp:
            (WebCore::CachedFont::ensureCustomFontData):
            (WebCore::CachedFont::error):
            * loader/cache/CachedFont.h:
            * loader/cache/CachedImage.cpp:
            (WebCore::CachedImage::data):
            (WebCore::CachedImage::error):
            * loader/cache/CachedImage.h:
            * loader/cache/CachedResource.cpp:
            (WebCore::CachedResource::CachedResource):
            (WebCore::CachedResource::canUseCacheValidator):
            (WebCore::CachedResource::mustRevalidate):
            * loader/cache/CachedResource.h:
            (WebCore::CachedResource::error):
            (WebCore::CachedResource::httpStatusCodeError):
            (WebCore::CachedResource::errorOccurred):
            * loader/cache/CachedScript.cpp:
            (WebCore::CachedScript::error):
            * loader/cache/CachedScript.h:
            * loader/cache/CachedXSLStyleSheet.cpp:
            (WebCore::CachedXSLStyleSheet::error):
            * loader/cache/CachedXSLStyleSheet.h:
            * loader/loader.cpp:
            (WebCore::Loader::load):
            (WebCore::Loader::didFinishLoading):
            (WebCore::Loader::didFail):
            (WebCore::Loader::didReceiveData):
    2010-11-17  Cris Neckar  <cdn at chromium.org>
    
            Reviewed by Adam Barth.
    
            Added test for multiple image objects which use the same invalid data attribute.
            https://bugs.webkit.org/show_bug.cgi?id=46921
    
            * fast/html/object-image-nested-fallback-expected.txt: Added.
            * fast/html/object-image-nested-fallback.html: Added.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72230 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 305cc6a..0fbe9c3 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
+2010-11-17  Cris Neckar  <cdn at chromium.org>
+
+        Reviewed by Adam Barth.
+
+        Added test for multiple image objects which use the same invalid data attribute.
+        https://bugs.webkit.org/show_bug.cgi?id=46921
+
+        * fast/html/object-image-nested-fallback-expected.txt: Added.
+        * fast/html/object-image-nested-fallback.html: Added.
+
 2010-11-16  Zhenyao Mo  <zmo at google.com>
 
         Reviewed by Kenneth Russell.
diff --git a/LayoutTests/fast/html/object-image-nested-fallback-expected.txt b/LayoutTests/fast/html/object-image-nested-fallback-expected.txt
new file mode 100644
index 0000000..c5735f2
--- /dev/null
+++ b/LayoutTests/fast/html/object-image-nested-fallback-expected.txt
@@ -0,0 +1 @@
+PASS when no crash occurs.
diff --git a/LayoutTests/fast/html/object-image-nested-fallback.html b/LayoutTests/fast/html/object-image-nested-fallback.html
new file mode 100644
index 0000000..78f0225
--- /dev/null
+++ b/LayoutTests/fast/html/object-image-nested-fallback.html
@@ -0,0 +1,13 @@
+<html>
+    <script>
+        if (window.layoutTestController)
+            layoutTestController.dumpAsText();
+    </script>
+    <body> 
+        <object type="image/png" data="this.object.does.not.exist.dtd">
+            <object type="image/png" data="this.object.does.not.exist.dtd">
+                <object type="image/png" data="this.object.does.not.exist.dtd">PASS when no crash occurs.</object>
+            </object>
+        </object>
+    </body>
+</html>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 8da2ce9..bc52251 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,46 @@
+2010-11-17  Cris Neckar  <cdn at chromium.org>
+
+        Reviewed by Adam Barth.
+
+        Modified codepath for object fallback content which has failed to load.
+        Refactored CachedResource error handling to use more granular statuses instead of a boolean value.
+        https://bugs.webkit.org/show_bug.cgi?id=46921
+
+        Test: fast/html/object-image-nested-fallback.html
+
+        * html/HTMLObjectElement.cpp:
+        (WebCore::HTMLObjectElement::renderFallbackContent):
+        * loader/cache/CachedCSSStyleSheet.cpp:
+        (WebCore::CachedCSSStyleSheet::error):
+        * loader/cache/CachedCSSStyleSheet.h:
+        * loader/cache/CachedFont.cpp:
+        (WebCore::CachedFont::ensureCustomFontData):
+        (WebCore::CachedFont::error):
+        * loader/cache/CachedFont.h:
+        * loader/cache/CachedImage.cpp:
+        (WebCore::CachedImage::data):
+        (WebCore::CachedImage::error):
+        * loader/cache/CachedImage.h:
+        * loader/cache/CachedResource.cpp:
+        (WebCore::CachedResource::CachedResource):
+        (WebCore::CachedResource::canUseCacheValidator):
+        (WebCore::CachedResource::mustRevalidate):
+        * loader/cache/CachedResource.h:
+        (WebCore::CachedResource::error):
+        (WebCore::CachedResource::httpStatusCodeError):
+        (WebCore::CachedResource::errorOccurred):
+        * loader/cache/CachedScript.cpp:
+        (WebCore::CachedScript::error):
+        * loader/cache/CachedScript.h:
+        * loader/cache/CachedXSLStyleSheet.cpp:
+        (WebCore::CachedXSLStyleSheet::error):
+        * loader/cache/CachedXSLStyleSheet.h:
+        * loader/loader.cpp:
+        (WebCore::Loader::load):
+        (WebCore::Loader::didFinishLoading):
+        (WebCore::Loader::didFail):
+        (WebCore::Loader::didReceiveData):
+
 2010-11-16  Zhenyao Mo  <zmo at google.com>
 
         Reviewed by Kenneth Russell.
diff --git a/WebCore/html/HTMLObjectElement.cpp b/WebCore/html/HTMLObjectElement.cpp
index 7020517..c07d050 100644
--- a/WebCore/html/HTMLObjectElement.cpp
+++ b/WebCore/html/HTMLObjectElement.cpp
@@ -346,7 +346,7 @@ void HTMLObjectElement::renderFallbackContent()
         return;
 
     // Before we give up and use fallback content, check to see if this is a MIME type issue.
-    if (m_imageLoader && m_imageLoader->image()) {
+    if (m_imageLoader && m_imageLoader->image() && m_imageLoader->image()->status() != CachedResource::LoadError) {
         m_serviceType = m_imageLoader->image()->response().mimeType();
         if (!isImageType()) {
             // If we don't think we have an image type anymore, then ditch the image loader.
diff --git a/WebCore/loader/cache/CachedCSSStyleSheet.cpp b/WebCore/loader/cache/CachedCSSStyleSheet.cpp
index f0016d1..9ec979b 100644
--- a/WebCore/loader/cache/CachedCSSStyleSheet.cpp
+++ b/WebCore/loader/cache/CachedCSSStyleSheet.cpp
@@ -117,10 +117,11 @@ void CachedCSSStyleSheet::checkNotify()
         c->setCSSStyleSheet(m_url, m_response.url(), m_decoder->encoding().name(), this);
 }
 
-void CachedCSSStyleSheet::error()
+void CachedCSSStyleSheet::error(CachedResource::Status status)
 {
+    setStatus(status);
+    ASSERT(errorOccurred());
     setLoading(false);
-    setErrorOccurred(true);
     checkNotify();
 }
 
diff --git a/WebCore/loader/cache/CachedCSSStyleSheet.h b/WebCore/loader/cache/CachedCSSStyleSheet.h
index abcdb85..a982e03 100644
--- a/WebCore/loader/cache/CachedCSSStyleSheet.h
+++ b/WebCore/loader/cache/CachedCSSStyleSheet.h
@@ -49,7 +49,7 @@ namespace WebCore {
         virtual void setEncoding(const String&);
         virtual String encoding() const;
         virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
-        virtual void error();
+        virtual void error(CachedResource::Status);
 
         void checkNotify();
     
diff --git a/WebCore/loader/cache/CachedFont.cpp b/WebCore/loader/cache/CachedFont.cpp
index 6297ad1..96654a5 100644
--- a/WebCore/loader/cache/CachedFont.cpp
+++ b/WebCore/loader/cache/CachedFont.cpp
@@ -111,7 +111,7 @@ bool CachedFont::ensureCustomFontData()
     if (!m_fontData && !errorOccurred() && !isLoading() && m_data) {
         m_fontData = createFontCustomPlatformData(m_data.get());
         if (!m_fontData)
-            setErrorOccurred(true);
+            setStatus(DecodeError);
     }
 #endif
     return m_fontData;
@@ -206,10 +206,11 @@ void CachedFont::checkNotify()
 }
 
 
-void CachedFont::error()
+void CachedFont::error(CachedResource::Status status)
 {
+    setStatus(status);
+    ASSERT(errorOccurred());
     setLoading(false);
-    setErrorOccurred(true);
     checkNotify();
 }
 
diff --git a/WebCore/loader/cache/CachedFont.h b/WebCore/loader/cache/CachedFont.h
index e1a34e8..5814087 100644
--- a/WebCore/loader/cache/CachedFont.h
+++ b/WebCore/loader/cache/CachedFont.h
@@ -54,7 +54,7 @@ public:
 
     virtual void didAddClient(CachedResourceClient*);
     virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
-    virtual void error();
+    virtual void error(CachedResource::Status);
 
     virtual void allClientsRemoved();
 
diff --git a/WebCore/loader/cache/CachedImage.cpp b/WebCore/loader/cache/CachedImage.cpp
index 8d1a737..d5d167d 100644
--- a/WebCore/loader/cache/CachedImage.cpp
+++ b/WebCore/loader/cache/CachedImage.cpp
@@ -283,7 +283,7 @@ void CachedImage::data(PassRefPtr<SharedBuffer> data, bool allDataReceived)
         IntSize s = imageSize(1.0f);
         size_t estimatedDecodedImageSize = s.width() * s.height() * 4; // no overflow check
         if (m_image->isNull() || (maxDecodedImageSize > 0 && estimatedDecodedImageSize > maxDecodedImageSize)) {
-            error();
+            error(errorOccurred() ? status() : DecodeError);
             if (inCache())
                 cache()->remove(this);
             return;
@@ -303,10 +303,11 @@ void CachedImage::data(PassRefPtr<SharedBuffer> data, bool allDataReceived)
     }
 }
 
-void CachedImage::error()
+void CachedImage::error(CachedResource::Status status)
 {
     clear();
-    setErrorOccurred(true);
+    setStatus(status);
+    ASSERT(errorOccurred() || httpStatusCodeErrorOccurred());
     m_data.clear();
     notifyObservers();
     setLoading(false);
diff --git a/WebCore/loader/cache/CachedImage.h b/WebCore/loader/cache/CachedImage.h
index 313f3f3..af36534 100644
--- a/WebCore/loader/cache/CachedImage.h
+++ b/WebCore/loader/cache/CachedImage.h
@@ -65,11 +65,11 @@ public:
     virtual void destroyDecodedData();
 
     virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
-    virtual void error();
+    virtual void error(CachedResource::Status);
     
     virtual void httpStatusCodeError() { m_httpStatusCodeErrorOccurred = true; }
     bool httpStatusCodeErrorOccurred() const { return m_httpStatusCodeErrorOccurred; }
-    
+
     void checkNotify();
     
     virtual bool isImage() const { return true; }
diff --git a/WebCore/loader/cache/CachedResource.cpp b/WebCore/loader/cache/CachedResource.cpp
index c440ec9..d4eac2e 100644
--- a/WebCore/loader/cache/CachedResource.cpp
+++ b/WebCore/loader/cache/CachedResource.cpp
@@ -66,7 +66,6 @@ CachedResource::CachedResource(const String& url, Type type)
     , m_inLiveDecodedResourcesList(false)
     , m_requestedFromNetworkingLayer(false)
     , m_sendResourceLoadCallbacks(true)
-    , m_errorOccurred(false)
     , m_inCache(false)
     , m_loading(false)
     , m_type(type)
@@ -454,7 +453,7 @@ void CachedResource::unregisterHandle(CachedResourceHandleBase* h)
 
 bool CachedResource::canUseCacheValidator() const
 {
-    if (m_loading || m_errorOccurred)
+    if (m_loading || errorOccurred())
         return false;
 
     if (m_response.cacheControlContainsNoStore())
@@ -467,7 +466,7 @@ bool CachedResource::canUseCacheValidator() const
     
 bool CachedResource::mustRevalidate(CachePolicy cachePolicy) const
 {
-    if (m_errorOccurred) {
+    if (errorOccurred()) {
         LOG(ResourceLoading, "CachedResource %p mustRevalidate because of m_errorOccurred\n", this);
         return true;
     }
diff --git a/WebCore/loader/cache/CachedResource.h b/WebCore/loader/cache/CachedResource.h
index ba02459..ed60f84 100644
--- a/WebCore/loader/cache/CachedResource.h
+++ b/WebCore/loader/cache/CachedResource.h
@@ -70,7 +70,9 @@ public:
     enum Status {
         Unknown,      // let cache decide what to do with it
         Pending,      // only partially loaded
-        Cached        // regular case
+        Cached,       // regular case
+        LoadError,
+        DecodeError
     };
 
     CachedResource(const String& url, Type);
@@ -82,8 +84,8 @@ public:
     virtual void setEncoding(const String&) { }
     virtual String encoding() const { return String(); }
     virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
-    virtual void error() { }
-    virtual void httpStatusCodeError() { error(); } // Images keep loading in spite of HTTP errors (for legacy compat with <img>, etc.).
+    virtual void error(CachedResource::Status) { }
+    virtual void httpStatusCodeError() { error(LoadError); } // Images keep loading in spite of HTTP errors (for legacy compat with <img>, etc.).
 
     const String &url() const { return m_url; }
     Type type() const { return static_cast<Type>(m_type); }
@@ -174,8 +176,7 @@ public:
     String accept() const { return m_accept; }
     void setAccept(const String& accept) { m_accept = accept; }
 
-    bool errorOccurred() const { return m_errorOccurred; }
-    void setErrorOccurred(bool b) { m_errorOccurred = b; }
+    bool errorOccurred() const { return (status() == LoadError || status() == DecodeError); }
 
     bool sendResourceLoadCallbacks() const { return m_sendResourceLoadCallbacks; }
     
@@ -251,12 +252,11 @@ private:
     bool m_requestedFromNetworkingLayer : 1;
     bool m_sendResourceLoadCallbacks : 1;
 
-    bool m_errorOccurred : 1;
     bool m_inCache : 1;
     bool m_loading : 1;
 
     unsigned m_type : 3; // Type
-    unsigned m_status : 2; // Status
+    unsigned m_status : 3; // Status
 
 #ifndef NDEBUG
     bool m_deleted;
diff --git a/WebCore/loader/cache/CachedScript.cpp b/WebCore/loader/cache/CachedScript.cpp
index 50a8c17..54b4503 100644
--- a/WebCore/loader/cache/CachedScript.cpp
+++ b/WebCore/loader/cache/CachedScript.cpp
@@ -100,10 +100,11 @@ void CachedScript::checkNotify()
         c->notifyFinished(this);
 }
 
-void CachedScript::error()
+void CachedScript::error(CachedResource::Status status)
 {
+    setStatus(status);
+    ASSERT(errorOccurred());
     setLoading(false);
-    setErrorOccurred(true);
     checkNotify();
 }
 
diff --git a/WebCore/loader/cache/CachedScript.h b/WebCore/loader/cache/CachedScript.h
index 7311f9b..30fcb1e 100644
--- a/WebCore/loader/cache/CachedScript.h
+++ b/WebCore/loader/cache/CachedScript.h
@@ -46,7 +46,7 @@ namespace WebCore {
         virtual void setEncoding(const String&);
         virtual String encoding() const;
         virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
-        virtual void error();
+        virtual void error(CachedResource::Status);
 
         void checkNotify();
 
diff --git a/WebCore/loader/cache/CachedXSLStyleSheet.cpp b/WebCore/loader/cache/CachedXSLStyleSheet.cpp
index 5b30e30..ca7bf13 100644
--- a/WebCore/loader/cache/CachedXSLStyleSheet.cpp
+++ b/WebCore/loader/cache/CachedXSLStyleSheet.cpp
@@ -87,10 +87,11 @@ void CachedXSLStyleSheet::checkNotify()
         c->setXSLStyleSheet(m_url, m_response.url(), m_sheet);
 }
 
-void CachedXSLStyleSheet::error()
+void CachedXSLStyleSheet::error(CachedResource::Status status)
 {
+    setStatus(status);
+    ASSERT(errorOccurred());
     setLoading(false);
-    setErrorOccurred(true);
     checkNotify();
 }
 
diff --git a/WebCore/loader/cache/CachedXSLStyleSheet.h b/WebCore/loader/cache/CachedXSLStyleSheet.h
index 8587b0b..8b29792 100644
--- a/WebCore/loader/cache/CachedXSLStyleSheet.h
+++ b/WebCore/loader/cache/CachedXSLStyleSheet.h
@@ -46,7 +46,7 @@ namespace WebCore {
         virtual void setEncoding(const String&);
         virtual String encoding() const;
         virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
-        virtual void error();
+        virtual void error(CachedResource::Status);
         
         void checkNotify();
         
diff --git a/WebCore/loader/loader.cpp b/WebCore/loader/loader.cpp
index 3b9af7a..1d32f82 100644
--- a/WebCore/loader/loader.cpp
+++ b/WebCore/loader/loader.cpp
@@ -139,7 +139,7 @@ void Loader::load(CachedResourceLoader* cachedResourceLoader, CachedResource* re
         cachedResourceLoader->setLoadInProgress(true);
         if (resource->resourceToRevalidate()) 
             cache()->revalidationFailed(resource); 
-        resource->error();
+        resource->error(CachedResource::LoadError);
         cachedResourceLoader->setLoadInProgress(false);
         delete request;
     }
@@ -198,7 +198,8 @@ void Loader::didFinishLoading(SubresourceLoader* loader)
     if (!resource->errorOccurred()) {
         cachedResourceLoader->setLoadInProgress(true);
         resource->data(loader->resourceData(), true);
-        resource->finish();
+        if (!resource->errorOccurred())
+            resource->finish();
     }
 
     delete request;
@@ -237,7 +238,7 @@ void Loader::didFail(SubresourceLoader* loader, bool cancelled)
 
     if (!cancelled) {
         cachedResourceLoader->setLoadInProgress(true);
-        resource->error();
+        resource->error(CachedResource::LoadError);
     }
     
     cachedResourceLoader->setLoadInProgress(false);
@@ -320,7 +321,7 @@ void Loader::didReceiveData(SubresourceLoader* loader, const char* data, int siz
     
     if (resource->errorOccurred())
         return;
-        
+
     if (resource->response().httpStatusCode() >= 400) {
         resource->httpStatusCodeError();
         return;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list