Title: [87756] trunk/Source/WebCore
Revision
87756
Author
[email protected]
Date
2011-05-31 15:13:06 -0700 (Tue, 31 May 2011)

Log Message

Another swipe at resolving <rdar://problem/9125145> and https://bugs.webkit.org/show_bug.cgi?id=61494
        
Reviewed by Darin Adler.

Re-land http://trac.webkit.org/changeset/87566 with invalid ASSERTs removed.

No new tests. No change in behavior.

Instead of storing the DocumentLoader at construction and never changing it,
always calculate it based on the FrameLoader's current DocumentLoader:
* dom/Document.cpp:
(WebCore::Document::Document):
(WebCore::Document::suggestedMIMEType):
(WebCore::Document::lastModified):
(WebCore::Document::initSecurityContext):
(WebCore::Document::updateURLForPushOrReplaceState):
(WebCore::Document::loader):
* dom/Document.h:

Null-check or ASSERT that the DocumentLoader exists (or both) depending on the scenario:
* bindings/ScriptControllerBase.cpp:
(WebCore::ScriptController::executeIfJavaScriptURL):
* html/MediaDocument.cpp:
(WebCore::MediaDocument::replaceMediaElementTimerFired):
* html/PluginDocument.cpp:
(WebCore::PluginDocumentParser::createDocumentStructure):
* platform/mac/HTMLConverter.mm:
(fileWrapperForElement):

* WebCore.exp.in:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (87755 => 87756)


--- trunk/Source/WebCore/ChangeLog	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/ChangeLog	2011-05-31 22:13:06 UTC (rev 87756)
@@ -1,3 +1,36 @@
+2011-05-31  Brady Eidson  <[email protected]>
+
+        Reviewed by Darin Adler.
+
+        Another swipe at resolving <rdar://problem/9125145> and https://bugs.webkit.org/show_bug.cgi?id=61494
+        
+        Re-land http://trac.webkit.org/changeset/87566 with invalid ASSERTs removed.
+
+        No new tests. No change in behavior.
+
+        Instead of storing the DocumentLoader at construction and never changing it,
+        always calculate it based on the FrameLoader's current DocumentLoader:
+        * dom/Document.cpp:
+        (WebCore::Document::Document):
+        (WebCore::Document::suggestedMIMEType):
+        (WebCore::Document::lastModified):
+        (WebCore::Document::initSecurityContext):
+        (WebCore::Document::updateURLForPushOrReplaceState):
+        (WebCore::Document::loader):
+        * dom/Document.h:
+
+        Null-check or ASSERT that the DocumentLoader exists (or both) depending on the scenario:
+        * bindings/ScriptControllerBase.cpp:
+        (WebCore::ScriptController::executeIfJavaScriptURL):
+        * html/MediaDocument.cpp:
+        (WebCore::MediaDocument::replaceMediaElementTimerFired):
+        * html/PluginDocument.cpp:
+        (WebCore::PluginDocumentParser::createDocumentStructure):
+        * platform/mac/HTMLConverter.mm:
+        (fileWrapperForElement):
+
+        * WebCore.exp.in:
+
 2011-05-31  Levi Weintraub  <[email protected]>
 
         Reviewed by Simon Fraser.

Modified: trunk/Source/WebCore/WebCore.exp.in (87755 => 87756)


--- trunk/Source/WebCore/WebCore.exp.in	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/WebCore.exp.in	2011-05-31 22:13:06 UTC (rev 87756)
@@ -1283,6 +1283,7 @@
 __ZNK7WebCore8Document31displayStringModifiedByEncodingERKN3WTF6StringE
 __ZNK7WebCore8Document4bodyEv
 __ZNK7WebCore8Document6domainEv
+__ZNK7WebCore8Document6loaderEv
 __ZNK7WebCore8IntPointcv7CGPointEv
 __ZNK7WebCore8IntPointcv8_NSPointEv
 __ZNK7WebCore8Position10downstreamENS_27EditingBoundaryCrossingRuleE

Modified: trunk/Source/WebCore/bindings/ScriptControllerBase.cpp (87755 => 87756)


--- trunk/Source/WebCore/bindings/ScriptControllerBase.cpp	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/bindings/ScriptControllerBase.cpp	2011-05-31 22:13:06 UTC (rev 87756)
@@ -114,9 +114,12 @@
     // FIXME: We should always replace the document, but doing so
     //        synchronously can cause crashes:
     //        http://bugs.webkit.org/show_bug.cgi?id=16782
-    if (shouldReplaceDocumentIfJavaScriptURL == ReplaceDocumentIfJavaScriptURL)
-        m_frame->document()->loader()->writer()->replaceDocument(scriptResult);
-
+    if (shouldReplaceDocumentIfJavaScriptURL == ReplaceDocumentIfJavaScriptURL) {
+        // We're still in a frame, so there should be a DocumentLoader.
+        ASSERT(m_frame->document()->loader());
+        if (DocumentLoader* loader = m_frame->document()->loader())
+            loader->writer()->replaceDocument(scriptResult);
+    }
     return true;
 }
 

Modified: trunk/Source/WebCore/dom/Document.cpp (87755 => 87756)


--- trunk/Source/WebCore/dom/Document.cpp	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/dom/Document.cpp	2011-05-31 22:13:06 UTC (rev 87756)
@@ -435,7 +435,6 @@
     m_ignoreAutofocus = false;
 
     m_frame = frame;
-    m_documentLoader = frame ? frame->loader()->activeDocumentLoader() : 0;
 
     // We depend on the url getting immediately set in subframes, but we
     // also depend on the url NOT getting immediately set in opened windows.
@@ -1106,7 +1105,9 @@
     if (m_document->isHTMLDocument())
         return "text/html";
 
