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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 | 118 |
119 FrameLoader* DocumentLoader::frameLoader() const | 119 FrameLoader* DocumentLoader::frameLoader() const |
120 { | 120 { |
121 if (!m_frame) | 121 if (!m_frame) |
122 return nullptr; | 122 return nullptr; |
123 return &m_frame->loader(); | 123 return &m_frame->loader(); |
124 } | 124 } |
125 | 125 |
126 DocumentLoader::~DocumentLoader() | 126 DocumentLoader::~DocumentLoader() |
127 { | 127 { |
128 ASSERT(!m_frame); | 128 DCHECK(!m_frame); |
129 ASSERT(!m_mainResource); | 129 DCHECK(!m_mainResource); |
130 ASSERT(!m_applicationCacheHost); | 130 DCHECK(!m_applicationCacheHost); |
131 } | 131 } |
132 | 132 |
133 DEFINE_TRACE(DocumentLoader) | 133 DEFINE_TRACE(DocumentLoader) |
134 { | 134 { |
135 visitor->trace(m_frame); | 135 visitor->trace(m_frame); |
136 visitor->trace(m_fetcher); | 136 visitor->trace(m_fetcher); |
137 visitor->trace(m_mainResource); | 137 visitor->trace(m_mainResource); |
138 visitor->trace(m_writer); | 138 visitor->trace(m_writer); |
139 visitor->trace(m_documentLoadTiming); | 139 visitor->trace(m_documentLoadTiming); |
140 visitor->trace(m_applicationCacheHost); | 140 visitor->trace(m_applicationCacheHost); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 case Resource::TextTrack: | 189 case Resource::TextTrack: |
190 resource = RawResource::fetchTextTrack(request, fetcher()); | 190 resource = RawResource::fetchTextTrack(request, fetcher()); |
191 break; | 191 break; |
192 case Resource::ImportResource: | 192 case Resource::ImportResource: |
193 resource = RawResource::fetchImport(request, fetcher()); | 193 resource = RawResource::fetchImport(request, fetcher()); |
194 break; | 194 break; |
195 case Resource::Raw: | 195 case Resource::Raw: |
196 resource = RawResource::fetch(request, fetcher()); | 196 resource = RawResource::fetch(request, fetcher()); |
197 break; | 197 break; |
198 default: | 198 default: |
199 ASSERT_NOT_REACHED(); | 199 NOTREACHED(); |
200 } | 200 } |
201 | 201 |
202 if (resource) | 202 if (resource) |
203 fetcher()->preloadStarted(resource); | 203 fetcher()->preloadStarted(resource); |
204 return resource; | 204 return resource; |
205 } | 205 } |
206 | 206 |
207 void DocumentLoader::didRedirect(const KURL& oldURL, const KURL& newURL) | 207 void DocumentLoader::didRedirect(const KURL& oldURL, const KURL& newURL) |
208 { | 208 { |
209 timing().addRedirect(oldURL, newURL); | 209 timing().addRedirect(oldURL, newURL); |
(...skipping 14 matching lines...) Expand all Loading... |
224 void DocumentLoader::didChangePerformanceTiming() | 224 void DocumentLoader::didChangePerformanceTiming() |
225 { | 225 { |
226 if (frame() && frame()->isMainFrame() && m_state >= Committed) { | 226 if (frame() && frame()->isMainFrame() && m_state >= Committed) { |
227 frameLoader()->client()->didChangePerformanceTiming(); | 227 frameLoader()->client()->didChangePerformanceTiming(); |
228 } | 228 } |
229 } | 229 } |
230 | 230 |
231 void DocumentLoader::didObserveLoadingBehavior(WebLoadingBehaviorFlag behavior) | 231 void DocumentLoader::didObserveLoadingBehavior(WebLoadingBehaviorFlag behavior) |
232 { | 232 { |
233 if (frame() && frame()->isMainFrame()) { | 233 if (frame() && frame()->isMainFrame()) { |
234 ASSERT(m_state >= Committed); | 234 DCHECK_GE(m_state, Committed); |
235 frameLoader()->client()->didObserveLoadingBehavior(behavior); | 235 frameLoader()->client()->didObserveLoadingBehavior(behavior); |
236 } | 236 } |
237 } | 237 } |
238 | 238 |
239 void DocumentLoader::updateForSameDocumentNavigation(const KURL& newURL, SameDoc
umentNavigationSource sameDocumentNavigationSource) | 239 void DocumentLoader::updateForSameDocumentNavigation(const KURL& newURL, SameDoc
umentNavigationSource sameDocumentNavigationSource) |
240 { | 240 { |
241 KURL oldURL = m_request.url(); | 241 KURL oldURL = m_request.url(); |
242 m_originalRequest.setURL(newURL); | 242 m_originalRequest.setURL(newURL); |
243 m_request.setURL(newURL); | 243 m_request.setURL(newURL); |
244 if (sameDocumentNavigationSource == SameDocumentNavigationHistoryApi) { | 244 if (sameDocumentNavigationSource == SameDocumentNavigationHistoryApi) { |
(...skipping 14 matching lines...) Expand all Loading... |
259 void DocumentLoader::commitIfReady() | 259 void DocumentLoader::commitIfReady() |
260 { | 260 { |
261 if (m_state < Committed) { | 261 if (m_state < Committed) { |
262 m_state = Committed; | 262 m_state = Committed; |
263 frameLoader()->commitProvisionalLoad(); | 263 frameLoader()->commitProvisionalLoad(); |
264 } | 264 } |
265 } | 265 } |
266 | 266 |
267 void DocumentLoader::notifyFinished(Resource* resource) | 267 void DocumentLoader::notifyFinished(Resource* resource) |
268 { | 268 { |
269 ASSERT_UNUSED(resource, m_mainResource == resource); | 269 DCHECK_EQ(m_mainResource, resource); |
270 ASSERT(m_mainResource); | 270 DCHECK(m_mainResource); |
271 | 271 |
272 if (!m_mainResource->errorOccurred() && !m_mainResource->wasCanceled()) { | 272 if (!m_mainResource->errorOccurred() && !m_mainResource->wasCanceled()) { |
273 finishedLoading(m_mainResource->loadFinishTime()); | 273 finishedLoading(m_mainResource->loadFinishTime()); |
274 return; | 274 return; |
275 } | 275 } |
276 | 276 |
277 if (m_applicationCacheHost) | 277 if (m_applicationCacheHost) |
278 m_applicationCacheHost->failedLoadingMainResource(); | 278 m_applicationCacheHost->failedLoadingMainResource(); |
279 m_state = MainResourceDone; | 279 m_state = MainResourceDone; |
280 frameLoader()->loadFailed(this, m_mainResource->resourceError()); | 280 frameLoader()->loadFailed(this, m_mainResource->resourceError()); |
(...skipping 29 matching lines...) Expand all Loading... |
310 | 310 |
311 m_applicationCacheHost->finishedLoadingMainResource(); | 311 m_applicationCacheHost->finishedLoadingMainResource(); |
312 endWriting(m_writer.get()); | 312 endWriting(m_writer.get()); |
313 if (m_state < MainResourceDone) | 313 if (m_state < MainResourceDone) |
314 m_state = MainResourceDone; | 314 m_state = MainResourceDone; |
315 clearMainResourceHandle(); | 315 clearMainResourceHandle(); |
316 } | 316 } |
317 | 317 |
318 void DocumentLoader::redirectReceived(Resource* resource, ResourceRequest& reque
st, const ResourceResponse& redirectResponse) | 318 void DocumentLoader::redirectReceived(Resource* resource, ResourceRequest& reque
st, const ResourceResponse& redirectResponse) |
319 { | 319 { |
320 ASSERT_UNUSED(resource, resource == m_mainResource); | 320 DCHECK_EQ(resource, m_mainResource); |
321 ASSERT(!redirectResponse.isNull()); | 321 DCHECK(!redirectResponse.isNull()); |
322 m_request = request; | 322 m_request = request; |
323 | 323 |
324 // If the redirecting url is not allowed to display content from the target
origin, | 324 // If the redirecting url is not allowed to display content from the target
origin, |
325 // then block the redirect. | 325 // then block the redirect. |
326 const KURL& requestURL = m_request.url(); | 326 const KURL& requestURL = m_request.url(); |
327 RefPtr<SecurityOrigin> redirectingOrigin = SecurityOrigin::create(redirectRe
sponse.url()); | 327 RefPtr<SecurityOrigin> redirectingOrigin = SecurityOrigin::create(redirectRe
sponse.url()); |
328 if (!redirectingOrigin->canDisplay(requestURL)) { | 328 if (!redirectingOrigin->canDisplay(requestURL)) { |
329 FrameLoader::reportLocalLoadFailed(m_frame, requestURL.getString()); | 329 FrameLoader::reportLocalLoadFailed(m_frame, requestURL.getString()); |
330 m_fetcher->stopFetching(); | 330 m_fetcher->stopFetching(); |
331 return; | 331 return; |
332 } | 332 } |
333 if (!frameLoader()->shouldContinueForNavigationPolicy(m_request, SubstituteD
ata(), this, CheckContentSecurityPolicy, m_navigationType, NavigationPolicyCurre
ntTab, replacesCurrentHistoryItem(), isClientRedirect())) { | 333 if (!frameLoader()->shouldContinueForNavigationPolicy(m_request, SubstituteD
ata(), this, CheckContentSecurityPolicy, m_navigationType, NavigationPolicyCurre
ntTab, replacesCurrentHistoryItem(), isClientRedirect())) { |
334 m_fetcher->stopFetching(); | 334 m_fetcher->stopFetching(); |
335 return; | 335 return; |
336 } | 336 } |
337 | 337 |
338 ASSERT(timing().fetchStart()); | 338 DCHECK(timing().fetchStart()); |
339 appendRedirect(requestURL); | 339 appendRedirect(requestURL); |
340 didRedirect(redirectResponse.url(), requestURL); | 340 didRedirect(redirectResponse.url(), requestURL); |
341 frameLoader()->client()->dispatchDidReceiveServerRedirectForProvisionalLoad(
); | 341 frameLoader()->client()->dispatchDidReceiveServerRedirectForProvisionalLoad(
); |
342 } | 342 } |
343 | 343 |
344 static bool canShowMIMEType(const String& mimeType, LocalFrame* frame) | 344 static bool canShowMIMEType(const String& mimeType, LocalFrame* frame) |
345 { | 345 { |
346 if (Platform::current()->mimeRegistry()->supportsMIMEType(mimeType) == WebMi
meRegistry::IsSupported) | 346 if (Platform::current()->mimeRegistry()->supportsMIMEType(mimeType) == WebMi
meRegistry::IsSupported) |
347 return true; | 347 return true; |
348 PluginData* pluginData = frame->pluginData(); | 348 PluginData* pluginData = frame->pluginData(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 m_redirectChain.removeLast(); | 390 m_redirectChain.removeLast(); |
391 appendRedirect(blockedURL); | 391 appendRedirect(blockedURL); |
392 m_response = ResourceResponse(blockedURL, "text/html", 0, nullAtom, String()
); | 392 m_response = ResourceResponse(blockedURL, "text/html", 0, nullAtom, String()
); |
393 finishedLoading(monotonicallyIncreasingTime()); | 393 finishedLoading(monotonicallyIncreasingTime()); |
394 | 394 |
395 return; | 395 return; |
396 } | 396 } |
397 | 397 |
398 void DocumentLoader::responseReceived(Resource* resource, const ResourceResponse
& response, std::unique_ptr<WebDataConsumerHandle> handle) | 398 void DocumentLoader::responseReceived(Resource* resource, const ResourceResponse
& response, std::unique_ptr<WebDataConsumerHandle> handle) |
399 { | 399 { |
400 ASSERT_UNUSED(resource, m_mainResource == resource); | 400 DCHECK_EQ(m_mainResource, resource); |
401 ASSERT_UNUSED(handle, !handle); | 401 DCHECK(!handle); |
402 ASSERT(frame()); | 402 DCHECK(frame()); |
403 | 403 |
404 m_applicationCacheHost->didReceiveResponseForMainResource(response); | 404 m_applicationCacheHost->didReceiveResponseForMainResource(response); |
405 | 405 |
406 // The memory cache doesn't understand the application cache or its caching
rules. So if a main resource is served | 406 // The memory cache doesn't understand the application cache or its caching
rules. So if a main resource is served |
407 // from the application cache, ensure we don't save the result for future us
e. All responses loaded | 407 // from the application cache, ensure we don't save the result for future us
e. All responses loaded |
408 // from appcache will have a non-zero appCacheID(). | 408 // from appcache will have a non-zero appCacheID(). |
409 if (response.appCacheID()) | 409 if (response.appCacheID()) |
410 memoryCache()->remove(m_mainResource.get()); | 410 memoryCache()->remove(m_mainResource.get()); |
411 | 411 |
412 m_contentSecurityPolicy = ContentSecurityPolicy::create(); | 412 m_contentSecurityPolicy = ContentSecurityPolicy::create(); |
(...skipping 13 matching lines...) Expand all Loading... |
426 String message = "Refused to display '" + response.url().elidedS
tring() + "' in a frame because it set 'X-Frame-Options' to '" + content + "'."; | 426 String message = "Refused to display '" + response.url().elidedS
tring() + "' in a frame because it set 'X-Frame-Options' to '" + content + "'."; |
427 ConsoleMessage* consoleMessage = ConsoleMessage::createForReques
t(SecurityMessageSource, ErrorMessageLevel, message, response.url(), mainResourc
eIdentifier()); | 427 ConsoleMessage* consoleMessage = ConsoleMessage::createForReques
t(SecurityMessageSource, ErrorMessageLevel, message, response.url(), mainResourc
eIdentifier()); |
428 frame()->document()->addConsoleMessage(consoleMessage); | 428 frame()->document()->addConsoleMessage(consoleMessage); |
429 | 429 |
430 cancelLoadAfterXFrameOptionsOrCSPDenied(response); | 430 cancelLoadAfterXFrameOptionsOrCSPDenied(response); |
431 return; | 431 return; |
432 } | 432 } |
433 } | 433 } |
434 } | 434 } |
435 | 435 |
436 ASSERT(!m_frame->page()->defersLoading()); | 436 DCHECK(!m_frame->page()->defersLoading()); |
437 | 437 |
438 m_response = response; | 438 m_response = response; |
439 | 439 |
440 if (isArchiveMIMEType(m_response.mimeType()) && m_mainResource->getDataBuffe
ringPolicy() != BufferData) | 440 if (isArchiveMIMEType(m_response.mimeType()) && m_mainResource->getDataBuffe
ringPolicy() != BufferData) |
441 m_mainResource->setDataBufferingPolicy(BufferData); | 441 m_mainResource->setDataBufferingPolicy(BufferData); |
442 | 442 |
443 if (!shouldContinueForResponse()) { | 443 if (!shouldContinueForResponse()) { |
444 InspectorInstrumentation::continueWithPolicyIgnore(m_frame, this, m_main
Resource->identifier(), m_response, m_mainResource.get()); | 444 InspectorInstrumentation::continueWithPolicyIgnore(m_frame, this, m_main
Resource->identifier(), m_response, m_mainResource.get()); |
445 m_fetcher->stopFetching(); | 445 m_fetcher->stopFetching(); |
446 return; | 446 return; |
(...skipping 21 matching lines...) Expand all Loading... |
468 if (shouldInheritSecurityOriginFromOwner(url())) { | 468 if (shouldInheritSecurityOriginFromOwner(url())) { |
469 Frame* ownerFrame = m_frame->tree().parent(); | 469 Frame* ownerFrame = m_frame->tree().parent(); |
470 if (!ownerFrame) | 470 if (!ownerFrame) |
471 ownerFrame = m_frame->loader().opener(); | 471 ownerFrame = m_frame->loader().opener(); |
472 if (ownerFrame && ownerFrame->isLocalFrame()) | 472 if (ownerFrame && ownerFrame->isLocalFrame()) |
473 owner = toLocalFrame(ownerFrame)->document(); | 473 owner = toLocalFrame(ownerFrame)->document(); |
474 } | 474 } |
475 DocumentInit init(owner, url(), m_frame); | 475 DocumentInit init(owner, url(), m_frame); |
476 init.withNewRegistrationContext(); | 476 init.withNewRegistrationContext(); |
477 m_frame->loader().clear(); | 477 m_frame->loader().clear(); |
478 ASSERT(m_frame->page()); | 478 DCHECK(m_frame->page()); |
479 | 479 |
480 ParserSynchronizationPolicy parsingPolicy = AllowAsynchronousParsing; | 480 ParserSynchronizationPolicy parsingPolicy = AllowAsynchronousParsing; |
481 if ((m_substituteData.isValid() && m_substituteData.forceSynchronousLoad())
|| !Document::threadedParsingEnabledForTesting()) | 481 if ((m_substituteData.isValid() && m_substituteData.forceSynchronousLoad())
|| !Document::threadedParsingEnabledForTesting()) |
482 parsingPolicy = ForceSynchronousParsing; | 482 parsingPolicy = ForceSynchronousParsing; |
483 | 483 |
484 m_writer = createWriterFor(init, mimeType, encoding, false, parsingPolicy, o
verridingURL); | 484 m_writer = createWriterFor(init, mimeType, encoding, false, parsingPolicy, o
verridingURL); |
485 m_writer->setDocumentWasLoadedAsPartOfNavigation(); | 485 m_writer->setDocumentWasLoadedAsPartOfNavigation(); |
486 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField(HTTPN
ames::Refresh), Document::HttpRefreshFromHeader); | 486 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField(HTTPN
ames::Refresh), Document::HttpRefreshFromHeader); |
487 } | 487 } |
488 | 488 |
489 void DocumentLoader::commitData(const char* bytes, size_t length) | 489 void DocumentLoader::commitData(const char* bytes, size_t length) |
490 { | 490 { |
491 ASSERT(m_state < MainResourceDone); | 491 DCHECK_LT(m_state, MainResourceDone); |
492 ensureWriter(m_response.mimeType()); | 492 ensureWriter(m_response.mimeType()); |
493 | 493 |
494 // This can happen if document.close() is called by an event handler while | 494 // This can happen if document.close() is called by an event handler while |
495 // there's still pending incoming data. | 495 // there's still pending incoming data. |
496 if (m_frame && !m_frame->document()->parsing()) | 496 if (m_frame && !m_frame->document()->parsing()) |
497 return; | 497 return; |
498 | 498 |
499 if (length) | 499 if (length) |
500 m_dataReceived = true; | 500 m_dataReceived = true; |
501 | 501 |
502 m_writer->addData(bytes, length); | 502 m_writer->addData(bytes, length); |
503 } | 503 } |
504 | 504 |
505 void DocumentLoader::dataReceived(Resource* resource, const char* data, size_t l
ength) | 505 void DocumentLoader::dataReceived(Resource* resource, const char* data, size_t l
ength) |
506 { | 506 { |
507 ASSERT(data); | 507 DCHECK(data); |
508 ASSERT(length); | 508 DCHECK(length); |
509 ASSERT_UNUSED(resource, resource == m_mainResource); | 509 DCHECK_EQ(resource, m_mainResource); |
510 ASSERT(!m_response.isNull()); | 510 DCHECK(!m_response.isNull()); |
511 ASSERT(!m_frame->page()->defersLoading()); | 511 DCHECK(!m_frame->page()->defersLoading()); |
512 | 512 |
513 if (m_inDataReceived) { | 513 if (m_inDataReceived) { |
514 // If this function is reentered, defer processing of the additional | 514 // If this function is reentered, defer processing of the additional |
515 // data to the top-level invocation. Reentrant calls can occur because | 515 // data to the top-level invocation. Reentrant calls can occur because |
516 // of web platform (mis-)features that require running a nested message | 516 // of web platform (mis-)features that require running a nested message |
517 // loop: | 517 // loop: |
518 // - alert(), confirm(), prompt() | 518 // - alert(), confirm(), prompt() |
519 // - Detach of plugin elements. | 519 // - Detach of plugin elements. |
520 // - Synchronous XMLHTTPRequest | 520 // - Synchronous XMLHTTPRequest |
521 m_dataBuffer->append(data, length); | 521 m_dataBuffer->append(data, length); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 m_redirectChain.clear(); | 561 m_redirectChain.clear(); |
562 } | 562 } |
563 | 563 |
564 void DocumentLoader::appendRedirect(const KURL& url) | 564 void DocumentLoader::appendRedirect(const KURL& url) |
565 { | 565 { |
566 m_redirectChain.append(url); | 566 m_redirectChain.append(url); |
567 } | 567 } |
568 | 568 |
569 void DocumentLoader::detachFromFrame() | 569 void DocumentLoader::detachFromFrame() |
570 { | 570 { |
571 ASSERT(m_frame); | 571 DCHECK(m_frame); |
572 | 572 |
573 // It never makes sense to have a document loader that is detached from its | 573 // It never makes sense to have a document loader that is detached from its |
574 // frame have any loads active, so go ahead and kill all the loads. | 574 // frame have any loads active, so go ahead and kill all the loads. |
575 m_fetcher->stopFetching(); | 575 m_fetcher->stopFetching(); |
576 | 576 |
577 // If that load cancellation triggered another detach, leave. | 577 // If that load cancellation triggered another detach, leave. |
578 // (fast/frames/detach-frame-nested-no-crash.html is an example of this.) | 578 // (fast/frames/detach-frame-nested-no-crash.html is an example of this.) |
579 if (!m_frame) | 579 if (!m_frame) |
580 return; | 580 return; |
581 | 581 |
(...skipping 12 matching lines...) Expand all Loading... |
594 m_mainResource->removeClient(this); | 594 m_mainResource->removeClient(this); |
595 m_mainResource = nullptr; | 595 m_mainResource = nullptr; |
596 } | 596 } |
597 | 597 |
598 bool DocumentLoader::maybeCreateArchive() | 598 bool DocumentLoader::maybeCreateArchive() |
599 { | 599 { |
600 // Give the archive machinery a crack at this document. If the MIME type is
not an archive type, it will return 0. | 600 // Give the archive machinery a crack at this document. If the MIME type is
not an archive type, it will return 0. |
601 if (!isArchiveMIMEType(m_response.mimeType())) | 601 if (!isArchiveMIMEType(m_response.mimeType())) |
602 return false; | 602 return false; |
603 | 603 |
604 ASSERT(m_mainResource); | 604 DCHECK(m_mainResource); |
605 ArchiveResource* mainResource = m_fetcher->createArchive(m_mainResource.get(
)); | 605 ArchiveResource* mainResource = m_fetcher->createArchive(m_mainResource.get(
)); |
606 if (!mainResource) | 606 if (!mainResource) |
607 return false; | 607 return false; |
608 // The origin is the MHTML file, we need to set the base URL to the document
encoded in the MHTML so | 608 // The origin is the MHTML file, we need to set the base URL to the document
encoded in the MHTML so |
609 // relative URLs are resolved properly. | 609 // relative URLs are resolved properly. |
610 ensureWriter(mainResource->mimeType(), mainResource->url()); | 610 ensureWriter(mainResource->mimeType(), mainResource->url()); |
611 | 611 |
612 // The Document has now been created. | 612 // The Document has now been created. |
613 m_frame->document()->enforceSandboxFlags(SandboxAll); | 613 m_frame->document()->enforceSandboxFlags(SandboxAll); |
614 | 614 |
(...skipping 20 matching lines...) Expand all Loading... |
635 if (m_request.url().isEmpty() && !frameLoader()->stateMachine()->creatingIni
tialEmptyDocument()) | 635 if (m_request.url().isEmpty() && !frameLoader()->stateMachine()->creatingIni
tialEmptyDocument()) |
636 m_request.setURL(blankURL()); | 636 m_request.setURL(blankURL()); |
637 m_response = ResourceResponse(m_request.url(), "text/html", 0, nullAtom, Str
ing()); | 637 m_response = ResourceResponse(m_request.url(), "text/html", 0, nullAtom, Str
ing()); |
638 finishedLoading(monotonicallyIncreasingTime()); | 638 finishedLoading(monotonicallyIncreasingTime()); |
639 return true; | 639 return true; |
640 } | 640 } |
641 | 641 |
642 void DocumentLoader::startLoadingMainResource() | 642 void DocumentLoader::startLoadingMainResource() |
643 { | 643 { |
644 timing().markNavigationStart(); | 644 timing().markNavigationStart(); |
645 ASSERT(!m_mainResource); | 645 DCHECK(!m_mainResource); |
646 ASSERT(m_state == NotStarted); | 646 DCHECK_EQ(m_state, NotStarted); |
647 m_state = Provisional; | 647 m_state = Provisional; |
648 | 648 |
649 if (maybeLoadEmpty()) | 649 if (maybeLoadEmpty()) |
650 return; | 650 return; |
651 | 651 |
652 ASSERT(timing().navigationStart()); | 652 DCHECK(timing().navigationStart()); |
653 | 653 |
654 // PlzNavigate: | 654 // PlzNavigate: |
655 // The fetch has already started in the browser. Don't mark it again. | 655 // The fetch has already started in the browser. Don't mark it again. |
656 if (!m_frame->settings()->browserSideNavigationEnabled()) { | 656 if (!m_frame->settings()->browserSideNavigationEnabled()) { |
657 DCHECK(!timing().fetchStart()); | 657 DCHECK(!timing().fetchStart()); |
658 timing().markFetchStart(); | 658 timing().markFetchStart(); |
659 } | 659 } |
660 | 660 |
661 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, mainResourceLoadOptions, | 661 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, mainResourceLoadOptions, |
662 (DoNotBufferData, AllowStoredCredentials, ClientRequestedCredentials, Ch
eckContentSecurityPolicy, DocumentContext)); | 662 (DoNotBufferData, AllowStoredCredentials, ClientRequestedCredentials, Ch
eckContentSecurityPolicy, DocumentContext)); |
663 FetchRequest fetchRequest(m_request, FetchInitiatorTypeNames::document, main
ResourceLoadOptions); | 663 FetchRequest fetchRequest(m_request, FetchInitiatorTypeNames::document, main
ResourceLoadOptions); |
664 m_mainResource = RawResource::fetchMainResource(fetchRequest, fetcher(), m_s
ubstituteData); | 664 m_mainResource = RawResource::fetchMainResource(fetchRequest, fetcher(), m_s
ubstituteData); |
665 if (!m_mainResource) { | 665 if (!m_mainResource) { |
666 m_request = ResourceRequest(blankURL()); | 666 m_request = ResourceRequest(blankURL()); |
667 maybeLoadEmpty(); | 667 maybeLoadEmpty(); |
668 return; | 668 return; |
669 } | 669 } |
670 // A bunch of headers are set when the underlying resource load begins, and
m_request needs to include those. | 670 // A bunch of headers are set when the underlying resource load begins, and
m_request needs to include those. |
671 // Even when using a cached resource, we may make some modification to the r
equest, e.g. adding the referer header. | 671 // Even when using a cached resource, we may make some modification to the r
equest, e.g. adding the referer header. |
672 m_request = m_mainResource->isLoading() ? m_mainResource->resourceRequest()
: fetchRequest.resourceRequest(); | 672 m_request = m_mainResource->isLoading() ? m_mainResource->resourceRequest()
: fetchRequest.resourceRequest(); |
673 m_mainResource->addClient(this); | 673 m_mainResource->addClient(this); |
674 } | 674 } |
675 | 675 |
676 void DocumentLoader::endWriting(DocumentWriter* writer) | 676 void DocumentLoader::endWriting(DocumentWriter* writer) |
677 { | 677 { |
678 ASSERT_UNUSED(writer, m_writer == writer); | 678 DCHECK_EQ(m_writer, writer); |
679 m_writer->end(); | 679 m_writer->end(); |
680 m_writer.clear(); | 680 m_writer.clear(); |
681 } | 681 } |
682 | 682 |
683 DocumentWriter* DocumentLoader::createWriterFor(const DocumentInit& init, const
AtomicString& mimeType, const AtomicString& encoding, bool dispatchWindowObjectA
vailable, ParserSynchronizationPolicy parsingPolicy, const KURL& overridingURL) | 683 DocumentWriter* DocumentLoader::createWriterFor(const DocumentInit& init, const
AtomicString& mimeType, const AtomicString& encoding, bool dispatchWindowObjectA
vailable, ParserSynchronizationPolicy parsingPolicy, const KURL& overridingURL) |
684 { | 684 { |
685 LocalFrame* frame = init.frame(); | 685 LocalFrame* frame = init.frame(); |
686 | 686 |
687 ASSERT(!frame->document() || !frame->document()->isActive()); | 687 DCHECK(!frame->document() || !frame->document()->isActive()); |
688 ASSERT(frame->tree().childCount() == 0); | 688 DCHECK_EQ(frame->tree().childCount(), 0u); |
689 | 689 |
690 if (!init.shouldReuseDefaultView()) | 690 if (!init.shouldReuseDefaultView()) |
691 frame->setDOMWindow(LocalDOMWindow::create(*frame)); | 691 frame->setDOMWindow(LocalDOMWindow::create(*frame)); |
692 | 692 |
693 Document* document = frame->localDOMWindow()->installNewDocument(mimeType, i
nit); | 693 Document* document = frame->localDOMWindow()->installNewDocument(mimeType, i
nit); |
694 | 694 |
695 // This should be set before receivedFirstData(). | 695 // This should be set before receivedFirstData(). |
696 if (!overridingURL.isEmpty()) | 696 if (!overridingURL.isEmpty()) |
697 frame->document()->setBaseURLOverride(overridingURL); | 697 frame->document()->setBaseURLOverride(overridingURL); |
698 | 698 |
(...skipping 21 matching lines...) Expand all Loading... |
720 { | 720 { |
721 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding()
: emptyAtom, true, ForceSynchronousParsing); | 721 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding()
: emptyAtom, true, ForceSynchronousParsing); |
722 if (!source.isNull()) | 722 if (!source.isNull()) |
723 m_writer->appendReplacingData(source); | 723 m_writer->appendReplacingData(source); |
724 endWriting(m_writer.get()); | 724 endWriting(m_writer.get()); |
725 } | 725 } |
726 | 726 |
727 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); | 727 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); |
728 | 728 |
729 } // namespace blink | 729 } // namespace blink |
OLD | NEW |