Title: [243611] trunk/Source/WebCore
Revision
243611
Author
[email protected]
Date
2019-03-28 11:08:03 -0700 (Thu, 28 Mar 2019)

Log Message

Web Inspector: Canvas: unbinding a canvas should always remove the agent as an observer
https://bugs.webkit.org/show_bug.cgi?id=196324
<rdar://problem/49357109>

Reviewed by Matt Baker.

No change in functionality.

* html/CanvasBase.cpp:
(WebCore::CanvasBase::notifyObserversCanvasChanged):
(WebCore::CanvasBase::notifyObserversCanvasResized):
(WebCore::CanvasBase::notifyObserversCanvasDestroyed):

* inspector/agents/InspectorCanvasAgent.cpp:
(WebCore::InspectorCanvasAgent::frameNavigated):
(WebCore::InspectorCanvasAgent::bindCanvas):
(WebCore::InspectorCanvasAgent::unbindCanvas):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (243610 => 243611)


--- trunk/Source/WebCore/ChangeLog	2019-03-28 18:05:13 UTC (rev 243610)
+++ trunk/Source/WebCore/ChangeLog	2019-03-28 18:08:03 UTC (rev 243611)
@@ -1,3 +1,23 @@
+2019-03-28  Devin Rousso  <[email protected]>
+
+        Web Inspector: Canvas: unbinding a canvas should always remove the agent as an observer
+        https://bugs.webkit.org/show_bug.cgi?id=196324
+        <rdar://problem/49357109>
+
+        Reviewed by Matt Baker.
+
+        No change in functionality.
+
+        * html/CanvasBase.cpp:
+        (WebCore::CanvasBase::notifyObserversCanvasChanged):
+        (WebCore::CanvasBase::notifyObserversCanvasResized):
+        (WebCore::CanvasBase::notifyObserversCanvasDestroyed):
+
+        * inspector/agents/InspectorCanvasAgent.cpp:
+        (WebCore::InspectorCanvasAgent::frameNavigated):
+        (WebCore::InspectorCanvasAgent::bindCanvas):
+        (WebCore::InspectorCanvasAgent::unbindCanvas):
+
 2019-03-28  Alicia Boya GarcĂ­a  <[email protected]>
 
         [MSE][GStreamer] Remove dead code in MediaPlayerPrivateGStreamer::doSeek()

Modified: trunk/Source/WebCore/html/CanvasBase.cpp (243610 => 243611)


--- trunk/Source/WebCore/html/CanvasBase.cpp	2019-03-28 18:05:13 UTC (rev 243610)
+++ trunk/Source/WebCore/html/CanvasBase.cpp	2019-03-28 18:08:03 UTC (rev 243611)
@@ -31,6 +31,7 @@
 #include "Element.h"
 #include "FloatRect.h"
 #include "InspectorInstrumentation.h"
+#include <wtf/Vector.h>
 
 namespace WebCore {
 
@@ -69,13 +70,13 @@
 
 void CanvasBase::notifyObserversCanvasChanged(const FloatRect& rect)
 {
-    for (auto& observer : m_observers)
+    for (auto& observer : copyToVector(m_observers))
         observer->canvasChanged(*this, rect);
 }
 
 void CanvasBase::notifyObserversCanvasResized()
 {
-    for (auto& observer : m_observers)
+    for (auto& observer : copyToVector(m_observers))
         observer->canvasResized(*this);
 }
 
@@ -83,7 +84,7 @@
 {
     ASSERT(!m_didNotifyObserversCanvasDestroyed);
 
-    for (auto& observer : m_observers)
+    for (auto& observer : copyToVector(m_observers))
         observer->canvasDestroyed(*this);
 
     m_observers.clear();

Modified: trunk/Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp (243610 => 243611)


--- trunk/Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp	2019-03-28 18:05:13 UTC (rev 243610)
+++ trunk/Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp	2019-03-28 18:08:03 UTC (rev 243611)
@@ -378,8 +378,6 @@
     }
 
     for (auto* inspectorCanvas : inspectorCanvases) {
-        inspectorCanvas->context().canvasBase().removeObserver(*this);
-
         String identifier = unbindCanvas(*inspectorCanvas);
         m_frontendDispatcher->canvasRemoved(identifier);
     }
@@ -647,11 +645,11 @@
 
 InspectorCanvas& InspectorCanvasAgent::bindCanvas(CanvasRenderingContext& context, bool captureBacktrace)
 {
-    context.canvasBase().addObserver(*this);
-
     auto inspectorCanvas = InspectorCanvas::create(context);
     m_identifierToInspectorCanvas.set(inspectorCanvas->identifier(), inspectorCanvas.copyRef());
 
+    inspectorCanvas->context().canvasBase().addObserver(*this);
+
     m_frontendDispatcher->canvasAdded(inspectorCanvas->buildObjectForCanvas(captureBacktrace));
 
 #if ENABLE(WEBGL)
@@ -682,6 +680,8 @@
         unbindProgram(*inspectorProgram);
 #endif
 
+    inspectorCanvas.context().canvasBase().removeObserver(*this);
+
     String identifier = inspectorCanvas.identifier();
     m_identifierToInspectorCanvas.remove(identifier);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to