<?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>194300</bug_id>
          
          <creation_ts>2019-02-05 13:32:01 -0800</creation_ts>
          <short_desc>Web Inspector: Elements tab: selection is broken after deleting the selected node</short_desc>
          <delta_ts>2019-02-06 00:54:59 -0800</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="Matt Baker">mattbaker</reporter>
          <assigned_to name="Matt Baker">mattbaker</assigned_to>
          <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1502492</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 13:32:01 -0800</bug_when>
    <thetext>Summary:
Selection is broken after deleting the selected node.

Deleting a selected node causes a new node to be selected, as expected, and the details sidebar and DOM path reflect the new selection. However, clicking on another node does not deselect the current node. A new node is selected, but the previous selection remains visible.

Steps to Reproduce:
1. Inspect test page
2. Elements tab
3. Select DIV &quot;node-2&quot;
4. Press Delete
5. DIV &quot;node-3&quot; becomes selected in the tree
6. Hit up arrow key

Actual:
  =&gt; HTML closing tag (the last node) is selected
Expected:
  =&gt; DIV &quot;node-1&quot; is selected</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502493</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-05 13:32:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/47829275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502494</commentid>
    <comment_count>2</comment_count>
      <attachid>361217</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 13:32:51 -0800</bug_when>
    <thetext>Created attachment 361217