-    return m_documentLoader->responseMIMEType();
+    if (DocumentLoader* documentLoader = loader())
+        return documentLoader->responseMIMEType();
+    return String();
 }
 
 // FIXME: We need to discuss the DOM API here at some point. Ideas:
@@ -3781,7 +3782,9 @@
     DateComponents date;
     bool foundDate = false;
     if (m_frame) {
-        String httpLastModified = m_documentLoader->response().httpHeaderField("Last-Modified");
+        String httpLastModified;
+        if (DocumentLoader* documentLoader = loader()) 
+            httpLastModified = documentLoader->response().httpHeaderField("Last-Modified");
         if (!httpLastModified.isEmpty()) {
             date.setMillisecondsSinceEpochForDateTime(parseDate(httpLastModified));
             foundDate = true;
@@ -4510,7 +4513,9 @@
         // load local resources.  See https://bugs.webkit.org/show_bug.cgi?id=16756
         // and https://bugs.webkit.org/show_bug.cgi?id=19760 for further
         // discussion.
-        if (m_documentLoader->substituteData().isValid())
+        
+        DocumentLoader* documentLoader = loader();
+        if (documentLoader && documentLoader->substituteData().isValid())
             securityOrigin()->grantLoadLocalResources();
     }
 
@@ -4591,7 +4596,9 @@
 
     setURL(url);
     f->loader()->setOutgoingReferrer(url);
-    m_documentLoader->replaceRequestURLForSameDocumentNavigation(url);
+
+    if (DocumentLoader* documentLoader = loader())
+        documentLoader->replaceRequestURLForSameDocumentNavigation(url);
 }
 
 void Document::statePopped(SerializedScriptValue* stateObject)
@@ -5139,4 +5146,19 @@
         mainFrame->notifyChromeClientWheelEventHandlerCountChanged();
 }
 
+DocumentLoader* Document::loader() const
+{
+    if (!m_frame)
+        return 0;
+    
+    DocumentLoader* loader = m_frame->loader()->activeDocumentLoader();
+    if (!loader)
+        return 0;
+    
+    if (m_frame->document() != this)
+        return 0;
+    
+    return loader;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/Document.h (87755 => 87756)


--- trunk/Source/WebCore/dom/Document.h	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/dom/Document.h	2011-05-31 22:13:06 UTC (rev 87756)
@@ -569,8 +569,7 @@
     void setVisuallyOrdered();
     bool visuallyOrdered() const { return m_visuallyOrdered; }
     
-    void setDocumentLoader(DocumentLoader* documentLoader) { m_documentLoader = documentLoader; }
-    DocumentLoader* loader() const { return m_documentLoader; }
+    DocumentLoader* loader() const;
 
     void open(Document* ownerDocument = 0);
     void implicitOpen();
@@ -1175,7 +1174,6 @@
     mutable RefPtr<CSSPrimitiveValueCache> m_cssPrimitiveValueCache;
 
     Frame* m_frame;
-    DocumentLoader* m_documentLoader;
     OwnPtr<CachedResourceLoader> m_cachedResourceLoader;
     RefPtr<DocumentParser> m_parser;
     bool m_wellFormed;

Modified: trunk/Source/WebCore/html/MediaDocument.cpp (87755 => 87756)


--- trunk/Source/WebCore/html/MediaDocument.cpp	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/html/MediaDocument.cpp	2011-05-31 22:13:06 UTC (rev 87756)
@@ -221,8 +221,12 @@
         embedElement->setAttribute(heightAttr, "100%");
         embedElement->setAttribute(nameAttr, "plugin");
         embedElement->setAttribute(srcAttr, url().string());
-        embedElement->setAttribute(typeAttr, loader()->writer()->mimeType());
 
+        DocumentLoader* documentLoader = loader();
+        ASSERT(documentLoader);
+        if (documentLoader)
+            embedElement->setAttribute(typeAttr, documentLoader->writer()->mimeType());
+
         ExceptionCode ec;
         videoElement->parentNode()->replaceChild(embedElement, videoElement, ec);
     }

Modified: trunk/Source/WebCore/html/PluginDocument.cpp (87755 => 87756)


--- trunk/Source/WebCore/html/PluginDocument.cpp	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/html/PluginDocument.cpp	2011-05-31 22:13:06 UTC (rev 87756)
@@ -92,7 +92,11 @@
     
     m_embedElement->setAttribute(nameAttr, "plugin");
     m_embedElement->setAttribute(srcAttr, document()->url().string());
-    m_embedElement->setAttribute(typeAttr, document()->loader()->writer()->mimeType());
+    
+    DocumentLoader* loader = document()->loader();
+    ASSERT(loader);
+    if (loader)
+        m_embedElement->setAttribute(typeAttr, loader->writer()->mimeType());
 
     static_cast<PluginDocument*>(document())->setPluginNode(m_embedElement);
 

Modified: trunk/Source/WebCore/platform/mac/HTMLConverter.mm (87755 => 87756)


--- trunk/Source/WebCore/platform/mac/HTMLConverter.mm	2011-05-31 22:11:28 UTC (rev 87755)
+++ trunk/Source/WebCore/platform/mac/HTMLConverter.mm	2011-05-31 22:13:06 UTC (rev 87756)
@@ -1753,7 +1753,8 @@
     const AtomicString& attr = element->getAttribute(srcAttr);
     if (!attr.isEmpty()) {
         NSURL *URL = ""
-        wrapper = fileWrapperForURL(element->document()->loader(), URL);
+        if (DocumentLoader* loader = element->document()->loader())
+            wrapper = fileWrapperForURL(loader, URL);
     }
     if (!wrapper) {
         RenderImage* renderer = toRenderImage(element->renderer());
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to