[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

tonyg at chromium.org tonyg at chromium.org
Wed Dec 22 13:16:34 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 97059f5946573ca247a0fe6132322b1e340d5f2a
Author: tonyg at chromium.org <tonyg at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Sep 10 04:30:51 2010 +0000

    2010-09-09  Tony Gentilcore  <tonyg at chromium.org>
    
            Reviewed by Adam Barth.
    
            Support <script async> as specified by HTML5
            https://bugs.webkit.org/show_bug.cgi?id=45310
    
            * fast/dom/Document/readystate.html: Dynamically inserted scripts now block the load event like in FF4. So move the finishJSTest call to load.
            * fast/dom/Document/readystate-expected.txt: Dynamically inserted script now runs before load during "interactive" phase.
            * fast/dom/HTMLScriptElement/async-inline-script-expected.txt: Added.
            * fast/dom/HTMLScriptElement/async-inline-script.html: Added. The async attribute doesn't apply to inline scripts, so check that they execute in order.
            * fast/dom/HTMLScriptElement/async-onbeforeload-expected.txt: Added.
            * fast/dom/HTMLScriptElement/async-onbeforeload.html: Added. Check that onbeforeload events fire synchronously and that they may be cancelled.
            * fast/dom/HTMLScriptElement/async-write-expected.txt: Added.
            * fast/dom/HTMLScriptElement/async-write.html: Added. Check that writes from async scripts are neutralized.
            * fast/dom/HTMLScriptElement/resources/async.js: Added.
            * http/tests/misc/async-and-defer-script-expected.txt: Added.
            * http/tests/misc/async-and-defer-script.html: Added. The async attributes takes precendence over the defer attribute.
            Check that a script which has both async and defer acts as async by ensuring it loads after DOMContentLoaded.
            A deferred scripts would block DCL.
            * http/tests/misc/resources/async-script.js: Added.
            * http/tests/misc/resources/slow-async-script.cgi: Added.
            * http/tests/misc/script-async-expected.txt: Added.
            * http/tests/misc/script-async.html: Added. Test general execution order of deferred scripts.
            The test checks for multiple valid orders since it is indeterminate.
    2010-09-09  Tony Gentilcore  <tonyg at chromium.org>
    
            Reviewed by Adam Barth.
    
            Support <script async> as specified by HTML5
            https://bugs.webkit.org/show_bug.cgi?id=45310
    
            Tests: fast/dom/HTMLScriptElement/async-inline-script.html
                   fast/dom/HTMLScriptElement/async-onbeforeload.html
                   fast/dom/HTMLScriptElement/async-write.html
                   http/tests/misc/async-and-defer-script.html
                   http/tests/misc/script-async.html
    
            * dom/AsyncScriptRunner.cpp:
            (WebCore::AsyncScriptRunner::AsyncScriptRunner):
            (WebCore::AsyncScriptRunner::~AsyncScriptRunner):
            (WebCore::AsyncScriptRunner::executeScriptSoon): Increment the delay count when a task to execute scripts is queued up.
            (WebCore::AsyncScriptRunner::timerFired): decrementLoadEventDelayCount handles calling checkCompleted().
            * dom/AsyncScriptRunner.h:
            (WebCore::AsyncScriptRunner::create):
            * dom/Document.cpp:
            (WebCore::Document::Document):
            * dom/ScriptElement.cpp:
            (WebCore::ScriptElement::insertedIntoDocument): Treats async scripts just like a dynamically inserted script element rather than a parser inserted one.
            * html/parser/HTMLScriptRunner.cpp:
            (WebCore::HTMLScriptRunner::runScript):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@67163 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 22e2695..02af316 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,29 @@
+2010-09-09  Tony Gentilcore  <tonyg at chromium.org>
+
+        Reviewed by Adam Barth.
+
+        Support <script async> as specified by HTML5
+        https://bugs.webkit.org/show_bug.cgi?id=45310
+
+        * fast/dom/Document/readystate.html: Dynamically inserted scripts now block the load event like in FF4. So move the finishJSTest call to load.
+        * fast/dom/Document/readystate-expected.txt: Dynamically inserted script now runs before load during "interactive" phase.
+        * fast/dom/HTMLScriptElement/async-inline-script-expected.txt: Added.
+        * fast/dom/HTMLScriptElement/async-inline-script.html: Added. The async attribute doesn't apply to inline scripts, so check that they execute in order.
+        * fast/dom/HTMLScriptElement/async-onbeforeload-expected.txt: Added.
+        * fast/dom/HTMLScriptElement/async-onbeforeload.html: Added. Check that onbeforeload events fire synchronously and that they may be cancelled.
+        * fast/dom/HTMLScriptElement/async-write-expected.txt: Added.
+        * fast/dom/HTMLScriptElement/async-write.html: Added. Check that writes from async scripts are neutralized.
+        * fast/dom/HTMLScriptElement/resources/async.js: Added.
+        * http/tests/misc/async-and-defer-script-expected.txt: Added.
+        * http/tests/misc/async-and-defer-script.html: Added. The async attributes takes precendence over the defer attribute.
+        Check that a script which has both async and defer acts as async by ensuring it loads after DOMContentLoaded.
+        A deferred scripts would block DCL.
+        * http/tests/misc/resources/async-script.js: Added.
+        * http/tests/misc/resources/slow-async-script.cgi: Added.
+        * http/tests/misc/script-async-expected.txt: Added.
+        * http/tests/misc/script-async.html: Added. Test general execution order of deferred scripts.
+        The test checks for multiple valid orders since it is indeterminate.
+
 2010-09-09  Dirk Pranke  <dpranke at chromium.org>
 
         Unreviewed, expectations update.
diff --git a/LayoutTests/fast/dom/Document/readystate-expected.txt b/LayoutTests/fast/dom/Document/readystate-expected.txt
index 3dfcec7..6046063 100644
--- a/LayoutTests/fast/dom/Document/readystate-expected.txt
+++ b/LayoutTests/fast/dom/Document/readystate-expected.txt
@@ -3,7 +3,7 @@ PASS document.readyState is "loading"
 PASS document.readyState is "loading"
 PASS document.readyState is "interactive"
 PASS document.readyState is "interactive"
-PASS document.readyState is "complete"
+PASS document.readyState is "interactive"
 PASS document.readyState is "complete"
 PASS successfullyParsed is true
 
diff --git a/LayoutTests/fast/dom/Document/readystate.html b/LayoutTests/fast/dom/Document/readystate.html
index 404518d..4751aa7 100644
--- a/LayoutTests/fast/dom/Document/readystate.html
+++ b/LayoutTests/fast/dom/Document/readystate.html
@@ -4,7 +4,7 @@
 <link rel="stylesheet" href="../../js/resources/js-test-style.css">
 <script src="../../js/resources/js-test-pre.js"></script>
 </head>
-<body onload="shouldBeEqualToString('document.readyState', 'complete');">
+<body onload="shouldBeEqualToString('document.readyState', 'complete');finishJSTest();">
 Tests that the document's readyState is set properly at various phases during load.
 <div id="console"></div>
 <script defer src="data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');"></script>
@@ -18,8 +18,7 @@ Tests that the document's readyState is set properly at various phases during lo
     shouldBeEqualToString("document.readyState", "interactive");
 
     var el = document.createElement('script');
-    el.src = "data:text/javascript,shouldBeEqualToString('document.readyState', 'complete');";
-    el.onload = function() { finishJSTest(); }
+    el.src = "data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');";
     document.getElementsByTagName('head')[0].appendChild(el);
   }, false);
 
