Flaky Test: inspector/canvas/updateShader.html
authordrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Sep 2019 17:54:22 +0000 (17:54 +0000)
committerdrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Sep 2019 17:54:22 +0000 (17:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=202186
<rdar://problem/55716053>

Reviewed by Joseph Pecoraro.

If the `WebGLProgram` outlives it's `WebGLRenderingContext`, the `ScriptExecutionContext*`
that was provided in the constructor won't be invalidated leading to the bad access crash.

Rather than pass the `ScriptExecutionContext*` directly, have `WebGLProgram` inherit from
`ContextDestructionObserver` so that it can propertly invalidate (and notify Web Inspector)
when the related context is about to be destroyed.

Test: inspector/canvas/updateShader.html

* html/canvas/WebGLProgram.h:
(WebCore::WebGLProgram::scriptExecutionContext const): Deleted.
* html/canvas/WebGLProgram.cpp:
(WebCore::WebGLProgram::WebGLProgram):
(WebCore::WebGLProgram::contextDestroyed): Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@250434 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/html/canvas/WebGLProgram.cpp
Source/WebCore/html/canvas/WebGLProgram.h

index cec39e4..97799ee 100644 (file)
@@ -1,3 +1,26 @@
+2019-09-27  Devin Rousso  <drousso@apple.com>
+
+        Flaky Test: inspector/canvas/updateShader.html
+        https://bugs.webkit.org/show_bug.cgi?id=202186
+        <rdar://problem/55716053>
+
+        Reviewed by Joseph Pecoraro.
+
+        If the `WebGLProgram` outlives it's `WebGLRenderingContext`, the `ScriptExecutionContext*`
+        that was provided in the constructor won't be invalidated leading to the bad access crash.
+
+        Rather than pass the `ScriptExecutionContext*` directly, have `WebGLProgram` inherit from
+        `ContextDestructionObserver` so that it can propertly invalidate (and notify Web Inspector)
+        when the related context is about to be destroyed.
+
+        Test: inspector/canvas/updateShader.html
+
+        * html/canvas/WebGLProgram.h:
+        (WebCore::WebGLProgram::scriptExecutionContext const): Deleted.
+        * html/canvas/WebGLProgram.cpp:
+        (WebCore::WebGLProgram::WebGLProgram):
+        (WebCore::WebGLProgram::contextDestroyed): Added.
+
 2019-09-27  Zalan Bujtas  <zalan@apple.com>
 
         [LFC][IFC] Replace Line::Run's logicalRect/textContext with Display::Run
index fe1b0c5..0850224 100644 (file)
@@ -62,9 +62,9 @@ Ref<WebGLProgram> WebGLProgram::create(WebGLRenderingContextBase& ctx)
 
 WebGLProgram::WebGLProgram(WebGLRenderingContextBase& ctx)
     : WebGLSharedObject(ctx)
-    , m_scriptExecutionContext(ctx.scriptExecutionContext())
+    , ContextDestructionObserver(ctx.scriptExecutionContext())
 {
-    ASSERT(m_scriptExecutionContext);
+    ASSERT(scriptExecutionContext());
 
     {
         LockHolder lock(instancesMutex());
@@ -87,6 +87,13 @@ WebGLProgram::~WebGLProgram()
     }
 }
 
+void WebGLProgram::contextDestroyed()
+{
+    InspectorInstrumentation::willDestroyWebGLProgram(*this);
+
+    ContextDestructionObserver::contextDestroyed();
+}
+
 void WebGLProgram::deleteObjectImpl(GraphicsContext3D* context3d, Platform3DObject obj)
 {
     context3d->deleteProgram(obj);
index 6769d1d..0050929 100644 (file)
@@ -27,6 +27,7 @@
 
 #if ENABLE(WEBGL)
 
+#include "ContextDestructionObserver.h"
 #include "WebGLSharedObject.h"
 #include <wtf/Forward.h>
 
@@ -36,7 +37,7 @@ class ScriptExecutionContext;
 class WebGLRenderingContextBase;
 class WebGLShader;
 
-class WebGLProgram final : public WebGLSharedObject {
+class WebGLProgram final : public WebGLSharedObject, public ContextDestructionObserver {
 public:
     static Ref<WebGLProgram> create(WebGLRenderingContextBase&);
     virtual ~WebGLProgram();
@@ -44,7 +45,7 @@ public:
     static HashMap<WebGLProgram*, WebGLRenderingContextBase*>& instances(const LockHolder&);
     static Lock& instancesMutex();
 
-    ScriptExecutionContext* scriptExecutionContext() const { return m_scriptExecutionContext; }
+    void contextDestroyed() final;
 
     unsigned numActiveAttribLocations();
     GC3Dint getActiveAttribLocation(GC3Duint index);
@@ -75,8 +76,6 @@ private:
     void cacheActiveAttribLocations(GraphicsContext3D*);
     void cacheInfoIfNeeded();
 
-    ScriptExecutionContext* m_scriptExecutionContext;
-
     Vector<GC3Dint> m_activeAttribLocations;
 
     GC3Dint m_linkStatus { 0 };