<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>196324</bug_id>
          
          <creation_ts>2019-03-27 15:42:58 -0700</creation_ts>
          <short_desc>Web Inspector: Canvas: unbinding a canvas should always remove the agent as an observer</short_desc>
          <delta_ts>2019-03-28 11:08:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1521878</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-03-27 15:42:58 -0700</bug_when>
    <thetext>`InspectorCanvasAgent::unbindCanvas` is currently called in two places:
 - `InspectorCanvasAgent::frameNavigated`, right after the `InspectorCanvasAgent` removes itself as an observer from the canvas in question
 - `InspectorCanvasAgent::canvasDestroyed`, which is called on all observers when the canvas is about to be destructed
Previously, in order to avoid modification-while-iterating, we wouldn&apos;t remove the `InspectorCanvasAgent` from the canvas inside `InspectorCanvasAgent::canvasDestroyed`, since the canvas is about to be destructed anyways.  This isn&apos;t a very good practice, and should be &quot;corrected&quot; (e.g. the observer shouldn&apos;t have any idea about the specifics of how the canvas treats/notifies its observers).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521882</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-27 15:47:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/49357109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521886</commentid>
    <comment_count>2</comment_count>
      <attachid>366119</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-03-27 15:51:48 -0700</bug_when>
    <thetext>Created attachment 366119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521951</commentid>
    <comment_count>3</comment_count>
      <attachid>366119</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-03-27 18:10:24 -0700</bug_when>
    <thetext>Comment on attachment 366119
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=366119&amp;action=review

r=me

&gt; Source/WebCore/html/CanvasBase.cpp:74
&gt;          observer-&gt;canvasChanged(*this, rect);

I noticed this is a widely used pattern in WebKit. Is it to safeguard against m_observers mutating during iteration?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522098</commentid>
    <comment_count>4</comment_count>
      <attachid>366119</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-03-28 10:38:41 -0700</bug_when>
    <thetext>Comment on attachment 366119
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=366119&amp;action=review

&gt;&gt; Source/WebCore/html/CanvasBase.cpp:74
&gt;&gt;          observer-&gt;canvasChanged(*this, rect);
&gt; 
&gt; I noticed this is a widely used pattern in WebKit. Is it to safeguard against m_observers mutating during iteration?

Yup!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522114</commentid>
    <comment_count>5</comment_count>
      <attachid>366119</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-28 11:08:10 -0700</bug_when>
    <thetext>Comment on attachment 366119
Patch

Clearing flags on attachment: 366119

Committed r243611: &lt;https://trac.webkit.org/changeset/243611&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522115</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-28 11:08:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366119</attachid>
            <date>2019-03-27 15:51:48 -0700</date>
            <delta_ts>2019-03-28 11:08:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196324-20190327155142.patch</filename>
            <type>text/plain</type>
            <size>3887</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3Njg1ZTUzODYzZjYxMmM4MDg5ZjVkZDNlNzg3ZmNlMGYyZTg1YWI1Li4z