diff --git a/LayoutTests/fast/dom/HTMLScriptElement/async-inline-script-expected.txt b/LayoutTests/fast/dom/HTMLScriptElement/async-inline-script-expected.txt
new file mode 100755
index 0000000..fcdb225
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLScriptElement/async-inline-script-expected.txt
@@ -0,0 +1,4 @@
+Checks that inline scripts are not async.
+1
+2
+
diff --git a/LayoutTests/fast/dom/HTMLScriptElement/async-inline-script.html b/LayoutTests/fast/dom/HTMLScriptElement/async-inline-script.html
new file mode 100644
index 0000000..3fcd3a5
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLScriptElement/async-inline-script.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+Checks that inline scripts are not async.
+<div id="console"></div>
+<script async>
+  debug(1);
+</script>
+<script>
+  debug(2);
+</script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload-expected.txt b/LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload-expected.txt
new file mode 100755
index 0000000..c468543
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload-expected.txt
@@ -0,0 +1,10 @@
+Checks that async scripts fire onbeforeload immediately and that it is cancellable.
+cancelled onbeforeload async
+onbeforeload async
+onbeforeload external
+async
+load
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload.html b/LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload.html
new file mode 100644
index 0000000..5c197cf
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../js/resources/js-test-style.css">
+<script src="../../js/resources/js-test-pre.js"></script>
+</head>
+<body onload="debug('load');finishJSTest();">
+Checks that async scripts fire onbeforeload immediately and that it is cancellable.
+<div id="console"></div>
+<script>var jsTestIsAsync = true;</script>
+<script src="resources/shouldnotexecute.js" onbeforeload="debug('cancelled onbeforeload async'); return false;" async></script>
+<script src="resources/async.js" onbeforeload="debug('onbeforeload async'); return true;" async></script>
+<script src="data:text/javascript," onbeforeload="debug('onbeforeload external'); return true;"></script>
+<script>var successfullyParsed = true;</script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/editing/selection/5136696-expected.txt b/LayoutTests/fast/dom/HTMLScriptElement/async-write-expected.txt
old mode 100644
new mode 100755
similarity index 100%
copy from LayoutTests/editing/selection/5136696-expected.txt
copy to LayoutTests/fast/dom/HTMLScriptElement/async-write-expected.txt
diff --git a/LayoutTests/fast/dom/HTMLScriptElement/async-write.html b/LayoutTests/fast/dom/HTMLScriptElement/async-write.html
new file mode 100644
index 0000000..444be4f
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLScriptElement/async-write.html
@@ -0,0 +1,6 @@
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+</script>
+PASS
+<script async="ASYNC" src="data:text/javascript,document.write('FAIL');"></script>
diff --git a/LayoutTests/fast/dom/HTMLScriptElement/resources/async.js b/LayoutTests/fast/dom/HTMLScriptElement/resources/async.js
new file mode 100644
index 0000000..6393c73
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLScriptElement/resources/async.js
@@ -0,0 +1 @@
+debug("async");
diff --git a/LayoutTests/http/tests/misc/async-and-defer-script-expected.txt b/LayoutTests/http/tests/misc/async-and-defer-script-expected.txt
new file mode 100755
index 0000000..a7c8ae7
--- /dev/null
+++ b/LayoutTests/http/tests/misc/async-and-defer-script-expected.txt
@@ -0,0 +1,8 @@
+Checks that the async attribute takes precendence over defer.
+DOMContentLoaded
+slowAsync
+load
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/http/tests/misc/async-and-defer-script.html b/LayoutTests/http/tests/misc/async-and-defer-script.html
new file mode 100644
index 0000000..92639e8
--- /dev/null
+++ b/LayoutTests/http/tests/misc/async-and-defer-script.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../js-tests-resources/js-test-style.css">
+<script src="../../js-test-resources/js-test-pre.js"></script>
+</head>
+<body onload="debug('load');finishJSTest();">
+Checks that the async attribute takes precendence over defer.
+<div id="console"></div>
+<script>
+var jsTestIsAsync = true;
+document.addEventListener("DOMContentLoaded", function() {
+    debug("DOMContentLoaded");
+}, false);
+var successfullyParsed = true;
+</script>
+<script defer async src="http://127.0.0.1:8000/misc/resources/slow-async-script.cgi"></script>
+<script src="../../js-test-resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/http/tests/misc/resources/async-script.js b/LayoutTests/http/tests/misc/resources/async-script.js
new file mode 100644
index 0000000..6393c73
--- /dev/null
+++ b/LayoutTests/http/tests/misc/resources/async-script.js
@@ -0,0 +1 @@
+debug("async");
diff --git a/LayoutTests/http/tests/misc/resources/slow-async-script.cgi b/LayoutTests/http/tests/misc/resources/slow-async-script.cgi
new file mode 100755
index 0000000..94ec4e7
--- /dev/null
+++ b/LayoutTests/http/tests/misc/resources/slow-async-script.cgi
@@ -0,0 +1,6 @@
+#!/usr/bin/perl -w
+
+print "Content-type: text/javascript\n\n";
+sleep(1.0);
+print "debug('slowAsync');\n";
+
diff --git a/LayoutTests/http/tests/misc/script-async-expected.txt b/LayoutTests/http/tests/misc/script-async-expected.txt
new file mode 100755
index 0000000..f7d8680
--- /dev/null
+++ b/LayoutTests/http/tests/misc/script-async-expected.txt
@@ -0,0 +1,2 @@
+This tests for proper execution order of scripts with the async attribute https://bugs.webkit.org/show_bug.cgi?id=20710.
+PASS
diff --git a/LayoutTests/http/tests/misc/script-async.html b/LayoutTests/http/tests/misc/script-async.html
new file mode 100644
index 0000000..9456cff
--- /dev/null
+++ b/LayoutTests/http/tests/misc/script-async.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" href="../../js-test-resources/js-test-style.css">
+<script src="../../js-test-resources/js-test-pre.js"></script>
+</head>
+<body onload="test()">
+This tests for proper execution order of scripts with the async attribute <a href="https://bugs.webkit.org/show_bug.cgi?id=20710">https://bugs.webkit.org/show_bug.cgi?id=20710</a>.<hr>
+<div id="console"></div>
+<script type="text/javascript">
+var jsTestIsAsync = true;
+
+function debug(msg)
+{
+    if (!window.status_)
+        window.status_ = '';
+    window.status_ += ' ' + msg + ' ';
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+    debug('DOMContentLoaded');
+}, false);
+
+function test()
+{
+    var expectedA = " async  external  inline  DOMContentLoaded  slowAsync ";
+    var expectedB = " external  async  inline  DOMContentLoaded  slowAsync ";
+    var expectedC = " external  inline  async  DOMContentLoaded  slowAsync ";
+    var expectedD = " external  inline  DOMContentLoaded  async  slowAsync ";
+    var results = "PASS";
+    if (window.status_ != expectedA && window.status_ != expectedB && window.status_ != expectedC && window.status_ != expectedD)
+        results = "FAIL: Expected one of '" + expectedA + "' || '" + expectedB + "' || '" + expectedC + "' || '" + expectedD + "', Actual='" + window.status_ + "'";
+    document.getElementById("console").innerHTML = results;
+    finishJSTest();
+}
+
+var successfullyParsed = true;
+</script>
+<script src="http://127.0.0.1:8000/misc/resources/slow-async-script.cgi" async="ASYNC"></script>
+<script src="http://127.0.0.1:8000/misc/resources/async-script.js" async="ASYNC"></script>
+<script src="http://127.0.0.1:8000/misc/resources/external-script.js"></script>
+<script>
+debug("inline");
+</script>
+<script src="../../js-test-resources/js-test-post.js"></script>
+</body>
+</html>
+
+
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index cbfefcb..6b605d7 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,30 @@
+2010-09-09  Tony Gentilcore  <tonyg at chromium.org>
+
+        Reviewed by Adam Barth.
+
+        Support <script async> as specified by HTML5
+        https://bugs.webkit.org/show_bug.cgi?id=45310
+
+        Tests: fast/dom/HTMLScriptElement/async-inline-script.html
+               fast/dom/HTMLScriptElement/async-onbeforeload.html
+               fast/dom/HTMLScriptElement/async-write.html
+               http/tests/misc/async-and-defer-script.html
+               http/tests/misc/script-async.html
+
+        * dom/AsyncScriptRunner.cpp:
+        (WebCore::AsyncScriptRunner::AsyncScriptRunner):
+        (WebCore::AsyncScriptRunner::~AsyncScriptRunner):
+        (WebCore::AsyncScriptRunner::executeScriptSoon): Increment the delay count when a task to execute scripts is queued up.
+        (WebCore::AsyncScriptRunner::timerFired): decrementLoadEventDelayCount handles calling checkCompleted().
+        * dom/AsyncScriptRunner.h:
+        (WebCore::AsyncScriptRunner::create):
+        * dom/Document.cpp:
+        (WebCore::Document::Document):
+        * dom/ScriptElement.cpp:
+        (WebCore::ScriptElement::insertedIntoDocument): Treats async scripts just like a dynamically inserted script element rather than a parser inserted one.
+        * html/parser/HTMLScriptRunner.cpp:
+        (WebCore::HTMLScriptRunner::runScript):
+
 2010-09-09  Alexey Marinichev  <amarinichev at chromium.org>
 
         Reviewed by James Robinson.
