<?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>211160</bug_id>
          
          <creation_ts>2020-04-28 19:33:24 -0700</creation_ts>
          <short_desc>REGRESSION (r260407): Over-release of NSGraphicsContext in WebKit::convertPlatformImageToBitmap()</short_desc>
          <delta_ts>2020-05-08 21:09:35 -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>WebKit2</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210814</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=211274</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=211660</see_also>
          <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>
          <dependson>208891</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>darin</cc>
    
    <cc>nmouchtaris</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1646796</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-28 19:33:24 -0700</bug_when>
    <thetext>Over-release of NSGraphicsContext in WebKit::convertPlatformImageToBitmap().

Occurred in r260407 for Bug 208891:

    auto savedContext = adoptNS([NSGraphicsContext currentContext]);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646797</commentid>
    <comment_count>1</comment_count>
      <attachid>397917</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-28 19:34:06 -0700</bug_when>
    <thetext>Created attachment 397917
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646798</commentid>
    <comment_count>2</comment_count>
      <attachid>397917</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-28 19:43:35 -0700</bug_when>
    <thetext>Comment on attachment 397917
Patch v1

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

&gt; Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:408
&gt; -    auto savedContext = adoptNS([NSGraphicsContext currentContext]);
&gt; +    RetainPtr&lt;NSGraphicsContext&gt; savedContext = [NSGraphicsContext currentContext];

Do we have an RAII object to save NSGraphicsContext.currentContext?  Seems like it might be useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646799</commentid>
    <comment_count>3</comment_count>
      <attachid>397917</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-28 19:51:01 -0700</bug_when>
    <thetext>Comment on attachment 397917
Patch v1

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

&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:408
&gt;&gt; +    RetainPtr&lt;NSGraphicsContext&gt; savedContext = [NSGraphicsContext currentContext];
&gt; 
&gt; Do we have an RAII object to save NSGraphicsContext.currentContext?  Seems like it might be useful.

Looks like we have this in WebCore, but it&apos;s all CG-based:

    ALLOW_DEPRECATED_DECLARATIONS_BEGIN
    CGContextRef cgContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
    ALLOW_DEPRECATED_DECLARATIONS_END

    CGContextStateSaver stateSaver(cgContext);

Via drawCellFocusRingWithFrameAtTime() in Source/WebCore/platform/mac/ThemeMac.mm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646802</commentid>
    <comment_count>4</comment_count>
      <attachid>397917</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-28 19:54:11 -0700</bug_when>
    <thetext>Comment on attachment 397917
Patch v1

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

&gt;&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:408
&gt;&gt;&gt; +    RetainPtr&lt;NSGraphicsContext&gt; savedContext = [NSGraphicsContext currentContext];
&gt;&gt; 
&gt;&gt; Do we have an RAII object to save NSGraphicsContext.currentContext?  Seems like it might be useful.
&gt; 
&gt; Looks like we have this in WebCore, but it&apos;s all CG-based:
&gt; 
&gt;     ALLOW_DEPRECATED_DECLARATIONS_BEGIN
&gt;     CGContextRef cgContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
&gt;     ALLOW_DEPRECATED_DECLARATIONS_END
&gt; 
&gt;     CGContextStateSaver stateSaver(cgContext);
&gt; 
&gt; Via drawCellFocusRingWithFrameAtTime() in Source/WebCore/platform/mac/ThemeMac.mm.

Instead of writing out RetainPtr, I suggest you just change the adoptNS() to retainPtr().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646805</commentid>
    <comment_count>5</comment_count>
      <attachid>397917</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-28 19:57:48 -0700</bug_when>
    <thetext>Comment on attachment 397917
Patch v1

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

&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:408
&gt;&gt;&gt;&gt; +    RetainPtr&lt;NSGraphicsContext&gt; savedContext = [NSGraphicsContext currentContext];
&gt;&gt;&gt; 
&gt;&gt;&gt; Do we have an RAII object to save NSGraphicsContext.currentContext?  Seems like it might be useful.
&gt;&gt; 
&gt;&gt; Looks like we have this in WebCore, but it&apos;s all CG-based:
&gt;&gt; 
&gt;&gt;     ALLOW_DEPRECATED_DECLARATIONS_BEGIN
&gt;&gt;     CGContextRef cgContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
&gt;&gt;     ALLOW_DEPRECATED_DECLARATIONS_END
&gt;&gt; 
&gt;&gt;     CGContextStateSaver stateSaver(cgContext);
&gt;&gt; 
&gt;&gt; Via drawCellFocusRingWithFrameAtTime() in Source/WebCore/platform/mac/ThemeMac.mm.
&gt; 
&gt; Instead of writing out RetainPtr, I suggest you just change the adoptNS() to retainPtr().

