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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLMetaElement-in.cpp

Issue 2312303002: Improve warnings for non-standard meta tag separators (Closed)
Patch Set: Created 4 years, 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2010 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2010 Apple Inc. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 } 66 }
67 67
68 // Though isspace() considers \t and \v to be whitespace, Win IE doesn't. 68 // Though isspace() considers \t and \v to be whitespace, Win IE doesn't.
69 static bool isSeparator(UChar c) 69 static bool isSeparator(UChar c)
70 { 70 {
71 return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '=' || c == ' ,' || c == '\0'; 71 return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '=' || c == ' ,' || c == '\0';
72 } 72 }
73 73
74 void HTMLMetaElement::parseContentAttribute(const String& content, void* data, D ocument* document, bool viewportMetaZeroValuesQuirk) 74 void HTMLMetaElement::parseContentAttribute(const String& content, void* data, D ocument* document, bool viewportMetaZeroValuesQuirk)
75 { 75 {
76 bool error = false; 76 bool hasInvalidSeparator = false;
77 77
78 // Tread lightly in this code -- it was specifically designed to mimic Win I E's parsing behavior. 78 // Tread lightly in this code -- it was specifically designed to mimic Win I E's parsing behavior.
79 unsigned keyBegin, keyEnd; 79 unsigned keyBegin, keyEnd;
80 unsigned valueBegin, valueEnd; 80 unsigned valueBegin, valueEnd;
81 81
82 String buffer = content.lower(); 82 String buffer = content.lower();
83 unsigned length = buffer.length(); 83 unsigned length = buffer.length();
84 for (unsigned i = 0; i < length; /* no increment here */) { 84 for (unsigned i = 0; i < length; /* no increment here */) {
85 // skip to first non-separator, but don't skip past the end of the strin g 85 // skip to first non-separator, but don't skip past the end of the strin g
86 while (isSeparator(buffer[i])) { 86 while (isSeparator(buffer[i])) {
87 if (i >= length) 87 if (i >= length)
88 break; 88 break;
89 i++; 89 i++;
90 } 90 }
91 keyBegin = i; 91 keyBegin = i;
92 92
93 // skip to first separator 93 // skip to first separator
94 while (!isSeparator(buffer[i])) { 94 while (!isSeparator(buffer[i])) {
95 error |= isInvalidSeparator(buffer[i]); 95 hasInvalidSeparator |= isInvalidSeparator(buffer[i]);
96 if (i >= length) 96 if (i >= length)
97 break; 97 break;
98 i++; 98 i++;
99 } 99 }
100 keyEnd = i; 100 keyEnd = i;
101 101
102 // skip to first '=', but don't skip past a ',' or the end of the string 102 // skip to first '=', but don't skip past a ',' or the end of the string
103 while (buffer[i] != '=') { 103 while (buffer[i] != '=') {
104 error |= isInvalidSeparator(buffer[i]); 104 hasInvalidSeparator |= isInvalidSeparator(buffer[i]);
105 if (buffer[i] == ',' || i >= length) 105 if (buffer[i] == ',' || i >= length)
106 break; 106 break;
107 i++; 107 i++;
108 } 108 }
109 109
110 // skip to first non-separator, but don't skip past a ',' or the end of the string 110 // skip to first non-separator, but don't skip past a ',' or the end of the string
111 while (isSeparator(buffer[i])) { 111 while (isSeparator(buffer[i])) {
112 if (buffer[i] == ',' || i >= length) 112 if (buffer[i] == ',' || i >= length)
113 break; 113 break;
114 i++; 114 i++;
115 } 115 }
116 valueBegin = i; 116 valueBegin = i;
117 117
118 // skip to first separator 118 // skip to first separator
119 while (!isSeparator(buffer[i])) { 119 while (!isSeparator(buffer[i])) {
120 error |= isInvalidSeparator(buffer[i]); 120 hasInvalidSeparator |= isInvalidSeparator(buffer[i]);
121 if (i >= length) 121 if (i >= length)
122 break; 122 break;
123 i++; 123 i++;
124 } 124 }
125 valueEnd = i; 125 valueEnd = i;
126 126
127 SECURITY_DCHECK(i <= length); 127 SECURITY_DCHECK(i <= length);
128 128
129 String keyString = buffer.substring(keyBegin, keyEnd - keyBegin); 129 String keyString = buffer.substring(keyBegin, keyEnd - keyBegin);
130 String valueString = buffer.substring(valueBegin, valueEnd - valueBegin) ; 130 String valueString = buffer.substring(valueBegin, valueEnd - valueBegin) ;
131 processViewportKeyValuePair(document, keyString, valueString, viewportMe taZeroValuesQuirk, data); 131 processViewportKeyValuePair(document, hasInvalidSeparator, keyString, va lueString, viewportMetaZeroValuesQuirk, data);
132 } 132 }
133 if (error && document) { 133 if (hasInvalidSeparator && document) {
134 String message = "Error parsing a meta element's content: ';' is not a v alid key-value pair separator. Please use ',' instead."; 134 String message = "Error parsing a meta element's content: ';' is not a v alid key-value pair separator. Please use ',' instead.";
135 document->addConsoleMessage(ConsoleMessage::create(RenderingMessageSourc e, WarningMessageLevel, message)); 135 document->addConsoleMessage(ConsoleMessage::create(RenderingMessageSourc e, WarningMessageLevel, message));
136 } 136 }
137 } 137 }
138 138
139 static inline float clampLengthValue(float value) 139 static inline float clampLengthValue(float value)
140 { 140 {
141 // Limits as defined in the css-device-adapt spec. 141 // Limits as defined in the css-device-adapt spec.
142 if (value != ViewportDescription::ValueAuto) 142 if (value != ViewportDescription::ValueAuto)
143 return std::min(float(10000), std::max(value, float(1))); 143 return std::min(float(10000), std::max(value, float(1)));
144 return value; 144 return value;
145 } 145 }
146 146
147 static inline float clampScaleValue(float value) 147 static inline float clampScaleValue(float value)
148 { 148 {
149 // Limits as defined in the css-device-adapt spec. 149 // Limits as defined in the css-device-adapt spec.
150 if (value != ViewportDescription::ValueAuto) 150 if (value != ViewportDescription::ValueAuto)
151 return std::min(float(10), std::max(value, float(0.1))); 151 return std::min(float(10), std::max(value, float(0.1)));
152 return value; 152 return value;
153 } 153 }
154 154
155 float HTMLMetaElement::parsePositiveNumber(Document* document, const String& key String, const String& valueString, bool* ok) 155 float HTMLMetaElement::parsePositiveNumber(Document* document, bool& hasInvalidS eparator, const String& keyString, const String& valueString, bool* ok)
bokan 2016/09/07 15:13:06 In this method and others, lets call the parameter
156 { 156 {
157 size_t parsedLength; 157 size_t parsedLength;
158 float value; 158 float value;
159 if (valueString.is8Bit()) 159 if (valueString.is8Bit())
160 value = charactersToFloat(valueString.characters8(), valueString.length( ), parsedLength); 160 value = charactersToFloat(valueString.characters8(), valueString.length( ), parsedLength);
161 else 161 else
162 value = charactersToFloat(valueString.characters16(), valueString.length (), parsedLength); 162 value = charactersToFloat(valueString.characters16(), valueString.length (), parsedLength);
163 if (!parsedLength) { 163 if (!parsedLength) {
164 reportViewportWarning(document, UnrecognizedViewportArgumentValueError, valueString, keyString); 164 reportViewportWarning(document, hasInvalidSeparator, UnrecognizedViewpor tArgumentValueError, valueString, keyString);
165 if (ok) 165 if (ok)
166 *ok = false; 166 *ok = false;
167 return 0; 167 return 0;
168 } 168 }
169 if (parsedLength < valueString.length()) 169 if (parsedLength < valueString.length())
170 reportViewportWarning(document, TruncatedViewportArgumentValueError, val ueString, keyString); 170 reportViewportWarning(document, hasInvalidSeparator, TruncatedViewportAr gumentValueError, valueString, keyString);
171 if (ok) 171 if (ok)
172 *ok = true; 172 *ok = true;
173 return value; 173 return value;
174 } 174 }
175 175
176 Length HTMLMetaElement::parseViewportValueAsLength(Document* document, const Str ing& keyString, const String& valueString) 176 Length HTMLMetaElement::parseViewportValueAsLength(Document* document, bool& has InvalidSeparator, const String& keyString, const String& valueString)
177 { 177 {
178 // 1) Non-negative number values are translated to px lengths. 178 // 1) Non-negative number values are translated to px lengths.
179 // 2) Negative number values are translated to auto. 179 // 2) Negative number values are translated to auto.
180 // 3) device-width and device-height are used as keywords. 180 // 3) device-width and device-height are used as keywords.
181 // 4) Other keywords and unknown values translate to 0.0. 181 // 4) Other keywords and unknown values translate to 0.0.
182 182
183 unsigned length = valueString.length(); 183 unsigned length = valueString.length();
184 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 13); 184 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 13);
185 SWITCH(characters, length) { 185 SWITCH(characters, length) {
186 CASE("device-width") { 186 CASE("device-width") {
187 return Length(DeviceWidth); 187 return Length(DeviceWidth);
188 } 188 }
189 CASE("device-height") { 189 CASE("device-height") {
190 return Length(DeviceHeight); 190 return Length(DeviceHeight);
191 } 191 }
192 } 192 }
193 193
194 float value = parsePositiveNumber(document, keyString, valueString); 194 float value = parsePositiveNumber(document, hasInvalidSeparator, keyString, valueString);
195 195
196 if (value < 0) 196 if (value < 0)
197 return Length(); // auto 197 return Length(); // auto
198 198
199 return Length(clampLengthValue(value), Fixed); 199 return Length(clampLengthValue(value), Fixed);
200 } 200 }
201 201
202 float HTMLMetaElement::parseViewportValueAsZoom(Document* document, const String & keyString, const String& valueString, bool& computedValueMatchesParsedValue, b ool viewportMetaZeroValuesQuirk) 202 float HTMLMetaElement::parseViewportValueAsZoom(Document* document, bool& hasInv alidSeparator, const String& keyString, const String& valueString, bool& compute dValueMatchesParsedValue, bool viewportMetaZeroValuesQuirk)
203 { 203 {
204 // 1) Non-negative number values are translated to <number> values. 204 // 1) Non-negative number values are translated to <number> values.
205 // 2) Negative number values are translated to auto. 205 // 2) Negative number values are translated to auto.
206 // 3) yes is translated to 1.0. 206 // 3) yes is translated to 1.0.
207 // 4) device-width and device-height are translated to 10.0. 207 // 4) device-width and device-height are translated to 10.0.
208 // 5) no and unknown values are translated to 0.0 208 // 5) no and unknown values are translated to 0.0
209 209
210 computedValueMatchesParsedValue = false; 210 computedValueMatchesParsedValue = false;
211 unsigned length = valueString.length(); 211 unsigned length = valueString.length();
212 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 13); 212 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 13);
213 SWITCH(characters, length) { 213 SWITCH(characters, length) {
214 CASE("yes") { 214 CASE("yes") {
215 return 1; 215 return 1;
216 } 216 }
217 CASE("no") { 217 CASE("no") {
218 return 0; 218 return 0;
219 } 219 }
220 CASE("device-width") { 220 CASE("device-width") {
221 return 10; 221 return 10;
222 } 222 }
223 CASE("device-height") { 223 CASE("device-height") {
224 return 10; 224 return 10;
225 } 225 }
226 } 226 }
227 227
228 float value = parsePositiveNumber(document, keyString, valueString); 228 float value = parsePositiveNumber(document, hasInvalidSeparator, keyString, valueString);
229 229
230 if (value < 0) 230 if (value < 0)
231 return ViewportDescription::ValueAuto; 231 return ViewportDescription::ValueAuto;
232 232
233 if (value > 10.0) 233 if (value > 10.0)
234 reportViewportWarning(document, MaximumScaleTooLargeError, String(), Str ing()); 234 reportViewportWarning(document, hasInvalidSeparator, MaximumScaleTooLarg eError, String(), String());
235 235
236 if (!value && viewportMetaZeroValuesQuirk) 236 if (!value && viewportMetaZeroValuesQuirk)
237 return ViewportDescription::ValueAuto; 237 return ViewportDescription::ValueAuto;
238 238
239 float clampedValue = clampScaleValue(value); 239 float clampedValue = clampScaleValue(value);
240 if (clampedValue == value) 240 if (clampedValue == value)
241 computedValueMatchesParsedValue = true; 241 computedValueMatchesParsedValue = true;
242 242
243 return clampedValue; 243 return clampedValue;
244 } 244 }
245 245
246 bool HTMLMetaElement::parseViewportValueAsUserZoom(Document* document, const Str ing& keyString, const String& valueString, bool& computedValueMatchesParsedValue ) 246 bool HTMLMetaElement::parseViewportValueAsUserZoom(Document* document, bool& has InvalidSeparator, const String& keyString, const String& valueString, bool& comp utedValueMatchesParsedValue)
247 { 247 {
248 // yes and no are used as keywords. 248 // yes and no are used as keywords.
249 // Numbers >= 1, numbers <= -1, device-width and device-height are mapped to yes. 249 // Numbers >= 1, numbers <= -1, device-width and device-height are mapped to yes.
250 // Numbers in the range <-1, 1>, and unknown values, are mapped to no. 250 // Numbers in the range <-1, 1>, and unknown values, are mapped to no.
251 251
252 computedValueMatchesParsedValue = false; 252 computedValueMatchesParsedValue = false;
253 unsigned length = valueString.length(); 253 unsigned length = valueString.length();
254 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 13); 254 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 13);
255 SWITCH(characters, length) { 255 SWITCH(characters, length) {
256 CASE("yes") { 256 CASE("yes") {
257 computedValueMatchesParsedValue = true; 257 computedValueMatchesParsedValue = true;
258 return true; 258 return true;
259 } 259 }
260 CASE("no") { 260 CASE("no") {
261 computedValueMatchesParsedValue = true; 261 computedValueMatchesParsedValue = true;
262 return false; 262 return false;
263 } 263 }
264 CASE("device-width") { 264 CASE("device-width") {
265 return true; 265 return true;
266 } 266 }
267 CASE("device-height") { 267 CASE("device-height") {
268 return true; 268 return true;
269 } 269 }
270 } 270 }
271 271
272 float value = parsePositiveNumber(document, keyString, valueString); 272 float value = parsePositiveNumber(document, hasInvalidSeparator, keyString, valueString);
273 if (fabs(value) < 1) 273 if (fabs(value) < 1)
274 return false; 274 return false;
275 275
276 return true; 276 return true;
277 } 277 }
278 278
279 float HTMLMetaElement::parseViewportValueAsDPI(Document* document, const String& keyString, const String& valueString) 279 float HTMLMetaElement::parseViewportValueAsDPI(Document* document, bool& hasInva lidSeparator, const String& keyString, const String& valueString)
280 { 280 {
281 unsigned length = valueString.length(); 281 unsigned length = valueString.length();
282 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 10); 282 DEFINE_ARRAY_FOR_MATCHING(characters, valueString, 10);
283 SWITCH(characters, length) { 283 SWITCH(characters, length) {
284 CASE("device-dpi") { 284 CASE("device-dpi") {
285 return ViewportDescription::ValueDeviceDPI; 285 return ViewportDescription::ValueDeviceDPI;
286 } 286 }
287 CASE("low-dpi") { 287 CASE("low-dpi") {
288 return ViewportDescription::ValueLowDPI; 288 return ViewportDescription::ValueLowDPI;
289 } 289 }
290 CASE("medium-dpi") { 290 CASE("medium-dpi") {
291 return ViewportDescription::ValueMediumDPI; 291 return ViewportDescription::ValueMediumDPI;
292 } 292 }
293 CASE("high-dpi") { 293 CASE("high-dpi") {
294 return ViewportDescription::ValueHighDPI; 294 return ViewportDescription::ValueHighDPI;
295 } 295 }
296 } 296 }
297 297
298 bool ok; 298 bool ok;
299 float value = parsePositiveNumber(document, keyString, valueString, &ok); 299 float value = parsePositiveNumber(document, hasInvalidSeparator, keyString, valueString, &ok);
300 if (!ok || value < 70 || value > 400) 300 if (!ok || value < 70 || value > 400)
301 return ViewportDescription::ValueAuto; 301 return ViewportDescription::ValueAuto;
302 302
303 return value; 303 return value;
304 } 304 }
305 305
306 void HTMLMetaElement::processViewportKeyValuePair(Document* document, const Stri ng& keyString, const String& valueString, bool viewportMetaZeroValuesQuirk, void * data) 306 void HTMLMetaElement::processViewportKeyValuePair(Document* document, bool& hasI nvalidSeparator, const String& keyString, const String& valueString, bool viewpo rtMetaZeroValuesQuirk, void* data)
307 { 307 {
308 ViewportDescription* description = static_cast<ViewportDescription*>(data); 308 ViewportDescription* description = static_cast<ViewportDescription*>(data);
309 309
310 unsigned length = keyString.length(); 310 unsigned length = keyString.length();
311 311
312 DEFINE_ARRAY_FOR_MATCHING(characters, keyString, 17); 312 DEFINE_ARRAY_FOR_MATCHING(characters, keyString, 17);
313 SWITCH(characters, length) { 313 SWITCH(characters, length) {
314 CASE("width") { 314 CASE("width") {
315 const Length& width = parseViewportValueAsLength(document, keyString , valueString); 315 const Length& width = parseViewportValueAsLength(document, hasInvali dSeparator, keyString, valueString);
316 if (width.isAuto()) 316 if (width.isAuto())
317 return; 317 return;
318 description->minWidth = Length(ExtendToZoom); 318 description->minWidth = Length(ExtendToZoom);
319 description->maxWidth = width; 319 description->maxWidth = width;
320 return; 320 return;
321 } 321 }
322 CASE("height") { 322 CASE("height") {
323 const Length& height = parseViewportValueAsLength(document, keyStrin g, valueString); 323 const Length& height = parseViewportValueAsLength(document, hasInval idSeparator, keyString, valueString);
324 if (height.isAuto()) 324 if (height.isAuto())
325 return; 325 return;
326 description->minHeight = Length(ExtendToZoom); 326 description->minHeight = Length(ExtendToZoom);
327 description->maxHeight = height; 327 description->maxHeight = height;
328 return; 328 return;
329 } 329 }
330 CASE("initial-scale") { 330 CASE("initial-scale") {
331 description->zoom = parseViewportValueAsZoom(document, keyString, va lueString, description->zoomIsExplicit, viewportMetaZeroValuesQuirk); 331 description->zoom = parseViewportValueAsZoom(document, hasInvalidSep arator, keyString, valueString, description->zoomIsExplicit, viewportMetaZeroVal uesQuirk);
332 return; 332 return;
333 } 333 }
334 CASE("minimum-scale") { 334 CASE("minimum-scale") {
335 description->minZoom = parseViewportValueAsZoom(document, keyString, valueString, description->minZoomIsExplicit, viewportMetaZeroValuesQuirk); 335 description->minZoom = parseViewportValueAsZoom(document, hasInvalid Separator, keyString, valueString, description->minZoomIsExplicit, viewportMetaZ eroValuesQuirk);
336 return; 336 return;
337 } 337 }
338 CASE("maximum-scale") { 338 CASE("maximum-scale") {
339 description->maxZoom = parseViewportValueAsZoom(document, keyString, valueString, description->maxZoomIsExplicit, viewportMetaZeroValuesQuirk); 339 description->maxZoom = parseViewportValueAsZoom(document, hasInvalid Separator, keyString, valueString, description->maxZoomIsExplicit, viewportMetaZ eroValuesQuirk);
340 return; 340 return;
341 } 341 }
342 CASE("user-scalable") { 342 CASE("user-scalable") {
343 description->userZoom = parseViewportValueAsUserZoom(document, keySt ring, valueString, description->userZoomIsExplicit); 343 description->userZoom = parseViewportValueAsUserZoom(document, hasIn validSeparator, keyString, valueString, description->userZoomIsExplicit);
344 return; 344 return;
345 } 345 }
346 CASE("target-densitydpi") { 346 CASE("target-densitydpi") {
347 description->deprecatedTargetDensityDPI = parseViewportValueAsDPI(do cument, keyString, valueString); 347 description->deprecatedTargetDensityDPI = parseViewportValueAsDPI(do cument, hasInvalidSeparator, keyString, valueString);
348 reportViewportWarning(document, TargetDensityDpiUnsupported, String( ), String()); 348 reportViewportWarning(document, hasInvalidSeparator, TargetDensityDp iUnsupported, String(), String());
349 return; 349 return;
350 } 350 }
351 CASE("minimal-ui") { 351 CASE("minimal-ui") {
352 // Ignore vendor-specific argument. 352 // Ignore vendor-specific argument.
353 return; 353 return;
354 } 354 }
355 CASE("shrink-to-fit") { 355 CASE("shrink-to-fit") {
356 // Ignore vendor-specific argument. 356 // Ignore vendor-specific argument.
357 return; 357 return;
358 } 358 }
359 } 359 }
360 reportViewportWarning(document, UnrecognizedViewportArgumentKeyError, keyStr ing, String()); 360 reportViewportWarning(document, hasInvalidSeparator, UnrecognizedViewportArg umentKeyError, keyString, String());
361 } 361 }
362 362
363 static const char* viewportErrorMessageTemplate(ViewportErrorCode errorCode) 363 static const char* viewportErrorMessageTemplate(ViewportErrorCode errorCode)
364 { 364 {
365 static const char* const errors[] = { 365 static const char* const errors[] = {
366 "The key \"%replacement1\" is not recognized and ignored.", 366 "The key \"%replacement1\" is not recognized and ignored.",
367 "The value \"%replacement1\" for key \"%replacement2\" is invalid, and h as been ignored.", 367 "The value \"%replacement1\" for key \"%replacement2\" is invalid, and h as been ignored.",
368 "The value \"%replacement1\" for key \"%replacement2\" was truncated to its numeric prefix.", 368 "The value \"%replacement1\" for key \"%replacement2\" was truncated to its numeric prefix.",
369 "The value for key \"maximum-scale\" is out of bounds and the value has been clamped.", 369 "The value for key \"maximum-scale\" is out of bounds and the value has been clamped.",
370 "The key \"target-densitydpi\" is not supported.", 370 "The key \"target-densitydpi\" is not supported.",
(...skipping 10 matching lines...) Expand all
381 case UnrecognizedViewportArgumentKeyError: 381 case UnrecognizedViewportArgumentKeyError:
382 case UnrecognizedViewportArgumentValueError: 382 case UnrecognizedViewportArgumentValueError:
383 case MaximumScaleTooLargeError: 383 case MaximumScaleTooLargeError:
384 return WarningMessageLevel; 384 return WarningMessageLevel;
385 } 385 }
386 386
387 NOTREACHED(); 387 NOTREACHED();
388 return ErrorMessageLevel; 388 return ErrorMessageLevel;
389 } 389 }
390 390
391 void HTMLMetaElement::reportViewportWarning(Document* document, ViewportErrorCod e errorCode, const String& replacement1, const String& replacement2) 391 void HTMLMetaElement::reportViewportWarning(Document* document, bool& hasInvalid Separator, ViewportErrorCode errorCode, const String& replacement1, const String & replacement2)
bokan 2016/09/07 15:13:06 This method shouldn't have this param. Instead, th
392 { 392 {
393 if (!document || !document->frame()) 393 if (!document || !document->frame() || hasInvalidSeparator)
394 return; 394 return;
395 395
396 String message = viewportErrorMessageTemplate(errorCode); 396 String message = viewportErrorMessageTemplate(errorCode);
397 if (!replacement1.isNull()) 397 if (!replacement1.isNull())
398 message.replace("%replacement1", replacement1); 398 message.replace("%replacement1", replacement1);
399 if (!replacement2.isNull()) 399 if (!replacement2.isNull())
400 message.replace("%replacement2", replacement2); 400 message.replace("%replacement2", replacement2);
401 401
402 // FIXME: This message should be moved off the console once a solution to ht tps://bugs.webkit.org/show_bug.cgi?id=103274 exists. 402 // FIXME: This message should be moved off the console once a solution to ht tps://bugs.webkit.org/show_bug.cgi?id=103274 exists.
403 document->addConsoleMessage(ConsoleMessage::create(RenderingMessageSource, v iewportErrorMessageLevel(errorCode), message)); 403 document->addConsoleMessage(ConsoleMessage::create(RenderingMessageSource, v iewportErrorMessageLevel(errorCode), message));
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 { 514 {
515 return getAttribute(http_equivAttr); 515 return getAttribute(http_equivAttr);
516 } 516 }
517 517
518 const AtomicString& HTMLMetaElement::name() const 518 const AtomicString& HTMLMetaElement::name() const
519 { 519 {
520 return getNameAttribute(); 520 return getNameAttribute();
521 } 521 }
522 522
523 } 523 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698