<?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>230186</bug_id>
          
          <creation_ts>2021-09-10 23:45:18 -0700</creation_ts>
          <short_desc>Web Inspector: `FrameDOMTreeContentView` may update after it has `closed` called, causing hangs on some webpages on reload</short_desc>
          <delta_ts>2021-09-16 15:23:25 -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="Patrick Angle">pangle</reporter>
          <assigned_to name="Patrick Angle">pangle</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1792658</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-09-10 23:45:18 -0700</bug_when>
    <thetext>&lt;rdar://82962890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792659</commentid>
    <comment_count>1</comment_count>
      <attachid>437942</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-09-11 00:02:16 -0700</bug_when>
    <thetext>Created attachment 437942
Patch v1.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792672</commentid>
    <comment_count>2</comment_count>
      <attachid>437942</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-09-11 02:08:49 -0700</bug_when>
    <thetext>Comment on attachment 437942
Patch v1.0

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

&gt; Source/WebInspectorUI/ChangeLog:18
&gt; +

No test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792717</commentid>
    <comment_count>3</comment_count>
      <attachid>437942</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-09-11 09:33:18 -0700</bug_when>
    <thetext>Comment on attachment 437942
Patch v1.0

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

&gt;&gt; Source/WebInspectorUI/ChangeLog:18
&gt;&gt; +
&gt; 
&gt; No test?

Not yet… I haven’t been able to produce a broken reduction to test working yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792851</commentid>
    <comment_count>4</comment_count>
      <attachid>437942</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-09-12 21:57:06 -0700</bug_when>
    <thetext>Comment on attachment 437942
Patch v1.0

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

&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:522
&gt; -            if (item)
&gt; -                item.onpopulate();
&gt; +            if (!item)
&gt; +                return null;
&gt; +
&gt; +            item.onpopulate();

So i think the only way for us to get here is if the caller has provided both `isAncestor` and `getParent`.  Without `isAncestor`, the only way to reach this code is if (somehow) a direct child (i.e. something in `this.children`) exactly matches/corresponds to the given `representedObject`, which means that we&apos;d only iterate inside the above `while` once.  As such, we&apos;d only iterate this `for` once as well, and therefore only call `onpopulate` once.

Can you explain a bit more what you mean by &quot;infinitely trying to populate that item&quot;?  Are you saying that some `WI.TreeElement` subclass has an `onpopulate` that calls `findTreeElement`?  If so, that should probably be a reentrant error (e.g. `WI.setReentrantCheck`).  Is the issue perhaps more that `_shouldRefreshChildren` is not being set to `false` after in this case?

I ask these things because IIRC most callers do not provide `isAncestor` or `getParent`, but those that do (e.g. DOM tree, source maps, etc.) may expect this population behavior in order to ensure that `WI.TreeElement` are created for the entire path from the root to the given `representedObject` (e.g. revealing a deeply nested DOM node).

Tho, I do kinda see your point with this change in that &quot;if we can&apos;t find a tree element for one of our ancestors, then we really shouldn&apos;t be able to find a tree element for the given `representedObject`, so why even bother trying&quot;.  I&apos;m just wondering if maybe some caller is relying on the current (arguably incorrect) logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792974</commentid>
    <comment_count>5</comment_count>
      <attachid>437942</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-09-13 09:24:04 -0700</bug_when>
    <thetext>Comment on attachment 437942
Patch v1.0

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:522
&gt;&gt; +            item.onpopulate();
&gt; 
&gt; So i think the only way for us to get here is if the caller has provided both `isAncestor` and `getParent`.  Without `isAncestor`, the only way to reach this code is if (somehow) a direct child (i.e. something in `this.children`) exactly matches/corresponds to the given `representedObject`, which means that we&apos;d only iterate inside the above `while` once.  As such, we&apos;d only iterate this `for` once as well, and therefore only call `onpopulate` once.
&gt; 
&gt; Can you explain a bit more what you mean by &quot;infinitely trying to populate that item&quot;?  Are you saying that some `WI.TreeElement` subclass has an `onpopulate` that calls `findTreeElement`?  If so, that should probably be a reentrant error (e.g. `WI.setReentrantCheck`).  Is the issue perhaps more that `_shouldRefreshChildren` is not being set to `false` after in this case?
&gt; 
&gt; I ask these things because IIRC most callers do not provide `isAncestor` or `getParent`, but those that do (e.g. DOM tree, source maps, etc.) may expect this population behavior in order to ensure that `WI.TreeElement` are created for the entire path from the root to the given `representedObject` (e.g. revealing a deeply nested DOM node).
&gt; 
&gt; Tho, I do kinda see your point with this change in that &quot;if we can&apos;t find a tree element for one of our ancestors, then we really shouldn&apos;t be able to find a tree element for the given `representedObject`, so why even bother trying&quot;.  I&apos;m just wondering if maybe some caller is relying on the current (arguably incorrect) logic.

