Chromium Code Reviews| 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, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. | 6 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. |
| 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 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 #if !ENABLE(OILPAN) | 151 #if !ENABLE(OILPAN) |
| 152 , m_weakPtrFactory(this) | 152 , m_weakPtrFactory(this) |
| 153 #endif | 153 #endif |
| 154 , m_loadFinishTime(0) | 154 , m_loadFinishTime(0) |
| 155 , m_identifier(0) | 155 , m_identifier(0) |
| 156 , m_encodedSize(0) | 156 , m_encodedSize(0) |
| 157 , m_decodedSize(0) | 157 , m_decodedSize(0) |
| 158 , m_preloadCount(0) | 158 , m_preloadCount(0) |
| 159 , m_cacheIdentifier(MemoryCache::defaultCacheIdentifier()) | 159 , m_cacheIdentifier(MemoryCache::defaultCacheIdentifier()) |
| 160 , m_preloadResult(PreloadNotReferenced) | 160 , m_preloadResult(PreloadNotReferenced) |
| 161 , m_requestedFromNetworkingLayer(false) | |
| 162 , m_loading(false) | |
| 163 , m_type(type) | 161 , m_type(type) |
| 164 , m_status(Pending) | 162 , m_status(NotStarted) |
| 165 , m_needsSynchronousCacheHit(false) | 163 , m_needsSynchronousCacheHit(false) |
| 166 , m_linkPreload(false) | 164 , m_linkPreload(false) |
| 167 { | 165 { |
| 168 ASSERT(m_type == unsigned(type)); // m_type is a bitfield, so this tests car eless updates of the enum. | 166 ASSERT(m_type == unsigned(type)); // m_type is a bitfield, so this tests car eless updates of the enum. |
| 169 InstanceCounters::incrementCounter(InstanceCounters::ResourceCounter); | 167 InstanceCounters::incrementCounter(InstanceCounters::ResourceCounter); |
| 170 | 168 |
| 171 // Currently we support the metadata caching only for HTTP family. | 169 // Currently we support the metadata caching only for HTTP family. |
| 172 if (m_resourceRequest.url().protocolIsInHTTPFamily()) | 170 if (m_resourceRequest.url().protocolIsInHTTPFamily()) |
| 173 m_cacheHandler = CacheHandler::create(this); | 171 m_cacheHandler = CacheHandler::create(this); |
| 174 | 172 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 196 visitor->trace(m_loader); | 194 visitor->trace(m_loader); |
| 197 #if ENABLE(OILPAN) | 195 #if ENABLE(OILPAN) |
| 198 visitor->trace(m_cacheHandler); | 196 visitor->trace(m_cacheHandler); |
| 199 #endif | 197 #endif |
| 200 } | 198 } |
| 201 | 199 |
| 202 void Resource::load(ResourceFetcher* fetcher, const ResourceLoaderOptions& optio ns) | 200 void Resource::load(ResourceFetcher* fetcher, const ResourceLoaderOptions& optio ns) |
| 203 { | 201 { |
| 204 RELEASE_ASSERT(!m_loader); | 202 RELEASE_ASSERT(!m_loader); |
| 205 m_options = options; | 203 m_options = options; |
| 206 m_loading = true; | |
| 207 m_status = Pending; | 204 m_status = Pending; |
| 208 | 205 |
| 209 ResourceRequest& request(m_revalidatingRequest.isNull() ? m_resourceRequest : m_revalidatingRequest); | 206 ResourceRequest& request(m_revalidatingRequest.isNull() ? m_resourceRequest : m_revalidatingRequest); |
| 210 if (!accept().isEmpty()) | 207 if (!accept().isEmpty()) |
| 211 request.setHTTPAccept(accept()); | 208 request.setHTTPAccept(accept()); |
| 212 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC redentials); | 209 request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredC redentials); |
| 213 | 210 |
| 214 // FIXME: It's unfortunate that the cache layer and below get to know anythi ng about fragment identifiers. | 211 // FIXME: It's unfortunate that the cache layer and below get to know anythi ng about fragment identifiers. |
| 215 // We should look into removing the expectation of that knowledge from the p latform network stacks. | 212 // We should look into removing the expectation of that knowledge from the p latform network stacks. |
| 216 KURL urlWithoutFragment = request.url(); | 213 KURL urlWithoutFragment = request.url(); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 284 { | 281 { |
| 285 if (!m_revalidatingRequest.isNull()) | 282 if (!m_revalidatingRequest.isNull()) |
| 286 m_revalidatingRequest = ResourceRequest(); | 283 m_revalidatingRequest = ResourceRequest(); |
| 287 | 284 |
| 288 if (!m_error.isNull() && (m_error.isCancellation() || !isPreloaded())) | 285 if (!m_error.isNull() && (m_error.isCancellation() || !isPreloaded())) |
| 289 memoryCache()->remove(this); | 286 memoryCache()->remove(this); |
| 290 | 287 |
| 291 setStatus(status); | 288 setStatus(status); |
| 292 ASSERT(errorOccurred()); | 289 ASSERT(errorOccurred()); |
| 293 m_data.clear(); | 290 m_data.clear(); |
| 294 | |
| 295 setLoading(false); | |
| 296 checkNotify(); | 291 checkNotify(); |
| 297 markClientsFinished(); | 292 markClientsFinished(); |
| 298 } | 293 } |
| 299 | 294 |
| 300 void Resource::finish() | 295 void Resource::finish() |
| 301 { | 296 { |
| 302 ASSERT(m_revalidatingRequest.isNull()); | 297 ASSERT(m_revalidatingRequest.isNull()); |
| 303 setLoading(false); | 298 if (!errorOccurred()) |
| 299 m_status = Cached; | |
| 304 checkNotify(); | 300 checkNotify(); |
| 305 markClientsFinished(); | 301 markClientsFinished(); |
| 306 if (!errorOccurred()) | |
| 307 m_status = Cached; | |
| 308 } | 302 } |
| 309 | 303 |
| 310 AtomicString Resource::httpContentType() const | 304 AtomicString Resource::httpContentType() const |
| 311 { | 305 { |
| 312 return extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPNames::Co ntent_Type).lower()); | 306 return extractMIMETypeFromMediaType(m_response.httpHeaderField(HTTPNames::Co ntent_Type).lower()); |
| 313 } | 307 } |
| 314 | 308 |
| 315 bool Resource::passesAccessControlCheck(SecurityOrigin* securityOrigin) const | 309 bool Resource::passesAccessControlCheck(SecurityOrigin* securityOrigin) const |
| 316 { | 310 { |
| 317 String ignoredErrorDescription; | 311 String ignoredErrorDescription; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 415 { | 409 { |
| 416 if (!m_redirectChain.size()) | 410 if (!m_redirectChain.size()) |
| 417 return m_resourceRequest; | 411 return m_resourceRequest; |
| 418 return m_redirectChain.last().m_request; | 412 return m_redirectChain.last().m_request; |
| 419 } | 413 } |
| 420 | 414 |
| 421 void Resource::willFollowRedirect(ResourceRequest& newRequest, const ResourceRes ponse& redirectResponse) | 415 void Resource::willFollowRedirect(ResourceRequest& newRequest, const ResourceRes ponse& redirectResponse) |
| 422 { | 416 { |
| 423 newRequest.setAllowStoredCredentials(m_options.allowCredentials == AllowStor edCredentials); | 417 newRequest.setAllowStoredCredentials(m_options.allowCredentials == AllowStor edCredentials); |
| 424 m_redirectChain.append(RedirectPair(newRequest, redirectResponse)); | 418 m_redirectChain.append(RedirectPair(newRequest, redirectResponse)); |
| 425 m_requestedFromNetworkingLayer = true; | |
| 426 } | 419 } |
| 427 | 420 |
| 428 bool Resource::unlock() | 421 bool Resource::unlock() |
| 429 { | 422 { |
| 430 if (!m_data) | 423 if (!m_data) |
| 431 return false; | 424 return false; |
| 432 | 425 |
| 433 if (!m_data->isLocked()) | 426 if (!m_data->isLocked()) |
| 434 return true; | 427 return true; |
| 435 | 428 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 553 return m_cachedMetadata.get(); | 546 return m_cachedMetadata.get(); |
| 554 } | 547 } |
| 555 | 548 |
| 556 void Resource::clearLoader() | 549 void Resource::clearLoader() |
| 557 { | 550 { |
| 558 m_loader = nullptr; | 551 m_loader = nullptr; |
| 559 } | 552 } |
| 560 | 553 |
| 561 void Resource::didAddClient(ResourceClient* c) | 554 void Resource::didAddClient(ResourceClient* c) |
| 562 { | 555 { |
| 563 if (!isLoading() && !stillNeedsLoad()) { | 556 if (isLoaded()) { |
| 564 c->notifyFinished(this); | 557 c->notifyFinished(this); |
| 565 if (m_clients.contains(c)) { | 558 if (m_clients.contains(c)) { |
| 566 m_finishedClients.add(c); | 559 m_finishedClients.add(c); |
| 567 m_clients.remove(c); | 560 m_clients.remove(c); |
| 568 } | 561 } |
| 569 } | 562 } |
| 570 } | 563 } |
| 571 | 564 |
| 572 static bool shouldSendCachedDataSynchronouslyForType(Resource::Type type) | 565 static bool shouldSendCachedDataSynchronouslyForType(Resource::Type type) |
| 573 { | 566 { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 588 return false; | 581 return false; |
| 589 } | 582 } |
| 590 | 583 |
| 591 void Resource::addClient(ResourceClient* client) | 584 void Resource::addClient(ResourceClient* client) |
| 592 { | 585 { |
| 593 ASSERT(!isPurgeable()); | 586 ASSERT(!isPurgeable()); |
| 594 | 587 |
| 595 if (m_preloadResult == PreloadNotReferenced) { | 588 if (m_preloadResult == PreloadNotReferenced) { |
| 596 if (isLoaded()) | 589 if (isLoaded()) |
| 597 m_preloadResult = PreloadReferencedWhileComplete; | 590 m_preloadResult = PreloadReferencedWhileComplete; |
| 598 else if (m_requestedFromNetworkingLayer) | 591 else if (isLoading()) |
| 599 m_preloadResult = PreloadReferencedWhileLoading; | 592 m_preloadResult = PreloadReferencedWhileLoading; |
| 600 else | 593 else |
| 601 m_preloadResult = PreloadReferenced; | 594 m_preloadResult = PreloadReferenced; |
| 602 } | 595 } |
| 603 if (!hasClients()) | 596 if (!hasClients()) |
| 604 memoryCache()->makeLive(this); | 597 memoryCache()->makeLive(this); |
| 605 | 598 |
| 606 if (!m_revalidatingRequest.isNull()) { | 599 if (!m_revalidatingRequest.isNull()) { |
| 607 m_clients.add(client); | 600 m_clients.add(client); |
| 608 return; | 601 return; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 666 unlock(); | 659 unlock(); |
| 667 } | 660 } |
| 668 | 661 |
| 669 void Resource::cancelTimerFired(Timer<Resource>* timer) | 662 void Resource::cancelTimerFired(Timer<Resource>* timer) |
| 670 { | 663 { |
| 671 ASSERT_UNUSED(timer, timer == &m_cancelTimer); | 664 ASSERT_UNUSED(timer, timer == &m_cancelTimer); |
| 672 if (hasClients() || !m_loader) | 665 if (hasClients() || !m_loader) |
| 673 return; | 666 return; |
| 674 RefPtrWillBeRawPtr<Resource> protect(this); | 667 RefPtrWillBeRawPtr<Resource> protect(this); |
| 675 m_loader->cancelIfNotFinishing(); | 668 m_loader->cancelIfNotFinishing(); |
| 676 if (m_status != Cached) | 669 memoryCache()->remove(this); |
|
Nate Chapin
2016/03/18 21:24:06
This clause is weird. If we cancel *while finishin
hiroshige
2016/03/18 23:21:20
This is the case in XHR and might cause the test f
Nate Chapin
2016/03/21 22:04:01
Yeah, it seems like a good opportunity for cleanup
| |
| 677 memoryCache()->remove(this); | |
| 678 } | 670 } |
| 679 | 671 |
| 680 void Resource::setDecodedSize(size_t decodedSize) | 672 void Resource::setDecodedSize(size_t decodedSize) |
| 681 { | 673 { |
| 682 if (decodedSize == m_decodedSize) | 674 if (decodedSize == m_decodedSize) |
| 683 return; | 675 return; |
| 684 size_t oldSize = size(); | 676 size_t oldSize = size(); |
| 685 m_decodedSize = decodedSize; | 677 m_decodedSize = decodedSize; |
| 686 memoryCache()->update(this, oldSize, size()); | 678 memoryCache()->update(this, oldSize, size()); |
| 687 memoryCache()->updateDecodedResource(this, UpdateForPropertyChange); | 679 memoryCache()->updateDecodedResource(this, UpdateForPropertyChange); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 858 return !m_response.httpHeaderField(HTTPNames::Vary).isNull(); | 850 return !m_response.httpHeaderField(HTTPNames::Vary).isNull(); |
| 859 } | 851 } |
| 860 | 852 |
| 861 bool Resource::mustRevalidateDueToCacheHeaders() | 853 bool Resource::mustRevalidateDueToCacheHeaders() |
| 862 { | 854 { |
| 863 return !canUseResponse(m_response, m_responseTimestamp) || m_resourceRequest .cacheControlContainsNoCache() || m_resourceRequest.cacheControlContainsNoStore( ); | 855 return !canUseResponse(m_response, m_responseTimestamp) || m_resourceRequest .cacheControlContainsNoCache() || m_resourceRequest.cacheControlContainsNoStore( ); |
| 864 } | 856 } |
| 865 | 857 |
| 866 bool Resource::canUseCacheValidator() | 858 bool Resource::canUseCacheValidator() |
| 867 { | 859 { |
| 868 if (m_loading || errorOccurred()) | 860 if (isLoading() || errorOccurred()) |
| 869 return false; | 861 return false; |
| 870 | 862 |
| 871 if (hasCacheControlNoStoreHeader()) | 863 if (hasCacheControlNoStoreHeader()) |
| 872 return false; | 864 return false; |
| 873 return m_response.hasCacheValidatorFields() || m_resourceRequest.hasCacheVal idatorFields(); | 865 return m_response.hasCacheValidatorFields() || m_resourceRequest.hasCacheVal idatorFields(); |
| 874 } | 866 } |
| 875 | 867 |
| 876 bool Resource::isPurgeable() const | 868 bool Resource::isPurgeable() const |
| 877 { | 869 { |
| 878 return m_data && !m_data->isLocked(); | 870 return m_data && !m_data->isLocked(); |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1100 case Resource::Media: | 1092 case Resource::Media: |
| 1101 return "Media"; | 1093 return "Media"; |
| 1102 case Resource::Manifest: | 1094 case Resource::Manifest: |
| 1103 return "Manifest"; | 1095 return "Manifest"; |
| 1104 } | 1096 } |
| 1105 ASSERT_NOT_REACHED(); | 1097 ASSERT_NOT_REACHED(); |
| 1106 return "Unknown"; | 1098 return "Unknown"; |
| 1107 } | 1099 } |
| 1108 | 1100 |
| 1109 } // namespace blink | 1101 } // namespace blink |
| OLD | NEW |