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 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 | 312 |
313 void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re
sourceResponse& response) | 313 void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re
sourceResponse& response) |
314 { | 314 { |
315 ASSERT(m_client); | 315 ASSERT(m_client); |
316 | 316 |
317 if (m_actualRequest) { | 317 if (m_actualRequest) { |
318 handlePreflightResponse(identifier, response); | 318 handlePreflightResponse(identifier, response); |
319 return; | 319 return; |
320 } | 320 } |
321 | 321 |
322 // FIXME: When response.wasFetchedViaServiceWorker() is true, we need to che
ck the URL of the response for CSP and CORS. | 322 // If the response is fetched via ServiceWorker, the original URL of the res
ponse could be different from the URL of the request. |
| 323 if (response.wasFetchedViaServiceWorker()) { |
| 324 if (!isAllowedByPolicy(response.url())) { |
| 325 m_client->didFailRedirectCheck(); |
| 326 return; |
| 327 } |
| 328 if (!isAllowedRedirect(response.url())) { |
| 329 if (m_options.crossOriginRequestPolicy == DenyCrossOriginRequests) { |
| 330 m_client->didFail(ResourceError(errorDomainBlinkInternal, 0, res
ponse.url().string(), "Cross origin requests are not supported.")); |
| 331 return; |
| 332 } |
| 333 if (m_options.crossOriginRequestPolicy == UseAccessControl) { |
| 334 String accessControlErrorDescription; |
| 335 if (!passesAccessControlCheck(response, effectiveAllowCredential
s(), securityOrigin(), accessControlErrorDescription)) { |
| 336 m_client->didFailAccessControlCheck(ResourceError(errorDomai
nBlinkInternal, 0, response.url().string(), accessControlErrorDescription)); |
| 337 return; |
| 338 } |
| 339 } |
| 340 } |
| 341 } |
323 | 342 |
324 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessC
ontrol) { | 343 if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessC
ontrol) { |
325 String accessControlErrorDescription; | 344 String accessControlErrorDescription; |
326 if (!passesAccessControlCheck(response, effectiveAllowCredentials(), sec
urityOrigin(), accessControlErrorDescription)) { | 345 if (!passesAccessControlCheck(response, effectiveAllowCredentials(), sec
urityOrigin(), accessControlErrorDescription)) { |
327 m_client->didFailAccessControlCheck(ResourceError(errorDomainBlinkIn
ternal, 0, response.url().string(), accessControlErrorDescription)); | 346 m_client->didFailAccessControlCheck(ResourceError(errorDomainBlinkIn
ternal, 0, response.url().string(), accessControlErrorDescription)); |
328 return; | 347 return; |
329 } | 348 } |
330 } | 349 } |
331 | 350 |
332 m_client->didReceiveResponse(identifier, response); | 351 m_client->didReceiveResponse(identifier, response); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 return DoNotAllowStoredCredentials; | 515 return DoNotAllowStoredCredentials; |
497 return m_resourceLoaderOptions.allowCredentials; | 516 return m_resourceLoaderOptions.allowCredentials; |
498 } | 517 } |
499 | 518 |
500 SecurityOrigin* DocumentThreadableLoader::securityOrigin() const | 519 SecurityOrigin* DocumentThreadableLoader::securityOrigin() const |
501 { | 520 { |
502 return m_securityOrigin ? m_securityOrigin.get() : m_document.securityOrigin
(); | 521 return m_securityOrigin ? m_securityOrigin.get() : m_document.securityOrigin
(); |
503 } | 522 } |
504 | 523 |
505 } // namespace WebCore | 524 } // namespace WebCore |
OLD | NEW |