OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
11 * notice, this list of conditions and the following disclaimer in the | 11 * notice, this list of conditions and the following disclaimer in the |
12 * documentation and/or other materials provided with the distribution. | 12 * documentation and/or other materials provided with the distribution. |
13 * | 13 * |
14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY | 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 */ | 24 */ |
25 | 25 |
26 #include "bindings/modules/v8/V8BindingForModules.h" | 26 #include "bindings/modules/v8/V8BindingForModules.h" |
27 | 27 |
28 #include "bindings/core/v8/IsolatedScriptController.h" | |
28 #include "bindings/core/v8/SerializedScriptValue.h" | 29 #include "bindings/core/v8/SerializedScriptValue.h" |
29 #include "bindings/core/v8/SerializedScriptValueFactory.h" | 30 #include "bindings/core/v8/SerializedScriptValueFactory.h" |
30 #include "bindings/core/v8/V8ArrayBuffer.h" | 31 #include "bindings/core/v8/V8ArrayBuffer.h" |
31 #include "bindings/core/v8/V8ArrayBufferView.h" | 32 #include "bindings/core/v8/V8ArrayBufferView.h" |
32 #include "bindings/core/v8/V8Binding.h" | 33 #include "bindings/core/v8/V8Binding.h" |
33 #include "bindings/core/v8/V8Blob.h" | 34 #include "bindings/core/v8/V8Blob.h" |
34 #include "bindings/core/v8/V8DOMStringList.h" | 35 #include "bindings/core/v8/V8DOMStringList.h" |
35 #include "bindings/core/v8/V8File.h" | 36 #include "bindings/core/v8/V8File.h" |
36 #include "bindings/core/v8/V8Uint8Array.h" | 37 #include "bindings/core/v8/V8Uint8Array.h" |
37 #include "bindings/modules/v8/ToV8ForModules.h" | 38 #include "bindings/modules/v8/ToV8ForModules.h" |
38 #include "bindings/modules/v8/V8IDBCursor.h" | 39 #include "bindings/modules/v8/V8IDBCursor.h" |
39 #include "bindings/modules/v8/V8IDBCursorWithValue.h" | 40 #include "bindings/modules/v8/V8IDBCursorWithValue.h" |
40 #include "bindings/modules/v8/V8IDBDatabase.h" | 41 #include "bindings/modules/v8/V8IDBDatabase.h" |
41 #include "bindings/modules/v8/V8IDBIndex.h" | 42 #include "bindings/modules/v8/V8IDBIndex.h" |
42 #include "bindings/modules/v8/V8IDBKeyRange.h" | 43 #include "bindings/modules/v8/V8IDBKeyRange.h" |
43 #include "bindings/modules/v8/V8IDBObjectStore.h" | 44 #include "bindings/modules/v8/V8IDBObjectStore.h" |
45 #include "bindings/modules/v8/V8WorkletGlobalScope.h" | |
44 #include "core/dom/DOMArrayBuffer.h" | 46 #include "core/dom/DOMArrayBuffer.h" |
45 #include "core/dom/DOMArrayBufferView.h" | 47 #include "core/dom/DOMArrayBufferView.h" |
48 #include "core/dom/ExecutionContext.h" | |
46 #include "modules/indexeddb/IDBKey.h" | 49 #include "modules/indexeddb/IDBKey.h" |
47 #include "modules/indexeddb/IDBKeyPath.h" | 50 #include "modules/indexeddb/IDBKeyPath.h" |
48 #include "modules/indexeddb/IDBKeyRange.h" | 51 #include "modules/indexeddb/IDBKeyRange.h" |
49 #include "modules/indexeddb/IDBTracing.h" | 52 #include "modules/indexeddb/IDBTracing.h" |
50 #include "modules/indexeddb/IDBValue.h" | 53 #include "modules/indexeddb/IDBValue.h" |
54 #include "modules/worklet/WorkletGlobalScope.h" | |
51 #include "platform/RuntimeEnabledFeatures.h" | 55 #include "platform/RuntimeEnabledFeatures.h" |
52 #include "platform/SharedBuffer.h" | 56 #include "platform/SharedBuffer.h" |
53 #include "wtf/MathExtras.h" | 57 #include "wtf/MathExtras.h" |
54 #include "wtf/Vector.h" | 58 #include "wtf/Vector.h" |
55 | 59 |
56 namespace blink { | 60 namespace blink { |
57 | 61 |
58 static v8::Local<v8::Value> deserializeIDBValueData(v8::Isolate*, const IDBValue *); | 62 static v8::Local<v8::Value> deserializeIDBValueData(v8::Isolate*, const IDBValue *); |
59 static v8::Local<v8::Value> deserializeIDBValue(v8::Isolate*, v8::Local<v8::Obje ct> creationContext, const IDBValue*); | 63 static v8::Local<v8::Value> deserializeIDBValue(v8::Isolate*, v8::Local<v8::Obje ct> creationContext, const IDBValue*); |
60 static v8::Local<v8::Value> deserializeIDBValueArray(v8::Isolate*, v8::Local<v8: :Object> creationContext, const Vector<RefPtr<IDBValue>>*); | 64 static v8::Local<v8::Value> deserializeIDBValueArray(v8::Isolate*, v8::Local<v8: :Object> creationContext, const Vector<RefPtr<IDBValue>>*); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
152 case IDBAny::IntegerType: | 156 case IDBAny::IntegerType: |
153 return v8::Number::New(isolate, impl->integer()); | 157 return v8::Number::New(isolate, impl->integer()); |
154 case IDBAny::KeyType: | 158 case IDBAny::KeyType: |
155 return toV8(impl->key(), creationContext, isolate); | 159 return toV8(impl->key(), creationContext, isolate); |
156 } | 160 } |
157 | 161 |
158 ASSERT_NOT_REACHED(); | 162 ASSERT_NOT_REACHED(); |
159 return v8::Undefined(isolate); | 163 return v8::Undefined(isolate); |
160 } | 164 } |
161 | 165 |
166 v8::Local<v8::Value> toV8(WorkletGlobalScope* impl, v8::Local<v8::Object> creati onContext, v8::Isolate* isolate) | |
167 { | |
168 // Notice that we explicitly ignore creationContext because the | |
169 // WorkletGlobalScope has its own creationContext. | |
170 | |
171 if (UNLIKELY(!impl)) | |
172 return v8::Null(isolate); | |
173 | |
174 IsolatedScriptController* script = impl->script(); | |
175 if (!script) | |
176 return v8::Null(isolate); | |
177 | |
178 v8::Local<v8::Object> global = script->context()->Global(); | |
179 ASSERT(!global.IsEmpty()); | |
180 return global; | |
181 } | |
182 | |
162 static const size_t maximumDepth = 2000; | 183 static const size_t maximumDepth = 2000; |
163 | 184 |
164 static IDBKey* createIDBKeyFromValue(v8::Isolate* isolate, v8::Local<v8::Value> value, Vector<v8::Local<v8::Array>>& stack, ExceptionState& exceptionState, bool allowExperimentalTypes = false) | 185 static IDBKey* createIDBKeyFromValue(v8::Isolate* isolate, v8::Local<v8::Value> value, Vector<v8::Local<v8::Array>>& stack, ExceptionState& exceptionState, bool allowExperimentalTypes = false) |
165 { | 186 { |
166 if (value->IsNumber() && !std::isnan(value.As<v8::Number>()->Value())) | 187 if (value->IsNumber() && !std::isnan(value.As<v8::Number>()->Value())) |
167 return IDBKey::createNumber(value.As<v8::Number>()->Value()); | 188 return IDBKey::createNumber(value.As<v8::Number>()->Value()); |
168 if (value->IsString()) | 189 if (value->IsString()) |
169 return IDBKey::createString(toCoreString(value.As<v8::String>())); | 190 return IDBKey::createString(toCoreString(value.As<v8::String>())); |
170 if (value->IsDate() && !std::isnan(value.As<v8::Date>()->ValueOf())) | 191 if (value->IsDate() && !std::isnan(value.As<v8::Date>()->ValueOf())) |
171 return IDBKey::createDate(value.As<v8::Date>()->ValueOf()); | 192 return IDBKey::createDate(value.As<v8::Date>()->ValueOf()); |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
509 IDBKey* expectedKey = createIDBKeyFromValueAndKeyPath(isolate, scriptValue.v 8Value(), value->keyPath(), exceptionState, allowExperimentalTypes); | 530 IDBKey* expectedKey = createIDBKeyFromValueAndKeyPath(isolate, scriptValue.v 8Value(), value->keyPath(), exceptionState, allowExperimentalTypes); |
510 ASSERT(!exceptionState.hadException()); | 531 ASSERT(!exceptionState.hadException()); |
511 if (expectedKey && expectedKey->isEqual(value->primaryKey())) | 532 if (expectedKey && expectedKey->isEqual(value->primaryKey())) |
512 return; | 533 return; |
513 | 534 |
514 bool injected = injectV8KeyIntoV8Value(isolate, keyValue.v8Value(), scriptVa lue.v8Value(), value->keyPath()); | 535 bool injected = injectV8KeyIntoV8Value(isolate, keyValue.v8Value(), scriptVa lue.v8Value(), value->keyPath()); |
515 ASSERT_UNUSED(injected, injected); | 536 ASSERT_UNUSED(injected, injected); |
516 } | 537 } |
517 #endif | 538 #endif |
518 | 539 |
540 ExecutionContext* toExecutionContextForModules(v8::Local<v8::Context> context) | |
541 { | |
542 if (context.IsEmpty()) | |
543 return 0; | |
haraken
2016/01/05 06:08:06
nullptr
ikilpatrick
2016/01/07 22:47:35
Done.
| |
544 v8::Local<v8::Object> global = context->Global(); | |
545 v8::Local<v8::Object> workletWrapper = V8WorkletGlobalScope::findInstanceInP rototypeChain(global, context->GetIsolate()); | |
546 if (!workletWrapper.IsEmpty()) | |
547 return V8WorkletGlobalScope::toImpl(workletWrapper); | |
548 // FIXME: Is this line of code reachable? | |
549 return 0; | |
haraken
2016/01/05 06:08:06
nullptr
ikilpatrick
2016/01/07 22:47:35
Done.
| |
550 } | |
551 | |
552 v8::Local<v8::Context> toV8ContextForModules(ExecutionContext* context) | |
553 { | |
554 if (context->isWorkletGlobalScope()) { | |
555 if (IsolatedScriptController* script = toWorkletGlobalScope(context)->sc ript()) { | |
556 if (script->scriptState()->contextIsValid()) | |
557 return script->scriptState()->context(); | |
558 } | |
559 } | |
560 return v8::Local<v8::Context>(); | |
561 } | |
562 | |
519 } // namespace blink | 563 } // namespace blink |
OLD | NEW |