[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