| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All Rights Reserved. | 2 * Copyright (C) 2013 Google Inc. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "config.h" | 26 #include "config.h" |
| 27 #include "HTMLResourcePreloader.h" | 27 #include "HTMLResourcePreloader.h" |
| 28 | 28 |
| 29 #include "CachedResourceLoader.h" | 29 #include "CachedResourceLoader.h" |
| 30 #include "Document.h" | 30 #include "Document.h" |
| 31 | 31 |
| 32 #include "MediaList.h" |
| 33 #include "MediaQueryEvaluator.h" |
| 34 #include "RenderObject.h" |
| 35 |
| 32 namespace WebCore { | 36 namespace WebCore { |
| 33 | 37 |
| 34 bool PreloadRequest::isSafeToSendToAnotherThread() const | 38 bool PreloadRequest::isSafeToSendToAnotherThread() const |
| 35 { | 39 { |
| 36 return m_initiator.isSafeToSendToAnotherThread() | 40 return m_initiator.isSafeToSendToAnotherThread() |
| 37 && m_charset.isSafeToSendToAnotherThread() | 41 && m_charset.isSafeToSendToAnotherThread() |
| 38 && m_resourceURL.isSafeToSendToAnotherThread() | 42 && m_resourceURL.isSafeToSendToAnotherThread() |
| 43 && m_mediaAttribute.isSafeToSendToAnotherThread() |
| 39 && m_baseURL.isSafeToSendToAnotherThread(); | 44 && m_baseURL.isSafeToSendToAnotherThread(); |
| 40 } | 45 } |
| 41 | 46 |
| 42 KURL PreloadRequest::completeURL(Document* document) | 47 KURL PreloadRequest::completeURL(Document* document) |
| 43 { | 48 { |
| 44 return document->completeURL(m_resourceURL, m_baseURL.isEmpty() ? document->
url() : m_baseURL); | 49 return document->completeURL(m_resourceURL, m_baseURL.isEmpty() ? document->
url() : m_baseURL); |
| 45 } | 50 } |
| 46 | 51 |
| 47 CachedResourceRequest PreloadRequest::resourceRequest(Document* document) | 52 CachedResourceRequest PreloadRequest::resourceRequest(Document* document) |
| 48 { | 53 { |
| 49 ASSERT(isMainThread()); | 54 ASSERT(isMainThread()); |
| 50 CachedResourceRequest request(ResourceRequest(completeURL(document))); | 55 CachedResourceRequest request(ResourceRequest(completeURL(document))); |
| 51 request.setInitiator(m_initiator); | 56 request.setInitiator(m_initiator); |
| 52 | 57 |
| 53 // FIXME: It's possible CORS should work for other request types? | 58 // FIXME: It's possible CORS should work for other request types? |
| 54 if (m_resourceType == CachedResource::Script) | 59 if (m_resourceType == CachedResource::Script) |
| 55 request.mutableResourceRequest().setAllowCookies(m_crossOriginModeAllows
Cookies); | 60 request.mutableResourceRequest().setAllowCookies(m_crossOriginModeAllows
Cookies); |
| 56 return request; | 61 return request; |
| 57 } | 62 } |
| 58 | 63 |
| 59 void HTMLResourcePreloader::takeAndPreload(PreloadRequestStream& r) | 64 void HTMLResourcePreloader::takeAndPreload(PreloadRequestStream& r) |
| 60 { | 65 { |
| 61 PreloadRequestStream requests; | 66 PreloadRequestStream requests; |
| 62 requests.swap(r); | 67 requests.swap(r); |
| 63 | 68 |
| 64 for (PreloadRequestStream::iterator it = requests.begin(); it != requests.en
d(); ++it) | 69 for (PreloadRequestStream::iterator it = requests.begin(); it != requests.en
d(); ++it) |
| 65 preload(it->release()); | 70 preload(it->release()); |
| 66 } | 71 } |
| 67 | 72 |
| 73 static bool mediaAttributeMatches(Frame* frame, RenderStyle* renderStyle, const
String& attributeValue) |
| 74 { |
| 75 RefPtr<MediaQuerySet> mediaQueries = MediaQuerySet::createAllowingDescriptio
nSyntax(attributeValue); |
| 76 MediaQueryEvaluator mediaQueryEvaluator("screen", frame, renderStyle); |
| 77 return mediaQueryEvaluator.eval(mediaQueries.get()); |
| 78 } |
| 79 |
| 68 void HTMLResourcePreloader::preload(PassOwnPtr<PreloadRequest> preload) | 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 CachedResourceRequest request = preload->resourceRequest(m_document); | 88 CachedResourceRequest request = preload->resourceRequest(m_document); |
| 71 m_document->cachedResourceLoader()->preload(preload->resourceType(), request
, preload->charset()); | 89 m_document->cachedResourceLoader()->preload(preload->resourceType(), request
, preload->charset()); |
| 72 } | 90 } |
| 73 | 91 |
| 92 |
| 74 } | 93 } |
| OLD | NEW |