Title: [87361] trunk/Source/WebCore
Revision
87361
Author
[email protected]
Date
2011-05-25 23:20:35 -0700 (Wed, 25 May 2011)

Log Message

2011-05-25  James Simonsen  <[email protected]>

        Reviewed by Adam Barth.

        Add site-specific hack for zipcar.com with old versions of requirejs.
        https://bugs.webkit.org/show_bug.cgi?id=61321

        Old versions of requirejs (< 0.15.0) try to load scripts in parallel but execute them in
        order. This used to work in webkit by setting a bogus script type (script/cache), then
        changing the type to a valid one when they wanted to execute it. This hack translates the
        behavior into the new API (by disabling forceAsync).

        * html/HTMLScriptElement.cpp:
        (WebCore::needsOldRequirejsQuirk): Added.
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        If hack is needed, set a proper script type so script loads.
        If script isn't async, disable forceAsync so script executes in order.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (87360 => 87361)


--- trunk/Source/WebCore/ChangeLog	2011-05-26 06:15:19 UTC (rev 87360)
+++ trunk/Source/WebCore/ChangeLog	2011-05-26 06:20:35 UTC (rev 87361)
@@ -1,3 +1,21 @@
+2011-05-25  James Simonsen  <[email protected]>
+
+        Reviewed by Adam Barth.
+
+        Add site-specific hack for zipcar.com with old versions of requirejs.
+        https://bugs.webkit.org/show_bug.cgi?id=61321
+
+        Old versions of requirejs (< 0.15.0) try to load scripts in parallel but execute them in
+        order. This used to work in webkit by setting a bogus script type (script/cache), then
+        changing the type to a valid one when they wanted to execute it. This hack translates the
+        behavior into the new API (by disabling forceAsync).
+
+        * html/HTMLScriptElement.cpp:
+        (WebCore::needsOldRequirejsQuirk): Added.
+        (WebCore::HTMLScriptElement::insertedIntoDocument):
+        If hack is needed, set a proper script type so script loads.
+        If script isn't async, disable forceAsync so script executes in order.
+
 2011-05-25  Andreas Kling  <[email protected]>
 
         Reviewed by David Levin.

Modified: trunk/Source/WebCore/html/HTMLScriptElement.cpp (87360 => 87361)


--- trunk/Source/WebCore/html/HTMLScriptElement.cpp	2011-05-26 06:15:19 UTC (rev 87360)
+++ trunk/Source/WebCore/html/HTMLScriptElement.cpp	2011-05-26 06:20:35 UTC (rev 87361)
@@ -29,6 +29,7 @@
 #include "EventNames.h"
 #include "HTMLNames.h"
 #include "ScriptEventListener.h"
+#include "Settings.h"
 #include "Text.h"
 
 namespace WebCore {
@@ -81,8 +82,33 @@
         HTMLElement::parseMappedAttribute(attr);
 }
 
+static bool needsOldRequirejsQuirk(HTMLScriptElement* element)
+{
+    if (element->fastGetAttribute(typeAttr) != "script/cache")
+        return false;
+
+    Document* document = element->document();
+
+    const KURL& url = ""
+    if (!equalIgnoringCase(url.host(), "www.zipcar.com"))
+        return false;
+
+    Settings* settings = document->settings();
+    if (!settings)
+        return false;
+    if (!settings->needsSiteSpecificQuirks())
+        return false;
+
+    return true;
+}
+
 void HTMLScriptElement::insertedIntoDocument()
 {
+    if (needsOldRequirejsQuirk(this)) {
+        if (!asyncAttributeValue())
+            handleAsyncAttribute(); // Clear forceAsync, so this script loads in parallel, but executes in order.
+        setAttribute(typeAttr, "text/_javascript_");
+    }
     HTMLElement::insertedIntoDocument();
     ScriptElement::insertedIntoDocument();
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to