OTJmN2VkYTM2NmUzMTAzY2UwNTc3ODQ3MDc3M2EwYWI1ZDk5NWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTktMDMtMjcgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IENhbnZhczogdW5iaW5kaW5nIGEgY2FudmFzIHNo
b3VsZCBhbHdheXMgcmVtb3ZlIHRoZSBhZ2VudCBhcyBhbiBvYnNlcnZlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2MzI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80OTM1NzEwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGh0
bWwvQ2FudmFzQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpub3RpZnlP
YnNlcnZlcnNDYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6Om5v
dGlmeU9ic2VydmVyc0NhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFz
ZTo6bm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkKToKKworICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNhbnZhc0FnZW50OjpiaW5kQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMpOgorCiAyMDE5LTAzLTI3ICBTaGF3biBSb2Jl
cnRzICA8c3JvYmVydHNAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyNDMzNDYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAppbmRleCBhOGFlODBhODI5
MGNjMDJhOTM0ODRkOTQwYWE5ZGQzM2IxOTg4NmQ0Li5iYjIyMDM5NDJmOGVlNDgyN2YwYmYwYmMy
Mzg5ZTJmYjVkNWQ3M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY5LDEzICs3MCwxMyBAQCB2b2lkIENh
bnZhc0Jhc2U6OnJlbW92ZU9ic2VydmVyKENhbnZhc09ic2VydmVyJiBvYnNlcnZlcikKIAogdm9p
ZCBDYW52YXNCYXNlOjpub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCisgICAg
Zm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlUb1ZlY3RvcihtX29ic2VydmVycykpCiAgICAgICAg
IG9ic2VydmVyLT5jYW52YXNDaGFuZ2VkKCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBDYW52YXNC
YXNlOjpub3RpZnlPYnNlcnZlcnNDYW52YXNSZXNpemVkKCkKIHsKLSAgICBmb3IgKGF1dG8mIG9i
c2VydmVyIDogbV9vYnNlcnZlcnMpCisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlUb1Zl
Y3RvcihtX29ic2VydmVycykpCiAgICAgICAgIG9ic2VydmVyLT5jYW52YXNSZXNpemVkKCp0aGlz
KTsKIH0KIApAQCAtODMsNyArODQsNyBAQCB2b2lkIENhbnZhc0Jhc2U6Om5vdGlmeU9ic2VydmVy
c0NhbnZhc0Rlc3Ryb3llZCgpCiB7CiAgICAgQVNTRVJUKCFtX2RpZE5vdGlmeU9ic2VydmVyc0Nh
bnZhc0Rlc3Ryb3llZCk7CiAKLSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMp
CisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlUb1ZlY3RvcihtX29ic2VydmVycykpCiAg
ICAgICAgIG9ic2VydmVyLT5jYW52YXNEZXN0cm95ZWQoKnRoaXMpOwogCiAgICAgbV9vYnNlcnZl
cnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggZDA4N2IwNTMzYWNhNDlmZmM2MmUyOTBm
MDY0MzM5NWE5NTMxNTU5MS4uOTM2N2E0ZTUwNTRhMDA0MzZmNzMyY2YzMDlkZWQ4ZGQ0MWUxMTVj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
YW52YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5jcHAKQEAgLTM3OCw4ICszNzgsNiBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCiAgICAgfQogCiAgICAgZm9y
IChhdXRvKiBpbnNwZWN0b3JDYW52YXMgOiBpbnNwZWN0b3JDYW52YXNlcykgewotICAgICAgICBp
bnNwZWN0b3JDYW52YXMtPmNvbnRleHQoKS5jYW52YXNCYXNlKCkucmVtb3ZlT2JzZXJ2ZXIoKnRo
aXMpOwotCiAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyID0gdW5iaW5kQ2FudmFzKCppbnNwZWN0
b3JDYW52YXMpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2FudmFzUmVtb3ZlZChp
ZGVudGlmaWVyKTsKICAgICB9CkBAIC02NDcsMTEgKzY0NSwxMSBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpjbGVhckNhbnZhc0RhdGEoKQogCiBJbnNwZWN0b3JDYW52YXMmIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpiaW5kQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQs
IGJvb2wgY2FwdHVyZUJhY2t0cmFjZSkKIHsKLSAgICBjb250ZXh0LmNhbnZhc0Jhc2UoKS5hZGRP
YnNlcnZlcigqdGhpcyk7Ci0KICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IEluc3BlY3RvckNh
bnZhczo6Y3JlYXRlKGNvbnRleHQpOwogICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFz
LnNldChpbnNwZWN0b3JDYW52YXMtPmlkZW50aWZpZXIoKSwgaW5zcGVjdG9yQ2FudmFzLmNvcHlS
ZWYoKSk7CiAKKyAgICBpbnNwZWN0b3JDYW52YXMtPmNvbnRleHQoKS5jYW52YXNCYXNlKCkuYWRk
T2JzZXJ2ZXIoKnRoaXMpOworCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhbnZhc0FkZGVk
KGluc3BlY3RvckNhbnZhcy0+YnVpbGRPYmplY3RGb3JDYW52YXMoY2FwdHVyZUJhY2t0cmFjZSkp
OwogCiAjaWYgRU5BQkxFKFdFQkdMKQpAQCAtNjgyLDYgKzY4MCw4IEBAIFN0cmluZyBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2Fu
dmFzKQogICAgICAgICB1bmJpbmRQcm9ncmFtKCppbnNwZWN0b3JQcm9ncmFtKTsKICNlbmRpZgog
CisgICAgaW5zcGVjdG9yQ2FudmFzLmNvbnRleHQoKS5jYW52YXNCYXNlKCkucmVtb3ZlT2JzZXJ2
ZXIoKnRoaXMpOworCiAgICAgU3RyaW5nIGlkZW50aWZpZXIgPSBpbnNwZWN0b3JDYW52YXMuaWRl
bnRpZmllcigpOwogICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLnJlbW92ZShpZGVu
dGlmaWVyKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>