<?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>160774</bug_id>
          
          <creation_ts>2016-08-11 12:11:33 -0700</creation_ts>
          <short_desc>Web Inspector: ER: Copy Node as HTML with Computed Style</short_desc>
          <delta_ts>2022-05-04 07:41:34 -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>NEW</bug_status>
          <resolution></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="James Craig">jcraig</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gsnedders</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1219364</commentid>
    <comment_count>0</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2016-08-11 12:11:33 -0700</bug_when>
    <thetext>Web Inspector: ER: Copy Node as HTML with Computed Style

It&apos;d be super useful to have a variant of the &quot;Copy as HTML&quot; feature that dumped each element&apos;s computed style properties into the style attribute of each tag. It&apos;d be harder to read the generated HTML, but easier to debug and create test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219365</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-08-11 12:11:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/27809183&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219366</commentid>
    <comment_count>2</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-11 12:14:13 -0700</bug_when>
    <thetext>This would be very useful, indeed. I&apos;d use it myself, I make test cases too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220902</commentid>
    <comment_count>3</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-17 11:25:11 -0700</bug_when>
    <thetext>Devin, this seems right up your alley. Feel free to assign it to yourself if you want to work on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221291</commentid>
    <comment_count>4</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2016-08-18 18:56:36 -0700</bug_when>
    <thetext>Do we want to dump the computed style of each element or just the selected/context-menu element?  Also, do we want to display all the computed properties, or just the ones that have been specified/inherited?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221474</commentid>
    <comment_count>5</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-19 14:20:45 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Do we want to dump the computed style of each element or just the
&gt; selected/context-menu element?

Selected/context-menu element and all its descendants. I imagine it can
blow up very easily, but I&apos;d rather deal with this later.

&gt; Also, do we want to display all the computed
&gt; properties, or just the ones that have been specified/inherited?

The ones that have been specified/inherited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221710</commentid>
    <comment_count>6</comment_count>
      <attachid>286554</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2016-08-20 22:40:15 -0700</bug_when>
    <thetext>Created attachment 286554
Patch

I strayed away from the description slightly due to the fact that we are unable to reliably fetch the computed style of each node (including children) in a synchronous way (at least with the current implementation).  Given that there is already a &quot;Copy as HTML&quot;, I thought that it made more sense to just add &quot;Copy Computed Style&quot; that dumps a newline-separated list of the set/inherited CSS properties to the clipboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221711</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-20 22:41:56 -0700</bug_when>
    <thetext>Attachment 286554 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js:711:  Line contains single-quote character.  [js/syntax] [5]
ERROR: Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js:712:  Line contains single-quote character.  [js/syntax] [5]
Total errors found: 2 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221712</commentid>
    <comment_count>8</comment_count>
      <attachid>286555</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2016-08-20 22:43:34 -0700</bug_when>
    <thetext>Created attachment 286555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221769</commentid>
    <comment_count>9</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-21 14:28:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created attachment 286554 [details]
&gt; Patch
&gt; 
&gt; I strayed away from the description slightly due to the fact that we are
&gt; unable to reliably fetch the computed style of each node (including
&gt; children) in a synchronous way (at least with the current implementation). 
&gt; Given that there is already a &quot;Copy as HTML&quot;, I thought that it made more
&gt; sense to just add &quot;Copy Computed Style&quot; that dumps a newline-separated list
&gt; of the set/inherited CSS properties to the clipboard.

I don&apos;t think this is very helpful. Getting computed styled of all descendants is a harder task, but that&apos;s what would make this feature useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221775</commentid>
    <comment_count>10</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2016-08-21 15:15:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I don&apos;t think this is very helpful. Getting computed styled of all
&gt; descendants is a harder task, but that&apos;s what would make this feature useful.

I would agree that getting the computed style of all descendants would be more useful, but the issue is with fetching those styles.  Since we lazy-load instances of DOMNodeStyles when the user selects an element in the DOM tree, if they haven&apos;t selected a descendent node and try to dump the computed styles via the context menu item on a parent, it will just show an empty CSSStyleDeclaration (no properties).

I am pretty sure that I could include a WrappedPromise in some of the functions (specifically DOMNodeStyles.prototype.refresh) that would let us tie into the fetch when it completes, but this has the possibility of lagging and may add items to the clipboard in a very asynchronous manner.

