• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  *
19  */
20 
21 #ifndef ScriptElement_h
22 #define ScriptElement_h
23 
24 #include "CachedResourceClient.h"
25 #include "CachedResourceHandle.h"
26 
27 namespace WebCore {
28 
29 class CachedScript;
30 class Element;
31 class ScriptElementData;
32 class ScriptSourceCode;
33 
34 class ScriptElement {
35 public:
ScriptElement()36     ScriptElement() { }
~ScriptElement()37     virtual ~ScriptElement() { }
38 
39     virtual String scriptContent() const = 0;
40 
41     virtual String sourceAttributeValue() const = 0;
42     virtual String charsetAttributeValue() const = 0;
43     virtual String typeAttributeValue() const = 0;
44     virtual String languageAttributeValue() const = 0;
45     virtual String forAttributeValue() const = 0;
46 
47     virtual void dispatchLoadEvent() = 0;
48     virtual void dispatchErrorEvent() = 0;
49 
50     // A charset for loading the script (may be overridden by HTTP headers or a BOM).
51     virtual String scriptCharset() const = 0;
52 
53     virtual bool shouldExecuteAsJavaScript() const = 0;
54 
55 protected:
56     // Helper functions used by our parent classes.
57     static void insertedIntoDocument(ScriptElementData&, const String& sourceUrl);
58     static void removedFromDocument(ScriptElementData&);
59     static void childrenChanged(ScriptElementData&);
60     static void finishParsingChildren(ScriptElementData&, const String& sourceUrl);
61     static void handleSourceAttribute(ScriptElementData&, const String& sourceUrl);
62 };
63 
64 // HTML/SVGScriptElement hold this struct as member variable
65 // and pass it to the static helper functions in ScriptElement
66 class ScriptElementData : private CachedResourceClient {
67 public:
68     ScriptElementData(ScriptElement*, Element*);
69     virtual ~ScriptElementData();
70 
71     bool ignoresLoadRequest() const;
72     bool shouldExecuteAsJavaScript() const;
73 
74     String scriptContent() const;
75     String scriptCharset() const;
76 
element()77     Element* element() const { return m_element; }
createdByParser()78     bool createdByParser() const { return m_createdByParser; }
setCreatedByParser(bool value)79     void setCreatedByParser(bool value) { m_createdByParser = value; }
haveFiredLoadEvent()80     bool haveFiredLoadEvent() const { return m_firedLoad; }
setHaveFiredLoadEvent(bool firedLoad)81     void setHaveFiredLoadEvent(bool firedLoad) { m_firedLoad = firedLoad; }
82 
83     void requestScript(const String& sourceUrl);
84     void evaluateScript(const ScriptSourceCode&);
85     void stopLoadRequest();
86 
87     void execute(CachedScript*);
88 
89 private:
90     virtual void notifyFinished(CachedResource*);
91 
92 private:
93     ScriptElement* m_scriptElement;
94     Element* m_element;
95     CachedResourceHandle<CachedScript> m_cachedScript;
96     bool m_createdByParser;
97     bool m_requested;
98     bool m_evaluated;
99     bool m_firedLoad;
100 };
101 
102 ScriptElement* toScriptElement(Element*);
103 
104 }
105 
106 #endif
107