<?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>158900</bug_id>
          
          <creation_ts>2016-06-17 22:03:41 -0700</creation_ts>
          <short_desc>Updating class name of a shadow host does not update the style applied by :host()</short_desc>
          <delta_ts>2017-04-11 21:29:27 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>148695</blocked>
    
    <blocked>170762</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1203538</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-06-17 22:03:41 -0700</bug_when>
    <thetext>When a class name is updated, a functional shadow host rule such as :host(.foo) would not be applied dynamically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203539</commentid>
    <comment_count>1</comment_count>
      <attachid>281606</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-06-17 22:03:57 -0700</bug_when>
    <thetext>Created attachment 281606
Demo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203629</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-06-19 14:19:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/26883707&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203630</commentid>
    <comment_count>3</comment_count>
      <attachid>281623</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-19 14:25:28 -0700</bug_when>
    <thetext>Created attachment 281623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203631</commentid>
    <comment_count>4</comment_count>
      <attachid>281623</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-06-19 14:57:58 -0700</bug_when>
    <thetext>Comment on attachment 281623
Patch

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

&gt; Source/WebCore/style/AttributeChangeInvalidation.cpp:42
&gt; +    if (shadowRuleSets.authorStyle()-&gt;hostPseudoClassRules().isEmpty())
&gt; +        return false;

Is there a solid guarantee that authorStyle is non-null? I noticed this pattern repeating in the code so the question applies not just here but at many other sites too.

&gt; Source/WebCore/style/AttributeChangeInvalidation.cpp:61
&gt; +    auto* shadowRoot = m_element.shadowRoot();
&gt; +    if (shadowRoot &amp;&amp; mayBeAffectedByHostStyle(*shadowRoot, isHTML, attributeName))
&gt; +        mayAffectStyle = true;

Can we skip this work if mayAffectStyle is already true?

&gt; Source/WebCore/style/ClassChangeInvalidation.cpp:108
&gt; +        if (shadowRoot &amp;&amp; mayBeAffectedByHostStyle(*shadowRoot, changedClass))
&gt; +            mayAffectStyle = true;

Can we skip this work if mayAffectStyle is already true?

&gt; Source/WebCore/style/IdChangeInvalidation.cpp:57
&gt; +    auto* shadowRoot = m_element.shadowRoot();
&gt; +    if (shadowRoot &amp;&amp; mayBeAffectedByHostStyle(*shadowRoot, changedId))
&gt; +        mayAffectStyle = true;

Can we skip this work if mayAffectStyle is already true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203638</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-19 16:27:40 -0700</bug_when>
    <thetext>&gt; Is there a solid guarantee that authorStyle is non-null? I noticed this
&gt; pattern repeating in the code so the question applies not just here but at
&gt; many other sites too.

Yes, StyleResolver constructor calls resetAuthorStyle() which creates authorStyle. There is no path to delete it. Definitely something that could be cleaned up.

&gt; Can we skip this work if mayAffectStyle is already true?

Yes, though not super important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203690</commentid>
    <comment_count>6</comment_count>
      <attachid>281623</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-06-19 22:10:56 -0700</bug_when>
    <thetext>Comment on attachment 281623
Patch

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

&gt; Source/WebCore/style/AttributeChangeInvalidation.cpp:38
&gt; +static bool mayBeAffectedByHostStyle(ShadowRoot&amp; shadowRoot, bool isHTML, const QualifiedName&amp; attributeName)

Can shadowRoot be const?

&gt; Source/WebCore/style/ClassChangeInvalidation.cpp:88
&gt; +static bool mayBeAffectedByHostStyle(ShadowRoot&amp; shadowRoot, AtomicStringImpl* changedClass)

const shadowRoot?

