Reviewed by Maciej
authoradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Mar 2005 19:16:31 +0000 (19:16 +0000)
committeradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Mar 2005 19:16:31 +0000 (19:16 +0000)
Fix for <rdar://problem/4021711> REGRESSION(125-188) blank pages when browsing forum at cooperativeresearch.org - cached external script problem

        * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::scriptHandler): set flag needToRefCachedScript so we can make sure
        notifyFinished is called after pendingSrc is set up with the right data from the cached script

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/htmltokenizer.cpp

index 6ed8b9480555b775de308ed3e7c53d3879468b17..42e82e5a7f2a52557f100a679b4ca239570ea7ff 100644 (file)
@@ -1,3 +1,12 @@
+2005-03-04 Adele Amchan  <adele@apple.com>
+       Reviewed by Maciej
+
+       Fix for <rdar://problem/4021711> REGRESSION(125-188) blank pages when browsing forum at cooperativeresearch.org - cached external script problem
+
+        * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::scriptHandler): set flag needToRefCachedScript so we can make sure 
+        notifyFinished is called after pendingSrc is set up with the right data from the cached script
+
 2005-03-04  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by John
index 210c2210f85b045f5a4aab5aa01fb3b5eaf0a073..19632201533b5fc2c179aa62632e19e0575058a8 100644 (file)
@@ -534,6 +534,7 @@ void HTMLTokenizer::scriptHandler()
     TokenizerString *savedPrependingSrc = currentPrependingSrc;
     TokenizerString prependingSrc;
     currentPrependingSrc = &prependingSrc;
+    bool needToRefCachedScript = false;
     if ( !parser->skipMode() ) {
         if (cs) {
              //kdDebug( 6036 ) << "cachedscript extern!" << endl;
@@ -546,10 +547,9 @@ void HTMLTokenizer::scriptHandler()
            }
             setSrc(TokenizerString());
             scriptCodeSize = scriptCodeResync = 0;
-            cs->ref(this);
-            // will be 0 if script was already loaded and ref() executed it
-            if (!cachedScript.isEmpty())
-                loadingExtScript = true;
+            // we need to ref the cached script (which will call notifyFinished), but we want to make sure we the data is setup before notifyFinished is called
+            needToRefCachedScript = true;
+            loadingExtScript = true;
         }
         else if (view && doScriptExec && javascript ) {
             if (!m_executingScript)
@@ -592,6 +592,10 @@ void HTMLTokenizer::scriptHandler()
     }
 
     currentPrependingSrc = savedPrependingSrc;
+
+    // Now that we're sure the pendingSrc is set up for notifyFinished, we can call ref()
+    if (needToRefCachedScript)
+        cs->ref(this);
 }
 
 void HTMLTokenizer::scriptExecution( const QString& str, QString scriptURL,