| 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 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 return &m_frame->loader(); | 121 return &m_frame->loader(); |
| 122 } | 122 } |
| 123 | 123 |
| 124 ResourceLoader* DocumentLoader::mainResourceLoader() const | 124 ResourceLoader* DocumentLoader::mainResourceLoader() const |
| 125 { | 125 { |
| 126 return m_mainResource ? m_mainResource->loader() : nullptr; | 126 return m_mainResource ? m_mainResource->loader() : nullptr; |
| 127 } | 127 } |
| 128 | 128 |
| 129 DocumentLoader::~DocumentLoader() | 129 DocumentLoader::~DocumentLoader() |
| 130 { | 130 { |
| 131 ASSERT(!m_frame || !isLoading()); | 131 ASSERT(!m_frame); |
| 132 ASSERT(!m_mainResource); | 132 ASSERT(!m_mainResource); |
| 133 ASSERT(!m_applicationCacheHost); | 133 ASSERT(!m_applicationCacheHost); |
| 134 } | 134 } |
| 135 | 135 |
| 136 DEFINE_TRACE(DocumentLoader) | 136 DEFINE_TRACE(DocumentLoader) |
| 137 { | 137 { |
| 138 visitor->trace(m_frame); | 138 visitor->trace(m_frame); |
| 139 visitor->trace(m_fetcher); | 139 visitor->trace(m_fetcher); |
| 140 visitor->trace(m_mainResource); | 140 visitor->trace(m_mainResource); |
| 141 visitor->trace(m_writer); | 141 visitor->trace(m_writer); |
| 142 visitor->trace(m_documentLoadTiming); | 142 visitor->trace(m_documentLoadTiming); |
| 143 visitor->trace(m_applicationCacheHost); | 143 visitor->trace(m_applicationCacheHost); |
| 144 visitor->trace(m_contentSecurityPolicy); | 144 visitor->trace(m_contentSecurityPolicy); |
| 145 } | 145 } |
| 146 | 146 |
| 147 unsigned long DocumentLoader::mainResourceIdentifier() const | 147 unsigned long DocumentLoader::mainResourceIdentifier() const |
| 148 { | 148 { |
| 149 return m_mainResource ? m_mainResource->identifier() : 0; | 149 return m_mainResource ? m_mainResource->identifier() : 0; |
| 150 } | 150 } |
| 151 | 151 |
| 152 Document* DocumentLoader::document() const | |
| 153 { | |
| 154 if (m_frame && m_frame->loader().documentLoader() == this) | |
| 155 return m_frame->document(); | |
| 156 return nullptr; | |
| 157 } | |
| 158 | |
| 159 const ResourceRequest& DocumentLoader::originalRequest() const | 152 const ResourceRequest& DocumentLoader::originalRequest() const |
| 160 { | 153 { |
| 161 return m_originalRequest; | 154 return m_originalRequest; |
| 162 } | 155 } |
| 163 | 156 |
| 164 const ResourceRequest& DocumentLoader::request() const | 157 const ResourceRequest& DocumentLoader::request() const |
| 165 { | 158 { |
| 166 return m_request; | 159 return m_request; |
| 167 } | 160 } |
| 168 | 161 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 if (m_isClientRedirect) | 223 if (m_isClientRedirect) |
| 231 appendRedirect(oldURL); | 224 appendRedirect(oldURL); |
| 232 appendRedirect(newURL); | 225 appendRedirect(newURL); |
| 233 } | 226 } |
| 234 | 227 |
| 235 const KURL& DocumentLoader::urlForHistory() const | 228 const KURL& DocumentLoader::urlForHistory() const |
| 236 { | 229 { |
| 237 return unreachableURL().isEmpty() ? url() : unreachableURL(); | 230 return unreachableURL().isEmpty() ? url() : unreachableURL(); |
| 238 } | 231 } |
| 239 | 232 |
| 240 void DocumentLoader::mainReceivedError(const ResourceError& error) | |
| 241 { | |
| 242 ASSERT(!error.isNull()); | |
| 243 ASSERT(!m_frame || !m_frame->page()->defersLoading() || InspectorInstrumenta
tion::isDebuggerPaused(m_frame)); | |
| 244 if (m_applicationCacheHost) | |
| 245 m_applicationCacheHost->failedLoadingMainResource(); | |
| 246 if (!frameLoader()) | |
| 247 return; | |
| 248 m_state = MainResourceDone; | |
| 249 frameLoader()->receivedMainResourceError(this, error); | |
| 250 clearMainResourceHandle(); | |
| 251 } | |
| 252 | |
| 253 // Cancels the data source's pending loads. Conceptually, a data source only lo
ads | |
| 254 // one document at a time, but one document may have many related resources. | |
| 255 // stopLoading will stop all loads initiated by the data source, | |
| 256 // but not loads initiated by child frames' data sources -- that's the WebFrame'
s job. | |
| 257 void DocumentLoader::stopLoading() | |
| 258 { | |
| 259 RefPtrWillBeRawPtr<LocalFrame> protectFrame(m_frame.get()); | |
| 260 RefPtrWillBeRawPtr<DocumentLoader> protectLoader(this); | |
| 261 | |
| 262 if (isLoading()) | |
| 263 cancelMainResourceLoad(ResourceError::cancelledError(m_request.url())); | |
| 264 m_fetcher->stopFetching(); | |
| 265 } | |
| 266 | |
| 267 void DocumentLoader::commitIfReady() | 233 void DocumentLoader::commitIfReady() |
| 268 { | 234 { |
| 269 if (m_state < Committed) { | 235 if (m_state < Committed) { |
| 270 m_state = Committed; | 236 m_state = Committed; |
| 271 frameLoader()->commitProvisionalLoad(); | 237 frameLoader()->commitProvisionalLoad(); |
| 272 } | 238 } |
| 273 } | 239 } |
| 274 | 240 |
| 275 bool DocumentLoader::isLoading() const | |
| 276 { | |
| 277 if (document() && document()->hasActiveParser()) | |
| 278 return true; | |
| 279 | |
| 280 return (m_state > NotStarted && m_state < MainResourceDone) || m_fetcher->is
Fetching(); | |
| 281 } | |
| 282 | |
| 283 void DocumentLoader::notifyFinished(Resource* resource) | 241 void DocumentLoader::notifyFinished(Resource* resource) |
| 284 { | 242 { |
| 285 ASSERT_UNUSED(resource, m_mainResource == resource); | 243 ASSERT_UNUSED(resource, m_mainResource == resource); |
| 286 ASSERT(m_mainResource); | 244 ASSERT(m_mainResource); |
| 287 | 245 |
| 288 RefPtrWillBeRawPtr<DocumentLoader> protect(this); | 246 RefPtrWillBeRawPtr<DocumentLoader> protect(this); |
| 289 | 247 |
| 290 if (!m_mainResource->errorOccurred() && !m_mainResource->wasCanceled()) { | 248 if (!m_mainResource->errorOccurred() && !m_mainResource->wasCanceled()) { |
| 291 finishedLoading(m_mainResource->loadFinishTime()); | 249 finishedLoading(m_mainResource->loadFinishTime()); |
| 292 return; | 250 return; |
| 293 } | 251 } |
| 294 | 252 |
| 295 mainReceivedError(m_mainResource->resourceError()); | 253 if (m_applicationCacheHost) |
| 254 m_applicationCacheHost->failedLoadingMainResource(); |
| 255 m_state = MainResourceDone; |
| 256 frameLoader()->loadFailed(this, m_mainResource->resourceError()); |
| 257 clearMainResourceHandle(); |
| 296 } | 258 } |
| 297 | 259 |
| 298 void DocumentLoader::finishedLoading(double finishTime) | 260 void DocumentLoader::finishedLoading(double finishTime) |
| 299 { | 261 { |
| 300 ASSERT(!m_frame->page()->defersLoading() || InspectorInstrumentation::isDebu
ggerPaused(m_frame)); | 262 ASSERT(!m_frame->page()->defersLoading() || InspectorInstrumentation::isDebu
ggerPaused(m_frame)); |
| 301 | 263 |
| 302 RefPtrWillBeRawPtr<DocumentLoader> protect(this); | 264 RefPtrWillBeRawPtr<DocumentLoader> protect(this); |
| 303 | 265 |
| 304 double responseEndTime = finishTime; | 266 double responseEndTime = finishTime; |
| 305 if (!responseEndTime) | 267 if (!responseEndTime) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 334 ASSERT_UNUSED(resource, resource == m_mainResource); | 296 ASSERT_UNUSED(resource, resource == m_mainResource); |
| 335 ASSERT(!redirectResponse.isNull()); | 297 ASSERT(!redirectResponse.isNull()); |
| 336 m_request = request; | 298 m_request = request; |
| 337 | 299 |
| 338 // If the redirecting url is not allowed to display content from the target
origin, | 300 // If the redirecting url is not allowed to display content from the target
origin, |
| 339 // then block the redirect. | 301 // then block the redirect. |
| 340 const KURL& requestURL = m_request.url(); | 302 const KURL& requestURL = m_request.url(); |
| 341 RefPtr<SecurityOrigin> redirectingOrigin = SecurityOrigin::create(redirectRe
sponse.url()); | 303 RefPtr<SecurityOrigin> redirectingOrigin = SecurityOrigin::create(redirectRe
sponse.url()); |
| 342 if (!redirectingOrigin->canDisplay(requestURL)) { | 304 if (!redirectingOrigin->canDisplay(requestURL)) { |
| 343 FrameLoader::reportLocalLoadFailed(m_frame, requestURL.getString()); | 305 FrameLoader::reportLocalLoadFailed(m_frame, requestURL.getString()); |
| 344 cancelMainResourceLoad(ResourceError::cancelledError(requestURL)); | 306 m_fetcher->stopFetching(); |
| 345 return; | 307 return; |
| 346 } | 308 } |
| 347 if (!frameLoader()->shouldContinueForNavigationPolicy(m_request, SubstituteD
ata(), this, CheckContentSecurityPolicy, m_navigationType, NavigationPolicyCurre
ntTab, replacesCurrentHistoryItem(), isClientRedirect())) { | 309 if (!frameLoader()->shouldContinueForNavigationPolicy(m_request, SubstituteD
ata(), this, CheckContentSecurityPolicy, m_navigationType, NavigationPolicyCurre
ntTab, replacesCurrentHistoryItem(), isClientRedirect())) { |
| 348 cancelMainResourceLoad(ResourceError::cancelledError(requestURL)); | 310 m_fetcher->stopFetching(); |
| 349 return; | 311 return; |
| 350 } | 312 } |
| 351 | 313 |
| 352 ASSERT(timing().fetchStart()); | 314 ASSERT(timing().fetchStart()); |
| 353 timing().addRedirect(redirectResponse.url(), requestURL); | 315 timing().addRedirect(redirectResponse.url(), requestURL); |
| 354 appendRedirect(requestURL); | 316 appendRedirect(requestURL); |
| 355 frameLoader()->receivedMainResourceRedirect(requestURL); | 317 frameLoader()->receivedMainResourceRedirect(requestURL); |
| 356 } | 318 } |
| 357 | 319 |
| 358 static bool canShowMIMEType(const String& mimeType, Page* page) | 320 static bool canShowMIMEType(const String& mimeType, Page* page) |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 | 404 |
| 443 ASSERT(!m_frame->page()->defersLoading()); | 405 ASSERT(!m_frame->page()->defersLoading()); |
| 444 | 406 |
| 445 m_response = response; | 407 m_response = response; |
| 446 | 408 |
| 447 if (isArchiveMIMEType(m_response.mimeType()) && m_mainResource->getDataBuffe
ringPolicy() != BufferData) | 409 if (isArchiveMIMEType(m_response.mimeType()) && m_mainResource->getDataBuffe
ringPolicy() != BufferData) |
| 448 m_mainResource->setDataBufferingPolicy(BufferData); | 410 m_mainResource->setDataBufferingPolicy(BufferData); |
| 449 | 411 |
| 450 if (!shouldContinueForResponse()) { | 412 if (!shouldContinueForResponse()) { |
| 451 InspectorInstrumentation::continueWithPolicyIgnore(m_frame, this, m_main
Resource->identifier(), m_response); | 413 InspectorInstrumentation::continueWithPolicyIgnore(m_frame, this, m_main
Resource->identifier(), m_response); |
| 452 cancelMainResourceLoad(ResourceError::cancelledError(m_request.url())); | 414 m_fetcher->stopFetching(); |
| 453 return; | 415 return; |
| 454 } | 416 } |
| 455 | 417 |
| 456 if (m_response.isHTTP()) { | 418 if (m_response.isHTTP()) { |
| 457 int status = m_response.httpStatusCode(); | 419 int status = m_response.httpStatusCode(); |
| 458 if ((status < 200 || status >= 300) && m_frame->owner()) | 420 if ((status < 200 || status >= 300) && m_frame->owner()) |
| 459 m_frame->owner()->renderFallbackContent(); | 421 m_frame->owner()->renderFallbackContent(); |
| 460 } | 422 } |
| 461 } | 423 } |
| 462 | 424 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField(HTTPN
ames::Refresh), Document::HttpRefreshFromHeader); | 462 m_frame->document()->maybeHandleHttpRefresh(m_response.httpHeaderField(HTTPN
ames::Refresh), Document::HttpRefreshFromHeader); |
| 501 } | 463 } |
| 502 | 464 |
| 503 void DocumentLoader::commitData(const char* bytes, size_t length) | 465 void DocumentLoader::commitData(const char* bytes, size_t length) |
| 504 { | 466 { |
| 505 ASSERT(m_state < MainResourceDone); | 467 ASSERT(m_state < MainResourceDone); |
| 506 ensureWriter(m_response.mimeType()); | 468 ensureWriter(m_response.mimeType()); |
| 507 | 469 |
| 508 // This can happen if document.close() is called by an event handler while | 470 // This can happen if document.close() is called by an event handler while |
| 509 // there's still pending incoming data. | 471 // there's still pending incoming data. |
| 510 if (m_frame && !m_frame->document()->parsing()) { | 472 if (m_frame && !m_frame->document()->parsing()) |
| 511 cancelMainResourceLoad(ResourceError::cancelledError(m_request.url())); | |
| 512 return; | 473 return; |
| 513 } | |
| 514 | 474 |
| 515 if (length) | 475 if (length) |
| 516 m_state = DataReceived; | 476 m_state = DataReceived; |
| 517 | 477 |
| 518 m_writer->addData(bytes, length); | 478 m_writer->addData(bytes, length); |
| 519 } | 479 } |
| 520 | 480 |
| 521 void DocumentLoader::dataReceived(Resource* resource, const char* data, size_t l
ength) | 481 void DocumentLoader::dataReceived(Resource* resource, const char* data, size_t l
ength) |
| 522 { | 482 { |
| 523 ASSERT(data); | 483 ASSERT(data); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 if (isArchiveMIMEType(response().mimeType())) | 527 if (isArchiveMIMEType(response().mimeType())) |
| 568 return; | 528 return; |
| 569 commitIfReady(); | 529 commitIfReady(); |
| 570 if (!frameLoader()) | 530 if (!frameLoader()) |
| 571 return; | 531 return; |
| 572 commitData(data, length); | 532 commitData(data, length); |
| 573 | 533 |
| 574 // If we are sending data to MediaDocument, we should stop here | 534 // If we are sending data to MediaDocument, we should stop here |
| 575 // and cancel the request. | 535 // and cancel the request. |
| 576 if (m_frame && m_frame->document()->isMediaDocument()) | 536 if (m_frame && m_frame->document()->isMediaDocument()) |
| 577 cancelMainResourceLoad(ResourceError::cancelledError(m_request.url())); | 537 m_fetcher->stopFetching(); |
| 578 } | 538 } |
| 579 | 539 |
| 580 void DocumentLoader::clearRedirectChain() | 540 void DocumentLoader::clearRedirectChain() |
| 581 { | 541 { |
| 582 m_redirectChain.clear(); | 542 m_redirectChain.clear(); |
| 583 } | 543 } |
| 584 | 544 |
| 585 void DocumentLoader::appendRedirect(const KURL& url) | 545 void DocumentLoader::appendRedirect(const KURL& url) |
| 586 { | 546 { |
| 587 m_redirectChain.append(url); | 547 m_redirectChain.append(url); |
| 588 } | 548 } |
| 589 | 549 |
| 590 void DocumentLoader::detachFromFrame() | 550 void DocumentLoader::detachFromFrame() |
| 591 { | 551 { |
| 592 ASSERT(m_frame); | 552 ASSERT(m_frame); |
| 593 RefPtrWillBeRawPtr<LocalFrame> protectFrame(m_frame.get()); | 553 RefPtrWillBeRawPtr<LocalFrame> protectFrame(m_frame.get()); |
| 594 RefPtrWillBeRawPtr<DocumentLoader> protectLoader(this); | 554 RefPtrWillBeRawPtr<DocumentLoader> protectLoader(this); |
| 595 | 555 |
| 596 // It never makes sense to have a document loader that is detached from its | 556 // It never makes sense to have a document loader that is detached from its |
| 597 // frame have any loads active, so go ahead and kill all the loads. | 557 // frame have any loads active, so go ahead and kill all the loads. |
| 598 stopLoading(); | 558 m_fetcher->stopFetching(); |
| 599 | 559 |
| 600 // If that load cancellation triggered another detach, leave. | 560 // If that load cancellation triggered another detach, leave. |
| 601 // (fast/frames/detach-frame-nested-no-crash.html is an example of this.) | 561 // (fast/frames/detach-frame-nested-no-crash.html is an example of this.) |
| 602 if (!m_frame) | 562 if (!m_frame) |
| 603 return; | 563 return; |
| 604 | 564 |
| 605 m_fetcher->clearContext(); | 565 m_fetcher->clearContext(); |
| 606 | |
| 607 m_applicationCacheHost->detachFromDocumentLoader(); | 566 m_applicationCacheHost->detachFromDocumentLoader(); |
| 608 m_applicationCacheHost.clear(); | 567 m_applicationCacheHost.clear(); |
| 609 WeakIdentifierMap<DocumentLoader>::notifyObjectDestroyed(this); | 568 WeakIdentifierMap<DocumentLoader>::notifyObjectDestroyed(this); |
| 610 clearMainResourceHandle(); | 569 clearMainResourceHandle(); |
| 611 m_frame = nullptr; | 570 m_frame = nullptr; |
| 612 } | 571 } |
| 613 | 572 |
| 614 void DocumentLoader::clearMainResourceHandle() | 573 void DocumentLoader::clearMainResourceHandle() |
| 615 { | 574 { |
| 616 if (!m_mainResource) | 575 if (!m_mainResource) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 627 | 586 |
| 628 ASSERT(m_mainResource); | 587 ASSERT(m_mainResource); |
| 629 ArchiveResource* mainResource = m_fetcher->createArchive(m_mainResource.get(
)); | 588 ArchiveResource* mainResource = m_fetcher->createArchive(m_mainResource.get(
)); |
| 630 if (!mainResource) | 589 if (!mainResource) |
| 631 return false; | 590 return false; |
| 632 // The origin is the MHTML file, we need to set the base URL to the document
encoded in the MHTML so | 591 // The origin is the MHTML file, we need to set the base URL to the document
encoded in the MHTML so |
| 633 // relative URLs are resolved properly. | 592 // relative URLs are resolved properly. |
| 634 ensureWriter(mainResource->mimeType(), mainResource->url()); | 593 ensureWriter(mainResource->mimeType(), mainResource->url()); |
| 635 | 594 |
| 636 // The Document has now been created. | 595 // The Document has now been created. |
| 637 document()->enforceSandboxFlags(SandboxAll); | 596 m_frame->document()->enforceSandboxFlags(SandboxAll); |
| 638 | 597 |
| 639 commitData(mainResource->data()->data(), mainResource->data()->size()); | 598 commitData(mainResource->data()->data(), mainResource->data()->size()); |
| 640 return true; | 599 return true; |
| 641 } | 600 } |
| 642 | 601 |
| 643 const AtomicString& DocumentLoader::responseMIMEType() const | 602 const AtomicString& DocumentLoader::responseMIMEType() const |
| 644 { | 603 { |
| 645 return m_response.mimeType(); | 604 return m_response.mimeType(); |
| 646 } | 605 } |
| 647 | 606 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 698 // A bunch of headers are set when the underlying ResourceLoader is created,
and m_request needs to include those. | 657 // A bunch of headers are set when the underlying ResourceLoader is created,
and m_request needs to include those. |
| 699 // Even when using a cached resource, we may make some modification to the r
equest, e.g. adding the referer header. | 658 // Even when using a cached resource, we may make some modification to the r
equest, e.g. adding the referer header. |
| 700 m_request = mainResourceLoader() ? m_mainResource->resourceRequest() : fetch
Request.resourceRequest(); | 659 m_request = mainResourceLoader() ? m_mainResource->resourceRequest() : fetch
Request.resourceRequest(); |
| 701 // If there was a fragment identifier on m_request, the cache will have stri
pped it. m_request should include | 660 // If there was a fragment identifier on m_request, the cache will have stri
pped it. m_request should include |
| 702 // the fragment identifier, so add that back in. | 661 // the fragment identifier, so add that back in. |
| 703 if (equalIgnoringFragmentIdentifier(m_request.url(), fetchRequest.url())) | 662 if (equalIgnoringFragmentIdentifier(m_request.url(), fetchRequest.url())) |
| 704 m_request.setURL(fetchRequest.url()); | 663 m_request.setURL(fetchRequest.url()); |
| 705 m_mainResource->addClient(this); | 664 m_mainResource->addClient(this); |
| 706 } | 665 } |
| 707 | 666 |
| 708 void DocumentLoader::cancelMainResourceLoad(const ResourceError& resourceError) | |
| 709 { | |
| 710 RefPtrWillBeRawPtr<DocumentLoader> protect(this); | |
| 711 ResourceError error = resourceError.isNull() ? ResourceError::cancelledError
(m_request.url()) : resourceError; | |
| 712 | |
| 713 if (mainResourceLoader()) | |
| 714 mainResourceLoader()->cancel(error); | |
| 715 | |
| 716 mainReceivedError(error); | |
| 717 } | |
| 718 | |
| 719 void DocumentLoader::endWriting(DocumentWriter* writer) | 667 void DocumentLoader::endWriting(DocumentWriter* writer) |
| 720 { | 668 { |
| 721 ASSERT_UNUSED(writer, m_writer == writer); | 669 ASSERT_UNUSED(writer, m_writer == writer); |
| 722 m_writer->end(); | 670 m_writer->end(); |
| 723 m_writer.clear(); | 671 m_writer.clear(); |
| 724 } | 672 } |
| 725 | 673 |
| 726 PassRefPtrWillBeRawPtr<DocumentWriter> DocumentLoader::createWriterFor(const Doc
umentInit& init, const AtomicString& mimeType, const AtomicString& encoding, boo
l dispatch, ParserSynchronizationPolicy parsingPolicy) | 674 PassRefPtrWillBeRawPtr<DocumentWriter> DocumentLoader::createWriterFor(const Doc
umentInit& init, const AtomicString& mimeType, const AtomicString& encoding, boo
l dispatch, ParserSynchronizationPolicy parsingPolicy) |
| 727 { | 675 { |
| 728 LocalFrame* frame = init.frame(); | 676 LocalFrame* frame = init.frame(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 752 { | 700 { |
| 753 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding()
: emptyAtom, true, ForceSynchronousParsing); | 701 m_writer = createWriterFor(init, mimeType(), m_writer ? m_writer->encoding()
: emptyAtom, true, ForceSynchronousParsing); |
| 754 if (!source.isNull()) | 702 if (!source.isNull()) |
| 755 m_writer->appendReplacingData(source); | 703 m_writer->appendReplacingData(source); |
| 756 endWriting(m_writer.get()); | 704 endWriting(m_writer.get()); |
| 757 } | 705 } |
| 758 | 706 |
| 759 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); | 707 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); |
| 760 | 708 |
| 761 } // namespace blink | 709 } // namespace blink |
| OLD | NEW |