WebCore:
authortrey <trey@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Aug 2004 17:13:29 +0000 (17:13 +0000)
committertrey <trey@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Aug 2004 17:13:29 +0000 (17:13 +0000)
3761329 - query result links all dead in ingrammicro.com (sometimes)
3761328 - links in some docs dead when doc is loaded from WebArchive

Make sure to get part to completed state when end is called,
even if we have no doc.  See WebKit changelog for more info.

        Reviewed by Richard and Darin.

        * khtml/khtml_part.cpp:
        (KHTMLPart::end):

WebKit:

        3761329 - query result links all dead in ingrammicro.com (sometimes)
        3761328 - links in some docs dead when doc is loaded from WebArchive

        Nasty problem.  It turns out that these result pages are a parent frame with two child
        frames.  One of the child frames is a 1 or 2 byte text document.  When the text child
        is the last doc to complete, because we use a Text rep instead of an HTMLRep, it turns
        out we never send [bridge end] from WebKit.  That mistake results in checkCompleted not
        being called enough in the part, and we never realize the load is done.  WebCore does
        not allow redirects to happen until the entire load is complete,  and  the links on this
        results page are actually little pieces of JS that set location to a generated URL.  Since
        redirects are not allowed these links all silently fail to do anything, and the doc never
        achieves a completed state where they will work.

        Solution is to make sure we always call [bridge end] from the DataSource instead of only
        the HTML rep doing it.

        Reviewed by Richard and Darin.

        * WebView.subproj/WebDataSource.m:
        (-[WebDataSource _finishedLoading]):  Call [bridge end] here for all kinds of docs.
        * WebView.subproj/WebHTMLRepresentation.m:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):  Don't call is just for HTMLReps.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7255 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/khtml_part.cpp
WebKit/ChangeLog
WebKit/WebView.subproj/WebDataSource.m
WebKit/WebView.subproj/WebHTMLRepresentation.m

index f0d7e3fe1c60dd0fddc1df9a05251c864b1affea..6eb7dc1ad845e24d1ec7b63c51a49ff38acf4644 100644 (file)
@@ -1,3 +1,16 @@
+2004-08-12  Trey Matteson  <trey@apple.com>
+
+       3761329 - query result links all dead in ingrammicro.com (sometimes)
+       3761328 - links in some docs dead when doc is loaded from WebArchive
+
+       Make sure to get part to completed state when end is called,
+       even if we have no doc.  See WebKit changelog for more info.
+
+        Reviewed by Richard and Darin.
+
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::end):
+
 2004-08-13  Trey Matteson  <trey@apple.com>
 
         3761098 - red dotted underline for misspelled words shows up in drag image
index 29b7cc268e0ff0bd8fe5e531759ef1bb76c65aab..04e877c6cca836816b949191006276f51f76d19f 100644 (file)
@@ -1633,6 +1633,12 @@ void KHTMLPart::end()
         write(d->m_decoder->flush());
     if (d->m_doc)
        d->m_doc->finishParsing();
+    else
+        // WebKit partially uses WebCore when loading non-HTML docs.  In these cases doc==nil, but
+        // WebCore is enough involved that we need to checkCompleted() in order for m_bComplete to
+        // become true.  An example is when a subframe is a pure text doc, and that subframe is the
+        // last one to complete.
+        checkCompleted();
 
     deref();
 }
index 31a09c36cd71b4f5a22776095fb2430b4a4dbdb1..a6d82cd9419b9d3b3dc1a51c74a957c4c0a5255d 100644 (file)
@@ -1,3 +1,28 @@
+2004-08-12  Trey Matteson  <trey@apple.com>
+
+        3761329 - query result links all dead in ingrammicro.com (sometimes)
+        3761328 - links in some docs dead when doc is loaded from WebArchive
+
+        Nasty problem.  It turns out that these result pages are a parent frame with two child
+        frames.  One of the child frames is a 1 or 2 byte text document.  When the text child
+        is the last doc to complete, because we use a Text rep instead of an HTMLRep, it turns
+        out we never send [bridge end] from WebKit.  That mistake results in checkCompleted not
+        being called enough in the part, and we never realize the load is done.  WebCore does
+        not allow redirects to happen until the entire load is complete,  and  the links on this
+        results page are actually little pieces of JS that set location to a generated URL.  Since
+        redirects are not allowed these links all silently fail to do anything, and the doc never
+        achieves a completed state where they will work.
+
+        Solution is to make sure we always call [bridge end] from the DataSource instead of only
+        the HTML rep doing it.
+
+        Reviewed by Richard and Darin.
+
+        * WebView.subproj/WebDataSource.m:
+        (-[WebDataSource _finishedLoading]):  Call [bridge end] here for all kinds of docs.
+        * WebView.subproj/WebHTMLRepresentation.m:
+        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):  Don't call is just for HTMLReps.
+
 2004-08-12  Richard Williamson   <rjw@apple.com>
 
         Bring npruntime.h and friends closer to compliance with
index 32c07879170d989c0b5ca99936bad21009c6e8bd..923054490183e1e612f17658faadaa0e98c6e47f 100644 (file)
     [self _commitIfReady];
 
     [[self representation] finishedLoadingWithDataSource:self];
+    // Since we've sent openURL to the bridge, it's important to send end too, so that WebCore
+    // can realize that the load is completed.
+    [[self _bridge] end];
 }
 
 - (void)_receivedMainResourceError:(NSError *)error complete:(BOOL)isComplete
index a132d30c5e17981fc3ce247f95dd7001ac2fc06f..baa4461b8b9392557974b7cdb2e11540d1e9210d 100644 (file)
             // way to get work done that is normally done when the first bit of data is
             // received, even for the case of a document with no data (like about:blank).
             [_private->bridge receivedData:nil textEncodingName:[[_private->dataSource response] textEncodingName]];
-           [_private->bridge end];
         }
     }
 }