Changeset 153689 in webkit
- Timestamp:
- Aug 3, 2013 6:43:24 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r153685 r153689 1 2013-08-03 Yoav Weiss <yoav@yoav.ws> 2 3 PreloadScanner preloads external CSS with non-matching media attribute 4 https://bugs.webkit.org/show_bug.cgi?id=106198 5 6 Reviewed by Dean Jackson. 7 8 * http/tests/loading/preload-css-test-expected.txt: Added. 9 * http/tests/loading/preload-css-test.html: Added. 10 * http/tests/loading/resources/big_mq.css: Added. 11 * http/tests/loading/resources/small_mq.css: Added. 12 * http/tests/local/link-stylesheet-load-order-preload-expected.txt: 13 1 14 2013-08-02 Benjamin Poulain <bpoulain@apple.com> 2 15 -
trunk/LayoutTests/http/tests/local/link-stylesheet-load-order-preload-expected.txt
r74476 r153689 8 8 media-all.css 9 9 media-screen.css 10 media-screen-query-success.css 10 11 media-braille-screen.css 11 12 no-media-2.css … … 13 14 media-all-2.css 14 15 media-screen-2.css 16 media-screen-query-success-2.css 15 17 media-braille-screen-2.css 16 media-screen-query-success.css17 media-screen-query-success-2.css18 18 script-2.js 19 19 image.jpg -
trunk/Source/WebCore/ChangeLog
r153688 r153689 1 2013-08-03 Yoav Weiss <yoav@yoav.ws> 2 3 PreloadScanner preloads external CSS with non-matching media attribute 4 https://bugs.webkit.org/show_bug.cgi?id=106198 5 6 Reviewed by Dean Jackson. 7 8 Test: http/tests/loading/preload-css-test.html 9 10 * html/parser/HTMLPreloadScanner.cpp: 11 Remove m_linkMediaAttributeIsScreen 12 Remove MediaQueryEvaluator calls 13 Add m_mediaAttribute that gets the value of the "media" attribute 14 Pass m_mediaAttribute to PreloadRequest 15 (WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner): 16 (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest): 17 (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): 18 (WebCore::TokenPreloadScanner::StartTagScanner::resourceType): 19 (WebCore::TokenPreloadScanner::StartTagScanner::shouldPreload): 20 * html/parser/HTMLResourcePreloader.cpp: 21 Add MediaQueryEvaluator calls to see if "media" matches 22 Perform preload only to resource with a matching media (if media exists) 23 (WebCore::PreloadRequest::isSafeToSendToAnotherThread): 24 (WebCore::mediaAttributeMatches): 25 (WebCore::HTMLResourcePreloader::preload): 26 * html/parser/HTMLResourcePreloader.h: 27 Add a constructor with a mediaAttribute value 28 Add m_mediaAttribute & its getter. 29 (WebCore::PreloadRequest::create): 30 (WebCore::PreloadRequest::media): 31 (WebCore::PreloadRequest::PreloadRequest): 32 1 33 2013-08-03 Andreas Kling <akling@apple.com> 2 34 -
trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp
r151947 r153689 35 35 #include "InputTypeNames.h" 36 36 #include "LinkRelAttribute.h" 37 #include "MediaList.h"38 #include "MediaQueryEvaluator.h"39 37 #include <wtf/MainThread.h> 40 38 … … 111 109 : m_tagId(tagId) 112 110 , m_linkIsStyleSheet(false) 113 , m_linkMediaAttributeIsScreen(true)114 111 , m_inputIsImage(false) 115 112 { … … 143 140 return nullptr; 144 141 145 OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagId), m_urlToLoad, predictedBaseURL, resourceType() );142 OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagId), m_urlToLoad, predictedBaseURL, resourceType(), m_mediaAttribute); 146 143 request->setCrossOriginModeAllowsCookies(crossOriginModeAllowsCookies()); 147 144 request->setCharset(charset()); … … 180 177 m_linkIsStyleSheet = relAttributeIsStyleSheet(attributeValue); 181 178 else if (match(attributeName, mediaAttr)) 182 m_ linkMediaAttributeIsScreen = linkMediaAttributeIsScreen(attributeValue);179 m_mediaAttribute = attributeValue; 183 180 } else if (m_tagId == InputTagId) { 184 181 if (match(attributeName, srcAttr)) … … 195 192 } 196 193 197 static bool linkMediaAttributeIsScreen(const String& attributeValue)198 {199 if (attributeValue.isEmpty())200 return true;201 RefPtr<MediaQuerySet> mediaQueries = MediaQuerySet::createAllowingDescriptionSyntax(attributeValue);202 203 // Only preload screen media stylesheets. Used this way, the evaluator evaluates to true for any204 // rules containing complex queries (full evaluation is possible but it requires a frame and a style selector which205 // may be problematic here).206 MediaQueryEvaluator mediaQueryEvaluator("screen");207 return mediaQueryEvaluator.eval(mediaQueries.get());208 }209 210 194 void setUrlToLoad(const String& attributeValue) 211 195 { … … 231 215 if (m_tagId == ImgTagId || (m_tagId == InputTagId && m_inputIsImage)) 232 216 return CachedResource::ImageResource; 233 if (m_tagId == LinkTagId && m_linkIsStyleSheet && m_linkMediaAttributeIsScreen)217 if (m_tagId == LinkTagId && m_linkIsStyleSheet) 234 218 return CachedResource::CSSStyleSheet; 235 219 ASSERT_NOT_REACHED(); … … 242 226 return false; 243 227 244 if (m_tagId == LinkTagId && (!m_linkIsStyleSheet || !m_linkMediaAttributeIsScreen))228 if (m_tagId == LinkTagId && !m_linkIsStyleSheet) 245 229 return false; 246 230 … … 261 245 String m_crossOriginMode; 262 246 bool m_linkIsStyleSheet; 263 bool m_linkMediaAttributeIsScreen;247 String m_mediaAttribute; 264 248 bool m_inputIsImage; 265 249 }; -
trunk/Source/WebCore/html/parser/HTMLResourcePreloader.cpp
r143051 r153689 30 30 #include "Document.h" 31 31 32 #include "MediaList.h" 33 #include "MediaQueryEvaluator.h" 34 #include "RenderObject.h" 35 32 36 namespace WebCore { 33 37 … … 37 41 && m_charset.isSafeToSendToAnotherThread() 38 42 && m_resourceURL.isSafeToSendToAnotherThread() 43 && m_mediaAttribute.isSafeToSendToAnotherThread() 39 44 && m_baseURL.isSafeToSendToAnotherThread(); 40 45 } … … 66 71 } 67 72 73 static bool mediaAttributeMatches(Frame* frame, RenderStyle* renderStyle, const String& attributeValue) 74 { 75 RefPtr<MediaQuerySet> mediaQueries = MediaQuerySet::createAllowingDescriptionSyntax(attributeValue); 76 MediaQueryEvaluator mediaQueryEvaluator("screen", frame, renderStyle); 77 return mediaQueryEvaluator.eval(mediaQueries.get()); 78 } 79 68 80 void HTMLResourcePreloader::preload(PassOwnPtr<PreloadRequest> preload) 69 81 { 82 ASSERT(m_document->frame()); 83 ASSERT(m_document->renderer()); 84 ASSERT(m_document->renderer()->style()); 85 if (!preload->media().isEmpty() && !mediaAttributeMatches(m_document->frame(), m_document->renderer()->style(), preload->media())) 86 return; 87 70 88 CachedResourceRequest request = preload->resourceRequest(m_document); 71 89 m_document->cachedResourceLoader()->preload(preload->resourceType(), request, preload->charset()); 72 90 } 73 91 92 74 93 } -
trunk/Source/WebCore/html/parser/HTMLResourcePreloader.h
r143402 r153689 34 34 class PreloadRequest { 35 35 public: 36 static PassOwnPtr<PreloadRequest> create(const String& initiator, const String& resourceURL, const KURL& baseURL, CachedResource::Type resourceType, const String& mediaAttribute) 37 { 38 return adoptPtr(new PreloadRequest(initiator, resourceURL, baseURL, resourceType, mediaAttribute)); 39 } 40 36 41 static PassOwnPtr<PreloadRequest> create(const String& initiator, const String& resourceURL, const KURL& baseURL, CachedResource::Type resourceType) 37 42 { 38 return adoptPtr(new PreloadRequest(initiator, resourceURL, baseURL, resourceType ));43 return adoptPtr(new PreloadRequest(initiator, resourceURL, baseURL, resourceType, String())); 39 44 } 40 45 … … 44 49 45 50 const String& charset() const { return m_charset; } 51 const String& media() const { return m_mediaAttribute; } 46 52 void setCharset(const String& charset) { m_charset = charset.isolatedCopy(); } 47 53 void setCrossOriginModeAllowsCookies(bool allowsCookies) { m_crossOriginModeAllowsCookies = allowsCookies; } … … 49 55 50 56 private: 51 PreloadRequest(const String& initiator, const String& resourceURL, const KURL& baseURL, CachedResource::Type resourceType )57 PreloadRequest(const String& initiator, const String& resourceURL, const KURL& baseURL, CachedResource::Type resourceType, const String& mediaAttribute) 52 58 : m_initiator(initiator) 53 59 , m_resourceURL(resourceURL.isolatedCopy()) 54 60 , m_baseURL(baseURL.copy()) 55 61 , m_resourceType(resourceType) 62 , m_mediaAttribute(mediaAttribute.isolatedCopy()) 56 63 , m_crossOriginModeAllowsCookies(false) 57 64 { … … 65 72 String m_charset; 66 73 CachedResource::Type m_resourceType; 74 String m_mediaAttribute; 67 75 bool m_crossOriginModeAllowsCookies; 68 76 };
Note: See TracChangeset
for help on using the changeset viewer.