Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: Source/core/loader/LinkHeader.cpp

Issue 1131513004: Revert of Added <link rel=preconnect> crossorigin attribute (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/loader/LinkHeader.h ('k') | Source/core/loader/LinkHeaderTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/loader/LinkHeader.h" 6 #include "core/loader/LinkHeader.h"
7 7
8 #include "platform/ParsingUtilities.h" 8 #include "platform/ParsingUtilities.h"
9 9
10 namespace blink { 10 namespace blink {
(...skipping 22 matching lines...) Expand all
33 { 33 {
34 return chr == ';' || chr == ','; 34 return chr == ';' || chr == ',';
35 } 35 }
36 36
37 template <typename CharType> 37 template <typename CharType>
38 static bool isValidParameterValueChar(CharType chr) 38 static bool isValidParameterValueChar(CharType chr)
39 { 39 {
40 return !isWhitespace(chr) && !isValidParameterValueEnd(chr); 40 return !isWhitespace(chr) && !isValidParameterValueEnd(chr);
41 } 41 }
42 42
43 static bool isExtensionParameter(LinkHeader::LinkParameterName name)
44 {
45 return name > LinkHeader::LinkParameterAnchor;
46 }
47
48 // Before: 43 // Before:
49 // 44 //
50 // <cat.jpg>; rel=preload 45 // <cat.jpg>; rel=preload
51 // ^ ^ 46 // ^ ^
52 // position end 47 // position end
53 // 48 //
54 // After (if successful: otherwise the method returns false) 49 // After (if successful: otherwise the method returns false)
55 // 50 //
56 // <cat.jpg>; rel=preload 51 // <cat.jpg>; rel=preload
57 // ^ ^ 52 // ^ ^
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 return true; 109 return true;
115 } 110 }
116 111
117 static LinkHeader::LinkParameterName paramterNameFromString(String name) 112 static LinkHeader::LinkParameterName paramterNameFromString(String name)
118 { 113 {
119 // FIXME: Add support for more header parameters as neccessary. 114 // FIXME: Add support for more header parameters as neccessary.
120 if (equalIgnoringCase(name, "rel")) 115 if (equalIgnoringCase(name, "rel"))
121 return LinkHeader::LinkParameterRel; 116 return LinkHeader::LinkParameterRel;
122 else if (equalIgnoringCase(name, "anchor")) 117 else if (equalIgnoringCase(name, "anchor"))
123 return LinkHeader::LinkParameterAnchor; 118 return LinkHeader::LinkParameterAnchor;
124 else if (equalIgnoringCase(name, "crossorigin"))
125 return LinkHeader::LinkParameterCrossOrigin;
126 return LinkHeader::LinkParameterUnknown; 119 return LinkHeader::LinkParameterUnknown;
127 } 120 }
128 121
129 // Before: 122 // Before:
130 // 123 //
131 // <cat.jpg>; rel=preload 124 // <cat.jpg>; rel=preload
132 // ^ ^ 125 // ^ ^
133 // position end 126 // position end
134 // 127 //
135 // After (if successful: otherwise the method returns false) 128 // After (if successful: otherwise the method returns false)
136 // 129 //
137 // <cat.jpg>; rel=preload 130 // <cat.jpg>; rel=preload
138 // ^ ^ 131 // ^ ^
139 // position end 132 // position end
140 template <typename CharType> 133 template <typename CharType>
141 static bool parseParameterName(CharType*& position, CharType* end, LinkHeader::L inkParameterName& name) 134 static bool parseParameterName(CharType*& position, CharType* end, LinkHeader::L inkParameterName& name)
142 { 135 {
143 CharType* nameStart = position; 136 CharType* nameStart = position;
144 skipWhile<CharType, isValidParameterNameChar>(position, end); 137 skipWhile<CharType, isValidParameterNameChar>(position, end);
145 CharType* nameEnd = position; 138 CharType* nameEnd = position;
146 skipWhile<CharType, isWhitespace>(position, end); 139 skipWhile<CharType, isWhitespace>(position, end);
147 bool hasEqual = skipExactly<CharType>(position, end, '='); 140 if (!skipExactly<CharType>(position, end, '='))
141 return false;
148 skipWhile<CharType, isWhitespace>(position, end); 142 skipWhile<CharType, isWhitespace>(position, end);
149 name = paramterNameFromString(String(nameStart, nameEnd - nameStart)); 143 name = paramterNameFromString(String(nameStart, nameEnd - nameStart));
150 return hasEqual || isExtensionParameter(name); 144 return true;
151 } 145 }
152 146
153 // Before: 147 // Before:
154 // 148 //
155 // <cat.jpg>; rel="preload"; type="image/jpeg"; 149 // <cat.jpg>; rel="preload"; type="image/jpeg";
156 // ^ ^ 150 // ^ ^
157 // position end 151 // position end
158 // 152 //
159 // After (if the parameter starts with a quote, otherwise the method returns fal se) 153 // After (if the parameter starts with a quote, otherwise the method returns fal se)
160 // 154 //
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 { 193 {
200 CharType* valueStart = position; 194 CharType* valueStart = position;
201 CharType* valueEnd = position; 195 CharType* valueEnd = position;
202 bool completeQuotes; 196 bool completeQuotes;
203 bool hasQuotes = skipQuotesIfNeeded(position, end, completeQuotes); 197 bool hasQuotes = skipQuotesIfNeeded(position, end, completeQuotes);
204 if (!hasQuotes) { 198 if (!hasQuotes) {
205 skipWhile<CharType, isValidParameterValueChar>(position, end); 199 skipWhile<CharType, isValidParameterValueChar>(position, end);
206 } 200 }
207 valueEnd = position; 201 valueEnd = position;
208 skipWhile<CharType, isWhitespace>(position, end); 202 skipWhile<CharType, isWhitespace>(position, end);
209 if ((!completeQuotes && valueStart == valueEnd) || (position != end && !isVa lidParameterValueEnd(*position))) { 203 if ((!completeQuotes && valueStart == valueEnd) || (position != end && !isVa lidParameterValueEnd(*position)))
210 value = String("");
211 return false; 204 return false;
212 }
213 if (hasQuotes) 205 if (hasQuotes)
214 ++valueStart; 206 ++valueStart;
215 if (completeQuotes) 207 if (completeQuotes)
216 --valueEnd; 208 --valueEnd;
217 value = String(valueStart, valueEnd - valueStart); 209 value = String(valueStart, valueEnd - valueStart);
218 return !hasQuotes || completeQuotes; 210 return !hasQuotes || completeQuotes;
219 } 211 }
220 212
221 void LinkHeader::setValue(LinkParameterName name, String value) 213 void LinkHeader::setValue(LinkParameterName name, String value)
222 { 214 {
223 // FIXME: Add support for more header parameters as neccessary. 215 // FIXME: Add support for more header parameters as neccessary.
224 if (name == LinkParameterRel && !m_rel) 216 if (name == LinkParameterRel && !m_rel)
225 m_rel = value.lower(); 217 m_rel = value.lower();
226 else if (name == LinkParameterAnchor) 218 else if (name == LinkParameterAnchor)
227 m_isValid = false; 219 m_isValid = false;
228 else if (name == LinkParameterCrossOrigin)
229 m_crossOrigin = crossOriginAttributeValue(value);
230 } 220 }
231 221
232 template <typename CharType> 222 template <typename CharType>
233 static void findNextHeader(CharType*& position, CharType* end) 223 static void findNextHeader(CharType*& position, CharType* end)
234 { 224 {
235 skipUntil<CharType>(position, end, ','); 225 skipUntil<CharType>(position, end, ',');
236 skipExactly<CharType>(position, end, ','); 226 skipExactly<CharType>(position, end, ',');
237 } 227 }
238 228
239 template <typename CharType> 229 template <typename CharType>
240 LinkHeader::LinkHeader(CharType*& position, CharType* end) 230 LinkHeader::LinkHeader(CharType*& position, CharType* end)
241 : m_crossOrigin(CrossOriginAttributeNotSet) 231 : m_isValid(true)
242 , m_isValid(true)
243 { 232 {
244 if (!parseURL(position, end, m_url)) { 233 if (!parseURL(position, end, m_url)) {
245 m_isValid = false; 234 m_isValid = false;
246 findNextHeader(position, end); 235 findNextHeader(position, end);
247 return; 236 return;
248 } 237 }
249 238
250 while (m_isValid && position < end) { 239 while (m_isValid && position < end) {
251 if (!parseParameterDelimiter(position, end, m_isValid)) { 240 if (!parseParameterDelimiter(position, end, m_isValid)) {
252 findNextHeader(position, end); 241 findNextHeader(position, end);
253 return; 242 return;
254 } 243 }
255 244
256 LinkParameterName parameterName; 245 LinkParameterName parameterName;
257 if (!parseParameterName(position, end, parameterName)) { 246 if (!parseParameterName(position, end, parameterName)) {
258 findNextHeader(position, end); 247 findNextHeader(position, end);
259 m_isValid = false; 248 m_isValid = false;
260 return; 249 return;
261 } 250 }
262 251
263 String parameterValue; 252 String parameterValue;
264 if (!parseParameterValue(position, end, parameterValue) && !isExtensionP arameter(parameterName)) { 253 if (!parseParameterValue(position, end, parameterValue)) {
265 findNextHeader(position, end); 254 findNextHeader(position, end);
266 m_isValid = false; 255 m_isValid = false;
267 return; 256 return;
268 } 257 }
269 258
270 setValue(parameterName, parameterValue); 259 setValue(parameterName, parameterValue);
271 } 260 }
272 } 261 }
273 262
274 LinkHeaderSet::LinkHeaderSet(const String& header) 263 LinkHeaderSet::LinkHeaderSet(const String& header)
(...skipping 10 matching lines...) Expand all
285 template <typename CharType> 274 template <typename CharType>
286 void LinkHeaderSet::init(CharType* headerValue, unsigned len) 275 void LinkHeaderSet::init(CharType* headerValue, unsigned len)
287 { 276 {
288 CharType* position = headerValue; 277 CharType* position = headerValue;
289 CharType* end = headerValue + len; 278 CharType* end = headerValue + len;
290 while (position < end) 279 while (position < end)
291 m_headerSet.append(LinkHeader(position, end)); 280 m_headerSet.append(LinkHeader(position, end));
292 } 281 }
293 282
294 } 283 }
OLDNEW
« no previous file with comments | « Source/core/loader/LinkHeader.h ('k') | Source/core/loader/LinkHeaderTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698