If we are OK with that, then I can do this, but I am worried about situations where the user attempts to click the context menu item on &lt;body&gt; and has the entire DOM tree copied to the clipboard after a few seconds since it has to perform so many calls to generate the computed style of each descendant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221959</commentid>
    <comment_count>11</comment_count>
      <attachid>286555</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-08-22 13:47:10 -0700</bug_when>
    <thetext>Comment on attachment 286555
Patch

r- while we discuss implementing the more useful feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221968</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-08-22 14:10:21 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; I don&apos;t think this is very helpful. Getting computed styled of all
&gt; &gt; descendants is a harder task, but that&apos;s what would make this feature useful.
&gt; 
&gt; I would agree that getting the computed style of all descendants would be
&gt; more useful, but the issue is with fetching those styles.  Since we
&gt; lazy-load instances of DOMNodeStyles when the user selects an element in the
&gt; DOM tree, if they haven&apos;t selected a descendent node and try to dump the
&gt; computed styles via the context menu item on a parent, it will just show an
&gt; empty CSSStyleDeclaration (no properties).

I think the more useful feature is what users will want and expect.

The question then is how do we implement it? You&apos;ve alluded to how the frontend could do this, laboriously, by requesting information about every node. Which breaks down for large documents. But we haven&apos;t explored other options.

I think this could be done in the backend.

Take for example, this test page, and the user wants to copy the styles for the &lt;body&gt; element:

&gt; index.html:
&gt; 
&gt;     &lt;!DOCTYPE html&gt;
&gt;     &lt;html&gt;
&gt;     &lt;head&gt;
&gt;         &lt;link rel=&quot;stylesheet&quot; href=&quot;styles1.css&quot;&gt;
&gt;         &lt;link rel=&quot;stylesheet&quot; href=&quot;styles2.css&quot;&gt;
&gt;         &lt;script&gt;
&gt;         window.addEventListener(&quot;load&quot;, function() {
&gt;             document.getElementById(&quot;red&quot;).style.color = &quot;red&quot;;
&gt;         });
&gt;         &lt;/script&gt;
&gt;     &lt;/head&gt;
&gt;     &lt;body&gt;
&gt;         &lt;div class=&quot;foo&quot;&gt;
&gt;             &lt;p style=&quot;color:green&quot;&gt;Green&lt;/p&gt;
&gt;             &lt;p&gt;Blue&lt;/p&gt;
&gt;             &lt;p id=&quot;red&quot;&gt;Red&lt;/p&gt;
&gt;         &lt;/div&gt;
&gt;     &lt;/body&gt;
&gt;     &lt;/html&gt;
&gt; 
&gt; styles1.css:
&gt; 
&gt;     .foo { color: blue; text-decoration: underline; }
&gt;     .foo:hover { color: black; }
&gt;
&gt; styles2.css:
&gt;
&gt;     body { margin: 0; padding: 0; }


There are a few approaches I can think of.

1. Iterate all nodes from the target, producing inline style for non-inherited overridden styles:

    &lt;body style=&quot;margin: 0; padding: 0&quot;&gt;
        &lt;div class=&quot;foo&quot; style=&quot;color: blue&quot;&gt;
            &lt;p style=&quot;color: green; text-decoration: underline&quot;&gt;Green&lt;/p&gt;
            &lt;p style=&quot;color: blue; text-decoration: underline&quot;&gt;Blue&lt;/p&gt;
            &lt;p id=&quot;red&quot; style=&quot;color: red; text-decoration: underline&quot;&gt;Red&lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;

2. Collect the stylesheets into an inline &lt;style&gt; alongside the nodes iterated from target with their inline styles that don&apos;t come from a stylesheet.

    &lt;style&gt;
    .foo { color: blue; text-decoration: underline; }
    .foo:hover { color: black; }
    body { margin: 0; padding: 0; }
    &lt;/style&gt;
    &lt;body&gt;
        &lt;div class=&quot;foo&quot;&gt;
            &lt;p style=&quot;color: green&quot;&gt;Green&lt;/p&gt;
            &lt;p&gt;Blue&lt;/p&gt;
            &lt;p id=&quot;red&quot; style=&quot;color: red&quot;&gt;Red&lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;

Forgive any subtle typos or logic errors I may have made, I typed this all into a bugzilla comment without testing.