The situations in which we are seeing this reentrancy issue are with DOMTreeOutline/DOMTreeElement. DOMTreeOutline provides an `isAncestor` and `getParent` into `findTreeElement`. The issue is that a call to on populate may not be populating in all the expected elements that are in the current `ancestors` we are trying to populate.

Let&apos;s say we have E1 through E4, each of which is a child of the previous, and are trying to find E4 in the tree. We populate E1, then try and populate E2. After E2 is populated though, it doesn&apos;t populate in its supposed child E3 (I suspect because we are in middle of mutating the DOM tree, so the tree model is not matching the current represented object model). Previously, we would then try to find E3 in the tree, which would then attempt to populate in children of E2 again, as it is the closest ancestor in the tree. We try again to populate E2&apos;s children, even though nothing else has changed since. We then take another go at populating in E3, but still can&apos;t find it in the tree, with E2 being the closest ancestor yet again, and the cycle repeats itself.

I&apos;m under no illusion that there isn&apos;t another issue here that leads to this being possible in the first place (something isn&apos;t happening in a happy order when the DOM tree mutates), but as you mention, we really shouldn&apos;t continue down the rabbit hole past an element we can&apos;t find anyways since it shouldn&apos;t be possible for a deeper child to be found when we couldn&apos;t populate in the current ancestor in the tree. I&apos;m not sure I see a path where a caller could be relying on this logic without getting stuck like we sometimes do. I don&apos;t see a way in which the current behavior could be correct given that it will continue to attempt the same thing endlessly without this early return in what I believe to be exceptional cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793548</commentid>
    <comment_count>6</comment_count>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-09-14 18:08:38 -0700</bug_when>
    <thetext>Overall fix for this issue is going to be multi-faceted. Updating bug title to reflect what this bug will be fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793566</commentid>
    <comment_count>7</comment_count>
      <attachid>438203</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-09-14 18:47:40 -0700</bug_when>
    <thetext>Created attachment 438203
Patch v1.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793773</commentid>
    <comment_count>8</comment_count>
      <attachid>438203</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-09-15 11:20:08 -0700</bug_when>
    <thetext>Comment on attachment 438203
Patch v1.0

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

r=me

Ideally in the future I think it&apos;d be nice to entirely get rid of the `closed` concept, but until that day this is a good step in the right direction :)

&gt; Source/WebInspectorUI/ChangeLog:10
&gt; +        DOM tree. to combat this, add a flag to `ContentView` to mark a closed `ContentView` as such, and then return

s/to/To

&gt; Source/WebInspectorUI/UserInterface/Views/ContentView.js:397
&gt; +        this._isClosed = true;

Please make sure that all subclasses call `super.closed()` so that we won&apos;t miss any scenarios where something should be `isClosed` but isn&apos;t.

&gt; Source/WebInspectorUI/UserInterface/Views/ContentView.js:402
&gt; +    get isClosed() {
&gt; +        return this._isClosed;
&gt;      }

Style: `{` on a separate line
Style: you can make this all on one line at the top of the `// Public` section since it&apos;s a simple `get` (i.e. only returns a variable with the same name as the `get`)

&gt; Source/WebInspectorUI/UserInterface/Views/FrameDOMTreeContentView.js:65
&gt; +        if (this.isClosed)

I wonder how many other things could have something like this too 🤔</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793865</commentid>
    <comment_count>9</comment_count>
      <attachid>438294</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-09-15 14:49:28 -0700</bug_when>
    <thetext>Created attachment 438294
Patch v1.2 - Review nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794230</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-16 15:23:23 -0700</bug_when>
    <thetext>Committed r282607 (241768@main): &lt;https://commits.webkit.org/241768@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438294.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437942</attachid>
            <date>2021-09-11 00:02:16 -0700</date>
            <delta_ts>2021-09-14 18:47:38 -0700</delta_ts>
            <desc>Patch v1.0</desc>
            <filename>bug-230186-20210911000215.patch</filename>
            <type>text/plain</type>
            <size>3368</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBm
