OLD | NEW |
1 /* | 1 /* |
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) |
6 Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. | 6 Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. |
7 | 7 |
8 This library is free software; you can redistribute it and/or | 8 This library is free software; you can redistribute it and/or |
9 modify it under the terms of the GNU Library General Public | 9 modify it under the terms of the GNU Library General Public |
10 License as published by the Free Software Foundation; either | 10 License as published by the Free Software Foundation; either |
(...skipping 14 matching lines...) Expand all Loading... |
25 */ | 25 */ |
26 | 26 |
27 #include "core/fetch/CSSStyleSheetResource.h" | 27 #include "core/fetch/CSSStyleSheetResource.h" |
28 | 28 |
29 #include "core/css/StyleSheetContents.h" | 29 #include "core/css/StyleSheetContents.h" |
30 #include "core/fetch/FetchRequest.h" | 30 #include "core/fetch/FetchRequest.h" |
31 #include "core/fetch/ResourceClientWalker.h" | 31 #include "core/fetch/ResourceClientWalker.h" |
32 #include "core/fetch/ResourceFetcher.h" | 32 #include "core/fetch/ResourceFetcher.h" |
33 #include "core/fetch/StyleSheetResourceClient.h" | 33 #include "core/fetch/StyleSheetResourceClient.h" |
34 #include "platform/SharedBuffer.h" | 34 #include "platform/SharedBuffer.h" |
35 #include "platform/network/HTTPParsers.h" | |
36 #include "wtf/CurrentTime.h" | 35 #include "wtf/CurrentTime.h" |
37 | 36 |
38 namespace blink { | 37 namespace blink { |
39 | 38 |
40 PassRefPtrWillBeRawPtr<CSSStyleSheetResource> CSSStyleSheetResource::fetch(Fetch
Request& request, ResourceFetcher* fetcher) | 39 PassRefPtrWillBeRawPtr<CSSStyleSheetResource> CSSStyleSheetResource::fetch(Fetch
Request& request, ResourceFetcher* fetcher) |
41 { | 40 { |
42 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone
); | 41 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone
); |
43 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon
textStyle); | 42 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon
textStyle); |
44 return toCSSStyleSheetResource(fetcher->requestResource(request, CSSStyleShe
etResourceFactory())); | 43 return toCSSStyleSheetResource(fetcher->requestResource(request, CSSStyleShe
etResourceFactory())); |
45 } | 44 } |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 if (!m_data || m_data->isEmpty() || !canUseSheet(mimeTypeCheck)) | 97 if (!m_data || m_data->isEmpty() || !canUseSheet(mimeTypeCheck)) |
99 return String(); | 98 return String(); |
100 | 99 |
101 if (!m_decodedSheetText.isNull()) | 100 if (!m_decodedSheetText.isNull()) |
102 return m_decodedSheetText; | 101 return m_decodedSheetText; |
103 | 102 |
104 // Don't cache the decoded text, regenerating is cheap and it can use quite
a bit of memory | 103 // Don't cache the decoded text, regenerating is cheap and it can use quite
a bit of memory |
105 return decodedText(); | 104 return decodedText(); |
106 } | 105 } |
107 | 106 |
108 const AtomicString CSSStyleSheetResource::mimeType() const | |
109 { | |
110 return extractMIMETypeFromMediaType(response().httpHeaderField(HTTPNames::Co
ntent_Type)).lower(); | |
111 } | |
112 | |
113 void CSSStyleSheetResource::checkNotify() | 107 void CSSStyleSheetResource::checkNotify() |
114 { | 108 { |
115 // Decode the data to find out the encoding and keep the sheet text around d
uring checkNotify() | 109 // Decode the data to find out the encoding and keep the sheet text around d
uring checkNotify() |
116 if (m_data) | 110 if (m_data) |
117 m_decodedSheetText = decodedText(); | 111 m_decodedSheetText = decodedText(); |
118 | 112 |
119 ResourceClientWalker<StyleSheetResourceClient> w(m_clients); | 113 ResourceClientWalker<StyleSheetResourceClient> w(m_clients); |
120 while (StyleSheetResourceClient* c = w.next()) | 114 while (StyleSheetResourceClient* c = w.next()) |
121 c->setCSSStyleSheet(m_resourceRequest.url(), m_response.url(), encoding(
), this); | 115 c->setCSSStyleSheet(m_resourceRequest.url(), m_response.url(), encoding(
), this); |
122 // Clear the decoded text as it is unlikely to be needed immediately again a
nd is cheap to regenerate. | 116 // Clear the decoded text as it is unlikely to be needed immediately again a
nd is cheap to regenerate. |
(...skipping 23 matching lines...) Expand all Loading... |
146 | 140 |
147 // This check exactly matches Firefox. Note that we grab the Content-Type | 141 // This check exactly matches Firefox. Note that we grab the Content-Type |
148 // header directly because we want to see what the value is BEFORE content | 142 // header directly because we want to see what the value is BEFORE content |
149 // sniffing. Firefox does this by setting a "type hint" on the channel. | 143 // sniffing. Firefox does this by setting a "type hint" on the channel. |
150 // This implementation should be observationally equivalent. | 144 // This implementation should be observationally equivalent. |
151 // | 145 // |
152 // This code defaults to allowing the stylesheet for non-HTTP protocols so | 146 // This code defaults to allowing the stylesheet for non-HTTP protocols so |
153 // folks can use standards mode for local HTML documents. | 147 // folks can use standards mode for local HTML documents. |
154 if (mimeTypeCheck == MIMETypeCheck::Lax) | 148 if (mimeTypeCheck == MIMETypeCheck::Lax) |
155 return true; | 149 return true; |
156 return mimeType().isEmpty() || equalIgnoringCase(mimeType(), "text/css") ||
equalIgnoringCase(mimeType(), "application/x-unknown-content-type"); | 150 AtomicString contentType = httpContentType(); |
| 151 return contentType.isEmpty() || equalIgnoringCase(contentType, "text/css") |
| equalIgnoringCase(contentType, "application/x-unknown-content-type"); |
157 } | 152 } |
158 | 153 |
159 PassRefPtrWillBeRawPtr<StyleSheetContents> CSSStyleSheetResource::restoreParsedS
tyleSheet(const CSSParserContext& context) | 154 PassRefPtrWillBeRawPtr<StyleSheetContents> CSSStyleSheetResource::restoreParsedS
tyleSheet(const CSSParserContext& context) |
160 { | 155 { |
161 if (!m_parsedStyleSheetCache) | 156 if (!m_parsedStyleSheetCache) |
162 return nullptr; | 157 return nullptr; |
163 if (m_parsedStyleSheetCache->hasFailedOrCanceledSubresources()) { | 158 if (m_parsedStyleSheetCache->hasFailedOrCanceledSubresources()) { |
164 m_parsedStyleSheetCache->removedFromMemoryCache(); | 159 m_parsedStyleSheetCache->removedFromMemoryCache(); |
165 m_parsedStyleSheetCache.clear(); | 160 m_parsedStyleSheetCache.clear(); |
166 return nullptr; | 161 return nullptr; |
(...skipping 17 matching lines...) Expand all Loading... |
184 | 179 |
185 if (m_parsedStyleSheetCache) | 180 if (m_parsedStyleSheetCache) |
186 m_parsedStyleSheetCache->removedFromMemoryCache(); | 181 m_parsedStyleSheetCache->removedFromMemoryCache(); |
187 m_parsedStyleSheetCache = sheet; | 182 m_parsedStyleSheetCache = sheet; |
188 m_parsedStyleSheetCache->addedToMemoryCache(); | 183 m_parsedStyleSheetCache->addedToMemoryCache(); |
189 | 184 |
190 setDecodedSize(m_parsedStyleSheetCache->estimatedSizeInBytes()); | 185 setDecodedSize(m_parsedStyleSheetCache->estimatedSizeInBytes()); |
191 } | 186 } |
192 | 187 |
193 } // namespace blink | 188 } // namespace blink |
OLD | NEW |