There are pro and cons of both approaches as I see it:

    1. Pure Inline Styles
        - standalone, easy to copy/paste
        - verbose, numerous styles may be repeated over and over again
        - a pure snapshot, missing pseudo states (like :hover)
        - can provide developer with surprising discovery (&quot;oh this style is on a lot of elements, why?&quot;)

    2. Stylesheet + Inline Styles
        - can contain &quot;unused styles&quot; - but that can be pseudo states (like :hover)
        - total verbose, copying entire stylesheets can be wasteful
        - more readable DOM, no unnecessary inline style clutter
        - less copy/pasteable, can be a good thing

I rather like (2) because of the fact it can handle pseudo classes like :hover. But I&apos;d like to hear what other users think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1866441</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2022-05-04 07:41:34 -0700</bug_when>
    <thetext>I would on the whole err on the side of (1) because it means that you get a self-contained bunch of HTML, rather than something that&apos;s only acceptable when you&apos;re putting it directly under the root element (given style elements need to be the child of the head element).

My current use-case is wanting to copy a small snippet of Twitter.com&apos;s HTML+CSS to see if simply extracting a small part is sufficient to reproduce a bug. Having everything directly tied to the elements makes it easier to hand-edit without having to figure out what classes do what.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286554</attachid>
            <date>2016-08-20 22:40:15 -0700</date>
            <delta_ts>2016-08-20 22:43:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>160774.diff</filename>
            <type>text/plain</type>
            <size>3269</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDhiMjI1MGYuLjM4MWEwMGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2LTA4LTIwICBEZXZpbiBSb3Vzc28g