Thanks, I had forgotten about that helper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646808</commentid>
    <comment_count>6</comment_count>
      <attachid>397918</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-28 20:01:12 -0700</bug_when>
    <thetext>Created attachment 397918
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646814</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-04-28 20:11:30 -0700</bug_when>
    <thetext>I think Darin might have been referring to LocalCurrentGraphicsContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646824</commentid>
    <comment_count>8</comment_count>
      <attachid>397918</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-28 21:09:25 -0700</bug_when>
    <thetext>Comment on attachment 397918
Patch for landing

Setting cq+ with win bot orange as this code isn&apos;t used on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646827</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-28 21:26:17 -0700</bug_when>
    <thetext>Committed r260864: &lt;https://trac.webkit.org/changeset/260864&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397918.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646828</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-28 21:27:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/62573162&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647082</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-29 11:39:54 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #7)
&gt; I think Darin might have been referring to LocalCurrentGraphicsContext?

It does seem like LocalCurrentGraphicsContext would be usable here with a tiny bit of refactoring.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397917</attachid>
            <date>2020-04-28 19:34:06 -0700</date>
            <delta_ts>2020-04-29 04:26:37 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-211160-20200428193636.patch</filename>
            <type>text/plain</type>
            <size>1869</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk0MDA0MzhlZDVlMTk0ZTI3
NjUwNDYzYzEyYTljM2I2NjhmNzliYjAuLjcyNjI0MDI3NGI2YTZhYjc5NTQ1OTU1MGMxYjFkZmYw
Y2QzZDQ4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMjggIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMjYwNDA3
KTogT3Zlci1yZWxlYXNlIG9mIE5TR3JhcGhpY3NDb250ZXh0IGluIFdlYktpdDo6Y29udmVydFBs
YXRmb3JtSW1hZ2VUb0JpdG1hcCgpCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTEx
NjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNv
bnZlcnRQbGF0Zm9ybUltYWdlVG9CaXRtYXApOiBEb24ndCB1c2UgYWRvcHROUygpIG9uCisgICAg
ICAgIGFuIGF1dG9yZWxlYXNlZCByZXR1cm4gdmFsdWUgc2luY2UgaXQgY2F1c2VzIGFuIG92ZXIt
cmVsZWFzZS4KKwogMjAyMC0wNC0yOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIElQQzo6RGVjb2Rlcjo6aXNWYWxpZCgpIHNob3VsZCBqdXN0IGJlIGEgbnVs
bHB0ciBjaGVjawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFnZVByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdl
UHJveHlDb2NvYS5tbQppbmRleCA3MjNhM2RlZWFiYTAzNTY0MjlkMTc2ZDljNDFlMmY4NGMyN2Nm
OWJhLi45YmZjOTIzNTc4YzcwMmQ3YmEzNjljOTkwMDUxMTE2N2IwNWE2N2I4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAt
NDA1LDcgKzQwNSw3IEBAIHN0YXRpYyBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+IGNv
bnZlcnRQbGF0Zm9ybUltYWdlVG9CaXRtYXAoQ29jb2FJbWFnZSAqCiAgICAgW2ltYWdlIGRyYXdJ
blJlY3Q6Q0dSZWN0TWFrZSgwLCAwLCBiaXRtYXAtPnNpemUoKS53aWR0aCgpLCBiaXRtYXAtPnNp
emUoKS5oZWlnaHQoKSldOwogICAgIFVJR3JhcGhpY3NQb3BDb250ZXh0KCk7CiAjZWxpZiBQTEFU
Rk9STShNQUMpCi0gICAgYXV0byBzYXZlZENvbnRleHQgPSBhZG9wdE5TKFtOU0dyYXBoaWNzQ29u
dGV4dCBjdXJyZW50Q29udGV4dF0pOworICAgIFJldGFpblB0cjxOU0dyYXBoaWNzQ29udGV4dD4g
c2F2ZWRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKIAogICAg
IFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpbTlNHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0V2l0aENHQ29udGV4dDpncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpIGZsaXBwZWQ6WUVTXV07CiAgICAgW2ltYWdlIGRyYXdJblJlY3Q6TlNNYWtlUmVjdCgw
LCAwLCBiaXRtYXAtPnNpemUoKS53aWR0aCgpLCBiaXRtYXAtPnNpemUoKS5oZWlnaHQoKSkgZnJv
bVJlY3Q6TlNaZXJvUmVjdCBvcGVyYXRpb246TlNDb21wb3NpdGluZ09wZXJhdGlvblNvdXJjZU92
ZXIgZnJhY3Rpb246MSByZXNwZWN0RmxpcHBlZDpZRVMgaGludHM6bmlsXTsK
</data>
<flag name="review"
          id="413283"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="413286"
          type_id="3"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397918</attachid>
            <date>2020-04-28 20:01:12 -0700</date>
            <delta_ts>2020-04-28 21:26:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-211160-20200428200343.patch</filename>
            <type>text/plain</type>
            <size>1830</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk0MDA0MzhlZDVlMTk0ZTI3
