OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2009 Apple 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 * | 7 * |
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 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 // After the first multipart section is complete, signal to delegates th
at this load is "finished" | 206 // After the first multipart section is complete, signal to delegates th
at this load is "finished" |
207 m_documentLoader->subresourceLoaderFinishedLoadingOnePart(this); | 207 m_documentLoader->subresourceLoaderFinishedLoadingOnePart(this); |
208 didFinishLoadingOnePart(0); | 208 didFinishLoadingOnePart(0); |
209 } | 209 } |
210 | 210 |
211 checkForHTTPStatusCodeError(); | 211 checkForHTTPStatusCodeError(); |
212 } | 212 } |
213 | 213 |
214 void SubresourceLoader::didReceiveData(const char* data, int length, long long e
ncodedDataLength, bool allAtOnce) | 214 void SubresourceLoader::didReceiveData(const char* data, int length, long long e
ncodedDataLength, bool allAtOnce) |
215 { | 215 { |
| 216 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgn
oreHTTPStatusCodeErrors()) |
| 217 return; |
216 ASSERT(!m_resource->resourceToRevalidate()); | 218 ASSERT(!m_resource->resourceToRevalidate()); |
217 ASSERT(!m_resource->errorOccurred()); | 219 ASSERT(!m_resource->errorOccurred()); |
218 ASSERT(m_state == Initialized); | 220 ASSERT(m_state == Initialized); |
219 // Reference the object in this method since the additional processing can d
o | 221 // Reference the object in this method since the additional processing can d
o |
220 // anything including removing the last reference to this object; one exampl
e of this is 3266216. | 222 // anything including removing the last reference to this object; one exampl
e of this is 3266216. |
221 RefPtr<SubresourceLoader> protect(this); | 223 RefPtr<SubresourceLoader> protect(this); |
222 addData(data, length, allAtOnce); | 224 addData(data, length, allAtOnce); |
223 if (!m_loadingMultipartContent) | 225 if (!m_loadingMultipartContent) |
224 sendDataToResource(data, length); | 226 sendDataToResource(data, length); |
225 if (shouldSendResourceLoadCallbacks() && m_frame) | 227 if (shouldSendResourceLoadCallbacks() && m_frame) |
226 frameLoader()->notifier()->didReceiveData(this, data, length, static_cas
t<int>(encodedDataLength)); | 228 frameLoader()->notifier()->didReceiveData(this, data, length, static_cas
t<int>(encodedDataLength)); |
227 } | 229 } |
228 | 230 |
229 bool SubresourceLoader::checkForHTTPStatusCodeError() | 231 bool SubresourceLoader::checkForHTTPStatusCodeError() |
230 { | 232 { |
231 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor
eHTTPStatusCodeErrors()) | 233 if (m_resource->response().httpStatusCode() < 400 || m_resource->shouldIgnor
eHTTPStatusCodeErrors()) |
232 return false; | 234 return false; |
233 | 235 |
| 236 m_state = Finishing; |
234 m_resource->error(CachedResource::LoadError); | 237 m_resource->error(CachedResource::LoadError); |
235 m_state = Finishing; | |
236 cancel(); | 238 cancel(); |
237 return true; | 239 return true; |
238 } | 240 } |
239 | 241 |
240 void SubresourceLoader::sendDataToResource(const char* data, int length) | 242 void SubresourceLoader::sendDataToResource(const char* data, int length) |
241 { | 243 { |
242 // There are two cases where we might need to create our own SharedBuffer in
stead of copying the one in ResourceLoader. | 244 // There are two cases where we might need to create our own SharedBuffer in
stead of copying the one in ResourceLoader. |
243 // (1) Multipart content: The loader delivers the data in a multipart sectio
n all at once, then sends eof. | 245 // (1) Multipart content: The loader delivers the data in a multipart sectio
n all at once, then sends eof. |
244 // The resource data will change as the next part is loaded, so we need
to make a copy. | 246 // The resource data will change as the next part is loaded, so we need
to make a copy. |
245 // (2) Our client requested that the data not be buffered at the ResourceLoa
der level via ResourceLoaderOptions. In this case, | 247 // (2) Our client requested that the data not be buffered at the ResourceLoa
der level via ResourceLoaderOptions. In this case, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 m_documentLoader->cachedResourceLoader()->loadDone(m_resource); | 320 m_documentLoader->cachedResourceLoader()->loadDone(m_resource); |
319 if (reachedTerminalState()) | 321 if (reachedTerminalState()) |
320 return; | 322 return; |
321 m_resource->stopLoading(); | 323 m_resource->stopLoading(); |
322 m_documentLoader->removeSubresourceLoader(this); | 324 m_documentLoader->removeSubresourceLoader(this); |
323 } | 325 } |
324 ResourceLoader::releaseResources(); | 326 ResourceLoader::releaseResources(); |
325 } | 327 } |
326 | 328 |
327 } | 329 } |
OLD | NEW |