| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 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 | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. 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 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 | 307 |
| 308 // If the redirecting url is not allowed to display content from the target
origin, | 308 // If the redirecting url is not allowed to display content from the target
origin, |
| 309 // then block the redirect. | 309 // then block the redirect. |
| 310 const KURL& requestURL = m_request.url(); | 310 const KURL& requestURL = m_request.url(); |
| 311 RefPtr<SecurityOrigin> redirectingOrigin = SecurityOrigin::create(redirectRe
sponse.url()); | 311 RefPtr<SecurityOrigin> redirectingOrigin = SecurityOrigin::create(redirectRe
sponse.url()); |
| 312 if (!redirectingOrigin->canDisplay(requestURL)) { | 312 if (!redirectingOrigin->canDisplay(requestURL)) { |
| 313 FrameLoader::reportLocalLoadFailed(m_frame, requestURL.getString()); | 313 FrameLoader::reportLocalLoadFailed(m_frame, requestURL.getString()); |
| 314 m_fetcher->stopFetching(); | 314 m_fetcher->stopFetching(); |
| 315 return; | 315 return; |
| 316 } | 316 } |
| 317 if (!frameLoader()->shouldContinueForNavigationPolicy(m_request, SubstituteD
ata(), this, m_navigationType, NavigationPolicyCurrentTab, replacesCurrentHistor
yItem(), isClientRedirect())) { | 317 if (!frameLoader()->shouldContinueForNavigationPolicy(m_request, SubstituteD
ata(), this, CheckContentSecurityPolicy, m_navigationType, NavigationPolicyCurre
ntTab, replacesCurrentHistoryItem(), isClientRedirect())) { |
| 318 m_fetcher->stopFetching(); | 318 m_fetcher->stopFetching(); |
| 319 return; | 319 return; |
| 320 } | 320 } |
| 321 | 321 |
| 322 ASSERT(timing().fetchStart()); | 322 ASSERT(timing().fetchStart()); |
| 323 timing().addRedirect(redirectResponse.url(), requestURL); | 323 timing().addRedirect(redirectResponse.url(), requestURL); |
| 324 appendRedirect(requestURL); | 324 appendRedirect(requestURL); |
| 325 frameLoader()->receivedMainResourceRedirect(requestURL); | 325 frameLoader()->receivedMainResourceRedirect(requestURL); |
| 326 } | 326 } |
| 327 | 327 |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 if (!shouldLoadEmpty) | 607 if (!shouldLoadEmpty) |
| 608 return false; | 608 return false; |
| 609 | 609 |
| 610 if (m_request.url().isEmpty() && !frameLoader()->stateMachine()->creatingIni
tialEmptyDocument()) | 610 if (m_request.url().isEmpty() && !frameLoader()->stateMachine()->creatingIni
tialEmptyDocument()) |
| 611 m_request.setURL(blankURL()); | 611 m_request.setURL(blankURL()); |
| 612 m_response = ResourceResponse(m_request.url(), "text/html", 0, nullAtom, Str
ing()); | 612 m_response = ResourceResponse(m_request.url(), "text/html", 0, nullAtom, Str
ing()); |
| 613 finishedLoading(monotonicallyIncreasingTime()); | 613 finishedLoading(monotonicallyIncreasingTime()); |
| 614 return true; | 614 return true; |
| 615 } | 615 } |
| 616 | 616 |
| 617 void DocumentLoader::loadUnique() | 617 void DocumentLoader::startLoadingMainResource() |
| 618 { | |
| 619 m_request = ResourceRequest(SecurityOrigin::urlWithUniqueSecurityOrigin()); | |
| 620 m_response = ResourceResponse(m_request.url(), "text/html", 0, nullAtom, Str
ing()); | |
| 621 finishedLoading(monotonicallyIncreasingTime()); | |
| 622 } | |
| 623 | |
| 624 void DocumentLoader::startLoadingMainResource(ContentSecurityPolicyDisposition c
spDisposition) | |
| 625 { | 618 { |
| 626 timing().markNavigationStart(); | 619 timing().markNavigationStart(); |
| 627 ASSERT(!m_mainResource); | 620 ASSERT(!m_mainResource); |
| 628 ASSERT(m_state == NotStarted); | 621 ASSERT(m_state == NotStarted); |
| 629 m_state = Provisional; | 622 m_state = Provisional; |
| 630 | 623 |
| 631 if (maybeLoadEmpty()) | 624 if (maybeLoadEmpty()) |
| 632 return; | 625 return; |
| 633 | 626 |
| 634 ASSERT(timing().navigationStart()); | 627 ASSERT(timing().navigationStart()); |
| 635 ASSERT(!timing().fetchStart()); | 628 ASSERT(!timing().fetchStart()); |
| 636 timing().markFetchStart(); | 629 timing().markFetchStart(); |
| 637 | 630 |
| 638 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, mainResourceLoadOptions, | 631 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, mainResourceLoadOptions, |
| 639 (DoNotBufferData, AllowStoredCredentials, ClientRequestedCredentials, Ch
eckContentSecurityPolicy, DocumentContext)); | 632 (DoNotBufferData, AllowStoredCredentials, ClientRequestedCredentials, Ch
eckContentSecurityPolicy, DocumentContext)); |
| 640 FetchRequest fetchRequest(m_request, FetchInitiatorTypeNames::document, main
ResourceLoadOptions); | 633 FetchRequest fetchRequest(m_request, FetchInitiatorTypeNames::document, main
ResourceLoadOptions); |
| 641 fetchRequest.setContentSecurityCheck(cspDisposition); | |
| 642 | |
| 643 m_mainResource = RawResource::fetchMainResource(fetchRequest, fetcher(), m_s
ubstituteData); | 634 m_mainResource = RawResource::fetchMainResource(fetchRequest, fetcher(), m_s
ubstituteData); |
| 644 if (!m_mainResource) { | 635 if (!m_mainResource) { |
| 645 // If we block a main resource request, ensure that the resulting frame'
s | 636 m_request = ResourceRequest(blankURL()); |
| 646 // origin is unique, and that the redirect list is up-to-date with the | 637 maybeLoadEmpty(); |
| 647 // resource we actually commit: | |
| 648 loadUnique(); | |
| 649 appendRedirect(SecurityOrigin::urlWithUniqueSecurityOrigin()); | |
| 650 return; | 638 return; |
| 651 } | 639 } |
| 652 // A bunch of headers are set when the underlying ResourceLoader is created,
and m_request needs to include those. | 640 // A bunch of headers are set when the underlying ResourceLoader is created,
and m_request needs to include those. |
| 653 // Even when using a cached resource, we may make some modification to the r
equest, e.g. adding the referer header. | 641 // Even when using a cached resource, we may make some modification to the r
equest, e.g. adding the referer header. |
| 654 m_request = mainResourceLoader() ? m_mainResource->resourceRequest() : fetch
Request.resourceRequest(); | 642 m_request = mainResourceLoader() ? m_mainResource->resourceRequest() : fetch
Request.resourceRequest(); |
| 655 m_mainResource->addClient(this); | 643 m_mainResource->addClient(this); |
| 656 } | 644 } |
| 657 | 645 |
| 658 void DocumentLoader::endWriting(DocumentWriter* writer) | 646 void DocumentLoader::endWriting(DocumentWriter* writer) |
| 659 { | 647 { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 { | 690 { |
| 703 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding()
: emptyAtom, true, ForceSynchronousParsing); | 691 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding()
: emptyAtom, true, ForceSynchronousParsing); |
| 704 if (!source.isNull()) | 692 if (!source.isNull()) |
| 705 m_writer->appendReplacingData(source); | 693 m_writer->appendReplacingData(source); |
| 706 endWriting(m_writer.get()); | 694 endWriting(m_writer.get()); |
| 707 } | 695 } |
| 708 | 696 |
| 709 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); | 697 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); |
| 710 | 698 |
| 711 } // namespace blink | 699 } // namespace blink |
| OLD | NEW |