| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. | 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "platform/loader/fetch/RawResource.h" | 26 #include "platform/loader/fetch/RawResource.h" |
| 27 | 27 |
| 28 #include <memory> | 28 #include <memory> |
| 29 #include "platform/HTTPNames.h" | 29 #include "platform/HTTPNames.h" |
| 30 #include "platform/loader/fetch/FetchParameters.h" | 30 #include "platform/loader/fetch/FetchParameters.h" |
| 31 #include "platform/loader/fetch/MemoryCache.h" | |
| 32 #include "platform/loader/fetch/ResourceClientWalker.h" | 31 #include "platform/loader/fetch/ResourceClientWalker.h" |
| 33 #include "platform/loader/fetch/ResourceFetcher.h" | 32 #include "platform/loader/fetch/ResourceFetcher.h" |
| 34 #include "platform/loader/fetch/ResourceLoader.h" | 33 #include "platform/loader/fetch/ResourceLoader.h" |
| 35 | 34 |
| 36 namespace blink { | 35 namespace blink { |
| 37 | 36 |
| 38 RawResource* RawResource::FetchSynchronously(FetchParameters& params, | 37 RawResource* RawResource::FetchSynchronously(FetchParameters& params, |
| 39 ResourceFetcher* fetcher) { | 38 ResourceFetcher* fetcher) { |
| 40 params.MakeSynchronous(); | 39 params.MakeSynchronous(); |
| 41 return ToRawResource( | 40 return ToRawResource( |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 | 175 |
| 177 void RawResource::WillNotFollowRedirect() { | 176 void RawResource::WillNotFollowRedirect() { |
| 178 ResourceClientWalker<RawResourceClient> w(Clients()); | 177 ResourceClientWalker<RawResourceClient> w(Clients()); |
| 179 while (RawResourceClient* c = w.Next()) | 178 while (RawResourceClient* c = w.Next()) |
| 180 c->RedirectBlocked(); | 179 c->RedirectBlocked(); |
| 181 } | 180 } |
| 182 | 181 |
| 183 void RawResource::ResponseReceived( | 182 void RawResource::ResponseReceived( |
| 184 const ResourceResponse& response, | 183 const ResourceResponse& response, |
| 185 std::unique_ptr<WebDataConsumerHandle> handle) { | 184 std::unique_ptr<WebDataConsumerHandle> handle) { |
| 186 if (response.WasFallbackRequiredByServiceWorker()) { | |
| 187 // The ServiceWorker asked us to re-fetch the request. This resource must | |
| 188 // not be reused. | |
| 189 // Note: This logic is needed here because DocumentThreadableLoader handles | |
| 190 // CORS independently from ResourceLoader. Fix it. | |
| 191 GetMemoryCache()->Remove(this); | |
| 192 } | |
| 193 | |
| 194 bool is_successful_revalidation = | |
| 195 IsCacheValidator() && response.HttpStatusCode() == 304; | |
| 196 Resource::ResponseReceived(response, nullptr); | 185 Resource::ResponseReceived(response, nullptr); |
| 197 | 186 |
| 198 ResourceClientWalker<RawResourceClient> w(Clients()); | 187 ResourceClientWalker<RawResourceClient> w(Clients()); |
| 199 DCHECK(Clients().size() <= 1 || !handle); | 188 DCHECK(Clients().size() <= 1 || !handle); |
| 200 while (RawResourceClient* c = w.Next()) { | 189 while (RawResourceClient* c = w.Next()) { |
| 201 // |handle| is cleared when passed, but it's not a problem because |handle| | 190 // |handle| is cleared when passed, but it's not a problem because |handle| |
| 202 // is null when there are two or more clients, as asserted. | 191 // is null when there are two or more clients, as asserted. |
| 203 c->ResponseReceived(this, this->GetResponse(), std::move(handle)); | 192 c->ResponseReceived(this, this->GetResponse(), std::move(handle)); |
| 204 } | 193 } |
| 205 | |
| 206 // If we successfully revalidated, we won't get appendData() calls. Forward | |
| 207 // the data to clients now instead. Note: |m_data| can be null when no data is | |
| 208 // appended to the original resource. | |
| 209 if (is_successful_revalidation && Data()) { | |
| 210 ResourceClientWalker<RawResourceClient> w(Clients()); | |
| 211 while (RawResourceClient* c = w.Next()) | |
| 212 c->DataReceived(this, Data()->Data(), Data()->size()); | |
| 213 } | |
| 214 } | 194 } |
| 215 | 195 |
| 216 void RawResource::SetSerializedCachedMetadata(const char* data, size_t size) { | 196 void RawResource::SetSerializedCachedMetadata(const char* data, size_t size) { |
| 217 Resource::SetSerializedCachedMetadata(data, size); | 197 Resource::SetSerializedCachedMetadata(data, size); |
| 218 ResourceClientWalker<RawResourceClient> w(Clients()); | 198 ResourceClientWalker<RawResourceClient> w(Clients()); |
| 219 while (RawResourceClient* c = w.Next()) | 199 while (RawResourceClient* c = w.Next()) |
| 220 c->SetSerializedCachedMetadata(this, data, size); | 200 c->SetSerializedCachedMetadata(this, data, size); |
| 221 } | 201 } |
| 222 | 202 |
| 223 void RawResource::DidSendData(unsigned long long bytes_sent, | 203 void RawResource::DidSendData(unsigned long long bytes_sent, |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 SECURITY_CHECK(state_ != kNotAddedAsClient); | 343 SECURITY_CHECK(state_ != kNotAddedAsClient); |
| 364 SECURITY_CHECK(state_ != kNotifyFinished); | 344 SECURITY_CHECK(state_ != kNotifyFinished); |
| 365 SECURITY_CHECK(resource->ErrorOccurred() || | 345 SECURITY_CHECK(resource->ErrorOccurred() || |
| 366 (state_ == kResponseReceived || | 346 (state_ == kResponseReceived || |
| 367 state_ == kSetSerializedCachedMetadata || | 347 state_ == kSetSerializedCachedMetadata || |
| 368 state_ == kDataReceived || state_ == kDataDownloaded)); | 348 state_ == kDataReceived || state_ == kDataDownloaded)); |
| 369 state_ = kNotifyFinished; | 349 state_ = kNotifyFinished; |
| 370 } | 350 } |
| 371 | 351 |
| 372 } // namespace blink | 352 } // namespace blink |
| OLD | NEW |