NmE3MjY2YTZhODk4NTA1YjZiZjJiZjRmYzM2ZjFkMWE0OTQzMTc1Li4wYzYxYjY1MDZjMjc2ZTcy
MWE5MDhmZDY5YmNlZDAxZmFkOTZmN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAyMS0wOS0xMCAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTmVhci1pbmZpbml0ZSByZWN1cnNpb24gYXR0ZW1w
dGluZyB0byBmaW5kIGVsZW1lbnRzIGluIGBUcmVlT3V0bGluZWAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDE4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIGBUcmVlT3V0bGluZS5wcm90b3R5cGUu
ZmluZFRyZWVFbGVtZW50YCBpZiB3ZSBhcmUgdW5hYmxlIHRvIGZpbmQgYW5kIHBvcHVsYXRlIGEg
dHJlZSBlbGVtZW50IGZvciBhCisgICAgICAgIHJlcHJlc2VudGVkIG9iamVjdCwgaXQgaXMgbGlr
ZWx5IHdlIHdpbGwgZW5kIHVwIChuZWFybHkpIGluZmluaXRlbHkgdHJ5aW5nIHRvIHBvcHVsYXRl
IHRoYXQgaXRlbSwgYXMgZXZlcnkKKyAgICAgICAgc3Vic2VxdWVudCBub2RlIGFuZCBpdHMgYW5j
ZXN0b3JzIHdpbGwgYXR0ZW1wdCB0byBmaW5kIGFuZCBwb3B1bGF0ZSB0aGUgc2FtZSBtaXNzaW5n
IGVsZW1lbnQuIFdlIG5vdyByZXR1cm4gd2hlbgorICAgICAgICB3ZSBlbmNvdW50ZXIgYSByZXBy
ZXNlbnRlZCBvYmplY3QgZm9yIHdoaWNoIHdlIGNhbid0IGZpbmQgYW4gZWxlbWVudCB0byBwb3B1
bGF0ZS4KKworICAgICAgICBUaGlzIGlzc3VlIGFwcGVhcnMgbW9zdCB0byBiZSBtb3JlIHByZXZh
bGVudCBvbiBzaXRlcyB0aGF0IGR5bmFtaWNhbGx5IGFkZC9yZW1vdmUgbGFyZ2UgYW1vdW50cyBv
ZiB0aGVpciBET00gdmlhCisgICAgICAgIEphdmFTY3JpcHQuCisKKyAgICAgICAgQWRkaXRpb25h
bGx5LCBJJ3ZlIG1hZGUgYSBkcml2ZS1ieSB1cGRhdGUgdG8gdGhlIGNvbW1lbnRzIGluIHRoaXMg
Y2xhc3MgdG8gYmV0dGVyIHJlZmxlY3Qgd2hlcmUgdGhlIGFzc3VyYW5jZQorICAgICAgICB0aGF0
IHRoZSByZXByZXNlbnRlZCBvYmplY3QgaXMgY29ubmVjdGVkIHRvIHRoZSByb290IG9mIHRoZSB0
cmVlLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9UcmVlT3V0bGluZS5qczoKKyAg
ICAgICAgKFdJLlRyZWVPdXRsaW5lLnByb3RvdHlwZS5maW5kVHJlZUVsZW1lbnQpOgorCiAyMDIx
LTA4LTI3ICBSdXNzZWxsIEVwc3RlaW4gIDxyZXBzdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
TGFuZCBXaW5kb3dzIGJ1aWxkIGZpeGVzIGZyb20gc2FmYXJpLTYxMi4xLjI5LjE0LWJyYW5jaC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Ry
ZWVPdXRsaW5lLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VHJlZU91dGxpbmUuanMKaW5kZXggNDExNmYzYmUwYzdiMWE3OGQzYjUyN2IyMjM0M2FmMWVjMTEw
MjI1Yy4uM2MzOGQwMDQ1ODEyMzY4MjQxOTUyMDhjMmU2NmJlOTA3YTVkMTc1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHJlZU91dGxpbmUu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHJlZU91
dGxpbmUuanMKQEAgLTQ4MSw3ICs0ODEsOCBAQCBXSS5UcmVlT3V0bGluZSA9IGNsYXNzIFRyZWVP
dXRsaW5lIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgICAgICByZXR1cm4gY2FjaGVkRWxlbWVu
dDsKIAogICAgICAgICAvLyBUaGUgcmVwcmVzZW50ZWRPYmplY3QgaXNuJ3Qga25vd24sIHNvIHdl
IHN0YXJ0IGF0IHRoZSB0b3Agb2YgdGhlIHRyZWUgYW5kIHdvcmsgZG93biB0byBmaW5kIHRoZSBm
aXJzdAotICAgICAgICAvLyB0cmVlIGVsZW1lbnQgdGhhdCByZXByZXNlbnRzIHJlcHJlc2VudGVk
T2JqZWN0IG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzLgorICAgICAgICAvLyB0cmVlIGVsZW1lbnQg
dGhhdCByZXByZXNlbnRzIHJlcHJlc2VudGVkT2JqZWN0IG9yIG9uZSBvZiBpdHMgYW5jZXN0b3Jz
IHRvIG1ha2Ugc3VyZSB0aGUgcmVwcmVzZW50ZWRPYmplY3QKKyAgICAgICAgLy8gaXMgY29ubmVj
dGVkIHRvIHRoZSByb290IG9mIHRoZSB0cmVlLgogICAgICAgICB2YXIgaXRlbTsKICAgICAgICAg
dmFyIGZvdW5kID0gZmFsc2U7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGls
ZHJlbi5sZW5ndGg7ICsraSkgewpAQCAtNDk1LDcgKzQ5Niw2IEBAIFdJLlRyZWVPdXRsaW5lID0g
Y2xhc3MgVHJlZU91dGxpbmUgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYgKCFmb3VuZCkK
ICAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgaXRl
bSB0aGF0IHdlIGZvdW5kIGlzIGNvbm5lY3RlZCB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KICAg
ICAgICAgLy8gQnVpbGQgdXAgYSBsaXN0IG9mIHJlcHJlc2VudGVkT2JqZWN0J3MgYW5jZXN0b3Jz
IHRoYXQgYXJlbid0IGFscmVhZHkgaW4gb3VyIHRyZWUuCiAgICAgICAgIHZhciBhbmNlc3RvcnMg
PSBbXTsKICAgICAgICAgdmFyIGN1cnJlbnRPYmplY3QgPSByZXByZXNlbnRlZE9iamVjdDsKQEAg
LTUxNiw4ICs1MTYsMTAgQEAgV0kuVHJlZU91dGxpbmUgPSBjbGFzcyBUcmVlT3V0bGluZSBleHRl
bmRzIFdJLk9iamVjdAogICAgICAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBmYXN0ZXIgdGhhbiBmaW5kVHJlZUVsZW1lbnQgc2luY2Ugd2Ugd2lsbCBrbm93IHRoZSBuZXh0
CiAgICAgICAgICAgICAvLyBhbmNlc3RvciBleGlzdHMgaW4gdGhlIHRyZWUuCiAgICAgICAgICAg
ICBpdGVtID0gdGhpcy5maW5kVHJlZUVsZW1lbnQoYW5jZXN0b3JzW2ldLCBpc0FuY2VzdG9yLCBn
ZXRQYXJlbnQpOwotICAgICAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAgICAgICAgICAgaXRlbS5v
bnBvcHVsYXRlKCk7CisgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGw7CisKKyAgICAgICAgICAgIGl0ZW0ub25wb3B1bGF0ZSgpOwogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FjaGVkVHJlZUVsZW1lbnQocmVwcmVzZW50ZWRPYmpl
Y3QpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438203</attachid>
            <date>2021-09-14 18:47:40 -0700</date>
            <delta_ts>2021-09-15 14:49:26 -0700</delta_ts>
            <desc>Patch v1.0</desc>
            <filename>bug-230186-20210914184739.patch</filename>
            <type>text/plain</type>
            <size>3012</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAz
NTJiZDZjODI5ODA4ZTdhNmM3YzZkNmUwMTA2YTdkNGQzOTYwZTk3Li44ZWE0NTRkMWFiZTgyNTA5
ZGIzMGQwODczZDhmMWRjODk0MzdlMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAyMS0wOS0xNCAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogYEZyYW1lRE9NVHJlZUNvbnRlbnRWaWV3YCBtYXkg
dXBkYXRlIGFmdGVyIGl0IGhhcyBgY2xvc2VkYCBjYWxsZWQsIGNhdXNpbmcgaGFuZ3Mgb24gc29t
ZSB3ZWJwYWdlcyBvbiByZWxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDE4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGBGcmFtZURPTVRyZWVDb250ZW50Vmlld2AgbWF5IGJlIGBjbG9zZWRgIGJl
dHdlZW4gYSBjYWxsIHRvIGBfcmVxdWVzdFJvb3RET01Ob2RlYCBhbmQgdGhlIHJlc3BvbnNlIGJl
aW5nCisgICAgICAgIHByb3ZpZGVkIHRvIGBfcm9vdERPTU5vZGVBdmFpbGFibGVgLiBUaGlzIGNh
biByZXN1bHQgaW4gYW4gYXR0ZW1wdCB0byBzZWxlY3QgYSBET00gbm9kZSBpbiBhbiBvbGQgYW5k
IGRldGFjaGVkCisgICAgICAgIERPTSB0cmVlLiB0byBjb21iYXQgdGhpcywgYWRkIGEgZmxhZyB0
byBgQ29udGVudFZpZXdgIHRvIG1hcmsgYSBjbG9zZWQgYENvbnRlbnRWaWV3YCBhcyBzdWNoLCBh
bmQgdGhlbiByZXR1cm4KKyAgICAgICAgZWFybHkgZnJvbSBgX3Jvb3RET01Ob2RlQXZhaWxhYmxl
YCBpZiB0aGUgYENvbnRlbnRWaWV3YCBpcyBhbHJlYWR5IGNsb3NlZC4KKworICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudFZpZXcuanM6CisgICAgICAgIChXSS5Db250ZW50Vmll
dyk6CisgICAgICAgIChXSS5Db250ZW50Vmlldy5wcm90b3R5cGUuY2xvc2VkKToKKyAgICAgICAg
KFdJLkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgaXNDbG9zZWQpOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvVmlld3MvRnJhbWVET01UcmVlQ29udGVudFZpZXcuanM6CisgICAgICAgIChXSS5G
cmFtZURPTVRyZWVDb250ZW50Vmlldy5wcm90b3R5cGUuX3Jvb3RET01Ob2RlQXZhaWxhYmxlKToK
KwogMjAyMS0wOS0xMyAgUmF6dmFuIENhbGltYW4gIDxyY2FsaW1hbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogVXBkYXRlIG5hbWluZyBvZiBXSS5DU1NDb21wbGV0aW9ucyBj
YWxsYmFjayB1c2VkIGZvciBjb2xsZWN0aW5nIHN1cHBvcnRlZCBDU1MgcHJvcGVydGllcyBmcm9t
IHRoZSB0YXJnZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvQ29udGVudFZpZXcuanMKaW5kZXggMmUyYzRmZTM0ZTMzZGYzYmFhZTdjMmU0
YmZjYWFmOWRjZTk5NzVjZi4uMjNkYjZhZjlmZjc4YTE4OWM5NDYwNzMzOGFlYTI4MjcwNDQzMjg0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
Q29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvQ29udGVudFZpZXcuanMKQEAgLTM3LDYgKzM3LDcgQEAgV0kuQ29udGVudFZpZXcgPSBj
bGFzcyBDb250ZW50VmlldyBleHRlbmRzIFdJLlZpZXcKICAgICAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5hZGQoImNvbnRlbnQtdmlldyIpOwogCiAgICAgICAgIHRoaXMuX3BhcmVudENvbnRh
aW5lciA9IG51bGw7CisgICAgICAgIHRoaXMuX2lzQ2xvc2VkID0gZmFsc2U7CiAgICAgfQogCiAg
ICAgLy8gU3RhdGljCkBAIC0zOTMsNiArMzk0LDExIEBAIFdJLkNvbnRlbnRWaWV3ID0gY2xhc3Mg
Q29udGVudFZpZXcgZXh0ZW5kcyBXSS5WaWV3CiAgICAgY2xvc2VkKCkKICAgICB7CiAgICAgICAg
IC8vIEltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgICAgIHRoaXMuX2lzQ2xvc2VkID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBnZXQgaXNDbG9zZWQoKSB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9pc0Nsb3NlZDsKICAgICB9CiAKICAgICBzYXZlVG9Db29raWUoY29va2llKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRnJhbWVET01UcmVl
Q29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9GcmFtZURPTVRyZWVDb250ZW50Vmlldy5qcwppbmRleCBkMDg4NWU2NGU1N2RjZTY3YWUwZmZk
ZWY5OTg0NjA5ODRkYmI0ZTJiLi4xN2ExZGYyYmFjMzdmNmUzMzgwMTFiOTEwMGI4ZmY3NmEwYzk3
OGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9GcmFtZURPTVRyZWVDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9GcmFtZURPTVRyZWVDb250ZW50Vmlldy5qcwpAQCAtNjIsNiAr
NjIsOSBAQCBXSS5GcmFtZURPTVRyZWVDb250ZW50VmlldyA9IGNsYXNzIEZyYW1lRE9NVHJlZUNv
bnRlbnRWaWV3IGV4dGVuZHMgV0kuRE9NVHJlZUNvbgogCiAgICAgX3Jvb3RET01Ob2RlQXZhaWxh
YmxlKHJvb3RET01Ob2RlKQogICAgIHsKKyAgICAgICAgaWYgKHRoaXMuaXNDbG9zZWQpCisgICAg
ICAgICAgICByZXR1cm47CisKICAgICAgICAgdGhpcy5kb21UcmVlT3V0bGluZS5yb290RE9NTm9k
ZSA9IHJvb3RET01Ob2RlOwogCiAgICAgICAgIGlmICghcm9vdERPTU5vZGUpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438294</attachid>
            <date>2021-09-15 14:49:28 -0700</date>
            <delta_ts>2021-09-16 15:23:24 -0700</delta_ts>
            <desc>Patch v1.2 - Review nits</desc>
            <filename>bug-230186-20210915144927.patch</filename>
            <type>text/plain</type>
            <size>3162</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAz
NTJiZDZjODI5ODA4ZTdhNmM3YzZkNmUwMTA2YTdkNGQzOTYwZTk3Li44YjI2OWNjNzU0YjA4MzRh
OTZhMjM1ZmYzZGNiMDIwZGU1NzI3OWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAyMS0wOS0xNCAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogYEZyYW1lRE9NVHJlZUNvbnRlbnRWaWV3YCBtYXkg
dXBkYXRlIGFmdGVyIGl0IGhhcyBgY2xvc2VkYCBjYWxsZWQsIGNhdXNpbmcgaGFuZ3Mgb24gc29t
ZSB3ZWJwYWdlcyBvbiByZWxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMDE4NgorCisgICAgICAgIFJldmlld2VkIGJ5IERldmluIFJvdXNzby4K
KworICAgICAgICBgRnJhbWVET01UcmVlQ29udGVudFZpZXdgIG1heSBiZSBgY2xvc2VkYCBiZXR3
ZWVuIGEgY2FsbCB0byBgX3JlcXVlc3RSb290RE9NTm9kZWAgYW5kIHRoZSByZXNwb25zZSBiZWlu
ZworICAgICAgICBwcm92aWRlZCB0byBgX3Jvb3RET01Ob2RlQXZhaWxhYmxlYC4gVGhpcyBjYW4g
cmVzdWx0IGluIGFuIGF0dGVtcHQgdG8gc2VsZWN0IGEgRE9NIG5vZGUgaW4gYW4gb2xkIGFuZCBk
ZXRhY2hlZAorICAgICAgICBET00gdHJlZS4gVG8gY29tYmF0IHRoaXMsIGFkZCBhIGZsYWcgdG8g
YENvbnRlbnRWaWV3YCB0byBtYXJrIGEgY2xvc2VkIGBDb250ZW50Vmlld2AgYXMgc3VjaCwgYW5k
IHRoZW4gcmV0dXJuCisgICAgICAgIGVhcmx5IGZyb20gYF9yb290RE9NTm9kZUF2YWlsYWJsZWAg
aWYgdGhlIGBDb250ZW50Vmlld2AgaXMgYWxyZWFkeSBjbG9zZWQuCisKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuQ29udGVudFZpZXcp
OgorICAgICAgICAoV0kuQ29udGVudFZpZXcucHJvdG90eXBlLmNsb3NlZCk6CisgICAgICAgIChX
SS5Db250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IGlzQ2xvc2VkKToKKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL1ZpZXdzL0ZyYW1lRE9NVHJlZUNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuRnJh
bWVET01UcmVlQ29udGVudFZpZXcucHJvdG90eXBlLl9yb290RE9NTm9kZUF2YWlsYWJsZSk6CisK
IDIwMjEtMDktMTMgIFJhenZhbiBDYWxpbWFuICA8cmNhbGltYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFVwZGF0ZSBuYW1pbmcgb2YgV0kuQ1NTQ29tcGxldGlvbnMgY2Fs
bGJhY2sgdXNlZCBmb3IgY29sbGVjdGluZyBzdXBwb3J0ZWQgQ1NTIHByb3BlcnRpZXMgZnJvbSB0
aGUgdGFyZ2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9Db250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvbnRlbnRWaWV3LmpzCmluZGV4IDJlMmM0ZmUzNGUzM2RmM2JhYWU3YzJlNGJm
Y2FhZjlkY2U5OTc1Y2YuLjA1MzlhNWZlNDQxMDQzZTM4NTA3MzdjMmVhMTUwNDRlYWFmYTdjOGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0Nv
bnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbnRlbnRWaWV3LmpzCkBAIC0zNyw2ICszNyw3IEBAIFdJLkNvbnRlbnRWaWV3ID0gY2xh
c3MgQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFz
c0xpc3QuYWRkKCJjb250ZW50LXZpZXciKTsKIAogICAgICAgICB0aGlzLl9wYXJlbnRDb250YWlu
ZXIgPSBudWxsOworICAgICAgICB0aGlzLl9pc0Nsb3NlZCA9IGZhbHNlOwogICAgIH0KIAogICAg
IC8vIFN0YXRpYwpAQCAtMzM4LDYgKzMzOSw4IEBAIFdJLkNvbnRlbnRWaWV3ID0gY2xhc3MgQ29u
dGVudFZpZXcgZXh0ZW5kcyBXSS5WaWV3CiAKICAgICAvLyBQdWJsaWMKIAorICAgIGdldCBpc0Ns
b3NlZCgpIHsgcmV0dXJuIHRoaXMuX2lzQ2xvc2VkOyB9CisKICAgICBnZXQgcmVwcmVzZW50ZWRP
YmplY3QoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3JlcHJlc2VudGVkT2JqZWN0OwpA
QCAtMzkzLDYgKzM5Niw3IEBAIFdJLkNvbnRlbnRWaWV3ID0gY2xhc3MgQ29udGVudFZpZXcgZXh0
ZW5kcyBXSS5WaWV3CiAgICAgY2xvc2VkKCkKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVudGVk
IGJ5IHN1YmNsYXNzZXMuCisgICAgICAgIHRoaXMuX2lzQ2xvc2VkID0gdHJ1ZTsKICAgICB9CiAK
ICAgICBzYXZlVG9Db29raWUoY29va2llKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRnJhbWVET01UcmVlQ29udGVudFZpZXcuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9GcmFtZURPTVRyZWVDb250ZW50
Vmlldy5qcwppbmRleCBkMDg4NWU2NGU1N2RjZTY3YWUwZmZkZWY5OTg0NjA5ODRkYmI0ZTJiLi4x
N2ExZGYyYmFjMzdmNmUzMzgwMTFiOTEwMGI4ZmY3NmEwYzk3OGMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9GcmFtZURPTVRyZWVDb250ZW50
Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9G
cmFtZURPTVRyZWVDb250ZW50Vmlldy5qcwpAQCAtNjIsNiArNjIsOSBAQCBXSS5GcmFtZURPTVRy
ZWVDb250ZW50VmlldyA9IGNsYXNzIEZyYW1lRE9NVHJlZUNvbnRlbnRWaWV3IGV4dGVuZHMgV0ku
RE9NVHJlZUNvbgogCiAgICAgX3Jvb3RET01Ob2RlQXZhaWxhYmxlKHJvb3RET01Ob2RlKQogICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuaXNDbG9zZWQpCisgICAgICAgICAgICByZXR1cm47CisKICAg
ICAgICAgdGhpcy5kb21UcmVlT3V0bGluZS5yb290RE9NTm9kZSA9IHJvb3RET01Ob2RlOwogCiAg
ICAgICAgIGlmICghcm9vdERPTU5vZGUpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>