IDxkY3JvdXNzbyt3ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVS
OiBDb3B5IE5vZGUgYXMgSFRNTCB3aXRoIENvbXB1dGVkIFN0eWxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA3NzQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ov
bG9jYWxpemVkU3RyaW5ncy5qczoKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvRE9N
VHJlZUVsZW1lbnQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQucHJv
dG90eXBlLl9wb3B1bGF0ZU5vZGVDb250ZXh0TWVudSk6CisgICAgICAgIFByb3ZpZGUgIkNvcHkg
Q29tcHV0ZWQgU3R5bGUiIGNvbnRleHQgbWVudSBpdGVtIHRvIGNvcHkgYWxsIHNldCBvciBpbmhl
cml0ZWQgQ1NTIHByb3BlcnRpZXMuCisKIDIwMTYtMDgtMTkgIERldmluIFJvdXNzbyAgPGRjcm91
c3NvK3dlYmtpdEBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQ29uc29sZSBs
b2cgY291bnRlciBvbiB0aGUgZGFzaGJvYXJkIHNob3VsZCBiZSBiZXR0ZXIgYXQgZGlzcGxheWlu
ZyBsYXJnZSBudW1iZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxp
emF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwppbmRleCAwN2Uz
YjBkODllYTJjMGMwMTA1NGQzNTk5YzhiZjg2ZjBhYzM0OGUxLi5iZThkNmUzNjczNDcyNDkyMDE5
OGM4YTBkYWQzY2ZmNDBlZTYxZjI5IDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRlbHRhIDg1Cnpj
bWVBPCYpUm9eYnB2Q2hwZmZ7MExvUCFCTG4lV0VMbj1jR2dUbkw7V3tsI0tidEFkTkZ7QnVSZnI9
XzhLWDVnaQphSlU1REN2VSNNXjxsVm95bnNwPCQ+cWF1aF44bzx5eClecj0KCmRlbHRhIDI2Cmlj
bWVDWHp9aj0zYnB2RE08ZWlhOWxXcVRTSExzN3t6Q015TW8ofSs/ZyRwQTkKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9ET01UcmVlRWxlbWVu
dC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTVRyZWVF
bGVtZW50LmpzCmluZGV4IGYzZTdmOGUuLjA2MWI3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTVRyZWVFbGVtZW50LmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTVRyZWVFbGVtZW50Lmpz
CkBAIC02OTAsMTQgKzY5MCwzNyBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnQgPSBjbGFz
cyBET01UcmVlRWxlbWVudCBleHRlbmRzIFdlYkluc3BlY3Rvci5UcmVlRWxlbQogCiAgICAgX3Bv
cHVsYXRlTm9kZUNvbnRleHRNZW51KGNvbnRleHRNZW51KQogICAgIHsKKyAgICAgICAgbGV0IG5v
ZGUgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0OworCiAgICAgICAgIC8vIEFkZCBmcmVlLWZvcm0g
bm9kZS1yZWxhdGVkIGFjdGlvbnMuCiAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlKQogICAgICAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQg
YXMgSFRNTCIpLCB0aGlzLl9lZGl0QXNIVE1MLmJpbmQodGhpcykpOworCiAgICAgICAgIGNvbnRl
eHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3B5IGFzIEhUTUwiKSwg
dGhpcy5fY29weUhUTUwuYmluZCh0aGlzKSk7CisKKyAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUo
KSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3B5IENvbXB1dGVkIFN0eWxlIiksICgpID0+
IHsKKyAgICAgICAgICAgICAgICBsZXQgbm9kZVN0eWxlcyA9IFdlYkluc3BlY3Rvci5jc3NTdHls
ZU1hbmFnZXIuc3R5bGVzRm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGVT
dHlsZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGxl
dCBzdHlsZSA9IG5vZGVTdHlsZXMuY29tcHV0ZWRTdHlsZS5wcm9wZXJ0aWVzLnJlZHVjZSgocHJl
dmlvdXMsIHByb3BlcnR5KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5p
bXBsaWNpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKKworICAg
ICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IHByb3BlcnR5Lm5hbWUucmVwbGFjZSgvXCIvZywg
IiciKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcHJvcGVydHkudmFsdWUucmVw
bGFjZSgvXCIvZywgIiciKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChgJHtu
YW1lfTogJHt2YWx1ZX07YCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3Vz
OworICAgICAgICAgICAgICAgIH0sIFtdKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY29weVRleHQoc3R5bGUuc29ydCgpLmpvaW4oIlxuIikpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAodGhpcy5lZGl0YWJsZSkKICAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWxldGUgTm9k
ZSIpLCB0aGlzLnJlbW92ZS5iaW5kKHRoaXMpKTsKIAotICAgICAgICBsZXQgbm9kZSA9IHRoaXMu
cmVwcmVzZW50ZWRPYmplY3Q7CiAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlKCkgPT09IE5vZGUu
RUxFTUVOVF9OT0RFKQogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlNjcm9sbCBJbnRvIFZpZXciKSwgdGhpcy5fc2Nyb2xsSW50b1ZpZXcu
YmluZCh0aGlzKSk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286555</attachid>
            <date>2016-08-20 22:43:34 -0700</date>
            <delta_ts>2016-08-22 13:47:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160774-20160820224139.patch</filename>
            <type>text/plain</type>
            <size>3283</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDhiMjI1MGZmM2NjN2FhYzcwZDRkNjZiMGU2MjI4
