summaryrefslogtreecommitdiff
path: root/Source/WebCore/loader
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-07-23 09:28:44 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-07-23 09:28:44 +0200
commit815f1ed417bd26fbe2abbdf20ac5d3423b30796c (patch)
tree923c9a9e2834ccab60f5caecfb8f0ac410c1dd9e /Source/WebCore/loader
parentb4ad5d9d2b96baacd0180ead50de5195ca78af2d (diff)
downloadqtwebkit-815f1ed417bd26fbe2abbdf20ac5d3423b30796c.tar.gz
Imported WebKit commit e65cbc5b6ac32627c797e7fc7f46eb7794410c92 (http://svn.webkit.org/repository/webkit/trunk@123308)
New snapshot with better configure tests
Diffstat (limited to 'Source/WebCore/loader')
-rw-r--r--Source/WebCore/loader/ImageLoader.cpp19
-rw-r--r--Source/WebCore/loader/ImageLoader.h2
-rw-r--r--Source/WebCore/loader/MainResourceLoader.cpp6
-rw-r--r--Source/WebCore/loader/archive/ArchiveFactory.cpp3
4 files changed, 24 insertions, 6 deletions
diff --git a/Source/WebCore/loader/ImageLoader.cpp b/Source/WebCore/loader/ImageLoader.cpp
index f4d1209f0..e897f8a4e 100644
--- a/Source/WebCore/loader/ImageLoader.cpp
+++ b/Source/WebCore/loader/ImageLoader.cpp
@@ -125,6 +125,15 @@ inline Document* ImageLoader::document()
void ImageLoader::setImage(CachedImage* newImage)
{
+ setImageWithoutConsideringPendingLoadEvent(newImage);
+
+ // Only consider updating the protection ref-count of the Element immediately before returning
+ // from this function as doing so might result in the destruction of this ImageLoader.
+ updatedHasPendingLoadEvent();
+}
+
+void ImageLoader::setImageWithoutConsideringPendingLoadEvent(CachedImage* newImage)
+{
ASSERT(m_failedLoadURL.isEmpty());
CachedImage* oldImage = m_image.get();
if (newImage != oldImage) {
@@ -150,10 +159,6 @@ void ImageLoader::setImage(CachedImage* newImage)
if (RenderImageResource* imageResource = renderImageResource())
imageResource->resetAnimation();
-
- // Only consider updating the protection ref-count of the Element immediately before returning
- // from this function as doing so might result in the destruction of this ImageLoader.
- updatedHasPendingLoadEvent();
}
void ImageLoader::updateFromElement()
@@ -263,7 +268,7 @@ void ImageLoader::notifyFinished(CachedResource* resource)
&& !document()->securityOrigin()->canRequest(image()->response().url())
&& !resource->passesAccessControlCheck(document()->securityOrigin())) {
- setImage(0);
+ setImageWithoutConsideringPendingLoadEvent(0);
m_hasPendingErrorEvent = true;
errorEventSender().dispatchEventSoon(this);
@@ -272,6 +277,10 @@ void ImageLoader::notifyFinished(CachedResource* resource)
document()->addConsoleMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, consoleMessage);
ASSERT(!m_hasPendingLoadEvent);
+
+ // Only consider updating the protection ref-count of the Element immediately before returning
+ // from this function as doing so might result in the destruction of this ImageLoader.
+ updatedHasPendingLoadEvent();
return;
}
diff --git a/Source/WebCore/loader/ImageLoader.h b/Source/WebCore/loader/ImageLoader.h
index 269fa67be..178807198 100644
--- a/Source/WebCore/loader/ImageLoader.h
+++ b/Source/WebCore/loader/ImageLoader.h
@@ -91,6 +91,8 @@ private:
RenderImageResource* renderImageResource();
void updateRenderer();
+ void setImageWithoutConsideringPendingLoadEvent(CachedImage*);
+
ImageLoaderClient* m_client;
CachedResourceHandle<CachedImage> m_image;
AtomicString m_failedLoadURL;
diff --git a/Source/WebCore/loader/MainResourceLoader.cpp b/Source/WebCore/loader/MainResourceLoader.cpp
index 6093652d0..fe7d1f9f2 100644
--- a/Source/WebCore/loader/MainResourceLoader.cpp
+++ b/Source/WebCore/loader/MainResourceLoader.cpp
@@ -266,7 +266,11 @@ void MainResourceLoader::continueAfterContentPolicy(PolicyAction contentPolicy,
switch (contentPolicy) {
case PolicyUse: {
// Prevent remote web archives from loading because they can claim to be from any domain and thus avoid cross-domain security checks (4120255).
- bool isRemoteWebArchive = (equalIgnoringCase("application/x-webarchive", mimeType) || equalIgnoringCase("multipart/related", mimeType))
+ bool isRemoteWebArchive = (equalIgnoringCase("application/x-webarchive", mimeType)
+#if PLATFORM(GTK)
+ || equalIgnoringCase("message/rfc822", mimeType)
+#endif
+ || equalIgnoringCase("multipart/related", mimeType))
&& !m_substituteData.isValid() && !SchemeRegistry::shouldTreatURLSchemeAsLocal(url.protocol());
if (!frameLoader()->client()->canShowMIMEType(mimeType) || isRemoteWebArchive) {
frameLoader()->policyChecker()->cannotShowMIMEType(r);
diff --git a/Source/WebCore/loader/archive/ArchiveFactory.cpp b/Source/WebCore/loader/archive/ArchiveFactory.cpp
index 521deb1d7..f6970aa53 100644
--- a/Source/WebCore/loader/archive/ArchiveFactory.cpp
+++ b/Source/WebCore/loader/archive/ArchiveFactory.cpp
@@ -68,6 +68,9 @@ static ArchiveMIMETypesMap& archiveMIMETypes()
#endif
#if ENABLE(MHTML)
mimeTypes.set("multipart/related", archiveFactoryCreate<MHTMLArchive>);
+#if PLATFORM(GTK)
+ mimeTypes.set("message/rfc822", archiveFactoryCreate<MHTMLArchive>);
+#endif
#endif
initialized = true;