&gt; Source/WebCore/style/IdChangeInvalidation.cpp:44
&gt; +static bool mayBeAffectedByHostStyle(ShadowRoot&amp; shadowRoot, const AtomicString&amp; changedId)
&gt; +{
&gt; +    auto&amp; shadowRuleSets = shadowRoot.styleResolver().ruleSets();
&gt; +    if (shadowRuleSets.authorStyle()-&gt;hostPseudoClassRules().isEmpty())
&gt; +        return false;
&gt; +
&gt; +    return shadowRuleSets.features().idsInRules.contains(changedId.impl());
&gt; +}

Can this function that&apos;s almost repeated 3 times be shared?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203718</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-20 01:13:00 -0700</bug_when>
    <thetext>&gt; Can shadowRoot be const?

Not without wider constness refactoring.

&gt; Can this function that&apos;s almost repeated 3 times be shared?

It is only line that is repeated really. Still, would be nice to factor these to share the common pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203722</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-20 01:54:57 -0700</bug_when>
    <thetext>https://trac.webkit.org/r202227</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296520</commentid>
    <comment_count>9</comment_count>
    <who name="Keanu Lee">webkit</who>
    <bug_when>2017-04-11 12:26:02 -0700</bug_when>
    <thetext>This issue still exists in webkit (r214532). If you try the linked demo below and click on the button, you&apos;ll see the the paragraph color does not toggle to red (the button does because its styles are invalidated when you click on it.

http://jsbin.com/masaxeq/edit?html,output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296642</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-04-11 21:29:16 -0700</bug_when>
    <thetext>(In reply to Keanu Lee from comment #9)
&gt; This issue still exists in webkit (r214532). If you try the linked demo
&gt; below and click on the button, you&apos;ll see the the paragraph color does not
&gt; toggle to red (the button does because its styles are invalidated when you
&gt; click on it.
&gt; 
&gt; http://jsbin.com/masaxeq/edit?html,output

Oh, this is a slightly different bug where we don&apos;t seem to be invalidating elements with rules that apply to a descendant or a child of :host.

Filed webkit.org/b/170762 to track this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>281606</attachid>
            <date>2016-06-17 22:03:57 -0700</date>
            <delta_ts>2016-06-17 22:03:57 -0700</delta_ts>
            <desc>Demo</desc>
            <filename>shadow-host-style-update.html</filename>
            <type>text/html</type>
            <size>518</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8Ym9keT4KPHA+VGVzdCBwYXNzZXMgaWYgeW91IHNlZSBh
IHNpbmdsZSAxMDBweCBieSAxMDBweCBncmVlbiBib3ggYmVsb3cuPC9wPiAKPGRpdiBpZD0iaG9z
dCI+PC9kaXY+CjxzY3JpcHQ+Cgp2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdo
b3N0Jyk7CnZhciBzaGFkb3cgPSBob3N0LmF0dGFjaFNoYWRvdyh7bW9kZTogJ2Nsb3NlZCd9KTsK
c2hhZG93LmlubmVySFRNTCA9IGAKICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgICB3aWR0
aDogMTAwcHg7CiAgICAgICAgaGVpZ2h0OiAxMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7
CiAgICB9CiAgICA6aG9zdCguZ3JlZW4pIHsKICAgICAgICBiYWNrZ3JvdW5kOiBncmVlbjsKICAg
IH0KICAgIDwvc3R5bGU+CmA7CgpnZXRDb21wdXRlZFN0eWxlKGhvc3QpLmJhY2tncm91bmRDb2xv
cjsKaG9zdC5jbGFzc0xpc3QudG9nZ2xlKCdncmVlbicpOwoKPC9zY3JpcHQ+CjwvYm9keT4KPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281623</attachid>
            <date>2016-06-19 14:25:28 -0700</date>
            <delta_ts>2016-06-19 22:10:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>host-invalidation.patch</filename>
            <type>text/plain</type>
            <size>9607</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMjIxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA2LTE5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGluZyBjbGFzcyBuYW1l
IG9mIGEgc2hhZG93IGhvc3QgZG9lcyBub3QgdXBkYXRlIHRoZSBzdHlsZSBhcHBsaWVkIGJ5IDpo
b3N0KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODkwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjY4ODM3MDc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9zaGFkb3ctZG9tL3No
YWRvdy1ob3N0LXN0eWxlLXVwZGF0ZS5odG1sCisKKyAgICAgICAgVGVhY2ggc3R5bGUgaW52YWxp
ZGF0aW9uIG9wdGltaXphdGlvbiBjb2RlIGFib3V0IDpob3N0LgorCisgICAgICAgICogc3R5bGUv
QXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjptYXlCZUFmZmVjdGVkQnlIb3N0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkF0
dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKiBz
dHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6Y29tcHV0ZUNsYXNzQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlCZUFm
ZmVjdGVkQnlIb3N0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkNsYXNzQ2hhbmdl
SW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAqIHN0eWxlL0lkQ2hhbmdl
SW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlCZUFmZmVjdGVk
QnlIb3N0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OklkQ2hhbmdlSW52YWxpZGF0
aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorCiAyMDE2LTA2LTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgVGhlIEpTQnVpbHRpbkNvbnN0cnVj
dG9yIGZlYXR1cmUgY2FuJ3QgaGFuZGxlIGEgSlMgaW50ZXJmYWNlIGV4dGVuZGluZyBhbiBvdGhl
ciBKUyBpbnRlcmZhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJpYnV0ZUNoYW5n
ZUludmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0
cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjAyMjA3KQorKysgU291cmNl
L1dlYkNvcmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTIgKzI4LDIzIEBACiAKICNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgi
CiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgog
I2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAKK3N0
YXRpYyBib29sIG1heUJlQWZmZWN0ZWRCeUhvc3RTdHlsZShTaGFkb3dSb290JiBzaGFkb3dSb290
LCBib29sIGlzSFRNTCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKK3sKKyAg
ICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNoYWRvd1Jvb3Quc3R5bGVSZXNvbHZlcigpLnJ1bGVT
ZXRzKCk7CisgICAgaWYgKHNoYWRvd1J1bGVTZXRzLmF1dGhvclN0eWxlKCktPmhvc3RQc2V1ZG9D
bGFzc1J1bGVzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
JiBuYW1lU2V0ID0gaXNIVE1MID8gc2hhZG93UnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVD
YW5vbmljYWxMb2NhbE5hbWVzSW5SdWxlcyA6IHNoYWRvd1J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0
cmlidXRlTG9jYWxOYW1lc0luUnVsZXM7CisgICAgcmV0dXJuIG5hbWVTZXQuY29udGFpbnMoYXR0
cmlidXRlTmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworfQorCiB2b2lkIEF0dHJpYnV0ZUNoYW5n
ZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3VmFsdWUpCiB7CiAgICAgaWYgKG5ld1ZhbHVlID09IG9sZFZhbHVlKQpAQCAtNDMsOCAr
NTQsMTMgQEAgdm9pZCBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaQogICAgIGJv
b2wgaXNIVE1MID0gbV9lbGVtZW50LmlzSFRNTEVsZW1lbnQoKTsKIAogICAgIGF1dG8mIG5hbWVT
ZXQgPSBpc0hUTUwgPyBydWxlU2V0cy5mZWF0dXJlcygpLmF0dHJpYnV0ZUNhbm9uaWNhbExvY2Fs
TmFtZXNJblJ1bGVzIDogcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVMb2NhbE5hbWVzSW5S
dWxlczsKLSAgICBib29sIHNob3VsZEludmFsaWRhdGUgPSBuYW1lU2V0LmNvbnRhaW5zKGF0dHJp
YnV0ZU5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICBpZiAoIXNob3VsZEludmFsaWRhdGUp
CisgICAgYm9vbCBtYXlBZmZlY3RTdHlsZSA9IG5hbWVTZXQuY29udGFpbnMoYXR0cmlidXRlTmFt
ZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworCisgICAgYXV0byogc2hhZG93Um9vdCA9IG1fZWxlbWVu
dC5zaGFkb3dSb290KCk7CisgICAgaWYgKHNoYWRvd1Jvb3QgJiYgbWF5QmVBZmZlY3RlZEJ5SG9z
dFN0eWxlKCpzaGFkb3dSb290LCBpc0hUTUwsIGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICBtYXlB
ZmZlY3RTdHlsZSA9IHRydWU7CisKKyAgICBpZiAoIW1heUFmZmVjdFN0eWxlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWlzSFRNTCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUv
Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjAyMjA3KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgi
CiAjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290
LmgiCiAjaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgogI2luY2x1ZGUgIlN0eWxlSW52YWxp
ZGF0aW9uQW5hbHlzaXMuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC04NCwyMiAr
ODUsMzYgQEAgc3RhdGljIENsYXNzQ2hhbmdlVmVjdG9yIGNvbXB1dGVDbGFzc0NoYQogICAgIHJl
dHVybiBjaGFuZ2VkQ2xhc3NlczsKIH0KIAorc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5SG9z
dFN0eWxlKFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIEF0b21pY1N0cmluZ0ltcGwqIGNoYW5nZWRD
bGFzcykKK3sKKyAgICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNoYWRvd1Jvb3Quc3R5bGVSZXNv
bHZlcigpLnJ1bGVTZXRzKCk7CisgICAgaWYgKHNoYWRvd1J1bGVTZXRzLmF1dGhvclN0eWxlKCkt
Pmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHNoYWRvd1J1bGVTZXRzLmZlYXR1cmVzKCkuY2xhc3Nlc0luUnVsZXMuY29u
dGFpbnMoY2hhbmdlZENsYXNzKTsKK30KKwogdm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6
aW52YWxpZGF0ZVN0eWxlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMsIGNvbnN0
IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMpCiB7CiAgICAgYXV0byBjaGFuZ2VkQ2xhc3Nl
cyA9IGNvbXB1dGVDbGFzc0NoYW5nZShvbGRDbGFzc2VzLCBuZXdDbGFzc2VzKTsKIAogICAgIGF1
dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOworICAg
IGF1dG8qIHNoYWRvd1Jvb3QgPSBtX2VsZW1lbnQuc2hhZG93Um9vdCgpOwogCiAgICAgQ2xhc3ND
aGFuZ2VWZWN0b3IgY2hhbmdlZENsYXNzZXNBZmZlY3RpbmdTdHlsZTsKICAgICBmb3IgKGF1dG8q
IGNoYW5nZWRDbGFzcyA6IGNoYW5nZWRDbGFzc2VzKSB7Ci0gICAgICAgIGlmIChydWxlU2V0cy5m
ZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRDbGFzcykpCisgICAgICAg
IGJvb2wgbWF5QWZmZWN0U3R5bGUgPSBydWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVz
LmNvbnRhaW5zKGNoYW5nZWRDbGFzcyk7CisKKyAgICAgICAgaWYgKHNoYWRvd1Jvb3QgJiYgbWF5
QmVBZmZlY3RlZEJ5SG9zdFN0eWxlKCpzaGFkb3dSb290LCBjaGFuZ2VkQ2xhc3MpKQorICAgICAg
ICAgICAgbWF5QWZmZWN0U3R5bGUgPSB0cnVlOworCisgICAgICAgIGlmIChtYXlBZmZlY3RTdHls
ZSkKICAgICAgICAgICAgIGNoYW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5bGUuYXBwZW5kKGNoYW5n
ZWRDbGFzcyk7CiAgICAgfTsKIAogICAgIGlmIChjaGFuZ2VkQ2xhc3Nlc0FmZmVjdGluZ1N0eWxl
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZWxlbWVudC5zaGFkb3dS
b290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+aGFzU2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzKCkpIHsKKyAgICBpZiAoc2hhZG93Um9vdCAmJiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5o
YXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkgewogICAgICAgICBtX2VsZW1lbnQuc2V0TmVl
ZHNTdHlsZVJlY2FsYyhGdWxsU3R5bGVDaGFuZ2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAko
cmV2aXNpb24gMjAyMjA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJbnZhbGlk
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMjEgQEAKIAogI2luY2x1ZGUg
IkRvY3VtZW50UnVsZVNldHMuaCIKICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgor
I2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAKK3N0YXRpYyBib29sIG1heUJl
QWZmZWN0ZWRCeUhvc3RTdHlsZShTaGFkb3dSb290JiBzaGFkb3dSb290LCBjb25zdCBBdG9taWNT
dHJpbmcmIGNoYW5nZWRJZCkKK3sKKyAgICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNoYWRvd1Jv
b3Quc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7CisgICAgaWYgKHNoYWRvd1J1bGVTZXRzLmF1
dGhvclN0eWxlKCktPmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2hhZG93UnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJ
blJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRJZC5pbXBsKCkpOworfQorCiB2b2lkIElkQ2hhbmdlSW52
YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiBjaGFuZ2VkSWQp
CiB7CiAgICAgaWYgKGNoYW5nZWRJZC5pc0VtcHR5KCkpCkBAIC00MSw2ICs1MSwxMSBAQCB2b2lk
IElkQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5CiAgICAgYXV0byYgcnVsZVNldHMg
PSBtX2VsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7CiAKICAgICBib29sIG1heUFm
ZmVjdFN0eWxlID0gcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKGNoYW5n
ZWRJZC5pbXBsKCkpOworCisgICAgYXV0byogc2hhZG93Um9vdCA9IG1fZWxlbWVudC5zaGFkb3dS
b290KCk7CisgICAgaWYgKHNoYWRvd1Jvb3QgJiYgbWF5QmVBZmZlY3RlZEJ5SG9zdFN0eWxlKCpz
aGFkb3dSb290LCBjaGFuZ2VkSWQpKQorICAgICAgICBtYXlBZmZlY3RTdHlsZSA9IHRydWU7CisK
ICAgICBpZiAoIW1heUFmZmVjdFN0eWxlKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwMjIwNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE2LTA2LTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBVcGRhdGluZyBjbGFzcyBuYW1lIG9mIGEgc2hhZG93IGhvc3QgZG9l
cyBub3QgdXBkYXRlIHRoZSBzdHlsZSBhcHBsaWVkIGJ5IDpob3N0KCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODkwMAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjY4ODM3MDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L3NoYWRvdy1kb20vc2hhZG93LWhvc3Qtc3R5bGUtdXBkYXRlLWV4
cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2hhZG93LWRvbS9zaGFkb3ctaG9z
dC1zdHlsZS11cGRhdGUuaHRtbDogQWRkZWQuCisKIDIwMTYtMDYtMTcgIEJlbmphbWluIFBvdWxh
aW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIDppbmRldGVybWluYXRlIHBzZXVk
by1jbGFzcyBzaG91bGQgbWF0Y2ggcmFkaW9zIHdob3NlIGdyb3VwIGhhcyBubyBjaGVja2VkIHJh
ZGlvCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3NoYWRvdy1kb20vc2hhZG93LWhvc3Qtc3R5bGUt
dXBkYXRlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zaGFk
b3ctZG9tL3NoYWRvdy1ob3N0LXN0eWxlLXVwZGF0ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc2hhZG93LWRvbS9zaGFkb3ctaG9zdC1zdHlsZS11cGRh
dGUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKyAgICA8cD5UZXN0IHBhc3NlcyBpZiB5b3Ugc2VlIGEg
c2luZ2xlIDEwMHB4IGJ5IDEwMHB4IGdyZWVuIGJveCBiZWxvdy48L3A+CisgICAgPGRpdiBzdHls
ZT0id2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kOiBncmVlbjsiPjwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zaGFkb3ctZG9tL3No
YWRvdy1ob3N0LXN0eWxlLXVwZGF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvc2hhZG93LWRvbS9zaGFkb3ctaG9zdC1zdHlsZS11cGRhdGUuaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3NoYWRvdy1kb20vc2hhZG93LWhvc3Qtc3R5bGUtdXBkYXRl
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLnRlc3QgeworICAgIHdpZHRoOiAxMDBweDsKKyAgICBo
ZWlnaHQ6IDI1cHg7CisgICAgYmFja2dyb3VuZDogcmVkOworfQorPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorPHA+VGVzdCBwYXNzZXMgaWYgeW91IHNlZSBhIHNpbmdsZSAxMDBweCBieSAxMDBw
eCBncmVlbiBib3ggYmVsb3cuPC9wPiAKKzxkaXYgaWQ9Imhvc3QxIiBjbGFzcz0idGVzdCI+PC9k
aXY+Cis8ZGl2IGlkPSJob3N0MiIgY2xhc3M9InRlc3QiPjwvZGl2PgorPGRpdiBpZD0iaG9zdDMi
IGNsYXNzPSJ0ZXN0Ij48L2Rpdj4KKzxkaXYgaWQ9Imhvc3Q0IiBjbGFzcz0idGVzdCIgYXR0cj0i
cmVkIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3ZhciBob3N0MSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdob3N0MScpOworaG9zdDEuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pLmlubmVy
SFRNTCA9IGAKKyAgICA8c3R5bGU+CisgICAgOmhvc3QoLmdyZWVuKSB7CisgICAgICAgIGJhY2tn
cm91bmQ6IGdyZWVuICFpbXBvcnRhbnQ7CisgICAgfQorICAgIDwvc3R5bGU+CitgOworCitnZXRD
b21wdXRlZFN0eWxlKGhvc3QxKS5iYWNrZ3JvdW5kQ29sb3I7Citob3N0MS5jbGFzc0xpc3QudG9n
Z2xlKCdncmVlbicpOworCit2YXIgaG9zdDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaG9z
dDInKTsKK2hvc3QyLmF0dGFjaFNoYWRvdyh7bW9kZTogJ2Nsb3NlZCd9KS5pbm5lckhUTUwgPSBg
CisgICAgPHN0eWxlPgorICAgIDpob3N0KCNncmVlbklEKSB7CisgICAgICAgIGJhY2tncm91bmQ6
IGdyZWVuICFpbXBvcnRhbnQ7CisgICAgfQorICAgIDwvc3R5bGU+CitgOworCitnZXRDb21wdXRl
ZFN0eWxlKGhvc3QyKS5iYWNrZ3JvdW5kQ29sb3I7Citob3N0Mi5pZCA9ICdncmVlbklEJzsKKwor
dmFyIGhvc3QzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hvc3QzJyk7Citob3N0My5hdHRh
Y2hTaGFkb3coe21vZGU6ICdjbG9zZWQnfSkuaW5uZXJIVE1MID0gYAorICAgIDxzdHlsZT4KKyAg
ICA6aG9zdChbZ3JlZW5BdHRyXSkgeworICAgICAgICBiYWNrZ3JvdW5kOiBncmVlbiAhaW1wb3J0
YW50OworICAgIH0KKyAgICA8L3N0eWxlPgorYDsKKworZ2V0Q29tcHV0ZWRTdHlsZShob3N0Myku
YmFja2dyb3VuZENvbG9yOworaG9zdDMuc2V0QXR0cmlidXRlKCdncmVlbkF0dHInLCAnJyk7CisK
K3ZhciBob3N0NCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdob3N0NCcpOworaG9zdDQuYXR0
YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pLmlubmVySFRNTCA9IGAKKyAgICA8c3R5bGU+Cisg
ICAgOmhvc3QoW2F0dHI9Z3JlZW5dKSB7CisgICAgICAgIGJhY2tncm91bmQ6IGdyZWVuICFpbXBv
cnRhbnQ7CisgICAgfQorICAgIDwvc3R5bGU+CitgOworCitnZXRDb21wdXRlZFN0eWxlKGhvc3Q0
KS5iYWNrZ3JvdW5kQ29sb3I7Citob3N0NC5zZXRBdHRyaWJ1dGUoJ2F0dHInLCAnZ3JlZW4nKTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="305448"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>