NDE0YjBhMjU3OWIuLjM4MWEwMGY4OWE0YTY0MGU2OTU4OTVhZWI4ZTIzMWUwZWRiN2Q2NWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2LTA4LTIwICBEZXZp
biBSb3Vzc28gIDxkY3JvdXNzbyt3ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IEVSOiBDb3B5IE5vZGUgYXMgSFRNTCB3aXRoIENvbXB1dGVkIFN0eWxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA3NzQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExvY2FsaXphdGlvbnMv
ZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
Vmlld3MvRE9NVHJlZUVsZW1lbnQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NVHJlZUVs
ZW1lbnQucHJvdG90eXBlLl9wb3B1bGF0ZU5vZGVDb250ZXh0TWVudSk6CisgICAgICAgIFByb3Zp
ZGUgIkNvcHkgQ29tcHV0ZWQgU3R5bGUiIGNvbnRleHQgbWVudSBpdGVtIHRvIGNvcHkgYWxsIHNl
dCBvciBpbmhlcml0ZWQgQ1NTIHByb3BlcnRpZXMuCisKIDIwMTYtMDgtMTkgIERldmluIFJvdXNz
byAgPGRjcm91c3NvK3dlYmtpdEBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
Q29uc29sZSBsb2cgY291bnRlciBvbiB0aGUgZGFzaGJvYXJkIHNob3VsZCBiZSBiZXR0ZXIgYXQg
ZGlzcGxheWluZyBsYXJnZSBudW1iZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwpp
bmRleCAwN2UzYjBkODllYTJjMGMwMTA1NGQzNTk5YzhiZjg2ZjBhYzM0OGUxLi5iZThkNmUzNjcz
NDcyNDkyMDE5OGM4YTBkYWQzY2ZmNDBlZTYxZjI5IDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRl
bHRhIDg1CnpjbWVBPCYpUm9eYnB2Q2hwZmZ7MExvUCFCTG4lV0VMbj1jR2dUbkw7V3tsI0tidEFk
TkZ7QnVSZnI9XzhLWDVnaQphSlU1REN2VSNNXjxsVm95bnNwPCQ+cWF1aF44bzx5eClecj0KCmRl
bHRhIDI2CmljbWVDWHp9aj0zYnB2RE08ZWlhOWxXcVRTSExzN3t6Q015TW8ofSs/ZyRwQTkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9ET01U
cmVlRWxlbWVudC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0RPTVRyZWVFbGVtZW50LmpzCmluZGV4IGYzZTdmOGViZDQ5ZTA3NDQyY2ZiN2ZkYjk3MzhkMmM5
NmRkZDU2NjQuLjE0OGI2NDQwY2I4N2FkNTYyZjA0MWMwMDI5MzQ1NTJiN2FlZGQ0YTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTVRyZWVF
bGVtZW50LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0RPTVRyZWVFbGVtZW50LmpzCkBAIC02OTAsMTQgKzY5MCwzNSBAQCBXZWJJbnNwZWN0b3IuRE9N
VHJlZUVsZW1lbnQgPSBjbGFzcyBET01UcmVlRWxlbWVudCBleHRlbmRzIFdlYkluc3BlY3Rvci5U
cmVlRWxlbQogCiAgICAgX3BvcHVsYXRlTm9kZUNvbnRleHRNZW51KGNvbnRleHRNZW51KQogICAg
IHsKKyAgICAgICAgbGV0IG5vZGUgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0OworCiAgICAgICAg
IC8vIEFkZCBmcmVlLWZvcm0gbm9kZS1yZWxhdGVkIGFjdGlvbnMuCiAgICAgICAgIGlmICh0aGlz
LmVkaXRhYmxlKQogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkVkaXQgYXMgSFRNTCIpLCB0aGlzLl9lZGl0QXNIVE1MLmJpbmQodGhpcykp
OworCiAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJDb3B5IGFzIEhUTUwiKSwgdGhpcy5fY29weUhUTUwuYmluZCh0aGlzKSk7CisKKyAgICAgICAg
aWYgKG5vZGUubm9kZVR5cGUoKSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKKyAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3B5IENvbXB1
dGVkIFN0eWxlIiksICgpID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgbm9kZVN0eWxlcyA9IFdl
Ykluc3BlY3Rvci5jc3NTdHlsZU1hbmFnZXIuc3R5bGVzRm9yTm9kZShub2RlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW5vZGVTdHlsZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9IG5vZGVTdHlsZXMuY29tcHV0ZWRTdHlsZS5wcm9w
ZXJ0aWVzLnJlZHVjZSgocHJldmlvdXMsIHByb3BlcnR5KSA9PiB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eS5pbXBsaWNpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBwcmV2aW91czsKKworICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKGAke3Byb3Bl
cnR5Lm5hbWV9OiAke3Byb3BlcnR5LnZhbHVlfTtgKTsKKworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcHJldmlvdXM7CisgICAgICAgICAgICAgICAgfSwgW10pOworICAgICAgICAgICAgICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdC5jb3B5VGV4dChzdHlsZS5zb3J0KCkuam9pbigiXG4iKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxl
KQogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkRlbGV0ZSBOb2RlIiksIHRoaXMucmVtb3ZlLmJpbmQodGhpcykpOwogCi0gICAgICAgIGxl
dCBub2RlID0gdGhpcy5yZXByZXNlbnRlZE9iamVjdDsKICAgICAgICAgaWYgKG5vZGUubm9kZVR5
cGUoKSA9PT0gTm9kZS5FTEVNRU5UX05PREUpCiAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2Nyb2xsIEludG8gVmlldyIpLCB0aGlzLl9z
Y3JvbGxJbnRvVmlldy5iaW5kKHRoaXMpKTsKICAgICB9Cg==
</data>
<flag name="review"
          id="310085"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>