OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
3 * Copyright (C) 2013, Intel Corporation | 3 * Copyright (C) 2013, Intel Corporation |
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 are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 m_client = 0; | 239 m_client = 0; |
240 m_requestStartedSeconds = 0.0; | 240 m_requestStartedSeconds = 0.0; |
241 } | 241 } |
242 | 242 |
243 void DocumentThreadableLoader::setDefersLoading(bool value) | 243 void DocumentThreadableLoader::setDefersLoading(bool value) |
244 { | 244 { |
245 if (resource()) | 245 if (resource()) |
246 resource()->setDefersLoading(value); | 246 resource()->setDefersLoading(value); |
247 } | 247 } |
248 | 248 |
| 249 // In this method, we can clear |request| to tell content::WebURLLoaderImpl of |
| 250 // Chromium not to follow the redirect. This works only when this method is |
| 251 // called by RawResource::willSendRequest(). If called by |
| 252 // RawResource::didAddClient(), clearing |request| won't be propagated |
| 253 // to content::WebURLLoaderImpl. So, this loader must also get detached from |
| 254 // the resource by calling clearResource(). |
249 void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
est& request, const ResourceResponse& redirectResponse) | 255 void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
est& request, const ResourceResponse& redirectResponse) |
250 { | 256 { |
251 ASSERT(m_client); | 257 ASSERT(m_client); |
252 ASSERT_UNUSED(resource, resource == this->resource()); | 258 ASSERT_UNUSED(resource, resource == this->resource()); |
253 ASSERT(m_async); | 259 ASSERT(m_async); |
254 | 260 |
255 RefPtr<DocumentThreadableLoader> protect(this); | 261 RefPtr<DocumentThreadableLoader> protect(this); |
256 | 262 |
257 // FIXME: Support redirect in Fetch API. | 263 // FIXME: Support redirect in Fetch API. |
258 if (resource->resourceRequest().requestContext() == blink::WebURLRequest::Re
questContextFetch) { | 264 if (resource->resourceRequest().requestContext() == blink::WebURLRequest::Re
questContextFetch) { |
259 m_client->didFailRedirectCheck(); | 265 m_client->didFailRedirectCheck(); |
| 266 |
| 267 clearResource(); |
260 request = ResourceRequest(); | 268 request = ResourceRequest(); |
| 269 |
261 return; | 270 return; |
262 } | 271 } |
263 | 272 |
264 if (!isAllowedByContentSecurityPolicy(request.url())) { | 273 if (!isAllowedByContentSecurityPolicy(request.url())) { |
265 m_client->didFailRedirectCheck(); | 274 m_client->didFailRedirectCheck(); |
| 275 |
| 276 clearResource(); |
266 request = ResourceRequest(); | 277 request = ResourceRequest(); |
| 278 |
267 m_requestStartedSeconds = 0.0; | 279 m_requestStartedSeconds = 0.0; |
268 return; | 280 return; |
269 } | 281 } |
270 | 282 |
271 // Allow same origin requests to continue after allowing clients to audit th
e redirect. | 283 // Allow same origin requests to continue after allowing clients to audit th
e redirect. |
272 if (isAllowedRedirect(request.url())) { | 284 if (isAllowedRedirect(request.url())) { |
273 if (m_client->isDocumentThreadableLoaderClient()) | 285 if (m_client->isDocumentThreadableLoaderClient()) |
274 static_cast<DocumentThreadableLoaderClient*>(m_client)->willFollowRe
direct(request, redirectResponse); | 286 static_cast<DocumentThreadableLoaderClient*>(m_client)->willFollowRe
direct(request, redirectResponse); |
275 return; | 287 return; |
276 } | 288 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 } | 335 } |
324 makeCrossOriginAccessRequest(request); | 336 makeCrossOriginAccessRequest(request); |
325 return; | 337 return; |
326 } | 338 } |
327 | 339 |
328 ResourceError error(errorDomainBlinkInternal, 0, redirectResponse.url().
string(), accessControlErrorDescription); | 340 ResourceError error(errorDomainBlinkInternal, 0, redirectResponse.url().
string(), accessControlErrorDescription); |
329 m_client->didFailAccessControlCheck(error); | 341 m_client->didFailAccessControlCheck(error); |
330 } else { | 342 } else { |
331 m_client->didFailRedirectCheck(); | 343 m_client->didFailRedirectCheck(); |
332 } | 344 } |
| 345 |
| 346 clearResource(); |
333 request = ResourceRequest(); | 347 request = ResourceRequest(); |
| 348 |
334 m_requestStartedSeconds = 0.0; | 349 m_requestStartedSeconds = 0.0; |
335 } | 350 } |
336 | 351 |
337 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b
ytesSent, unsigned long long totalBytesToBeSent) | 352 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b
ytesSent, unsigned long long totalBytesToBeSent) |
338 { | 353 { |
339 ASSERT(m_client); | 354 ASSERT(m_client); |
340 ASSERT_UNUSED(resource, resource == this->resource()); | 355 ASSERT_UNUSED(resource, resource == this->resource()); |
341 ASSERT(m_async); | 356 ASSERT(m_async); |
342 | 357 |
343 m_client->didSendData(bytesSent, totalBytesToBeSent); | 358 m_client->didSendData(bytesSent, totalBytesToBeSent); |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 return DoNotAllowStoredCredentials; | 634 return DoNotAllowStoredCredentials; |
620 return m_resourceLoaderOptions.allowCredentials; | 635 return m_resourceLoaderOptions.allowCredentials; |
621 } | 636 } |
622 | 637 |
623 SecurityOrigin* DocumentThreadableLoader::securityOrigin() const | 638 SecurityOrigin* DocumentThreadableLoader::securityOrigin() const |
624 { | 639 { |
625 return m_securityOrigin ? m_securityOrigin.get() : m_document.securityOrigin
(); | 640 return m_securityOrigin ? m_securityOrigin.get() : m_document.securityOrigin
(); |
626 } | 641 } |
627 | 642 |
628 } // namespace blink | 643 } // namespace blink |
OLD | NEW |