OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef ScriptModule_h | 5 #ifndef ScriptModule_h |
6 #define ScriptModule_h | 6 #define ScriptModule_h |
7 | 7 |
8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
9 #include "bindings/core/v8/SharedPersistent.h" | 9 #include "bindings/core/v8/SharedPersistent.h" |
10 #include "core/CoreExport.h" | 10 #include "core/CoreExport.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 // Currently all ScriptModule users can easily access its context Modulator, so | 23 // Currently all ScriptModule users can easily access its context Modulator, so |
24 // we use it to fill ScriptState in. | 24 // we use it to fill ScriptState in. |
25 class CORE_EXPORT ScriptModule final { | 25 class CORE_EXPORT ScriptModule final { |
26 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 26 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
27 | 27 |
28 public: | 28 public: |
29 static ScriptModule compile(v8::Isolate*, | 29 static ScriptModule compile(v8::Isolate*, |
30 const String& source, | 30 const String& source, |
31 const String& fileName); | 31 const String& fileName); |
32 | 32 |
| 33 // TODO(kouhei): Remove copy ctor |
33 ScriptModule() {} | 34 ScriptModule() {} |
34 ScriptModule(const ScriptModule& module) : m_module(module.m_module) {} | 35 ScriptModule(WTF::HashTableDeletedValueType) |
| 36 : m_module(WTF::HashTableDeletedValue) {} |
35 ~ScriptModule(); | 37 ~ScriptModule(); |
36 | 38 |
37 // Returns exception, if any. | 39 // Returns exception, if any. |
38 ScriptValue instantiate(ScriptState*); | 40 ScriptValue instantiate(ScriptState*); |
39 void evaluate(ScriptState*); | 41 void evaluate(ScriptState*); |
40 | 42 |
41 Vector<String> moduleRequests(ScriptState*); | 43 Vector<String> moduleRequests(ScriptState*); |
42 | 44 |
| 45 bool isHashTableDeletedValue() const { |
| 46 return m_module.isHashTableDeletedValue(); |
| 47 } |
| 48 |
| 49 bool operator==(const blink::ScriptModule& other) const { |
| 50 if (isHashTableDeletedValue() && other.isHashTableDeletedValue()) |
| 51 return true; |
| 52 |
| 53 if (isHashTableDeletedValue() || other.isHashTableDeletedValue()) |
| 54 return false; |
| 55 |
| 56 blink::SharedPersistent<v8::Module>* left = m_module.get(); |
| 57 blink::SharedPersistent<v8::Module>* right = other.m_module.get(); |
| 58 if (left == right) |
| 59 return true; |
| 60 if (!left || !right) |
| 61 return false; |
| 62 return *left == *right; |
| 63 } |
| 64 |
| 65 bool operator!=(const blink::ScriptModule& other) const { |
| 66 return !(*this == other); |
| 67 } |
| 68 |
43 bool isNull() const { return !m_module || m_module->isEmpty(); } | 69 bool isNull() const { return !m_module || m_module->isEmpty(); } |
44 | 70 |
45 private: | 71 private: |
46 ScriptModule(v8::Isolate*, v8::Local<v8::Module>); | 72 ScriptModule(v8::Isolate*, v8::Local<v8::Module>); |
47 | 73 |
48 static v8::MaybeLocal<v8::Module> resolveModuleCallback( | 74 static v8::MaybeLocal<v8::Module> resolveModuleCallback( |
49 v8::Local<v8::Context>, | 75 v8::Local<v8::Context>, |
50 v8::Local<v8::String> specifier, | 76 v8::Local<v8::String> specifier, |
51 v8::Local<v8::Module> referrer); | 77 v8::Local<v8::Module> referrer); |
52 | 78 |
53 RefPtr<SharedPersistent<v8::Module>> m_module; | 79 RefPtr<SharedPersistent<v8::Module>> m_module; |
| 80 unsigned m_identityHash = 0; |
| 81 |
| 82 friend struct ScriptModuleHash; |
| 83 }; |
| 84 |
| 85 struct ScriptModuleHash { |
| 86 STATIC_ONLY(ScriptModuleHash); |
| 87 |
| 88 public: |
| 89 static unsigned hash(const blink::ScriptModule& key) { |
| 90 return key.m_identityHash; |
| 91 } |
| 92 |
| 93 static bool equal(const blink::ScriptModule& a, |
| 94 const blink::ScriptModule& b) { |
| 95 return a == b; |
| 96 } |
| 97 |
| 98 static constexpr bool safeToCompareToEmptyOrDeleted = true; |
54 }; | 99 }; |
55 | 100 |
56 } // namespace blink | 101 } // namespace blink |
57 | 102 |
| 103 namespace WTF { |
| 104 |
| 105 template <> |
| 106 struct DefaultHash<blink::ScriptModule> { |
| 107 using Hash = blink::ScriptModuleHash; |
| 108 }; |
| 109 |
| 110 template <> |
| 111 struct HashTraits<blink::ScriptModule> |
| 112 : public SimpleClassHashTraits<blink::ScriptModule> {}; |
| 113 |
| 114 } // namespace WTF |
| 115 |
58 #endif // ScriptModule_h | 116 #endif // ScriptModule_h |
OLD | NEW |