OLD | NEW |
1 // Copyright 2011, Google Inc. | 1 // Copyright 2011, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 12 matching lines...) Expand all Loading... |
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 | 29 |
30 #ifndef DartApplicationLoader_h | 30 #ifndef DartApplicationLoader_h |
31 #define DartApplicationLoader_h | 31 #define DartApplicationLoader_h |
32 | 32 |
| 33 #include "bindings/dart/DartAsyncLoader.h" |
33 #include "bindings/v8/ScriptSourceCode.h" | 34 #include "bindings/v8/ScriptSourceCode.h" |
34 #include "core/html/HTMLScriptElement.h" | 35 #include "core/html/HTMLScriptElement.h" |
35 #include "core/html/VoidCallback.h" | 36 #include "core/html/VoidCallback.h" |
36 #include <dart_api.h> | 37 #include <dart_api.h> |
37 #include <wtf/HashMap.h> | 38 #include <wtf/HashMap.h> |
38 #include <wtf/HashSet.h> | 39 #include <wtf/HashSet.h> |
39 #include <wtf/text/StringHash.h> | 40 #include <wtf/text/StringHash.h> |
40 | 41 |
41 namespace WebCore { | 42 namespace WebCore { |
42 | 43 |
43 class KURL; | 44 class KURL; |
44 | 45 |
45 class DartApplicationLoader : public RefCounted<DartApplicationLoader> { | 46 class DartApplicationLoader : public RefCounted<DartApplicationLoader> { |
46 public: | 47 public: |
47 class ErrorEventDispatcher : public RefCounted<ErrorEventDispatcher> { | 48 class ErrorEventDispatcher : public RefCounted<ErrorEventDispatcher> { |
48 public: | 49 public: |
49 virtual ~ErrorEventDispatcher() { } | 50 virtual ~ErrorEventDispatcher() { } |
50 virtual void dispatchErrorEvent() = 0; | 51 virtual void dispatchErrorEvent() = 0; |
51 }; | 52 }; |
52 | 53 |
53 DartApplicationLoader(Dart_Isolate, Document*, PassRefPtr<ErrorEventDispatch
er>, PassRefPtr<VoidCallback> = 0, bool domEnabled = true); | 54 DartApplicationLoader(Dart_Isolate, Document*, PassRefPtr<ErrorEventDispatch
er>, PassRefPtr<DartAsyncLoader>, bool domEnabled = true); |
54 | 55 |
55 void loadScriptResource(const String& url); | 56 void load(const String& url, const String& source, int startLineNumber); |
56 void load(const String& url, const String& source, WTF::OrdinalNumber startL
ineNumber); | |
57 const String& mainLibraryURL() const { return m_libraryUrl; } | 57 const String& mainLibraryURL() const { return m_libraryUrl; } |
58 | 58 |
59 Document* document() { return m_originDocument; } | 59 Document* document() { return m_originDocument; } |
60 | 60 |
61 static void installLibraryTagHandlerForCurrentIsolate(); | 61 static void installLibraryTagHandlerForCurrentIsolate(); |
62 | 62 |
63 private: | 63 private: |
64 void scriptLoadError(String failedUrl); | 64 void scriptLoadError(String failedUrl); |
65 void loadMainScript(const String& url, const String& source, WTF::OrdinalNum
ber startLineNumber); | 65 void loadMainScript(const String& url, const String& source, int startLineNu
mber); |
66 | 66 |
67 static Dart_Handle libraryTagHandlerCallback(Dart_LibraryTag, Dart_Handle li
brary, Dart_Handle urlHandle); | 67 static Dart_Handle libraryTagHandlerCallback(Dart_LibraryTag, Dart_Handle li
brary, Dart_Handle urlHandle); |
68 static Dart_Handle CanonicalizeUrl(Dart_Handle library, Dart_Handle urlHandl
e, String url); | |
69 Dart_Handle libraryTagHandler(Dart_LibraryTag, Dart_Handle library, Dart_Han
dle urlHandle, String url); | 68 Dart_Handle libraryTagHandler(Dart_LibraryTag, Dart_Handle library, Dart_Han
dle urlHandle, String url); |
70 | 69 |
71 Dart_Isolate m_isolate; | 70 Dart_Isolate m_isolate; |
72 // Client must ensure that DartApplicationLoader doesn't outlive correspondi
ng document. | 71 // Client must ensure that DartApplicationLoader doesn't outlive correspondi
ng document. |
73 Document* m_originDocument; | 72 Document* m_originDocument; |
74 RefPtr<ErrorEventDispatcher> m_errorEventDispatcher; | 73 RefPtr<ErrorEventDispatcher> m_errorEventDispatcher; |
75 String m_libraryUrl; | 74 String m_libraryUrl; |
76 | 75 |
77 void loadScriptFromSnapshot(const String& url, const uint8_t* snapshot, intp
tr_t snapshotSize); | 76 void loadScriptFromSnapshot(const String& url, const uint8_t* snapshot, intp
tr_t snapshotSize); |
78 void loadLibrary(const String& url, const String& source); | 77 void loadLibrary(const String& url, const String& source); |
79 void loadSource(const String& url, const String& source); | |
80 void callEntryPoint(); | 78 void callEntryPoint(); |
81 | 79 |
82 Dart_Handle topLevelLibrary(); | 80 Dart_Handle topLevelLibrary(); |
83 | 81 |
84 void reportDartError(Dart_Handle); | 82 void reportDartError(Dart_Handle); |
85 | 83 |
86 typedef HashSet<String> UrlSet; | |
87 typedef HashMap<String, UrlSet*> UrlMultiMap; | |
88 | |
89 void add(UrlMultiMap&, const String& key, const String& value); | |
90 | |
91 // FIXME: we can get rid of imported libs and sources map. | |
92 UrlSet m_importedLibraries; | |
93 UrlMultiMap m_importersForSource; | |
94 | |
95 bool m_mainScriptHasBeenLoaded; | |
96 | |
97 bool m_scriptHasError; | 84 bool m_scriptHasError; |
98 | |
99 RefPtr<VoidCallback> m_applicationLoadedCallback; | |
100 bool m_domEnabled; | 85 bool m_domEnabled; |
101 | 86 |
102 friend class ScriptLoadCallback; | 87 RefPtr<DartAsyncLoader> m_asyncLoader; |
103 }; | 88 }; |
104 | 89 |
105 } | 90 } |
106 | 91 |
107 #endif // DartApplicationLoader_h | 92 #endif // DartApplicationLoader_h |
OLD | NEW |