diff --git a/WebCore/dom/AsyncScriptRunner.cpp b/WebCore/dom/AsyncScriptRunner.cpp
index 96036a1..86251b8 100644
--- a/WebCore/dom/AsyncScriptRunner.cpp
+++ b/WebCore/dom/AsyncScriptRunner.cpp
@@ -27,20 +27,25 @@
 #include "AsyncScriptRunner.h"
 
 #include "CachedScript.h"
+#include "Document.h"
 #include "Element.h"
 #include "ScriptElement.h"
 
 namespace WebCore {
 
-AsyncScriptRunner::AsyncScriptRunner()
-    : m_timer(this, &AsyncScriptRunner::timerFired)
+AsyncScriptRunner::AsyncScriptRunner(Document* document)
+    : m_document(document)
+    , m_timer(this, &AsyncScriptRunner::timerFired)
 {
+    ASSERT(document);
 }
 
 AsyncScriptRunner::~AsyncScriptRunner()
 {
-    for (size_t i = 0; i < m_scriptsToExecuteSoon.size(); ++i)
-         m_scriptsToExecuteSoon[i].first->element()->deref(); // Balances ref() in executeScriptSoon().
+    for (size_t i = 0; i < m_scriptsToExecuteSoon.size(); ++i) {
+        m_scriptsToExecuteSoon[i].first->element()->deref(); // Balances ref() in executeScriptSoon().
+        m_document->decrementLoadEventDelayCount();
+    }
 }
 
 void AsyncScriptRunner::executeScriptSoon(ScriptElementData* data, CachedResourceHandle<CachedScript> cachedScript)
@@ -51,6 +56,7 @@ void AsyncScriptRunner::executeScriptSoon(ScriptElementData* data, CachedResourc
     ASSERT(element);
     ASSERT(element->inDocument());
 
+    m_document->incrementLoadEventDelayCount();
     m_scriptsToExecuteSoon.append(make_pair(data, cachedScript));
     element->ref(); // Balanced by deref()s in timerFired() and dtor.
     if (!m_timer.isActive())
@@ -78,6 +84,7 @@ void AsyncScriptRunner::timerFired(Timer<AsyncScriptRunner>* timer)
     for (size_t i = 0; i < size; ++i) {
         scripts[i].first->execute(scripts[i].second.get());
         scripts[i].first->element()->deref(); // Balances ref() in executeScriptSoon().
+        m_document->decrementLoadEventDelayCount();
     }
 }
 
diff --git a/WebCore/dom/AsyncScriptRunner.h b/WebCore/dom/AsyncScriptRunner.h
index 8b75e06..57bee84 100644
--- a/WebCore/dom/AsyncScriptRunner.h
+++ b/WebCore/dom/AsyncScriptRunner.h
@@ -35,11 +35,12 @@
 namespace WebCore {
 
 class CachedScript;
+class Document;
 class ScriptElementData;
     
 class AsyncScriptRunner : public Noncopyable {
 public:
-    static PassOwnPtr<AsyncScriptRunner> create() { return new AsyncScriptRunner(); }
+    static PassOwnPtr<AsyncScriptRunner> create(Document* document) { return new AsyncScriptRunner(document); }
     ~AsyncScriptRunner();
 
     void executeScriptSoon(ScriptElementData*, CachedResourceHandle<CachedScript>);
@@ -48,10 +49,11 @@ public:
     void resume();
 
 private:
-    AsyncScriptRunner();
+    AsyncScriptRunner(Document*);
 
     void timerFired(Timer<AsyncScriptRunner>*);
 
+    Document* m_document;
     Vector<std::pair<ScriptElementData*, CachedResourceHandle<CachedScript> > > m_scriptsToExecuteSoon;
     Timer<AsyncScriptRunner> m_timer;
 };
diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
index ba02dec..1c3cc1c 100644
--- a/WebCore/dom/Document.cpp
+++ b/WebCore/dom/Document.cpp
@@ -371,7 +371,7 @@ Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML)
     , m_startTime(currentTime())
     , m_overMinimumLayoutThreshold(false)
     , m_extraLayoutDelay(0)
-    , m_asyncScriptRunner(AsyncScriptRunner::create())
+    , m_asyncScriptRunner(AsyncScriptRunner::create(this))
     , m_xmlVersion("1.0")
     , m_xmlStandalone(false)
     , m_savedRenderer(0)
diff --git a/WebCore/dom/ScriptElement.cpp b/WebCore/dom/ScriptElement.cpp
index abc4c63..bb46f0a 100644
--- a/WebCore/dom/ScriptElement.cpp
+++ b/WebCore/dom/ScriptElement.cpp
@@ -52,7 +52,7 @@ namespace WebCore {
 
 void ScriptElement::insertedIntoDocument(ScriptElementData& data, const String& sourceUrl)
 {
-    if (data.createdByParser())
+    if (data.createdByParser() && !data.isAsynchronous())
         return;
 
     // http://www.whatwg.org/specs/web-apps/current-work/#script
diff --git a/WebCore/html/parser/HTMLScriptRunner.cpp b/WebCore/html/parser/HTMLScriptRunner.cpp
index e314a21..e1fc120 100644
--- a/WebCore/html/parser/HTMLScriptRunner.cpp
+++ b/WebCore/html/parser/HTMLScriptRunner.cpp
@@ -321,7 +321,9 @@ void HTMLScriptRunner::runScript(Element* script, int startingLineNumber)
         notImplemented(); // event for support
 
         if (script->hasAttribute(srcAttr)) {
-            // FIXME: Handle async.
+            if (script->hasAttribute(asyncAttr)) // Async takes precendence over defer.
+                return; // Asynchronous scripts handle themselves.
+
             if (script->hasAttribute(deferAttr))
                 requestDeferredScript(script);
             else

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list