mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 747825. Make the WebGLContext a wrapper cache. r=peterv
This commit is contained in:
parent
9f4754b67b
commit
6cb0048f56
@ -1193,22 +1193,33 @@ NS_IMPL_CYCLE_COLLECTING_ADDREF(WebGLContext)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(WebGLContext)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(WebGLContext)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(WebGLContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(WebGLContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mCanvasElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSTARRAY(mEnabledExtensions)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(WebGLContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mCanvasElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSTARRAY_OF_NSCOMPTR(mEnabledExtensions)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
DOMCI_DATA(WebGLRenderingContext, WebGLContext)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(WebGLContext)
|
||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMWebGLRenderingContext)
|
||||
NS_INTERFACE_MAP_ENTRY(nsICanvasRenderingContextInternal)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
||||
NS_INTERFACE_MAP_ENTRY(nsITimerCallback)
|
||||
// If the exact way we cast to nsISupports here ever changes, fix our
|
||||
// PreCreate hook!
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMWebGLRenderingContext)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WebGLRenderingContext)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
@ -523,7 +523,8 @@ class WebGLContext :
|
||||
public nsICanvasRenderingContextInternal,
|
||||
public nsSupportsWeakReference,
|
||||
public nsITimerCallback,
|
||||
public WebGLRectangleObject
|
||||
public WebGLRectangleObject,
|
||||
public nsWrapperCache
|
||||
{
|
||||
friend class WebGLMemoryMultiReporterWrapper;
|
||||
friend class WebGLExtensionLoseContext;
|
||||
@ -536,7 +537,12 @@ public:
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(WebGLContext, nsIDOMWebGLRenderingContext)
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(WebGLContext,
|
||||
nsIDOMWebGLRenderingContext)
|
||||
|
||||
nsINode* GetParentObject() {
|
||||
return HTMLCanvasElement();
|
||||
}
|
||||
|
||||
NS_DECL_NSIDOMWEBGLRENDERINGCONTEXT
|
||||
|
||||
|
@ -10908,8 +10908,20 @@ WebGLExtensionSH::PreCreate(nsISupports *nativeObj, JSContext *cx,
|
||||
|
||||
WebGLExtension *ext = static_cast<WebGLExtension*>(nativeObj);
|
||||
WebGLContext *webgl = ext->Context();
|
||||
nsHTMLCanvasElement *canvas = webgl->HTMLCanvasElement();
|
||||
nsINode *node = static_cast<nsINode*>(canvas);
|
||||
nsINode *node = webgl->GetParentObject();
|
||||
|
||||
return WrapNativeParent(cx, globalObj, node, node, parentObj);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsWebGLViewportHandlerSH::PreCreate(nsISupports *nativeObj, JSContext *cx,
|
||||
JSObject *globalObj, JSObject **parentObj)
|
||||
{
|
||||
*parentObj = globalObj;
|
||||
|
||||
WebGLContext *webgl = static_cast<WebGLContext*>(
|
||||
static_cast<nsIDOMWebGLRenderingContext*>(nativeObj));
|
||||
nsINode *node = webgl->GetParentObject();
|
||||
|
||||
return WrapNativeParent(cx, globalObj, node, node, parentObj);
|
||||
}
|
||||
|
@ -1612,6 +1612,9 @@ public:
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHOD PreCreate(nsISupports *nativeObj, JSContext *cx,
|
||||
JSObject *globalObj, JSObject **parentObj);
|
||||
|
||||
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
|
||||
{
|
||||
return new nsWebGLViewportHandlerSH(aData);
|
||||
|
Loading…
Reference in New Issue
Block a user