OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 * Copyright (C) 2009 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 m_httpStatusText = statusText; | 286 m_httpStatusText = statusText; |
287 } | 287 } |
288 | 288 |
289 const AtomicString& ResourceResponse::httpHeaderField(const AtomicString& name)
const | 289 const AtomicString& ResourceResponse::httpHeaderField(const AtomicString& name)
const |
290 { | 290 { |
291 return m_httpHeaderFields.get(name); | 291 return m_httpHeaderFields.get(name); |
292 } | 292 } |
293 | 293 |
294 static const AtomicString& cacheControlHeaderString() | 294 static const AtomicString& cacheControlHeaderString() |
295 { | 295 { |
296 DEFINE_STATIC_LOCAL(const AtomicString, cacheControlHeader, ("cache-control"
, AtomicString::ConstructFromLiteral)); | 296 DEFINE_STATIC_LOCAL(const AtomicString, cacheControlHeader, ("cache-control"
)); |
297 return cacheControlHeader; | 297 return cacheControlHeader; |
298 } | 298 } |
299 | 299 |
300 static const AtomicString& pragmaHeaderString() | 300 static const AtomicString& pragmaHeaderString() |
301 { | 301 { |
302 DEFINE_STATIC_LOCAL(const AtomicString, pragmaHeader, ("pragma", AtomicStrin
g::ConstructFromLiteral)); | 302 DEFINE_STATIC_LOCAL(const AtomicString, pragmaHeader, ("pragma")); |
303 return pragmaHeader; | 303 return pragmaHeader; |
304 } | 304 } |
305 | 305 |
306 void ResourceResponse::updateHeaderParsedState(const AtomicString& name) | 306 void ResourceResponse::updateHeaderParsedState(const AtomicString& name) |
307 { | 307 { |
308 DEFINE_STATIC_LOCAL(const AtomicString, ageHeader, ("age", AtomicString::Con
structFromLiteral)); | 308 DEFINE_STATIC_LOCAL(const AtomicString, ageHeader, ("age")); |
309 DEFINE_STATIC_LOCAL(const AtomicString, dateHeader, ("date", AtomicString::C
onstructFromLiteral)); | 309 DEFINE_STATIC_LOCAL(const AtomicString, dateHeader, ("date")); |
310 DEFINE_STATIC_LOCAL(const AtomicString, expiresHeader, ("expires", AtomicStr
ing::ConstructFromLiteral)); | 310 DEFINE_STATIC_LOCAL(const AtomicString, expiresHeader, ("expires")); |
311 DEFINE_STATIC_LOCAL(const AtomicString, lastModifiedHeader, ("last-modified"
, AtomicString::ConstructFromLiteral)); | 311 DEFINE_STATIC_LOCAL(const AtomicString, lastModifiedHeader, ("last-modified"
)); |
312 | 312 |
313 if (equalIgnoringCase(name, ageHeader)) | 313 if (equalIgnoringCase(name, ageHeader)) |
314 m_haveParsedAgeHeader = false; | 314 m_haveParsedAgeHeader = false; |
315 else if (equalIgnoringCase(name, cacheControlHeaderString()) || equalIgnorin
gCase(name, pragmaHeaderString())) | 315 else if (equalIgnoringCase(name, cacheControlHeaderString()) || equalIgnorin
gCase(name, pragmaHeaderString())) |
316 m_cacheControlHeader = CacheControlHeader(); | 316 m_cacheControlHeader = CacheControlHeader(); |
317 else if (equalIgnoringCase(name, dateHeader)) | 317 else if (equalIgnoringCase(name, dateHeader)) |
318 m_haveParsedDateHeader = false; | 318 m_haveParsedDateHeader = false; |
319 else if (equalIgnoringCase(name, expiresHeader)) | 319 else if (equalIgnoringCase(name, expiresHeader)) |
320 m_haveParsedExpiresHeader = false; | 320 m_haveParsedExpiresHeader = false; |
321 else if (equalIgnoringCase(name, lastModifiedHeader)) | 321 else if (equalIgnoringCase(name, lastModifiedHeader)) |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 | 376 |
377 bool ResourceResponse::cacheControlContainsMustRevalidate() | 377 bool ResourceResponse::cacheControlContainsMustRevalidate() |
378 { | 378 { |
379 if (!m_cacheControlHeader.parsed) | 379 if (!m_cacheControlHeader.parsed) |
380 m_cacheControlHeader = parseCacheControlDirectives(m_httpHeaderFields.ge
t(cacheControlHeaderString()), m_httpHeaderFields.get(pragmaHeaderString())); | 380 m_cacheControlHeader = parseCacheControlDirectives(m_httpHeaderFields.ge
t(cacheControlHeaderString()), m_httpHeaderFields.get(pragmaHeaderString())); |
381 return m_cacheControlHeader.containsMustRevalidate; | 381 return m_cacheControlHeader.containsMustRevalidate; |
382 } | 382 } |
383 | 383 |
384 bool ResourceResponse::hasCacheValidatorFields() const | 384 bool ResourceResponse::hasCacheValidatorFields() const |
385 { | 385 { |
386 DEFINE_STATIC_LOCAL(const AtomicString, lastModifiedHeader, ("last-modified"
, AtomicString::ConstructFromLiteral)); | 386 DEFINE_STATIC_LOCAL(const AtomicString, lastModifiedHeader, ("last-modified"
)); |
387 DEFINE_STATIC_LOCAL(const AtomicString, eTagHeader, ("etag", AtomicString::C
onstructFromLiteral)); | 387 DEFINE_STATIC_LOCAL(const AtomicString, eTagHeader, ("etag")); |
388 return !m_httpHeaderFields.get(lastModifiedHeader).isEmpty() || !m_httpHeade
rFields.get(eTagHeader).isEmpty(); | 388 return !m_httpHeaderFields.get(lastModifiedHeader).isEmpty() || !m_httpHeade
rFields.get(eTagHeader).isEmpty(); |
389 } | 389 } |
390 | 390 |
391 double ResourceResponse::cacheControlMaxAge() | 391 double ResourceResponse::cacheControlMaxAge() |
392 { | 392 { |
393 if (!m_cacheControlHeader.parsed) | 393 if (!m_cacheControlHeader.parsed) |
394 m_cacheControlHeader = parseCacheControlDirectives(m_httpHeaderFields.ge
t(cacheControlHeaderString()), m_httpHeaderFields.get(pragmaHeaderString())); | 394 m_cacheControlHeader = parseCacheControlDirectives(m_httpHeaderFields.ge
t(cacheControlHeaderString()), m_httpHeaderFields.get(pragmaHeaderString())); |
395 return m_cacheControlHeader.maxAge; | 395 return m_cacheControlHeader.maxAge; |
396 } | 396 } |
397 | 397 |
(...skipping 15 matching lines...) Expand all Loading... |
413 // Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format | 413 // Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format |
414 double dateInMilliseconds = parseDate(headerValue); | 414 double dateInMilliseconds = parseDate(headerValue); |
415 if (!std::isfinite(dateInMilliseconds)) | 415 if (!std::isfinite(dateInMilliseconds)) |
416 return std::numeric_limits<double>::quiet_NaN(); | 416 return std::numeric_limits<double>::quiet_NaN(); |
417 return dateInMilliseconds / 1000; | 417 return dateInMilliseconds / 1000; |
418 } | 418 } |
419 | 419 |
420 double ResourceResponse::date() const | 420 double ResourceResponse::date() const |
421 { | 421 { |
422 if (!m_haveParsedDateHeader) { | 422 if (!m_haveParsedDateHeader) { |
423 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("date", AtomicStrin
g::ConstructFromLiteral)); | 423 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("date")); |
424 m_date = parseDateValueInHeader(m_httpHeaderFields, headerName); | 424 m_date = parseDateValueInHeader(m_httpHeaderFields, headerName); |
425 m_haveParsedDateHeader = true; | 425 m_haveParsedDateHeader = true; |
426 } | 426 } |
427 return m_date; | 427 return m_date; |
428 } | 428 } |
429 | 429 |
430 double ResourceResponse::age() const | 430 double ResourceResponse::age() const |
431 { | 431 { |
432 if (!m_haveParsedAgeHeader) { | 432 if (!m_haveParsedAgeHeader) { |
433 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("age", AtomicString
::ConstructFromLiteral)); | 433 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("age")); |
434 const AtomicString& headerValue = m_httpHeaderFields.get(headerName); | 434 const AtomicString& headerValue = m_httpHeaderFields.get(headerName); |
435 bool ok; | 435 bool ok; |
436 m_age = headerValue.toDouble(&ok); | 436 m_age = headerValue.toDouble(&ok); |
437 if (!ok) | 437 if (!ok) |
438 m_age = std::numeric_limits<double>::quiet_NaN(); | 438 m_age = std::numeric_limits<double>::quiet_NaN(); |
439 m_haveParsedAgeHeader = true; | 439 m_haveParsedAgeHeader = true; |
440 } | 440 } |
441 return m_age; | 441 return m_age; |
442 } | 442 } |
443 | 443 |
444 double ResourceResponse::expires() const | 444 double ResourceResponse::expires() const |
445 { | 445 { |
446 if (!m_haveParsedExpiresHeader) { | 446 if (!m_haveParsedExpiresHeader) { |
447 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("expires", AtomicSt
ring::ConstructFromLiteral)); | 447 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("expires")); |
448 m_expires = parseDateValueInHeader(m_httpHeaderFields, headerName); | 448 m_expires = parseDateValueInHeader(m_httpHeaderFields, headerName); |
449 m_haveParsedExpiresHeader = true; | 449 m_haveParsedExpiresHeader = true; |
450 } | 450 } |
451 return m_expires; | 451 return m_expires; |
452 } | 452 } |
453 | 453 |
454 double ResourceResponse::lastModified() const | 454 double ResourceResponse::lastModified() const |
455 { | 455 { |
456 if (!m_haveParsedLastModifiedHeader) { | 456 if (!m_haveParsedLastModifiedHeader) { |
457 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("last-modified", At
omicString::ConstructFromLiteral)); | 457 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("last-modified")); |
458 m_lastModified = parseDateValueInHeader(m_httpHeaderFields, headerName); | 458 m_lastModified = parseDateValueInHeader(m_httpHeaderFields, headerName); |
459 m_haveParsedLastModifiedHeader = true; | 459 m_haveParsedLastModifiedHeader = true; |
460 } | 460 } |
461 return m_lastModified; | 461 return m_lastModified; |
462 } | 462 } |
463 | 463 |
464 bool ResourceResponse::isAttachment() const | 464 bool ResourceResponse::isAttachment() const |
465 { | 465 { |
466 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("content-disposition",
AtomicString::ConstructFromLiteral)); | 466 DEFINE_STATIC_LOCAL(const AtomicString, headerName, ("content-disposition"))
; |
467 String value = m_httpHeaderFields.get(headerName); | 467 String value = m_httpHeaderFields.get(headerName); |
468 size_t loc = value.find(';'); | 468 size_t loc = value.find(';'); |
469 if (loc != kNotFound) | 469 if (loc != kNotFound) |
470 value = value.left(loc); | 470 value = value.left(loc); |
471 value = value.stripWhiteSpace(); | 471 value = value.stripWhiteSpace(); |
472 DEFINE_STATIC_LOCAL(const AtomicString, attachmentString, ("attachment", Ato
micString::ConstructFromLiteral)); | 472 DEFINE_STATIC_LOCAL(const AtomicString, attachmentString, ("attachment")); |
473 return equalIgnoringCase(value, attachmentString); | 473 return equalIgnoringCase(value, attachmentString); |
474 } | 474 } |
475 | 475 |
476 void ResourceResponse::setLastModifiedDate(time_t lastModifiedDate) | 476 void ResourceResponse::setLastModifiedDate(time_t lastModifiedDate) |
477 { | 477 { |
478 m_lastModifiedDate = lastModifiedDate; | 478 m_lastModifiedDate = lastModifiedDate; |
479 } | 479 } |
480 | 480 |
481 time_t ResourceResponse::lastModifiedDate() const | 481 time_t ResourceResponse::lastModifiedDate() const |
482 { | 482 { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 if (a.httpHeaderFields() != b.httpHeaderFields()) | 567 if (a.httpHeaderFields() != b.httpHeaderFields()) |
568 return false; | 568 return false; |
569 if (a.resourceLoadTiming() && b.resourceLoadTiming() && *a.resourceLoadTimin
g() == *b.resourceLoadTiming()) | 569 if (a.resourceLoadTiming() && b.resourceLoadTiming() && *a.resourceLoadTimin
g() == *b.resourceLoadTiming()) |
570 return true; | 570 return true; |
571 if (a.resourceLoadTiming() != b.resourceLoadTiming()) | 571 if (a.resourceLoadTiming() != b.resourceLoadTiming()) |
572 return false; | 572 return false; |
573 return true; | 573 return true; |
574 } | 574 } |
575 | 575 |
576 } // namespace blink | 576 } // namespace blink |
OLD | NEW |