WebCore/dom/ScriptElement.h
changeset 0 4f2f89ce4247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebCore/dom/ScriptElement.h	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ScriptElement_h
+#define ScriptElement_h
+
+#include "CachedResourceClient.h"
+#include "CachedResourceHandle.h"
+
+namespace WebCore {
+
+class CachedScript;
+class Element;
+class ScriptElementData;
+class ScriptSourceCode;
+
+class ScriptElement {
+public:
+    ScriptElement() { }
+    virtual ~ScriptElement() { }
+
+    virtual String scriptContent() const = 0;
+
+    virtual String sourceAttributeValue() const = 0;
+    virtual String charsetAttributeValue() const = 0;
+    virtual String typeAttributeValue() const = 0;
+    virtual String languageAttributeValue() const = 0;
+    virtual String forAttributeValue() const = 0;
+    virtual String eventAttributeValue() const = 0;
+    virtual bool asyncAttributeValue() const = 0;
+    virtual bool deferAttributeValue() const = 0;
+
+    virtual void dispatchLoadEvent() = 0;
+    virtual void dispatchErrorEvent() = 0;
+
+    // A charset for loading the script (may be overridden by HTTP headers or a BOM).
+    virtual String scriptCharset() const = 0;
+
+    virtual bool shouldExecuteAsJavaScript() const = 0;
+
+protected:
+    // Helper functions used by our parent classes.
+    static void insertedIntoDocument(ScriptElementData&, const String& sourceUrl);
+    static void removedFromDocument(ScriptElementData&);
+    static void childrenChanged(ScriptElementData&);
+    static void finishParsingChildren(ScriptElementData&, const String& sourceUrl);
+    static void handleSourceAttribute(ScriptElementData&, const String& sourceUrl);
+};
+
+// HTML/SVGScriptElement hold this struct as member variable
+// and pass it to the static helper functions in ScriptElement
+class ScriptElementData : private CachedResourceClient {
+public:
+    ScriptElementData(ScriptElement*, Element*);
+    virtual ~ScriptElementData();
+
+    bool ignoresLoadRequest() const;
+    bool shouldExecuteAsJavaScript() const;
+
+    String scriptContent() const;
+    String scriptCharset() const;
+    bool isAsynchronous() const;
+    bool isDeferred() const;
+
+    Element* element() const { return m_element; }
+    bool createdByParser() const { return m_createdByParser; }
+    void setCreatedByParser(bool value) { m_createdByParser = value; }
+    bool haveFiredLoadEvent() const { return m_firedLoad; }
+    void setHaveFiredLoadEvent(bool firedLoad) { m_firedLoad = firedLoad; }
+
+    void requestScript(const String& sourceUrl);
+    void evaluateScript(const ScriptSourceCode&);
+    void stopLoadRequest();
+
+    void execute(CachedScript*);
+
+private:
+    virtual void notifyFinished(CachedResource*);
+
+private:
+    ScriptElement* m_scriptElement;
+    Element* m_element;
+    CachedResourceHandle<CachedScript> m_cachedScript;
+    bool m_createdByParser; // HTML5: "parser-inserted"
+    bool m_requested;
+    bool m_evaluated; // HTML5: "already started"
+    bool m_firedLoad;
+};
+
+ScriptElement* toScriptElement(Element*);
+
+}
+
+#endif