Index: Source/WebCore/html/parser/HTMLResourcePreloader.cpp |
diff --git a/Source/WebCore/html/parser/HTMLResourcePreloader.cpp b/Source/WebCore/html/parser/HTMLResourcePreloader.cpp |
index fa5adfbe690363dcf6b59a03207f145b25409f02..22ebf212b6e39d4abb77a4b21d6da6566ca707b6 100644 |
--- a/Source/WebCore/html/parser/HTMLResourcePreloader.cpp |
+++ b/Source/WebCore/html/parser/HTMLResourcePreloader.cpp |
@@ -29,6 +29,10 @@ |
#include "CachedResourceLoader.h" |
#include "Document.h" |
+#include "MediaList.h" |
+#include "MediaQueryEvaluator.h" |
+#include "RenderObject.h" |
+ |
namespace WebCore { |
bool PreloadRequest::isSafeToSendToAnotherThread() const |
@@ -36,6 +40,7 @@ bool PreloadRequest::isSafeToSendToAnotherThread() const |
return m_initiator.isSafeToSendToAnotherThread() |
&& m_charset.isSafeToSendToAnotherThread() |
&& m_resourceURL.isSafeToSendToAnotherThread() |
+ && m_mediaAttribute.isSafeToSendToAnotherThread() |
&& m_baseURL.isSafeToSendToAnotherThread(); |
} |
@@ -65,10 +70,24 @@ void HTMLResourcePreloader::takeAndPreload(PreloadRequestStream& r) |
preload(it->release()); |
} |
+static bool mediaAttributeMatches(Frame* frame, RenderStyle* renderStyle, const String& attributeValue) |
+{ |
+ RefPtr<MediaQuerySet> mediaQueries = MediaQuerySet::createAllowingDescriptionSyntax(attributeValue); |
+ MediaQueryEvaluator mediaQueryEvaluator("screen", frame, renderStyle); |
+ return mediaQueryEvaluator.eval(mediaQueries.get()); |
+} |
+ |
void HTMLResourcePreloader::preload(PassOwnPtr<PreloadRequest> preload) |
{ |
+ ASSERT(m_document->frame()); |
+ ASSERT(m_document->renderer()); |
+ ASSERT(m_document->renderer()->style()); |
+ if (!preload->media().isEmpty() && !mediaAttributeMatches(m_document->frame(), m_document->renderer()->style(), preload->media())) |
+ return; |
+ |
CachedResourceRequest request = preload->resourceRequest(m_document); |
m_document->cachedResourceLoader()->preload(preload->resourceType(), request, preload->charset()); |
} |
+ |
} |