Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: Source/core/loader/DocumentLoader.cpp

Issue 517043003: Move Frame to the Oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased past r181814 conflict Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 19 matching lines...) Expand all
30 #include "config.h" 30 #include "config.h"
31 #include "core/loader/DocumentLoader.h" 31 #include "core/loader/DocumentLoader.h"
32 32
33 #include "core/FetchInitiatorTypeNames.h" 33 #include "core/FetchInitiatorTypeNames.h"
34 #include "core/dom/Document.h" 34 #include "core/dom/Document.h"
35 #include "core/dom/DocumentParser.h" 35 #include "core/dom/DocumentParser.h"
36 #include "core/events/Event.h" 36 #include "core/events/Event.h"
37 #include "core/fetch/MemoryCache.h" 37 #include "core/fetch/MemoryCache.h"
38 #include "core/fetch/ResourceFetcher.h" 38 #include "core/fetch/ResourceFetcher.h"
39 #include "core/fetch/ResourceLoader.h" 39 #include "core/fetch/ResourceLoader.h"
40 #include "core/frame/LocalDOMWindow.h"
41 #include "core/frame/LocalFrame.h"
42 #include "core/frame/csp/ContentSecurityPolicy.h"
40 #include "core/html/HTMLFrameOwnerElement.h" 43 #include "core/html/HTMLFrameOwnerElement.h"
41 #include "core/html/parser/TextResourceDecoder.h" 44 #include "core/html/parser/TextResourceDecoder.h"
42 #include "core/inspector/InspectorInstrumentation.h" 45 #include "core/inspector/InspectorInstrumentation.h"
43 #include "core/loader/FrameLoader.h" 46 #include "core/loader/FrameLoader.h"
44 #include "core/loader/FrameLoaderClient.h" 47 #include "core/loader/FrameLoaderClient.h"
45 #include "core/loader/UniqueIdentifier.h" 48 #include "core/loader/UniqueIdentifier.h"
46 #include "core/loader/appcache/ApplicationCacheHost.h" 49 #include "core/loader/appcache/ApplicationCacheHost.h"
47 #include "core/frame/LocalDOMWindow.h"
48 #include "core/frame/LocalFrame.h"
49 #include "core/frame/csp/ContentSecurityPolicy.h"
50 #include "core/page/FrameTree.h" 50 #include "core/page/FrameTree.h"
51 #include "core/page/Page.h" 51 #include "core/page/Page.h"
52 #include "core/frame/Settings.h" 52 #include "core/frame/Settings.h"
53 #include "core/inspector/ConsoleMessage.h" 53 #include "core/inspector/ConsoleMessage.h"
54 #include "platform/Logging.h" 54 #include "platform/Logging.h"
55 #include "platform/UserGestureIndicator.h" 55 #include "platform/UserGestureIndicator.h"
56 #include "platform/mhtml/ArchiveResource.h" 56 #include "platform/mhtml/ArchiveResource.h"
57 #include "platform/mhtml/ArchiveResourceCollection.h" 57 #include "platform/mhtml/ArchiveResourceCollection.h"
58 #include "platform/mhtml/MHTMLArchive.h" 58 #include "platform/mhtml/MHTMLArchive.h"
59 #include "platform/network/ContentSecurityPolicyResponseHeaders.h" 59 #include "platform/network/ContentSecurityPolicyResponseHeaders.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 frameLoader()->receivedMainResourceError(error); 171 frameLoader()->receivedMainResourceError(error);
172 clearMainResourceHandle(); 172 clearMainResourceHandle();
173 } 173 }
174 174
175 // Cancels the data source's pending loads. Conceptually, a data source only lo ads 175 // Cancels the data source's pending loads. Conceptually, a data source only lo ads
176 // one document at a time, but one document may have many related resources. 176 // one document at a time, but one document may have many related resources.
177 // stopLoading will stop all loads initiated by the data source, 177 // stopLoading will stop all loads initiated by the data source,
178 // but not loads initiated by child frames' data sources -- that's the WebFrame' s job. 178 // but not loads initiated by child frames' data sources -- that's the WebFrame' s job.
179 void DocumentLoader::stopLoading() 179 void DocumentLoader::stopLoading()
180 { 180 {
181 RefPtr<LocalFrame> protectFrame(m_frame); 181 RefPtrWillBeRawPtr<LocalFrame> protectFrame(m_frame);
182 RefPtr<DocumentLoader> protectLoader(this); 182 RefPtr<DocumentLoader> protectLoader(this);
183 183
184 // In some rare cases, calling FrameLoader::stopLoading could cause isLoadin g() to return false. 184 // In some rare cases, calling FrameLoader::stopLoading could cause isLoadin g() to return false.
185 // (This can happen when there's a single XMLHttpRequest currently loading a nd stopLoading causes it 185 // (This can happen when there's a single XMLHttpRequest currently loading a nd stopLoading causes it
186 // to stop loading. Because of this, we need to save it so we don't return e arly. 186 // to stop loading. Because of this, we need to save it so we don't return e arly.
187 bool loading = isLoading(); 187 bool loading = isLoading();
188 188
189 if (m_committed) { 189 if (m_committed) {
190 // Attempt to stop the frame if the document loader is loading, or if it is done loading but 190 // Attempt to stop the frame if the document loader is loading, or if it is done loading but
191 // still parsing. Failure to do so can cause a world leak. 191 // still parsing. Failure to do so can cause a world leak.
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 { 507 {
508 if (m_writer) 508 if (m_writer)
509 return; 509 return;
510 510
511 const AtomicString& encoding = overrideEncoding().isNull() ? response().text EncodingName() : overrideEncoding(); 511 const AtomicString& encoding = overrideEncoding().isNull() ? response().text EncodingName() : overrideEncoding();
512 512
513 // Prepare a DocumentInit before clearing the frame, because it may need to 513 // Prepare a DocumentInit before clearing the frame, because it may need to
514 // inherit an aliased security context. 514 // inherit an aliased security context.
515 DocumentInit init(url(), m_frame); 515 DocumentInit init(url(), m_frame);
516 init.withNewRegistrationContext(); 516 init.withNewRegistrationContext();
517 m_frame->loader().clear(); 517 m_frame->loader().dispose(FrameLoader::DoDisposeFrameContents);
518 ASSERT(m_frame->page()); 518 ASSERT(m_frame->page());
519 519
520 m_writer = createWriterFor(0, init, mimeType, encoding, false); 520 m_writer = createWriterFor(0, init, mimeType, encoding, false);
521 m_writer->setDocumentWasLoadedAsPartOfNavigation(); 521 m_writer->setDocumentWasLoadedAsPartOfNavigation();
522 // This should be set before receivedFirstData(). 522 // This should be set before receivedFirstData().
523 if (!overridingURL.isEmpty()) 523 if (!overridingURL.isEmpty())
524 m_frame->document()->setBaseURLOverride(overridingURL); 524 m_frame->document()->setBaseURLOverride(overridingURL);
525 525
526 // Call receivedFirstData() exactly once per load. 526 // Call receivedFirstData() exactly once per load.
527 frameLoader()->receivedFirstData(); 527 frameLoader()->receivedFirstData();
(...skipping 10 matching lines...) Expand all
538 void DocumentLoader::dataReceived(Resource* resource, const char* data, int leng th) 538 void DocumentLoader::dataReceived(Resource* resource, const char* data, int leng th)
539 { 539 {
540 ASSERT(data); 540 ASSERT(data);
541 ASSERT(length); 541 ASSERT(length);
542 ASSERT_UNUSED(resource, resource == m_mainResource); 542 ASSERT_UNUSED(resource, resource == m_mainResource);
543 ASSERT(!m_response.isNull()); 543 ASSERT(!m_response.isNull());
544 ASSERT(!mainResourceLoader() || !mainResourceLoader()->defersLoading()); 544 ASSERT(!mainResourceLoader() || !mainResourceLoader()->defersLoading());
545 545
546 // Both unloading the old page and parsing the new page may execute JavaScri pt which destroys the datasource 546 // Both unloading the old page and parsing the new page may execute JavaScri pt which destroys the datasource
547 // by starting a new load, so retain temporarily. 547 // by starting a new load, so retain temporarily.
548 RefPtr<LocalFrame> protectFrame(m_frame); 548 RefPtrWillBeRawPtr<LocalFrame> protectFrame(m_frame);
549 RefPtr<DocumentLoader> protectLoader(this); 549 RefPtr<DocumentLoader> protectLoader(this);
550 550
551 m_applicationCacheHost->mainResourceDataReceived(data, length); 551 m_applicationCacheHost->mainResourceDataReceived(data, length);
552 m_timeOfLastDataReceived = monotonicallyIncreasingTime(); 552 m_timeOfLastDataReceived = monotonicallyIncreasingTime();
553 553
554 commitIfReady(); 554 commitIfReady();
555 if (!frameLoader()) 555 if (!frameLoader())
556 return; 556 return;
557 if (isArchiveMIMEType(response().mimeType())) 557 if (isArchiveMIMEType(response().mimeType()))
558 return; 558 return;
(...skipping 11 matching lines...) Expand all
570 } 570 }
571 571
572 void DocumentLoader::appendRedirect(const KURL& url) 572 void DocumentLoader::appendRedirect(const KURL& url)
573 { 573 {
574 m_redirectChain.append(url); 574 m_redirectChain.append(url);
575 } 575 }
576 576
577 void DocumentLoader::detachFromFrame() 577 void DocumentLoader::detachFromFrame()
578 { 578 {
579 ASSERT(m_frame); 579 ASSERT(m_frame);
580 RefPtr<LocalFrame> protectFrame(m_frame); 580 RefPtrWillBeRawPtr<LocalFrame> protectFrame(m_frame);
581 RefPtr<DocumentLoader> protectLoader(this); 581 RefPtr<DocumentLoader> protectLoader(this);
582 582
583 // It never makes sense to have a document loader that is detached from its 583 // It never makes sense to have a document loader that is detached from its
584 // frame have any loads active, so go ahead and kill all the loads. 584 // frame have any loads active, so go ahead and kill all the loads.
585 stopLoading(); 585 stopLoading();
586 586
587 m_applicationCacheHost->setApplicationCache(0); 587 m_applicationCacheHost->setApplicationCache(0);
588 InspectorInstrumentation::loaderDetachedFromFrame(m_frame, this); 588 InspectorInstrumentation::loaderDetachedFromFrame(m_frame, this);
589 m_frame = 0; 589 m_frame = 0;
590 } 590 }
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 // This is only called by FrameLoader::replaceDocumentWhileExecutingJavaScriptUR L() 829 // This is only called by FrameLoader::replaceDocumentWhileExecutingJavaScriptUR L()
830 void DocumentLoader::replaceDocumentWhileExecutingJavaScriptURL(const DocumentIn it& init, const String& source, Document* ownerDocument) 830 void DocumentLoader::replaceDocumentWhileExecutingJavaScriptURL(const DocumentIn it& init, const String& source, Document* ownerDocument)
831 { 831 {
832 m_writer = createWriterFor(ownerDocument, init, mimeType(), m_writer ? m_wri ter->encoding() : emptyAtom, true); 832 m_writer = createWriterFor(ownerDocument, init, mimeType(), m_writer ? m_wri ter->encoding() : emptyAtom, true);
833 if (!source.isNull()) 833 if (!source.isNull())
834 m_writer->appendReplacingData(source); 834 m_writer->appendReplacingData(source);
835 endWriting(m_writer.get()); 835 endWriting(m_writer.get());
836 } 836 }
837 837
838 } // namespace blink 838 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698