NjUwNDYzYzEyYTljM2I2NjhmNzliYjAuLjI3MWQ5NDA3NmI3ZjAwYWMzNmZkODZiMzY5NGY1NWZl
YjhlOTI1MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMjggIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMjYwNDA3
KTogT3Zlci1yZWxlYXNlIG9mIE5TR3JhcGhpY3NDb250ZXh0IGluIFdlYktpdDo6Y29udmVydFBs
YXRmb3JtSW1hZ2VUb0JpdG1hcCgpCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTEx
NjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OmNvbnZl
cnRQbGF0Zm9ybUltYWdlVG9CaXRtYXApOiBVc2UgcmV0YWluUHRyKCkgaW5zdGVhZAorICAgICAg
ICBvZiBhZG9wdE5TKCkgdG8gZml4IHRoZSBvdmVyLXJlbGVhc2UuCisKIDIwMjAtMDQtMjggIERh
dmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBJUEM6OkRlY29kZXI6
OmlzVmFsaWQoKSBzaG91bGQganVzdCBiZSBhIG51bGxwdHIgY2hlY2sKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KaW5kZXggNzIzYTNk
ZWVhYmEwMzU2NDI5ZDE3NmQ5YzQxZTJmODRjMjdjZjliYS4uOWY1YjBhMDU5MjUxYmZiYTQ5MjJm
ZGE5NTJjNDVhZGVkYjZiNGU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTQwNSw3ICs0MDUsNyBAQCBzdGF0aWMgUmVm
UHRyPFdlYktpdDo6U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0UGxhdGZvcm1JbWFnZVRvQml0bWFw
KENvY29hSW1hZ2UgKgogICAgIFtpbWFnZSBkcmF3SW5SZWN0OkNHUmVjdE1ha2UoMCwgMCwgYml0
bWFwLT5zaXplKCkud2lkdGgoKSwgYml0bWFwLT5zaXplKCkuaGVpZ2h0KCkpXTsKICAgICBVSUdy
YXBoaWNzUG9wQ29udGV4dCgpOwogI2VsaWYgUExBVEZPUk0oTUFDKQotICAgIGF1dG8gc2F2ZWRD
b250ZXh0ID0gYWRvcHROUyhbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdKTsKKyAg
ICBhdXRvIHNhdmVkQ29udGV4dCA9IHJldGFpblB0cihbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdKTsKIAogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpb
TlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aENHQ29udGV4dDpncmFwaGljc0Nv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIGZsaXBwZWQ6WUVTXV07CiAgICAgW2ltYWdlIGRyYXdJ
blJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBiaXRtYXAtPnNpemUoKS53aWR0aCgpLCBiaXRtYXAtPnNp
emUoKS5oZWlnaHQoKSkgZnJvbVJlY3Q6TlNaZXJvUmVjdCBvcGVyYXRpb246TlNDb21wb3NpdGlu
Z09wZXJhdGlvblNvdXJjZU92ZXIgZnJhY3Rpb246MSByZXNwZWN0RmxpcHBlZDpZRVMgaGludHM6
bmlsXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>