WebKit Bugzilla
Attachment 357075 Details for
Bug 192606
: CloneDeserializer should succeed deserialization for DOM objects in non JSDOMGlobalObject context
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
WIP
bug-192606-20181211141026.patch (text/plain), 6.39 KB, created by
youenn fablet
on 2018-12-11 14:10:26 PST
(
hide
)
Description:
WIP
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-12-11 14:10:26 PST
Size:
6.39 KB
patch
obsolete
>Subversion Revision: 239028 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 2599d7008d449e570e80707147cbaac40f29b74f..855200212af6b6d13da06cec95ddec9d549c4e06 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2018-12-11 Youenn Fablet <youenn@apple.com> >+ >+ CloneDeserializer should succeed deserialization for DOM objects in non JSDOMGlobalObject context >+ https://bugs.webkit.org/show_bug.cgi?id=192606 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Return an empty object instead of any JS DOM wrapper. >+ Tests missing. >+ >+ * bindings/js/SerializedScriptValue.cpp: >+ (WebCore::CloneDeserializer::readCryptoKey): >+ (WebCore::CloneDeserializer::getJSNewlyCreatedValue): >+ (WebCore::CloneDeserializer::getJSValue): >+ (WebCore::CloneDeserializer::readDOMPoint): >+ (WebCore::CloneDeserializer::readDOMMatrix): >+ (WebCore::CloneDeserializer::readDOMRect): >+ (WebCore::CloneDeserializer::readDOMQuad): >+ (WebCore::CloneDeserializer::readRTCCertificate): >+ (WebCore::CloneDeserializer::readTerminal): >+ > 2018-12-11 Youenn Fablet <youenn@apple.com> > > IDB should store RTCCertificate >diff --git a/Source/WebCore/bindings/js/SerializedScriptValue.cpp b/Source/WebCore/bindings/js/SerializedScriptValue.cpp >index 2b8d9c0528ba8ceb9873cb6f133593635bc3faa5..695c21615af9e4613a8cd2e92f800b5edf960125 100644 >--- a/Source/WebCore/bindings/js/SerializedScriptValue.cpp >+++ b/Source/WebCore/bindings/js/SerializedScriptValue.cpp >@@ -2490,14 +2490,24 @@ private: > return false; > break; > } >- cryptoKey = getJSValue(result.get()); >+ cryptoKey = getJSNewlyCreatedValue(result.releaseNonNull()); > return true; > } > #endif > >+ template<class T> >+ JSValue getJSNewlyCreatedValue(Ref<T>&& nativeObj) >+ { >+ if (!m_isDOMGlobalObject) >+ return constructEmptyObject(m_exec, m_globalObject->objectPrototype()); >+ return toJSNewlyCreated(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), WTFMove(nativeObj)); >+ } >+ > template<class T> > JSValue getJSValue(T* nativeObj) > { >+ if (!m_isDOMGlobalObject) >+ return constructEmptyObject(m_exec, m_globalObject->objectPrototype()); > return toJS(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), nativeObj); > } > >@@ -2523,7 +2533,7 @@ private: > if (!read(w)) > return { }; > >- return toJSNewlyCreated(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), T::create(x, y, z, w)); >+ return getJSNewlyCreatedValue(T::create(x, y, z, w)); > } > > template<class T> >@@ -2554,7 +2564,7 @@ private: > return { }; > > TransformationMatrix matrix(m11, m12, m21, m22, m41, m42); >- return toJSNewlyCreated(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), T::create(WTFMove(matrix), DOMMatrixReadOnly::Is2D::Yes)); >+ return getJSNewlyCreatedValue(T::create(WTFMove(matrix), DOMMatrixReadOnly::Is2D::Yes)); > } else { > double m11; > if (!read(m11)) >@@ -2606,7 +2616,7 @@ private: > return { }; > > TransformationMatrix matrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44); >- return toJSNewlyCreated(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), T::create(WTFMove(matrix), DOMMatrixReadOnly::Is2D::No)); >+ return getJSNewlyCreatedValue(T::create(WTFMove(matrix), DOMMatrixReadOnly::Is2D::No)); > } > } > >@@ -2626,7 +2636,7 @@ private: > if (!read(height)) > return { }; > >- return toJSNewlyCreated(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), T::create(x, y, width, height)); >+ return getJSNewlyCreatedValue(T::create(x, y, width, height)); > } > > std::optional<DOMPointInit> readDOMPointInit() >@@ -2659,7 +2669,7 @@ private: > if (!p4) > return JSValue(); > >- return toJSNewlyCreated(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), DOMQuad::create(p1.value(), p2.value(), p3.value(), p4.value())); >+ return getJSNewlyCreatedValue(DOMQuad::create(p1.value(), p2.value(), p3.value(), p4.value())); > } > > JSValue readImageBitmap() >@@ -2721,7 +2731,7 @@ private: > return constructEmptyObject(m_exec, m_globalObject->objectPrototype()); > > auto rtcCertificate = RTCCertificate::create(SecurityOrigin::createFromString(origin->string()), expires, WTFMove(fingerprints), certificate->takeString(), keyedMaterial->takeString()); >- return toJSNewlyCreated(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), WTFMove(rtcCertificate)); >+ return getJSNewlyCreatedValue(WTFMove(rtcCertificate)); > } > #endif > >@@ -2783,9 +2793,7 @@ private: > RefPtr<File> file; > if (!readFile(file)) > return JSValue(); >- if (!m_isDOMGlobalObject) >- return jsNull(); >- return toJS(m_exec, jsCast<JSDOMGlobalObject*>(m_globalObject), file.get()); >+ return getJSNewlyCreatedValue(file.releaseNonNull()); > } > case FileListTag: { > unsigned length = 0; >@@ -2799,9 +2807,7 @@ private: > if (m_isDOMGlobalObject) > files.append(file.releaseNonNull()); > } >- if (!m_isDOMGlobalObject) >- return jsNull(); >- return getJSValue(FileList::create(WTFMove(files)).get()); >+ return getJSNewlyCreatedValue(FileList::create(WTFMove(files))); > } > case ImageDataTag: { > uint32_t width; >@@ -2833,7 +2839,7 @@ private: > else > result->data()->zeroFill(); > m_ptr += length; >- return getJSValue(result.get()); >+ return getJSNewlyCreatedValue(result.releaseNonNull()); > } > case BlobTag: { > CachedStringRef url; >@@ -2847,7 +2853,7 @@ private: > return JSValue(); > if (!m_isDOMGlobalObject) > return jsNull(); >- return getJSValue(Blob::deserialize(URL(URL(), url->string()), type->string(), size, blobFilePathForBlobURL(url->string())).get()); >+ return getJSNewlyCreatedValue(Blob::deserialize(URL(URL(), url->string()), type->string(), size, blobFilePathForBlobURL(url->string()))); > } > case StringTag: { > CachedStringRef cachedString;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192606
:
357075
|
357076
|
357326