[HTML] Test Page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502532</commentid>
    <comment_count>3</comment_count>
      <attachid>361224</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 15:06:32 -0800</bug_when>
    <thetext>Created attachment 361224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502543</commentid>
    <comment_count>4</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 15:21:38 -0800</bug_when>
    <thetext>(In reply to Matt Baker from comment #3)
&gt; Created attachment 361224 [details]
&gt; Patch

Hmm, I think `numberOfElementsInSubtree` needs to account for the closing tag TreeElement. Checking now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502544</commentid>
    <comment_count>5</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 15:26:18 -0800</bug_when>
    <thetext>(In reply to Matt Baker from comment #4)
&gt; (In reply to Matt Baker from comment #3)
&gt; &gt; Created attachment 361224 [details]
&gt; &gt; Patch
&gt; 
&gt; Hmm, I think `numberOfElementsInSubtree` needs to account for the closing
&gt; tag TreeElement. Checking now.

Nope! The TreeElement for the closing tag is a child of TreeElement for the open tag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502556</commentid>
    <comment_count>6</comment_count>
      <attachid>361224</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-02-05 15:38:12 -0800</bug_when>
    <thetext>Comment on attachment 361224
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1105
&gt; +        }

How often do we call _indexesForSubtree?

This seems fairly expensive. It doesn&apos;t seem to be any worse than before but I wonder if we can make it even better. If it&apos;s performance sensitive, perhaps we can optimize breadth-first search here. For instance, avoid using shift() since it changes indexes of array items every time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502559</commentid>
    <comment_count>7</comment_count>
      <attachid>361224</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-02-05 15:43:16 -0800</bug_when>
    <thetext>Comment on attachment 361224
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1105
&gt;&gt; +        }
&gt; 
&gt; How often do we call _indexesForSubtree?
&gt; 
&gt; This seems fairly expensive. It doesn&apos;t seem to be any worse than before but I wonder if we can make it even better. If it&apos;s performance sensitive, perhaps we can optimize breadth-first search here. For instance, avoid using shift() since it changes indexes of array items every time.

A straightforward optimization here is to replace shift with pop and use a depth-first search.

https://jsperf.com/pop-vs-shift-on-a-array/1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502562</commentid>
    <comment_count>8</comment_count>
      <attachid>361233</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 15:43:59 -0800</bug_when>
    <thetext>Created attachment 361233
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502564</commentid>
    <comment_count>9</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 15:45:02 -0800</bug_when>
    <thetext>(In reply to Nikita Vasilyev from comment #7)
&gt; Comment on attachment 361224 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361224&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1105
&gt; &gt;&gt; +        }
&gt; &gt; 
&gt; &gt; How often do we call _indexesForSubtree?

Not often. Only when removing things from the DOM tree. However, a series of node removals triggered from script could potentially be slow.

&gt; &gt; This seems fairly expensive. It doesn&apos;t seem to be any worse than before but I wonder if we can make it even better. If it&apos;s performance sensitive, perhaps we can optimize breadth-first search here. For instance, avoid using shift() since it changes indexes of array items every time.
&gt; 
&gt; A straightforward optimization here is to replace shift with pop and use a
&gt; depth-first search.
&gt; 
&gt; https://jsperf.com/pop-vs-shift-on-a-array/1

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502568</commentid>
    <comment_count>10</comment_count>
      <attachid>361233</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-02-05 15:58:34 -0800</bug_when>
    <thetext>Comment on attachment 361233
Patch

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

&gt; Source/WebInspectorUI/ChangeLog:18
&gt; +        This method did not stay within the subtree rooted at `treeElement`.

If you&apos;re saying that `stayWithin` wasn&apos;t working, isn&apos;t that a bug worth fixing?

&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1097
&gt; +                let child = elements.pop();

I don&apos;t like the idea of constantly pushing/popping to an array.  Do you have any performance numbers as to whether this approach is faster than using recursion?  A recursive approach would only modify count, which should be less work.

    function numberOfElementsInSubtree(treeElement) {
        let count = 0;
        if (treeElement.revealed()) {
            ++count;
            for (let child of treeElement.children)
                count += numberOfElementsInSubtree(child);
        }
        return count;
    }

&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1102
&gt; +                elements.push(...child.children);

This should definitely be a `concat` instead of a spread.  I&apos;ve often found that spread is often not that great, performance wise.

    elements = elements.concat(child.children);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502569</commentid>
    <comment_count>11</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 16:02:58 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #10)
&gt; Comment on attachment 361233 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361233&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/ChangeLog:18
&gt; &gt; +        This method did not stay within the subtree rooted at `treeElement`.
&gt; 
&gt; If you&apos;re saying that `stayWithin` wasn&apos;t working, isn&apos;t that a bug worth
&gt; fixing?

It seems like a bug, but I&apos;m not 100% sure what the intention was and don&apos;t want to change that here, as it would have such a large ripple effect.

&gt; &gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1097
&gt; &gt; +                let child = elements.pop();
&gt; 
&gt; I don&apos;t like the idea of constantly pushing/popping to an array.  Do you
&gt; have any performance numbers as to whether this approach is faster than
&gt; using recursion?  A recursive approach would only modify count, which should
&gt; be less work.
&gt; 
&gt;     function numberOfElementsInSubtree(treeElement) {
&gt;         let count = 0;
&gt;         if (treeElement.revealed()) {
&gt;             ++count;
&gt;             for (let child of treeElement.children)
&gt;                 count += numberOfElementsInSubtree(child);
&gt;         }
&gt;         return count;
&gt;     }

I wanted to avoid a recursive approach just in case a very large subtree is being traversed. I seem to recall this being a thing at one point. Secondly, we can&apos;t use treeElement.revealed(), since that will return false for children with a collapsed parent, and we want to count all TreeElements that are in the tree.

&gt; &gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1102
&gt; &gt; +                elements.push(...child.children);
&gt; 
&gt; This should definitely be a `concat` instead of a spread.  I&apos;ve often found
&gt; that spread is often not that great, performance wise.
&gt; 
&gt;     elements = elements.concat(child.children);

I actually meant to change that. Thanks for reminding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502570</commentid>
    <comment_count>12</comment_count>
      <attachid>361235</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 16:06:25 -0800</bug_when>
    <thetext>Created attachment 361235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502589</commentid>
    <comment_count>13</comment_count>
      <attachid>361235</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-02-05 16:33:49 -0800</bug_when>
    <thetext>Comment on attachment 361235
Patch

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

rs=me

&gt; Source/WebInspectorUI/UserInterface/Views/TreeOutline.js:1096
&gt; +                let child = elements.pop();

Rather than pop, perhaps you can just keep an index and traverse the array with the index (instead of checking `elements.length`, you could check `index &lt; elements.length`).  My gut is telling me we should avoid modifying the array as much as possible (lots of `length` churn).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502613</commentid>
    <comment_count>14</comment_count>
      <attachid>361235</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-02-05 16:57:56 -0800</bug_when>
    <thetext>Comment on attachment 361235
Patch

https://trac.webkit.org/changeset/241003</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>361217</attachid>
            <date>2019-02-05 13:32:51 -0800</date>
            <delta_ts>2019-02-05 13:32:51 -0800</delta_ts>
            <desc>[HTML] Test Page</desc>
            <filename>delete-node-test.html</filename>
            <type>text/html</type>
            <size>80</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">PGRpdiBjbGFzcz0ibm9kZS0xIj48L2Rpdj4KPGRpdiBjbGFzcz0ibm9kZS0yIj48L2Rpdj4KPGRp
diBjbGFzcz0ibm9kZS0zIj48L2Rpdj4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361224</attachid>
            <date>2019-02-05 15:06:32 -0800</date>
            <delta_ts>2019-02-05 15:43:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194300-20190205150631.patch</filename>
            <type>text/plain</type>
            <size>3193</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwOTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBk
OWYyNDgwMzhmMjUxNzNjNzM3OWZiNzc0YzQyZDFhZmFmMjdmOWE3Li5jOGEzYWE4ZjBkNzhmYjFk
OTEzYTFkNTMxNzljZDZlNDU2OWM0M2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxOS0wMi0wNSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRWxlbWVudHMgdGFiOiBzZWxlY3Rpb24gaXMgYnJv
a2VuIGFmdGVyIGRlbGV0aW5nIHRoZSBzZWxlY3RlZCBub2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQzMDAKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzQ3ODI5Mjc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIERlbGV0aW5nIGEgVHJlZUVsZW1lbnQgY2FuIGNhdXNlIGFuIEluZGV4U2V0IGluY2x1
ZGluZyBpbmRleGVzCisgICAgICAgIG91dHNpZGUgdGhlIGRlbGV0ZWQgcmFuZ2UgdG8gYmUgcGFz
c2VkIHRvIFNlbGVjdGlvbkNvbnRyb2xsZXIsCisgICAgICAgIGNvcnJ1cHRpbmcgdGhlIGludGVy
bmFsIHNlbGVjdGlvbiBzdGF0ZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVHJl
ZU91dGxpbmUuanM6CisgICAgICAgIChXSS5UcmVlT3V0bGluZS5wcm90b3R5cGUuX2luZGV4ZXNG
b3JTdWJ0cmVlLm51bWJlck9mRWxlbWVudHNJblN1YnRyZWUpOiBBZGRlZC4KKyAgICAgICAgKFdJ
LlRyZWVPdXRsaW5lLnByb3RvdHlwZS5faW5kZXhlc0ZvclN1YnRyZWUpOgorICAgICAgICBGaW5k
aW5nIHRoZSBsYXN0IChyaWdodG1vc3QgbGVhZikgVHJlZUVsZW1lbnQgaW4gdGhlIHN1YnRyZWUg
dXNlZAorICAgICAgICBUcmVlRWxlbWVudC5wcm90b3R5cGUudHJhdmVyc2VOZXh0RWxlbWVudCB0
byBkbyBhIGRlcHRoIGZpcnN0IHRyYXZlcnNhbC4KKyAgICAgICAgVGhpcyBtZXRob2QgZGlkIG5v
dCBzdGF5IHdpdGhpbiB0aGUgc3VidHJlZSByb290ZWQgYXQgYHRyZWVFbGVtZW50YC4KKwogMjAx
OS0wMi0wNSAgTmlraXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBTdHlsZXM6IHJlbW92ZSBoYXJtbGVzcyAicHJvcGVydHkgd2FzIHVu
bG9ja2VkIiBhc3NlcnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UcmVlT3V0bGluZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RyZWVPdXRsaW5lLmpzCmluZGV4IGY3ODNhY2RhYmZhNmRhZDM3YmEw
MWQ1MzViNzczMjc3NzViZjg1M2UuLjk3ZmYyZDg1YWM3ZTIzMDFlYzhlZTM1NWY4ZDJhYWM4Y2Jj
Nzk1OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1RyZWVPdXRsaW5lLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1RyZWVPdXRsaW5lLmpzCkBAIC0xMDkwLDI2ICsxMDkwLDI1IEBAIFdJLlRyZWVP
dXRsaW5lID0gY2xhc3MgVHJlZU91dGxpbmUgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYg
KCF0cmVlT3V0bGluZSkKICAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAgIGxldCBm
aXJzdENoaWxkID0gdHJlZUVsZW1lbnQuY2hpbGRyZW5bMF07Ci0gICAgICAgIGlmICh0cmVlRWxl
bWVudC5yb290ICYmICFmaXJzdENoaWxkKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAg
ICAgICAgbGV0IGN1cnJlbnQgPSBmaXJzdENoaWxkIHx8IHRyZWVFbGVtZW50OwotICAgICAgICBs
ZXQgc3RhcnRJbmRleCA9IHRyZWVPdXRsaW5lLl9pbmRleE9mVHJlZUVsZW1lbnQoY3VycmVudCk7
Ci0gICAgICAgIGxldCBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7Ci0KLSAgICAgICAgY29uc3Qgc2tp
cFVucmV2ZWFsZWQgPSBmYWxzZTsKLSAgICAgICAgY29uc3Qgc3RheVdpdGhpbiA9IHRyZWVFbGVt
ZW50OwotICAgICAgICBjb25zdCBkb250UG9wdWxhdGUgPSB0cnVlOwotCi0gICAgICAgIHdoaWxl
IChjdXJyZW50ID0gY3VycmVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChza2lwVW5yZXZlYWxl
ZCwgc3RheVdpdGhpbiwgZG9udFBvcHVsYXRlKSkKLSAgICAgICAgICAgIGVuZEluZGV4Kys7Cisg
ICAgICAgIGZ1bmN0aW9uIG51bWJlck9mRWxlbWVudHNJblN1YnRyZWUodHJlZUVsZW1lbnQpIHsK
KyAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IHRyZWVFbGVtZW50LnJvb3QgPyBBcnJheS5mcm9t
KHRyZWVFbGVtZW50LmNoaWxkcmVuKSA6IFt0cmVlRWxlbWVudF07CisgICAgICAgICAgICBsZXQg
Y291bnQgPSAwOworICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnRzLmxlbmd0aCkgeworICAgICAg
ICAgICAgICAgIGxldCBjaGlsZCA9IGVsZW1lbnRzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAg
aWYgKGNoaWxkLmhpZGRlbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgbGV0IGNvdW50ID0gZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMTsKKyAgICAgICAgICAgICAg
ICBjb3VudCsrOworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goLi4uY2hpbGQuY2hpbGRy
ZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICB9
CiAKKyAgICAgICAgbGV0IGZpcnN0Q2hpbGQgPSB0cmVlRWxlbWVudC5yb290ID8gdHJlZUVsZW1l
bnQuY2hpbGRyZW5bMF0gOiB0cmVlRWxlbWVudDsKKyAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB0
cmVlT3V0bGluZS5faW5kZXhPZlRyZWVFbGVtZW50KGZpcnN0Q2hpbGQpOworICAgICAgICBsZXQg
Y291bnQgPSBudW1iZXJPZkVsZW1lbnRzSW5TdWJ0cmVlKHRyZWVFbGVtZW50KTsKICAgICAgICAg
bGV0IGluZGV4ZXMgPSBuZXcgV0kuSW5kZXhTZXQ7CiAgICAgICAgIGluZGV4ZXMuYWRkUmFuZ2Uo
c3RhcnRJbmRleCwgY291bnQpOwotCiAgICAgICAgIHJldHVybiBpbmRleGVzOwogICAgIH0KIH07
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361233</attachid>
            <date>2019-02-05 15:43:59 -0800</date>
            <delta_ts>2019-02-05 16:06:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194300-20190205154358.patch</filename>
            <type>text/plain</type>
            <size>3191</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwOTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBk
OWYyNDgwMzhmMjUxNzNjNzM3OWZiNzc0YzQyZDFhZmFmMjdmOWE3Li5jOGEzYWE4ZjBkNzhmYjFk
OTEzYTFkNTMxNzljZDZlNDU2OWM0M2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxOS0wMi0wNSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRWxlbWVudHMgdGFiOiBzZWxlY3Rpb24gaXMgYnJv
a2VuIGFmdGVyIGRlbGV0aW5nIHRoZSBzZWxlY3RlZCBub2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQzMDAKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzQ3ODI5Mjc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIERlbGV0aW5nIGEgVHJlZUVsZW1lbnQgY2FuIGNhdXNlIGFuIEluZGV4U2V0IGluY2x1
ZGluZyBpbmRleGVzCisgICAgICAgIG91dHNpZGUgdGhlIGRlbGV0ZWQgcmFuZ2UgdG8gYmUgcGFz
c2VkIHRvIFNlbGVjdGlvbkNvbnRyb2xsZXIsCisgICAgICAgIGNvcnJ1cHRpbmcgdGhlIGludGVy
bmFsIHNlbGVjdGlvbiBzdGF0ZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVHJl
ZU91dGxpbmUuanM6CisgICAgICAgIChXSS5UcmVlT3V0bGluZS5wcm90b3R5cGUuX2luZGV4ZXNG
b3JTdWJ0cmVlLm51bWJlck9mRWxlbWVudHNJblN1YnRyZWUpOiBBZGRlZC4KKyAgICAgICAgKFdJ
LlRyZWVPdXRsaW5lLnByb3RvdHlwZS5faW5kZXhlc0ZvclN1YnRyZWUpOgorICAgICAgICBGaW5k
aW5nIHRoZSBsYXN0IChyaWdodG1vc3QgbGVhZikgVHJlZUVsZW1lbnQgaW4gdGhlIHN1YnRyZWUg
dXNlZAorICAgICAgICBUcmVlRWxlbWVudC5wcm90b3R5cGUudHJhdmVyc2VOZXh0RWxlbWVudCB0
byBkbyBhIGRlcHRoIGZpcnN0IHRyYXZlcnNhbC4KKyAgICAgICAgVGhpcyBtZXRob2QgZGlkIG5v
dCBzdGF5IHdpdGhpbiB0aGUgc3VidHJlZSByb290ZWQgYXQgYHRyZWVFbGVtZW50YC4KKwogMjAx
OS0wMi0wNSAgTmlraXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBTdHlsZXM6IHJlbW92ZSBoYXJtbGVzcyAicHJvcGVydHkgd2FzIHVu
bG9ja2VkIiBhc3NlcnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UcmVlT3V0bGluZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RyZWVPdXRsaW5lLmpzCmluZGV4IGY3ODNhY2RhYmZhNmRhZDM3YmEw
MWQ1MzViNzczMjc3NzViZjg1M2UuLjEzMDNiOWI3ODQ2OWIzMGZkYzQ2MWVjYWYxMTcxOTE0MTk0
OGEzNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1RyZWVPdXRsaW5lLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1RyZWVPdXRsaW5lLmpzCkBAIC0xMDkwLDI2ICsxMDkwLDI1IEBAIFdJLlRyZWVP
dXRsaW5lID0gY2xhc3MgVHJlZU91dGxpbmUgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYg
KCF0cmVlT3V0bGluZSkKICAgICAgICAgICAgIHJldHVybiBudWxsOwogCi0gICAgICAgIGxldCBm
aXJzdENoaWxkID0gdHJlZUVsZW1lbnQuY2hpbGRyZW5bMF07Ci0gICAgICAgIGlmICh0cmVlRWxl
bWVudC5yb290ICYmICFmaXJzdENoaWxkKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAg
ICAgICAgbGV0IGN1cnJlbnQgPSBmaXJzdENoaWxkIHx8IHRyZWVFbGVtZW50OwotICAgICAgICBs
ZXQgc3RhcnRJbmRleCA9IHRyZWVPdXRsaW5lLl9pbmRleE9mVHJlZUVsZW1lbnQoY3VycmVudCk7
Ci0gICAgICAgIGxldCBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7Ci0KLSAgICAgICAgY29uc3Qgc2tp
cFVucmV2ZWFsZWQgPSBmYWxzZTsKLSAgICAgICAgY29uc3Qgc3RheVdpdGhpbiA9IHRyZWVFbGVt
ZW50OwotICAgICAgICBjb25zdCBkb250UG9wdWxhdGUgPSB0cnVlOwotCi0gICAgICAgIHdoaWxl
IChjdXJyZW50ID0gY3VycmVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChza2lwVW5yZXZlYWxl
ZCwgc3RheVdpdGhpbiwgZG9udFBvcHVsYXRlKSkKLSAgICAgICAgICAgIGVuZEluZGV4Kys7Cisg
ICAgICAgIGZ1bmN0aW9uIG51bWJlck9mRWxlbWVudHNJblN1YnRyZWUodHJlZUVsZW1lbnQpIHsK
KyAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IHRyZWVFbGVtZW50LnJvb3QgPyBBcnJheS5mcm9t
KHRyZWVFbGVtZW50LmNoaWxkcmVuKSA6IFt0cmVlRWxlbWVudF07CisgICAgICAgICAgICBsZXQg
Y291bnQgPSAwOworICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnRzLmxlbmd0aCkgeworICAgICAg
ICAgICAgICAgIGxldCBjaGlsZCA9IGVsZW1lbnRzLnBvcCgpOworICAgICAgICAgICAgICAgIGlm
IChjaGlsZC5oaWRkZW4pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGxldCBjb3VudCA9IGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDE7CisgICAgICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKC4uLmNoaWxkLmNoaWxkcmVu
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjb3VudDsKKyAgICAgICAgfQog
CisgICAgICAgIGxldCBmaXJzdENoaWxkID0gdHJlZUVsZW1lbnQucm9vdCA/IHRyZWVFbGVtZW50
LmNoaWxkcmVuWzBdIDogdHJlZUVsZW1lbnQ7CisgICAgICAgIGxldCBzdGFydEluZGV4ID0gdHJl
ZU91dGxpbmUuX2luZGV4T2ZUcmVlRWxlbWVudChmaXJzdENoaWxkKTsKKyAgICAgICAgbGV0IGNv
dW50ID0gbnVtYmVyT2ZFbGVtZW50c0luU3VidHJlZSh0cmVlRWxlbWVudCk7CiAgICAgICAgIGxl
dCBpbmRleGVzID0gbmV3IFdJLkluZGV4U2V0OwogICAgICAgICBpbmRleGVzLmFkZFJhbmdlKHN0
YXJ0SW5kZXgsIGNvdW50KTsKLQogICAgICAgICByZXR1cm4gaW5kZXhlczsKICAgICB9CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361235</attachid>
            <date>2019-02-05 16:06:25 -0800</date>
            <delta_ts>2019-02-06 00:54:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194300-20190205160625.patch</filename>
            <type>text/plain</type>
            <size>3223</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwOTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA1
NmIzMzgzNmQzNzExYjYzYjRhYWMxZGE5M2FjMmM5NmQ3MDVkZTIzLi5hZjI3ZWZhYTFkODA2OTIy
Y2EzZTMyNDZiM2I2YTkzYzQ0OGVmZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxOS0wMi0wNSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRWxlbWVudHMgdGFiOiBzZWxlY3Rpb24gaXMgYnJv
a2VuIGFmdGVyIGRlbGV0aW5nIHRoZSBzZWxlY3RlZCBub2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQzMDAKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzQ3ODI5Mjc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIERlbGV0aW5nIGEgVHJlZUVsZW1lbnQgY2FuIGNhdXNlIGFuIEluZGV4U2V0IGluY2x1
ZGluZyBpbmRleGVzCisgICAgICAgIG91dHNpZGUgdGhlIGRlbGV0ZWQgcmFuZ2UgdG8gYmUgcGFz
c2VkIHRvIFNlbGVjdGlvbkNvbnRyb2xsZXIsCisgICAgICAgIGNvcnJ1cHRpbmcgdGhlIGludGVy
bmFsIHNlbGVjdGlvbiBzdGF0ZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVHJl
ZU91dGxpbmUuanM6CisgICAgICAgIChXSS5UcmVlT3V0bGluZS5wcm90b3R5cGUuX2luZGV4ZXNG
b3JTdWJ0cmVlLm51bWJlck9mRWxlbWVudHNJblN1YnRyZWUpOiBBZGRlZC4KKyAgICAgICAgKFdJ
LlRyZWVPdXRsaW5lLnByb3RvdHlwZS5faW5kZXhlc0ZvclN1YnRyZWUpOgorICAgICAgICBGaW5k
aW5nIHRoZSBsYXN0IChyaWdodG1vc3QgbGVhZikgVHJlZUVsZW1lbnQgaW4gdGhlIHN1YnRyZWUg
dXNlZAorICAgICAgICBUcmVlRWxlbWVudC5wcm90b3R5cGUudHJhdmVyc2VOZXh0RWxlbWVudCB0
byBkbyBhIGRlcHRoIGZpcnN0IHRyYXZlcnNhbC4KKyAgICAgICAgVGhpcyBtZXRob2QgZGlkIG5v
dCBzdGF5IHdpdGhpbiB0aGUgc3VidHJlZSByb290ZWQgYXQgYHRyZWVFbGVtZW50YC4KKwogMjAx
OS0wMi0wNSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogUkVHUkVTU0lPTiAocjI0MDk0Nyk6IFJlc291cmNlcyB0YWI6IGNhbid0IHNl
bGVjdCBtYWluIGZyYW1lIGFmdGVyIHJlZnJlc2hpbmcgcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHJlZU91dGxpbmUuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UcmVlT3V0bGluZS5qcwppbmRl
eCA0ZWYzZTg2ZWVhMjMzZDI4MjYxYjEzODFhMGZmMzEwYzc2YmI3OWIwLi45ZjIxYTJjNTVhNzhl
MTI2NzNiZjQ5ZDk1NzBlYzVhMDQ4NWY2YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UcmVlT3V0bGluZS5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UcmVlT3V0bGluZS5qcwpAQCAtMTA4OSwy
NiArMTA4OSwyNSBAQCBXSS5UcmVlT3V0bGluZSA9IGNsYXNzIFRyZWVPdXRsaW5lIGV4dGVuZHMg
V0kuT2JqZWN0CiAgICAgICAgIGlmICghdHJlZU91dGxpbmUpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKIAotICAgICAgICBsZXQgZmlyc3RDaGlsZCA9IHRyZWVFbGVtZW50LmNoaWxkcmVuWzBd
OwotICAgICAgICBpZiAodHJlZUVsZW1lbnQucm9vdCAmJiAhZmlyc3RDaGlsZCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGxldCBjdXJyZW50ID0gZmlyc3RDaGlsZCB8fCB0
cmVlRWxlbWVudDsKLSAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB0cmVlT3V0bGluZS5faW5kZXhP
ZlRyZWVFbGVtZW50KGN1cnJlbnQpOwotICAgICAgICBsZXQgZW5kSW5kZXggPSBzdGFydEluZGV4
OwotCi0gICAgICAgIGNvbnN0IHNraXBVbnJldmVhbGVkID0gZmFsc2U7Ci0gICAgICAgIGNvbnN0
IHN0YXlXaXRoaW4gPSB0cmVlRWxlbWVudDsKLSAgICAgICAgY29uc3QgZG9udFBvcHVsYXRlID0g
dHJ1ZTsKLQotICAgICAgICB3aGlsZSAoY3VycmVudCA9IGN1cnJlbnQudHJhdmVyc2VOZXh0VHJl
ZUVsZW1lbnQoc2tpcFVucmV2ZWFsZWQsIHN0YXlXaXRoaW4sIGRvbnRQb3B1bGF0ZSkpCi0gICAg
ICAgICAgICBlbmRJbmRleCsrOworICAgICAgICBmdW5jdGlvbiBudW1iZXJPZkVsZW1lbnRzSW5T
dWJ0cmVlKHRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICBsZXQgZWxlbWVudHMgPSB0cmVlRWxl
bWVudC5yb290ID8gQXJyYXkuZnJvbSh0cmVlRWxlbWVudC5jaGlsZHJlbikgOiBbdHJlZUVsZW1l
bnRdOworICAgICAgICAgICAgbGV0IGNvdW50ID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChlbGVt
ZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSBlbGVtZW50cy5wb3Ao
KTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaGlkZGVuKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBsZXQgY291bnQgPSBlbmRJbmRleCAtIHN0YXJ0SW5kZXgg
KyAxOworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgZWxlbWVudHMg
PSBlbGVtZW50cy5jb25jYXQoY2hpbGQuY2hpbGRyZW4pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICB9CiAKKyAgICAgICAgbGV0IGZpcnN0Q2hpbGQg
PSB0cmVlRWxlbWVudC5yb290ID8gdHJlZUVsZW1lbnQuY2hpbGRyZW5bMF0gOiB0cmVlRWxlbWVu
dDsKKyAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB0cmVlT3V0bGluZS5faW5kZXhPZlRyZWVFbGVt
ZW50KGZpcnN0Q2hpbGQpOworICAgICAgICBsZXQgY291bnQgPSBudW1iZXJPZkVsZW1lbnRzSW5T
dWJ0cmVlKHRyZWVFbGVtZW50KTsKICAgICAgICAgbGV0IGluZGV4ZXMgPSBuZXcgV0kuSW5kZXhT
ZXQ7CiAgICAgICAgIGluZGV4ZXMuYWRkUmFuZ2Uoc3RhcnRJbmRleCwgY291bnQpOwotCiAgICAg
ICAgIHJldHVybiBpbmRleGVzOwogICAgIH0KIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>