<?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>183386</bug_id>
          
          <creation_ts>2018-03-06 15:16:31 -0800</creation_ts>
          <short_desc>LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load.html fails with async policy delegate</short_desc>
          <delta_ts>2018-03-13 09:13:28 -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>Page Loading</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>180568</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Danyao Wang">danyao</reporter>
          <assigned_to name="Danyao Wang">danyao</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1404182</commentid>
    <comment_count>0</comment_count>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-06 15:16:31 -0800</bug_when>
    <thetext>This test starts a slow load in an iframe and tries to navigate away from the main frame. It expects that the pending iframe navigation will prevent the main frame document from being added to the PageCache.

With async decide policy, PageCache::addIfCacheable() may be called (and it is in this test) on the main frame navigation while the subframe is still waiting for policy decision. The subframe loader&apos;s state has not yet been updated from FrameStateCompleted to FrameStateProvisional. This causes PageCache to incorrect consider the page as cacheable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404192</commentid>
    <comment_count>1</comment_count>
      <attachid>335152</attachid>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-06 15:33:14 -0800</bug_when>
    <thetext>Created attachment 335152
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404193</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-06 15:35:01 -0800</bug_when>
    <thetext>Attachment 335152 did not pass style-queue:


ERROR: Source/WebKit/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebCore/loader/FrameLoader.cpp:2294:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 3 in 9 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>1404194</commentid>
    <comment_count>3</comment_count>
      <attachid>335152</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-06 15:38:11 -0800</bug_when>
    <thetext>Comment on attachment 335152
WIP

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

&gt; Source/WebKit/ChangeLog:8
&gt; +				Add WKFrameLoadState enum to match FrameLoaderState.

indentation problem.

&gt; Source/WebCore/history/PageCache.cpp:81
&gt; +    if (!frame.isMainFrame() &amp;&amp; (frameLoader.state() == FrameStateAsyncDecidePolicy || frameLoader.state() == FrameStateProvisional)) {

Instead of adding a new state, would it be possible to rely on frameLoader.policyChecker().delegateIsDecidingNavigationPolicy() ?

&gt; LayoutTests/ChangeLog:9
&gt; +				Update tests to test the async case.

indentation problem.

&gt; LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load.html:10
&gt; +    if (testRunner.setShouldDecideNavigationPolicyAfterDelay)

Please copy the test before adding those lines so we keep both versions of the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404438</commentid>
    <comment_count>4</comment_count>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-07 12:33:07 -0800</bug_when>
    <thetext>Turns out my initial analysis was wrong and we can&apos;t use delegateIsDecidingNavigationPolicy().

What happens is that the decide policy process for the main frame and the subframe are interleaved. So when FrameLoader::continueLoadAfterNavigationPolicy() is called for the main frame, it calls FrameLoader::stopAllLoaders(), which invalidates the in-progress policy check on the subframe. This triggers FrameLoader::continueLoadAfterNavigationPlicy() on the subframe with PolicyAction::Ignore. Later when PageCache::addIfCacheable() is called after main frame commits the provisional navigation, the sub frame load has already been cancelled, so it is neither in decide policy nor provisional load. This leads to PageCache deciding to cache the page.

With sync policy delegate, the main policy decision is fully finished before subframe enters into decide policy. The subframe loader gets a PolicyAction::Use result from the UIProcess and transitions to FrameStateProvisionalLoad before the main frame commits the provisional navigation.

It seems to me that canceling outstanding subframe policy checks when main frame commits its provisional navigation makes sense. So despite the difference in timing, I think the behavior here is working as intended.

I&apos;m less sure if the page in such a state should be cached. &quot;No&quot; seems to make sense, because the page is now in a broken state with one of its subframe load interrupted and I assume that&apos;s why we check for FrameStateProvisionalLoad. Capturing this specific case will be a bit messy, because we&apos;d need to pass a cancelation reason into FrameLoader::stopAllLoaders().

Chris - what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404441</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-07 12:41:11 -0800</bug_when>
    <thetext>(In reply to Danyao Wang from comment #4)
&gt; Turns out my initial analysis was wrong and we can&apos;t use
&gt; delegateIsDecidingNavigationPolicy().
&gt; 
&gt; What happens is that the decide policy process for the main frame and the
&gt; subframe are interleaved. So when
&gt; FrameLoader::continueLoadAfterNavigationPolicy() is called for the main
&gt; frame, it calls FrameLoader::stopAllLoaders(), which invalidates the
&gt; in-progress policy check on the subframe. This triggers
&gt; FrameLoader::continueLoadAfterNavigationPlicy() on the subframe with
&gt; PolicyAction::Ignore. Later when PageCache::addIfCacheable() is called after
&gt; main frame commits the provisional navigation, the sub frame load has
&gt; already been cancelled, so it is neither in decide policy nor provisional
&gt; load. This leads to PageCache deciding to cache the page.
&gt; 
&gt; With sync policy delegate, the main policy decision is fully finished before
&gt; subframe enters into decide policy. The subframe loader gets a
&gt; PolicyAction::Use result from the UIProcess and transitions to
&gt; FrameStateProvisionalLoad before the main frame commits the provisional
&gt; navigation.
&gt; 
&gt; It seems to me that canceling outstanding subframe policy checks when main
&gt; frame commits its provisional navigation makes sense. So despite the
&gt; difference in timing, I think the behavior here is working as intended.
&gt; 
&gt; I&apos;m less sure if the page in such a state should be cached. &quot;No&quot; seems to
&gt; make sense, because the page is now in a broken state with one of its
&gt; subframe load interrupted and I assume that&apos;s why we check for
&gt; FrameStateProvisionalLoad. Capturing this specific case will be a bit messy,
&gt; because we&apos;d need to pass a cancelation reason into
&gt; FrameLoader::stopAllLoaders().
&gt; 
&gt; Chris - what do you think?

I believe this is the check that is supposed to make sure we don&apos;t put broken content into PageCache:
if (!documentLoader-&gt;mainDocumentError().isNull()) {
        PCLOG(&quot;   -Main document has an error&quot;);
        logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::mainDocumentErrorKey());

        if (documentLoader-&gt;mainDocumentError().isCancellation() &amp;&amp; documentLoader-&gt;subresourceLoadersArePageCacheAcceptable())
            PCLOG(&quot;    -But, it was a cancellation and all loaders during the cancelation were loading images or XHR.&quot;);
        else
            isCacheable = false;
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404443</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-07 12:45:27 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; (In reply to Danyao Wang from comment #4)
&gt; &gt; Turns out my initial analysis was wrong and we can&apos;t use
&gt; &gt; delegateIsDecidingNavigationPolicy().
&gt; &gt; 
&gt; &gt; What happens is that the decide policy process for the main frame and the
&gt; &gt; subframe are interleaved. So when
&gt; &gt; FrameLoader::continueLoadAfterNavigationPolicy() is called for the main
&gt; &gt; frame, it calls FrameLoader::stopAllLoaders(), which invalidates the
&gt; &gt; in-progress policy check on the subframe. This triggers
&gt; &gt; FrameLoader::continueLoadAfterNavigationPlicy() on the subframe with
&gt; &gt; PolicyAction::Ignore. Later when PageCache::addIfCacheable() is called after
&gt; &gt; main frame commits the provisional navigation, the sub frame load has
&gt; &gt; already been cancelled, so it is neither in decide policy nor provisional
&gt; &gt; load. This leads to PageCache deciding to cache the page.
&gt; &gt; 
&gt; &gt; With sync policy delegate, the main policy decision is fully finished before
&gt; &gt; subframe enters into decide policy. The subframe loader gets a
&gt; &gt; PolicyAction::Use result from the UIProcess and transitions to
&gt; &gt; FrameStateProvisionalLoad before the main frame commits the provisional
&gt; &gt; navigation.
&gt; &gt; 
&gt; &gt; It seems to me that canceling outstanding subframe policy checks when main
&gt; &gt; frame commits its provisional navigation makes sense. So despite the
&gt; &gt; difference in timing, I think the behavior here is working as intended.
&gt; &gt; 
&gt; &gt; I&apos;m less sure if the page in such a state should be cached. &quot;No&quot; seems to
&gt; &gt; make sense, because the page is now in a broken state with one of its
&gt; &gt; subframe load interrupted and I assume that&apos;s why we check for
&gt; &gt; FrameStateProvisionalLoad. Capturing this specific case will be a bit messy,
&gt; &gt; because we&apos;d need to pass a cancelation reason into
&gt; &gt; FrameLoader::stopAllLoaders().
&gt; &gt; 
&gt; &gt; Chris - what do you think?
&gt; 
&gt; I believe this is the check that is supposed to make sure we don&apos;t put
&gt; broken content into PageCache:
&gt; if (!documentLoader-&gt;mainDocumentError().isNull()) {
&gt;         PCLOG(&quot;   -Main document has an error&quot;);
&gt;         logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient,
&gt; DiagnosticLoggingKeys::mainDocumentErrorKey());
&gt; 
&gt;         if (documentLoader-&gt;mainDocumentError().isCancellation() &amp;&amp;
&gt; documentLoader-&gt;subresourceLoadersArePageCacheAcceptable())
&gt;             PCLOG(&quot;    -But, it was a cancellation and all loaders during
&gt; the cancelation were loading images or XHR.&quot;);
&gt;         else
&gt;             isCacheable = false;
&gt;     }

Overall, I tend to think that we are behaving fine here. We cancel the subframe load during navigation policy decision, *before* provisional load, and therefore, we put the page into PageCache. It is not broken content, we merely did not navigate.
I think one way to address this would be to tweak the test somehow so that we navigate the main frame *after* the subframe has started provisional load. I don&apos;t know how yet but there must be a way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404446</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-07 12:51:22 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Chris Dumez from comment #5)
&gt; &gt; (In reply to Danyao Wang from comment #4)
&gt; &gt; &gt; Turns out my initial analysis was wrong and we can&apos;t use
&gt; &gt; &gt; delegateIsDecidingNavigationPolicy().
&gt; &gt; &gt; 
&gt; &gt; &gt; What happens is that the decide policy process for the main frame and the
&gt; &gt; &gt; subframe are interleaved. So when
&gt; &gt; &gt; FrameLoader::continueLoadAfterNavigationPolicy() is called for the main
&gt; &gt; &gt; frame, it calls FrameLoader::stopAllLoaders(), which invalidates the
&gt; &gt; &gt; in-progress policy check on the subframe. This triggers
&gt; &gt; &gt; FrameLoader::continueLoadAfterNavigationPlicy() on the subframe with
&gt; &gt; &gt; PolicyAction::Ignore. Later when PageCache::addIfCacheable() is called after
&gt; &gt; &gt; main frame commits the provisional navigation, the sub frame load has
&gt; &gt; &gt; already been cancelled, so it is neither in decide policy nor provisional
&gt; &gt; &gt; load. This leads to PageCache deciding to cache the page.
&gt; &gt; &gt; 
&gt; &gt; &gt; With sync policy delegate, the main policy decision is fully finished before
&gt; &gt; &gt; subframe enters into decide policy. The subframe loader gets a
&gt; &gt; &gt; PolicyAction::Use result from the UIProcess and transitions to
&gt; &gt; &gt; FrameStateProvisionalLoad before the main frame commits the provisional
&gt; &gt; &gt; navigation.
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems to me that canceling outstanding subframe policy checks when main
&gt; &gt; &gt; frame commits its provisional navigation makes sense. So despite the
&gt; &gt; &gt; difference in timing, I think the behavior here is working as intended.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m less sure if the page in such a state should be cached. &quot;No&quot; seems to
&gt; &gt; &gt; make sense, because the page is now in a broken state with one of its
&gt; &gt; &gt; subframe load interrupted and I assume that&apos;s why we check for
&gt; &gt; &gt; FrameStateProvisionalLoad. Capturing this specific case will be a bit messy,
&gt; &gt; &gt; because we&apos;d need to pass a cancelation reason into
&gt; &gt; &gt; FrameLoader::stopAllLoaders().
&gt; &gt; &gt; 
&gt; &gt; &gt; Chris - what do you think?
&gt; &gt; 
&gt; &gt; I believe this is the check that is supposed to make sure we don&apos;t put
&gt; &gt; broken content into PageCache:
&gt; &gt; if (!documentLoader-&gt;mainDocumentError().isNull()) {
&gt; &gt;         PCLOG(&quot;   -Main document has an error&quot;);
&gt; &gt;         logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient,
&gt; &gt; DiagnosticLoggingKeys::mainDocumentErrorKey());
&gt; &gt; 
&gt; &gt;         if (documentLoader-&gt;mainDocumentError().isCancellation() &amp;&amp;
&gt; &gt; documentLoader-&gt;subresourceLoadersArePageCacheAcceptable())
&gt; &gt;             PCLOG(&quot;    -But, it was a cancellation and all loaders during
&gt; &gt; the cancelation were loading images or XHR.&quot;);
&gt; &gt;         else
&gt; &gt;             isCacheable = false;
&gt; &gt;     }
&gt; 
&gt; Overall, I tend to think that we are behaving fine here. We cancel the
&gt; subframe load during navigation policy decision, *before* provisional load,
&gt; and therefore, we put the page into PageCache. It is not broken content, we
&gt; merely did not navigate.
&gt; I think one way to address this would be to tweak the test somehow so that
&gt; we navigate the main frame *after* the subframe has started provisional
&gt; load. I don&apos;t know how yet but there must be a way.

I think we may be able to rely on the beforeunload event of the subframe. We only fire this event *after* the policy decision has been made to navigate and right before we start provisional load. So something like a beforeunload event handler with a setTimeout(0), then navigate the main frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405913</commentid>
    <comment_count>8</comment_count>
      <attachid>335646</attachid>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-12 14:49:51 -0700</bug_when>
    <thetext>Created attachment 335646
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405917</commentid>
    <comment_count>9</comment_count>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-12 14:51:17 -0700</bug_when>
    <thetext>
&gt; I think we may be able to rely on the beforeunload event of the subframe. We
&gt; only fire this event *after* the policy decision has been made to navigate
&gt; and right before we start provisional load. So something like a beforeunload
&gt; event handler with a setTimeout(0), then navigate the main frame.

Thanks for the idea! Added new test. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405918</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-12 14:52:14 -0700</bug_when>
    <thetext>Attachment 335646 did not pass style-queue:


ERROR: LayoutTests/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:16:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:17:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 7 in 3 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>1405920</commentid>
    <comment_count>11</comment_count>
      <attachid>335647</attachid>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-12 14:58:53 -0700</bug_when>
    <thetext>Created attachment 335647
Patch for review (fixed style errors)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405924</commentid>
    <comment_count>12</comment_count>
      <attachid>335646</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-12 15:06:22 -0700</bug_when>
    <thetext>Comment on attachment 335646
Patch for review

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

&gt; LayoutTests/ChangeLog:8
&gt; +				This test relies on the happenstance that with sync poicy decision, the subframe transitions

Indentation issue. Please only use spaces, not tabs.

&gt; LayoutTests/ChangeLog:9
&gt; +				to FrameLoadProvisional before main frame navigation is committed.  With async delegate,

Only 1 space after the &apos;.&apos;

&gt; LayoutTests/ChangeLog:15
&gt; +        * http/tests/navigation/page-cache-iframe-provisional-load-async-delegates.html: Added.

Please update existing test too. Otherwise, it will start failing when we enable async policy delegates by default.

Also, it will help me see what has changed :)

&gt; LayoutTests/ChangeLog:16
&gt; +				Add a new version of the test that forces the main frame navigation to start after the

indentation issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405937</commentid>
    <comment_count>13</comment_count>
      <attachid>335647</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-12 15:31:11 -0700</bug_when>
    <thetext>Comment on attachment 335647
Patch for review (fixed style errors)

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

&gt; LayoutTests/ChangeLog:15
&gt; +        * http/tests/navigation/page-cache-iframe-provisional-load-async-delegates.html: Added.

cp LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load-async-delegates.html LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load.html
Then fix LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load.html to not call testRunner.setShouldDecideNavigationPolicyAfterDelay().

This way, the tests won&apos;t fail once we turn on async policy delegates by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405977</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-12 16:40:06 -0700</bug_when>
    <thetext>I think this may be the last failure with async policy delegates. When will you be able to reupload?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406106</commentid>
    <comment_count>15</comment_count>
      <attachid>335692</attachid>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-13 07:54:51 -0700</bug_when>
    <thetext>Created attachment 335692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406107</commentid>
    <comment_count>16</comment_count>
      <attachid>335693</attachid>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-13 07:58:39 -0700</bug_when>
    <thetext>Created attachment 335693
Patch for review (fixed style and old test)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406109</commentid>
    <comment_count>17</comment_count>
    <who name="Danyao Wang">danyao</who>
    <bug_when>2018-03-13 08:07:03 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #13)
&gt; Comment on attachment 335647 [details]
&gt; Patch for review (fixed style errors)
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=335647&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:15
&gt; &gt; +        * http/tests/navigation/page-cache-iframe-provisional-load-async-delegates.html: Added.
&gt; 
&gt; cp
&gt; LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load-async-
&gt; delegates.html
&gt; LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load.html
&gt; Then fix
&gt; LayoutTests/http/tests/navigation/page-cache-iframe-provisional-load.html to
&gt; not call testRunner.setShouldDecideNavigationPolicyAfterDelay().
&gt; 
&gt; This way, the tests won&apos;t fail once we turn on async policy delegates by
&gt; default.

This makes total sense. Sorry for not realizing it earlier. Fixed.

Also fixed the tabs and whitespace issues. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406117</commentid>
    <comment_count>18</comment_count>
      <attachid>335693</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-13 09:12:45 -0700</bug_when>
    <thetext>Comment on attachment 335693
Patch for review (fixed style and old test)

Clearing flags on attachment: 335693

Committed r229577: &lt;https://trac.webkit.org/changeset/229577&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406118</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-13 09:12:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406119</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-13 09:13:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/38418622&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335152</attachid>
            <date>2018-03-06 15:33:14 -0800</date>
            <delta_ts>2018-03-12 14:49:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-183386-20180306183313.patch</filename>
            <type>text/plain</type>
            <size>8673</size>
            <attacher name="Danyao Wang">danyao</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5MzQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTQzNDNjMDVhNTZiZmY1
MDQxMGEzZTljOTRkODczMTA2NDZmNGE1NS4uNWIxMTc4Y2E4YjFiNTQwZmYzYTAzNDI0NzlmYTNj
NTdlZGE2NTMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE4LTAzLTA2ICBEYW55
YW8gV2FuZyAgPGRhbnlhb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRt
bCBmYWlscyB3aXRoIGFzeW5jIHBvbGljeSBkZWxlZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzMzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFnZUNhY2hlOjphZGRJZkNhY2hlYWJsZSgpIHdp
bGwgbm90IGNhY2hlIGEgcGFnZSBpZiBhIHN1YmZyYW1lIGlzIGluIHByb3Zpc2lvbmFsIGxvYWRp
bmcKKyAgICAgICAgc3RhdGUuIFRoZSBzYW1lIHNob3VsZCBoYXBwZW4gaWYgYSBzdWJmcmFtZSBp
cyB3YWl0aW5nIGZvciBhc3luYyBwb2xpY3kgZGVsZWdhdGUsIGJlY2F1c2UKKyAgICAgICAgaXQg
aXMgZWZmZWN0aXZlbHkgYSBwZW5kaW5nIGxvYWQuIFJpZ2h0IG5vdyBhIHN1YmZyYW1lIHdhaXRp
bmcgZm9yIHBvbGljeSBkZWNpc2lvbiBpcworICAgICAgICBpbmNvcnJlY3RseSB0cmVhdGVkIGFz
IGEgY29tcGxldGVkIGxvYWQuCisKKyAgICAgICAgQWRkZWQgYSBuZXcgRnJhbWVMb2FkZXJTdGF0
ZSB0byBoYW5kbGUgdGhpcyBzY2VuYXJpby4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL25h
dmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC5odG1sCisKKyAgICAg
ICAgKiBoaXN0b3J5L1BhZ2VDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5DYWNoZUZy
YW1lKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmxvYWRXaXRoRG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lKToKKyAgICAgICAg
KiBsb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oOgorCiAyMDE4LTAzLTA2ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgZmFzdC9sb2FkZXIvcmVkaXJlY3QtdG8taW52
YWxpZC11cmwtdXNpbmctbWV0YS1yZWZyZXNoLWRpc2FsbG93ZWQuaHRtbCBmYWlscyB3aXRoIGFz
eW5jIHBvbGljeSBkZWxlZ2F0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOGQzZTFjNjcxNjY1OTk5YTE1YzkwYzBm
M2U4MjBiYjk0YTRhOTQwOS4uY2YzYWM0YTZlNjliZmIwYmE5OGI0ZmYwYzVjMTAwZDZlOTBkNWZi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOC0wMy0wNiAgRGFueWFvIFdhbmcgIDxk
YW55YW9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLmh0bWwgZmFpbHMgd2l0
aCBhc3luYyBwb2xpY3kgZGVsZWdhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4MzM4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisJCQkJQWRkIFdLRnJhbWVMb2FkU3RhdGUgZW51bSB0byBtYXRjaCBGcmFtZUxvYWRl
clN0YXRlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWUuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlRnJhbWUuY3BwOgorICAg
ICAgICAoV0tCdW5kbGVGcmFtZUdldEZyYW1lTG9hZFN0YXRlKToKKwogMjAxOC0wMy0wNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9u
c10gQWRkIGEgbmV3IHJ1bnRpbWUgZmxhZyB0byBjb250cm9sIHdoZXRoZXIgQ1NTIEFuaW1hdGlv
bnMgYW5kIENTUyBUcmFuc2l0aW9ucyBzaG91bGQgcnVuIHVzaW5nIHRoZSBXZWIgQW5pbWF0aW9u
cyB0aW1lbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4IDMzNjVlYjdl
YjRiN2M3ZTkzNjMyY2QzMTZhZjYyNTk1ODRlYjY5NzcuLjdmN2NmZTczZWJiYmE0MTY4NWNhYmNi
M2QwZmU4ZDFlOTVjMWY5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFn
ZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAg
LTc2LDkgKzc2LDkgQEAgc3RhdGljIGJvb2wgY2FuQ2FjaGVGcmFtZShGcmFtZSYgZnJhbWUsIERp
YWdub3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2kKICAgICBQQ0xPRygiKy0tLSIp
OwogICAgIEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9IGZyYW1lLmxvYWRlcigpOwogCi0gICAg
Ly8gUHJldmVudCBwYWdlIGNhY2hpbmcgaWYgYSBzdWJmcmFtZSBpcyBzdGlsbCBpbiBwcm92aXNp
b25hbCBsb2FkIHN0YWdlLgorICAgIC8vIFByZXZlbnQgcGFnZSBjYWNoaW5nIGlmIGEgc3ViZnJh
bWUgaXMgc3RpbGwgd2FpdGluZyBmb3IgcG9saWN5IGRlY2lzaW9uIG9yIGluIHByb3Zpc2lvbmFs
IGxvYWQgc3RhZ2UuCiAgICAgLy8gV2Ugb25seSBkbyB0aGlzIGNoZWNrIGZvciBzdWJmcmFtZXMg
YmVjYXVzZSB0aGUgbWFpbiBmcmFtZSBpcyByZXVzZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3
IHBhZ2UuCi0gICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpICYmIGZyYW1lTG9hZGVyLnN0YXRl
KCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsKSB7CisgICAgaWYgKCFmcmFtZS5pc01haW5GcmFt
ZSgpICYmIChmcmFtZUxvYWRlci5zdGF0ZSgpID09IEZyYW1lU3RhdGVBc3luY0RlY2lkZVBvbGlj
eSB8fCBmcmFtZUxvYWRlci5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCkpIHsKICAg
ICAgICAgUENMT0coIiAgIC1GcmFtZSBpcyBpbiBwcm92aXNpb25hbCBsb2FkIHN0YWdlIik7CiAg
ICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwcm92aXNpb25hbExvYWRLZXkoKSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CmluZGV4IDlhN2Q5YWI5ZDcyMjU4NDJiMjhhM2NmMWRhNGY2YTNlZGUxYjNkZDkuLmIxOTc1MTJj
ODkzMDdiNzJlM2M3ZDI1Zjc0ODJhMmU3MTRlNDU5ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcApAQCAtMTUzOCw2ICsxNTM4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZFdpdGhEb2N1bWVudExvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBGcmFtZUxvYWRUeXBl
IHQKIAogICAgIG1fZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLmNhbmNlbCh0cnVlKTsKIAor
ICAgIHNldFN0YXRlKEZyYW1lU3RhdGVBc3luY0RlY2lkZVBvbGljeSk7CiAgICAgcG9saWN5Q2hl
Y2tlcigpLmNoZWNrTmF2aWdhdGlvblBvbGljeShSZXNvdXJjZVJlcXVlc3QobG9hZGVyLT5yZXF1
ZXN0KCkpLCBmYWxzZSAvKiBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSAqLywgbG9hZGVyLCBm
b3JtU3RhdGUsIFt0aGlzLCBwcm90ZWN0ZWRGcmFtZSA9IG1ha2VSZWYobV9mcmFtZSksIGFsbG93
TmF2aWdhdGlvblRvSW52YWxpZFVSTCwgY29tcGxldGlvbkhhbmRsZXIgPSBjb21wbGV0aW9uSGFu
ZGxlckNhbGxlci5yZWxlYXNlKCldIChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEZv
cm1TdGF0ZSogZm9ybVN0YXRlLCBib29sIHNob3VsZENvbnRpbnVlKSB7CiAgICAgICAgIGNvbnRp
bnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeShyZXF1ZXN0LCBmb3JtU3RhdGUsIHNob3VsZENv
bnRpbnVlLCBhbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkwpOwogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwpAQCAtMjI5MCw2ICsyMjkxLDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNr
TG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dpdGNo
IChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgRnJhbWVTdGF0ZUFzeW5jRGVjaWRlUG9saWN5Ogor
ICAgICAgICAgICAgLy8gTG9hZCBpcyBub3QgZG9uZS4gTG9hZCBjb21wbGV0ZSBzaG91bGQgYmUg
Y2hlY2tlZCB3aGVuIHN0YXRlIGNoYW5nZXMgdG8KKyAgICAgICAgICAgIC8vIEZyYW1lU3RhdGVQ
cm92aXNpb25hbCBsYXRlci4KKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBjYXNlIEZy
YW1lU3RhdGVQcm92aXNpb25hbDogewogICAgICAgICAgICAgLy8gRklYTUU6IFByb2hpYml0aW5n
IGFueSBwcm92aXNpb25hbCBsb2FkIGZhaWx1cmVzIGZyb20gYmVpbmcgc2VudCB0byBjbGllbnRz
CiAgICAgICAgICAgICAvLyB3aGlsZSBoYW5kbGluZyBwcm92aXNpb25hbCBsb2FkIGZhaWx1cmVz
IGlzIHRvbyBoZWF2eS4gRm9yIGV4YW1wbGUsIHRoZSBjdXJyZW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAppbmRleCAwYTQ3MTgwYjgwNDBkZjM4ZDdkOWEwYWM1YTE4
OGI4MzE5NWRlNWQ4Li42YWE0NDI0YWJhNmRjNDA5NWM1MjkyMmUwMTU1OGM1N2Y1MmJmZWY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgKQEAgLTMxLDYgKzMxLDgg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBGcmFtZVN0YXRlIHsKKyAgICAvLyBUaGlz
IHN0YXRlIGluZGljYXRlcyB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBhc3luYyBkZWNpZGUgcG9s
aWN5IHRvIHJldHVybi4KKyAgICBGcmFtZVN0YXRlQXN5bmNEZWNpZGVQb2xpY3ksCiAgICAgRnJh
bWVTdGF0ZVByb3Zpc2lvbmFsLAogICAgIC8vIFRoaXMgc3RhdGUgaW5kaWNhdGVzIHdlIGFyZSBy
ZWFkeSB0byBjb21taXQgdG8gYSBwYWdlLAogICAgIC8vIHdoaWNoIG1lYW5zIHRoZSB2aWV3IHdp
bGwgdHJhbnNpdGlvbiB0byB1c2UgdGhlIG5ldyBkYXRhIHNvdXJjZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLRnJhbWUuaAppbmRleCBiOTg3ZGRjNjM4MzEwOTJkYjMzMzY1OThkNmZh
NTE5Y2U0OTgzYmI4Li43YThhMzE5MDZiNDdmOWU2Mjk3NTA1Y2NiZDg3ODFkODJjY2JlOGQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5oCkBAIC0zOSw3ICszOSw4IEBA
IGV4dGVybiAiQyIgewogZW51bSB7CiAgICAga1dLRnJhbWVMb2FkU3RhdGVQcm92aXNpb25hbCA9
IDAsCiAgICAga1dLRnJhbWVMb2FkU3RhdGVDb21taXR0ZWQgPSAxLAotICAgIGtXS0ZyYW1lTG9h
ZFN0YXRlRmluaXNoZWQgPSAyCisgICAga1dLRnJhbWVMb2FkU3RhdGVGaW5pc2hlZCA9IDIsCisg
ICAga1dLRnJhbWVMb2FkU3RhdGVBc3luY0RlY2lkZVBvbGljeSA9IDMKIH07CiB0eXBlZGVmIHVp
bnQzMl90IFdLRnJhbWVMb2FkU3RhdGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcApp
bmRleCA0YzBjNmFlZDM4OTlkOGIyODdjYzExMGViMDc5NzZmZjE0YzcxYWUzLi4xNDFhMzA3ZWFi
NjcxMjBkOGQ2ODg2MjE3NDEwZWMyOWMxYzhhNjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlRnJh
bWUuY3BwCkBAIC04MSw2ICs4MSw4IEBAIFdLRnJhbWVMb2FkU3RhdGUgV0tCdW5kbGVGcmFtZUdl
dEZyYW1lTG9hZFN0YXRlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWVSZWYpCiAgICAgICAgIHJldHVy
biBrV0tGcmFtZUxvYWRTdGF0ZUZpbmlzaGVkOwogCiAgICAgc3dpdGNoIChjb3JlRnJhbWUtPmxv
YWRlcigpLnN0YXRlKCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OkZyYW1lU3RhdGVBc3luY0RlY2lk
ZVBvbGljeToKKyAgICAgICAgcmV0dXJuIGtXS0ZyYW1lTG9hZFN0YXRlQXN5bmNEZWNpZGVQb2xp
Y3k7CiAgICAgY2FzZSBGcmFtZVN0YXRlUHJvdmlzaW9uYWw6CiAgICAgICAgIHJldHVybiBrV0tG
cmFtZUxvYWRTdGF0ZVByb3Zpc2lvbmFsOwogICAgIGNhc2UgRnJhbWVTdGF0ZUNvbW1pdHRlZFBh
Z2U6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggOTg1NjE0NmU4MWNhZGM5ZDQyMTdlZjExZmQ3NWRhYmRkYWUxYWRlOC4uYWJj
OTdmZTg3NjBiYTRjMmY4NGJjNGQ4NmQ2NTUzMWJhNGM1NTZiNCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDE4LTAzLTA2ICBEYW55YW8gV2FuZyAgPGRhbnlhb0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1l
LXByb3Zpc2lvbmFsLWxvYWQuaHRtbCBmYWlscyB3aXRoIGFzeW5jIHBvbGljeSBkZWxlZ2F0ZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzMzg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC5odG1sOgor
CQkJCVVwZGF0ZSB0ZXN0cyB0byB0ZXN0IHRoZSBhc3luYyBjYXNlLgorCiAyMDE4LTAzLTA2ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgZmFzdC9sb2FkZXIvcmVk
aXJlY3QtdG8taW52YWxpZC11cmwtdXNpbmctbWV0YS1yZWZyZXNoLWRpc2FsbG93ZWQuaHRtbCBm
YWlscyB3aXRoIGFzeW5jIHBvbGljeSBkZWxlZ2F0ZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2Fk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJh
bWUtcHJvdmlzaW9uYWwtbG9hZC5odG1sCmluZGV4IGFkZjg1YmE2ZmRlMGZhMjc5MjQ1MTJmYTkz
NDM0ZjA3YzZlZjUzNjMuLjJlOTk1ODg3YmY3NTBjZDMwOWE1N2MyNjAxYzFmZGMwNWNmMmU1MzYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hl
LWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbApAQCAt
Niw4ICs2LDEyIEBACiBkZXNjcmlwdGlvbigiQSBmcmFtZSBpbiBwcm92aXNpb25hbCBsb2FkIHN0
YWdlIHNob3VsZCBwcmV2ZW50IHBhZ2UgY2FjaGluZy4iKTsKIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKIAotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgaWYgKHRlc3RSdW5uZXIuc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFm
dGVyRGVsYXkpCisgICAgICAgICAgdGVzdFJ1bm5lci5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9u
UG9saWN5QWZ0ZXJEZWxheSh0cnVlKTsKKwogICAgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJl
bmNlKCJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIsIDEpOworfQogCiB3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigicGFnZXNob3ciLCBmdW5jdGlvbihldmVudCkgewogICAgIGRlYnVn
KCJwYWdlc2hvdyAtICIgKyAoZXZlbnQucGVyc2lzdGVkID8gIiIgOiAibm90ICIpICsgImZyb20g
Y2FjaGUiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335646</attachid>
            <date>2018-03-12 14:49:51 -0700</date>
            <delta_ts>2018-03-13 07:54:39 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-183386-20180312174951.patch</filename>
            <type>text/plain</type>
            <size>4502</size>
            <attacher name="Danyao Wang">danyao</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5MzQxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTg1NjE0NmU4MWNhZGM5ZDQyMTdl
ZjExZmQ3NWRhYmRkYWUxYWRlOC4uYjQ0M2U4OThmNTI3YWQzOTBhNzFkOThkOTFmZjE4NmU2NGE2
YjcxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTAzLTEyICBEYW55YW8gV2FuZyAgPGRh
bnlhb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbCBmYWlscyB3aXRo
IGFzeW5jIHBvbGljeSBkZWxlZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgzMzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKwkJCQlUaGlzIHRlc3QgcmVsaWVzIG9uIHRoZSBoYXBwZW5zdGFuY2UgdGhhdCB3aXRo
IHN5bmMgcG9pY3kgZGVjaXNpb24sIHRoZSBzdWJmcmFtZSB0cmFuc2l0aW9ucworCQkJCXRvIEZy
YW1lTG9hZFByb3Zpc2lvbmFsIGJlZm9yZSBtYWluIGZyYW1lIG5hdmlnYXRpb24gaXMgY29tbWl0
dGVkLiAgV2l0aCBhc3luYyBkZWxlZ2F0ZSwKKwkJCQlwb2xpY3kgY2hlY2tzIGZvciB0aGUgbWFp
biBmcmFtZSBhbmQgc3ViZnJhbWUgYXJlIGludGVybGVhdmVkLiBXaGVuIHRoZSBtYWluIGZyYW1l
IHBvbGljeQorCQkJCWRlY2lzaW9uIGlzIHJlY2VpdmVkLCBpdCBjYW5jZWxzIHRoZSBzdWJmcmFt
ZSBjaGVjay4gU28gdGhlIHBhZ2UgZW5kcworCQkJCXVwIGJlaW5nIGNhY2hlZCB3aGVuIG5hdmln
YXRpbmcgYXdheS4gVGhpcyBpcyB3b3JraW5nIGFzIGludGVuZGVkLgorCisgICAgICAgICogaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5
bmMtZGVsZWdhdGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVsZWdh
dGVzLmh0bWw6IEFkZGVkLgorCQkJCUFkZCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSB0ZXN0IHRoYXQg
Zm9yY2VzIHRoZSBtYWluIGZyYW1lIG5hdmlnYXRpb24gdG8gc3RhcnQgYWZ0ZXIgdGhlCisJCQkJ
cHJvdmlzaW9uYWwgbmF2aWdhdGlvbiBpbiB0aGUgc3ViZnJhbWUgYW5kIHZlcmlmeSB0aGF0IHBh
Z2UgaXMgbm90IGNhY2hlZC4KKwogMjAxOC0wMy0wNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIGZhc3QvbG9hZGVyL3JlZGlyZWN0LXRvLWludmFsaWQtdXJsLXVz
aW5nLW1ldGEtcmVmcmVzaC1kaXNhbGxvd2VkLmh0bWwgZmFpbHMgd2l0aCBhc3luYyBwb2xpY3kg
ZGVsZWdhdGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
cGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZy
YW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVsZWdhdGVzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNGNjMzhiNjUzMWMwZDY3MzJhOWY0NmY3Y2JlODQ2ODkxYzg3Yjg2Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZy
YW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVsZWdhdGVzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDExIEBACitBIGZyYW1lIGluIHByb3Zpc2lvbmFsIGxvYWQgc3RhZ2Ugc2hvdWxkIHByZXZl
bnQgcGFnZSBjYWNoaW5nLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworcGFnZXNo
b3cgLSBub3QgZnJvbSBjYWNoZQorUEFTUyBQYWdlIHdhcyBub3QgcmVzdG9yZWQgZnJvbSBQYWdl
Q2FjaGUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNo
ZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1s
b2FkLWFzeW5jLWRlbGVnYXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1MDdhODgxNmMyY2I2YmMxOTc0
ZmIzZjliYTc1OTBhMjk3Mjk5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC1hc3lu
Yy1kZWxlZ2F0ZXMuaHRtbApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkEgZnJhbWUgaW4gcHJvdmlzaW9uYWwgbG9hZCBz
dGFnZSBzaG91bGQgcHJldmVudCBwYWdlIGNhY2hpbmcuIik7Cit3aW5kb3cuanNUZXN0SXNBc3lu
YyA9IHRydWU7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIGlmICh0ZXN0UnVubmVy
LnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KQorICAgICAgICAgIHRl
c3RSdW5uZXIuc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVyRGVsYXkodHJ1ZSk7
CisKKyAgICB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0VXNlc1BhZ2VDYWNo
ZVByZWZlcmVuY2VLZXkiLCAxKTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2Vz
aG93IiwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBkZWJ1ZygicGFnZXNob3cgLSAiICsgKGV2ZW50
LnBlcnNpc3RlZCA/ICIiIDogIm5vdCAiKSArICJmcm9tIGNhY2hlIik7CisKKyAgICBpZiAoIXdp
bmRvdy5zZXNzaW9uU3RvcmFnZS5wYWdlX2NhY2hlX3Byb3Zpc2lvbmFsX2xvYWRfdGVzdF9zdGFy
dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxldGUgd2luZG93LnNlc3Npb25TdG9yYWdl
LnBhZ2VfY2FjaGVfcHJvdmlzaW9uYWxfbG9hZF90ZXN0X3N0YXJ0ZWQ7CisKKyAgICBpZiAoZXZl
bnQucGVyc2lzdGVkKQorICAgICAgICB0ZXN0RmFpbGVkKCJQYWdlIHdhcyByZXN0b3JlZCBmcm9t
IFBhZ2VDYWNoZSIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdFBhc3NlZCgiUGFnZSB3YXMgbm90
IHJlc3RvcmVkIGZyb20gUGFnZUNhY2hlIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30sIGZh
bHNlKTsKKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIiwgZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICB0ZXN0RmFpbGVkKCJwYWdlaGlkZSAtIFBhZ2Ugd2VudCBpbnRvIFBhZ2VDYWNo
ZSIpOworfSwgZmFsc2UpOworCitmdW5jdGlvbiBsb2FkU3ViZnJhbWVBbmROYXZpZ2F0ZUF3YXko
KQoreworICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5wYWdlX2NhY2hlX3Byb3Zpc2lvbmFsX2xv
YWRfdGVzdF9zdGFydGVkID0gdHJ1ZTsKKworICAgIHZhciB0ZXN0RnJhbWUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGVzdEZyYW1lIik7CisKKyAgICAvLyBGb3JjZSBhIGJhY2sgbmF2aWdh
dGlvbiBiYWNrIHRvIHRoaXMgcGFnZSBhZnRlciBwcm92aXNpb25hbCBuYXZpZ2F0aW9uIHN0YXJ0
cyBpbiB0aGUgaWZyYW1lLgorICAgIHRlc3RGcmFtZS5jb250ZW50V2luZG93Lm9uYmVmb3JldW5s
b2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJyZXNvdXJjZXMvcGFnZS1jYWNoZS1oZWxw
ZXIuaHRtbCI7CisgICAgICAgIH0sIDApOworICAgIH07CisKKyAgICB0ZXN0RnJhbWUuc3JjID0g
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNl
LnBsP2RlbGF5PTMwMDAiOworfQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGxv
YWRTdWJmcmFtZUFuZE5hdmlnYXRlQXdheSwgZmFsc2UpOworCis8L3NjcmlwdD4KKzxpZnJhbWUg
aWQ9InRlc3RGcmFtZSIgc3JjPSJhYm91dDpibGFuayI+PC9pZnJhbWU+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335647</attachid>
            <date>2018-03-12 14:58:53 -0700</date>
            <delta_ts>2018-03-13 07:54:40 -0700</delta_ts>
            <desc>Patch for review (fixed style errors)</desc>
            <filename>bug-183386-20180312175852.patch</filename>
            <type>text/plain</type>
            <size>4530</size>
            <attacher name="Danyao Wang">danyao</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5MzQxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTg1NjE0NmU4MWNhZGM5ZDQyMTdl
ZjExZmQ3NWRhYmRkYWUxYWRlOC4uMDliNjZlZmYyMmVjNjU3MGIzMTM3ZmNhYTBjOGE3YjE1OTRh
ZTA3MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTAzLTEyICBEYW55YW8gV2FuZyAgPGRh
bnlhb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbCBmYWlscyB3aXRo
IGFzeW5jIHBvbGljeSBkZWxlZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgzMzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyB0ZXN0IHJlbGllcyBvbiB0aGUgaGFwcGVuc3RhbmNlIHRoYXQg
d2l0aCBzeW5jIHBvaWN5IGRlY2lzaW9uLCB0aGUgc3ViZnJhbWUgdHJhbnNpdGlvbnMKKyAgICAg
ICAgdG8gRnJhbWVMb2FkUHJvdmlzaW9uYWwgYmVmb3JlIG1haW4gZnJhbWUgbmF2aWdhdGlvbiBp
cyBjb21taXR0ZWQuICBXaXRoIGFzeW5jIGRlbGVnYXRlLAorICAgICAgICBwb2xpY3kgY2hlY2tz
IGZvciB0aGUgbWFpbiBmcmFtZSBhbmQgc3ViZnJhbWUgYXJlIGludGVybGVhdmVkLiBXaGVuIHRo
ZSBtYWluIGZyYW1lIHBvbGljeQorICAgICAgICBkZWNpc2lvbiBpcyByZWNlaXZlZCwgaXQgY2Fu
Y2VscyB0aGUgc3ViZnJhbWUgY2hlY2suIFNvIHRoZSBwYWdlIGVuZHMKKyAgICAgICAgdXAgYmVp
bmcgY2FjaGVkIHdoZW4gbmF2aWdhdGluZyBhd2F5LiBUaGlzIGlzIHdvcmtpbmcgYXMgaW50ZW5k
ZWQuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUt
cHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9u
YWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgIEFkZCBhIG5ldyB2
ZXJzaW9uIG9mIHRoZSB0ZXN0IHRoYXQgZm9yY2VzIHRoZSBtYWluIGZyYW1lIG5hdmlnYXRpb24g
dG8gc3RhcnQgYWZ0ZXIgdGhlCisgICAgICAgIHByb3Zpc2lvbmFsIG5hdmlnYXRpb24gaW4gdGhl
IHN1YmZyYW1lIGFuZCB2ZXJpZnkgdGhhdCBwYWdlIGlzIG5vdCBjYWNoZWQuCisKIDIwMTgtMDMt
MDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBmYXN0L2xvYWRl
ci9yZWRpcmVjdC10by1pbnZhbGlkLXVybC11c2luZy1tZXRhLXJlZnJlc2gtZGlzYWxsb3dlZC5o
dG1sIGZhaWxzIHdpdGggYXN5bmMgcG9saWN5IGRlbGVnYXRlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFs
LWxvYWQtYXN5bmMtZGVsZWdhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLWFzeW5jLWRl
bGVnYXRlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRjYzM4YjY1MzFjMGQ2NzMyYTlmNDZm
N2NiZTg0Njg5MWM4N2I4NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLWFzeW5jLWRl
bGVnYXRlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQSBmcmFtZSBpbiBwcm92aXNp
b25hbCBsb2FkIHN0YWdlIHNob3VsZCBwcmV2ZW50IHBhZ2UgY2FjaGluZy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK3BhZ2VzaG93IC0gbm90IGZyb20gY2FjaGUKK1BBU1MgUGFn
ZSB3YXMgbm90IHJlc3RvcmVkIGZyb20gUGFnZUNhY2hlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5
bmMtZGVsZWdhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFn
ZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xNTA3YTg4MTZjMmNiNmJjMTk3NGZiM2Y5YmE3NTkwYTI5NzI5OThkCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUt
aWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVsZWdhdGVzLmh0bWwKQEAgLTAsMCArMSw1
OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJB
IGZyYW1lIGluIHByb3Zpc2lvbmFsIGxvYWQgc3RhZ2Ugc2hvdWxkIHByZXZlbnQgcGFnZSBjYWNo
aW5nLiIpOword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICBpZiAodGVzdFJ1bm5lci5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9s
aWN5QWZ0ZXJEZWxheSkKKyAgICAgICAgICB0ZXN0UnVubmVyLnNldFNob3VsZERlY2lkZU5hdmln
YXRpb25Qb2xpY3lBZnRlckRlbGF5KHRydWUpOworCisgICAgdGVzdFJ1bm5lci5vdmVycmlkZVBy
ZWZlcmVuY2UoIldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IiwgMSk7Cit9CisKK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlc2hvdyIsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ZGVidWcoInBhZ2VzaG93IC0gIiArIChldmVudC5wZXJzaXN0ZWQgPyAiIiA6ICJub3QgIikgKyAi
ZnJvbSBjYWNoZSIpOworCisgICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucGFnZV9jYWNo
ZV9wcm92aXNpb25hbF9sb2FkX3Rlc3Rfc3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZGVsZXRlIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5wYWdlX2NhY2hlX3Byb3Zpc2lvbmFsX2xvYWRf
dGVzdF9zdGFydGVkOworCisgICAgaWYgKGV2ZW50LnBlcnNpc3RlZCkKKyAgICAgICAgdGVzdEZh
aWxlZCgiUGFnZSB3YXMgcmVzdG9yZWQgZnJvbSBQYWdlQ2FjaGUiKTsKKyAgICBlbHNlCisgICAg
ICAgIHRlc3RQYXNzZWQoIlBhZ2Ugd2FzIG5vdCByZXN0b3JlZCBmcm9tIFBhZ2VDYWNoZSIpOwor
CisgICAgZmluaXNoSlNUZXN0KCk7Cit9LCBmYWxzZSk7CisKK3dpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCJwYWdlaGlkZSIsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdGVzdEZhaWxlZCgicGFnZWhp
ZGUgLSBQYWdlIHdlbnQgaW50byBQYWdlQ2FjaGUiKTsKK30sIGZhbHNlKTsKKworZnVuY3Rpb24g
bG9hZFN1YmZyYW1lQW5kTmF2aWdhdGVBd2F5KCkKK3sKKyAgICB3aW5kb3cuc2Vzc2lvblN0b3Jh
Z2UucGFnZV9jYWNoZV9wcm92aXNpb25hbF9sb2FkX3Rlc3Rfc3RhcnRlZCA9IHRydWU7CisKKyAg
ICB2YXIgdGVzdEZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RGcmFtZSIpOwor
CisgICAgLy8gRm9yY2UgYSBiYWNrIG5hdmlnYXRpb24gYmFjayB0byB0aGlzIHBhZ2UgYWZ0ZXIg
cHJvdmlzaW9uYWwgbmF2aWdhdGlvbiBzdGFydHMgaW4gdGhlIGlmcmFtZS4KKyAgICB0ZXN0RnJh
bWUuY29udGVudFdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYg
PSAicmVzb3VyY2VzL3BhZ2UtY2FjaGUtaGVscGVyLmh0bWwiOworICAgICAgICB9LCAwKTsKKyAg
ICB9OworCisgICAgdGVzdEZyYW1lLnNyYyA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS5wbD9kZWxheT0zMDAwIjsKK30KKword2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBsb2FkU3ViZnJhbWVBbmROYXZpZ2F0ZUF3YXksIGZh
bHNlKTsKKworPC9zY3JpcHQ+Cis8aWZyYW1lIGlkPSJ0ZXN0RnJhbWUiIHNyYz0iYWJvdXQ6Ymxh
bmsiPjwvaWZyYW1lPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335692</attachid>
            <date>2018-03-13 07:54:51 -0700</date>
            <delta_ts>2018-03-13 07:58:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183386-20180313105450.patch</filename>
            <type>text/plain</type>
            <size>6105</size>
            <attacher name="Danyao Wang">danyao</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5MzQxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTg1NjE0NmU4MWNhZGM5ZDQyMTdl
ZjExZmQ3NWRhYmRkYWUxYWRlOC4uOGI3YTk0NzBiYWRiODhmYTY5NjljZDEzYzIyZTQ2NzMyMGYy
ZDliOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE4LTAzLTEzICBEYW55YW8gV2FuZyAgPGRh
bnlhb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbCBmYWlscyB3aXRo
IGFzeW5jIHBvbGljeSBkZWxlZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgzMzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyB0ZXN0IHJlbGllcyBvbiB0aGUgaGFwcGVuc3RhbmNlIHRoYXQg
d2l0aCBzeW5jIHBvaWN5IGRlY2lzaW9uLCB0aGUgc3ViZnJhbWUgdHJhbnNpdGlvbnMKKyAgICAg
ICAgdG8gRnJhbWVMb2FkUHJvdmlzaW9uYWwgYmVmb3JlIG1haW4gZnJhbWUgbmF2aWdhdGlvbiBp
cyBjb21taXR0ZWQuICBXaXRoIGFzeW5jIGRlbGVnYXRlLAorICAgICAgICBwb2xpY3kgY2hlY2tz
IGZvciB0aGUgbWFpbiBmcmFtZSBhbmQgc3ViZnJhbWUgYXJlIGludGVybGVhdmVkLiBXaGVuIHRo
ZSBtYWluIGZyYW1lIHBvbGljeQorICAgICAgICBkZWNpc2lvbiBpcyByZWNlaXZlZCwgaXQgY2Fu
Y2VscyB0aGUgc3ViZnJhbWUgY2hlY2suIFNvIHRoZSBwYWdlIGVuZHMKKyAgICAgICAgdXAgYmVp
bmcgY2FjaGVkIHdoZW4gbmF2aWdhdGluZyBhd2F5LiBUaGlzIGlzIHdvcmtpbmcgYXMgaW50ZW5k
ZWQuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUt
cHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9u
YWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRt
bC4KKyAgICAgICAgQWRkIGEgbmV3IHZlcnNpb24gb2YgdGhlIHRlc3QgdGhhdCBmb3JjZXMgYXN5
bmMgcG9saWN5IGRlbGVnYXRlLgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bh
Z2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbDoKKyAgICAgICAgVXBkYXRlIHRl
c3QgdG8gc2VxdWVuY2UgbWFpbiBmcmFtZSBuYXZpZ2F0aW9uIGFmdGVyIHN0YXJ0IG9mIHByb3Zp
c2lvbmFsIG5hdmlnYXRpb24gaW4gc3ViZnJhbWUuCisKIDIwMTgtMDMtMDYgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBmYXN0L2xvYWRlci9yZWRpcmVjdC10by1p
bnZhbGlkLXVybC11c2luZy1tZXRhLXJlZnJlc2gtZGlzYWxsb3dlZC5odG1sIGZhaWxzIHdpdGgg
YXN5bmMgcG9saWN5IGRlbGVnYXRlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVs
ZWdhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9w
YWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLWFzeW5jLWRlbGVnYXRlcy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjRjYzM4YjY1MzFjMGQ2NzMyYTlmNDZmN2NiZTg0Njg5MWM4N2I4
NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9w
YWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLWFzeW5jLWRlbGVnYXRlcy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQSBmcmFtZSBpbiBwcm92aXNpb25hbCBsb2FkIHN0YWdl
IHNob3VsZCBwcmV2ZW50IHBhZ2UgY2FjaGluZy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK3BhZ2VzaG93IC0gbm90IGZyb20gY2FjaGUKK1BBU1MgUGFnZSB3YXMgbm90IHJlc3Rv
cmVkIGZyb20gUGFnZUNhY2hlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVsZWdhdGVzLmh0
bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUt
cHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTNkMmUw
OGFhZDE4NmZkZjE4ODQwMWU2ZWZlMDI5NTU5ZTdkMjEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lv
bmFsLWxvYWQtYXN5bmMtZGVsZWdhdGVzLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJBIGZyYW1lIGluIHByb3Zp
c2lvbmFsIGxvYWQgc3RhZ2Ugc2hvdWxkIHByZXZlbnQgcGFnZSBjYWNoaW5nLiIpOword2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICBp
ZiAodGVzdFJ1bm5lci5zZXRTaG91bGREZWNpZGVOYXZpZ2F0aW9uUG9saWN5QWZ0ZXJEZWxheSkK
KyAgICAgICAgICB0ZXN0UnVubmVyLnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRl
ckRlbGF5KHRydWUpOworCisgICAgdGVzdFJ1bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktp
dFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IiwgMSk7Cit9CisKK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJwYWdlc2hvdyIsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgZGVidWcoInBhZ2VzaG93
IC0gIiArIChldmVudC5wZXJzaXN0ZWQgPyAiIiA6ICJub3QgIikgKyAiZnJvbSBjYWNoZSIpOwor
CisgICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucGFnZV9jYWNoZV9wcm92aXNpb25hbF9s
b2FkX3Rlc3Rfc3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIHdpbmRvdy5z
ZXNzaW9uU3RvcmFnZS5wYWdlX2NhY2hlX3Byb3Zpc2lvbmFsX2xvYWRfdGVzdF9zdGFydGVkOwor
CisgICAgaWYgKGV2ZW50LnBlcnNpc3RlZCkKKyAgICAgICAgdGVzdEZhaWxlZCgiUGFnZSB3YXMg
cmVzdG9yZWQgZnJvbSBQYWdlQ2FjaGUiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RQYXNzZWQo
IlBhZ2Ugd2FzIG5vdCByZXN0b3JlZCBmcm9tIFBhZ2VDYWNoZSIpOworCisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9LCBmYWxzZSk7CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIs
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdGVzdEZhaWxlZCgicGFnZWhpZGUgLSBQYWdlIHdlbnQg
aW50byBQYWdlQ2FjaGUiKTsKK30sIGZhbHNlKTsKKworZnVuY3Rpb24gbG9hZFN1YmZyYW1lQW5k
TmF2aWdhdGVBd2F5KCkKK3sKKyAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucGFnZV9jYWNoZV9w
cm92aXNpb25hbF9sb2FkX3Rlc3Rfc3RhcnRlZCA9IHRydWU7CisKKyAgICAvLyBGb3JjZSBhIGJh
Y2sgbmF2aWdhdGlvbiBiYWNrIHRvIHRoaXMgcGFnZSBhZnRlciB0aGUgc3ViZnJhbWUgc3RhcnRz
IHByb3Zpc2lvbmFsIG5hdmlnYXRpb24uCisgICAgdmFyIHRlc3RGcmFtZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXN0RnJhbWUiKTsKKyAgICB0ZXN0RnJhbWUub25iZWZvcmV1bmxvYWQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gInJlc291cmNlcy9wYWdlLWNhY2hlLWhlbHBlci5o
dG1sIjsKKyAgICAgICAgfSwgMCk7CisgICAgfTsKKyAgICB0ZXN0RnJhbWUuc3JjID0gImh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLnBsP2Rl
bGF5PTMwMDAiOworfQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGxvYWRTdWJm
cmFtZUFuZE5hdmlnYXRlQXdheSwgZmFsc2UpOworCis8L3NjcmlwdD4KKzxpZnJhbWUgaWQ9InRl
c3RGcmFtZSIgc3JjPSJhYm91dDpibGFuayI+PC9pZnJhbWU+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1l
LXByb3Zpc2lvbmFsLWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlv
bi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25hbC1sb2FkLmh0bWwKaW5kZXggYWRmODViYTZm
ZGUwZmEyNzkyNDUxMmZhOTM0MzRmMDdjNmVmNTM2My4uOWViNmExMjNjY2I4ZmJiNTExN2M1OGY5
ZDFkNjExMGJlZWIwNTQxYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9u
YWwtbG9hZC5odG1sCkBAIC0zMSwxOSArMzEsMTkgQEAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
InBhZ2VoaWRlIiwgZnVuY3Rpb24oZXZlbnQpIHsKIAogZnVuY3Rpb24gbG9hZFN1YmZyYW1lQW5k
TmF2aWdhdGVBd2F5KCkKIHsKLSAgICAvLyBGb3JjZSBhIGJhY2sgbmF2aWdhdGlvbiBiYWNrIHRv
IHRoaXMgcGFnZS4KICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucGFnZV9jYWNoZV9wcm92aXNp
b25hbF9sb2FkX3Rlc3Rfc3RhcnRlZCA9IHRydWU7Ci0gICAgd2luZG93LmxvY2F0aW9uLmhyZWYg
PSAicmVzb3VyY2VzL3BhZ2UtY2FjaGUtaGVscGVyLmh0bWwiOwogCisgICAgLy8gRm9yY2UgYSBi
YWNrIG5hdmlnYXRpb24gYmFjayB0byB0aGlzIHBhZ2UgYWZ0ZXIgdGhlIHN1YmZyYW1lIHN0YXJ0
cyBwcm92aXNpb25hbCBuYXZpZ2F0aW9uLgogICAgIHZhciB0ZXN0RnJhbWUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGVzdEZyYW1lIik7CisgICAgdGVzdEZyYW1lLm9uYmVmb3JldW5sb2Fk
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJyZXNvdXJjZXMvcGFnZS1jYWNoZS1oZWxwZXIu
aHRtbCI7CisgICAgICAgIH0sIDApOworICAgIH07CiAgICAgdGVzdEZyYW1lLnNyYyA9ICJodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS5wbD9k
ZWxheT0zMDAwIjsKIH0KIAotd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlv
bigpIHsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICBsb2FkU3ViZnJhbWVB
bmROYXZpZ2F0ZUF3YXkoKTsKLSAgICB9LCAwKTsKLX0sIGZhbHNlKTsKK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCdsb2FkJywgbG9hZFN1YmZyYW1lQW5kTmF2aWdhdGVBd2F5LCBmYWxzZSk7CiAK
IDwvc2NyaXB0PgogPGlmcmFtZSBpZD0idGVzdEZyYW1lIiBzcmM9ImFib3V0OmJsYW5rIj48L2lm
cmFtZT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335693</attachid>
            <date>2018-03-13 07:58:39 -0700</date>
            <delta_ts>2018-03-13 09:12:45 -0700</delta_ts>
            <desc>Patch for review (fixed style and old test)</desc>
            <filename>bug-183386-20180313105838.patch</filename>
            <type>text/plain</type>
            <size>6104</size>
            <attacher name="Danyao Wang">danyao</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5MzQxCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTg1NjE0NmU4MWNhZGM5ZDQyMTdl
ZjExZmQ3NWRhYmRkYWUxYWRlOC4uNjYwMDg3OTQ0YzVjMmNmMzcxOWViMDg0NTQxNDY0OWQ4MWIy
NTBjZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE4LTAzLTEzICBEYW55YW8gV2FuZyAgPGRh
bnlhb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbCBmYWlscyB3aXRo
IGFzeW5jIHBvbGljeSBkZWxlZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgzMzg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyB0ZXN0IHJlbGllcyBvbiB0aGUgaGFwcGVuc3RhbmNlIHRoYXQg
d2l0aCBzeW5jIHBvaWN5IGRlY2lzaW9uLCB0aGUgc3ViZnJhbWUgdHJhbnNpdGlvbnMKKyAgICAg
ICAgdG8gRnJhbWVMb2FkUHJvdmlzaW9uYWwgYmVmb3JlIG1haW4gZnJhbWUgbmF2aWdhdGlvbiBp
cyBjb21taXR0ZWQuIFdpdGggYXN5bmMgZGVsZWdhdGUsCisgICAgICAgIHBvbGljeSBjaGVja3Mg
Zm9yIHRoZSBtYWluIGZyYW1lIGFuZCBzdWJmcmFtZSBhcmUgaW50ZXJsZWF2ZWQuIFdoZW4gdGhl
IG1haW4gZnJhbWUgcG9saWN5CisgICAgICAgIGRlY2lzaW9uIGlzIHJlY2VpdmVkLCBpdCBjYW5j
ZWxzIHRoZSBzdWJmcmFtZSBjaGVjay4gU28gdGhlIHBhZ2UgZW5kcyB1cCBiZWluZyBjYWNoZWQg
d2hlbgorICAgICAgICBuYXZpZ2F0aW5nIGF3YXkuIFRoaXMgaXMgd29ya2luZyBhcyBpbnRlbmRl
ZC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1w
cm92aXNpb25hbC1sb2FkLWFzeW5jLWRlbGVnYXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25h
bC1sb2FkLWFzeW5jLWRlbGVnYXRlcy5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC5odG1s
LgorICAgICAgICBBZGQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgdGVzdCB0aGF0IGZvcmNlcyBhc3lu
YyBwb2xpY3kgZGVsZWdhdGUuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGFn
ZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC5odG1sOgorICAgICAgICBVcGRhdGUgdGVz
dCB0byBzZXF1ZW5jZSBtYWluIGZyYW1lIG5hdmlnYXRpb24gYWZ0ZXIgc3RhcnQgb2YgcHJvdmlz
aW9uYWwgbmF2aWdhdGlvbiBpbiBzdWJmcmFtZS4KKwogMjAxOC0wMy0wNiAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIGZhc3QvbG9hZGVyL3JlZGlyZWN0LXRvLWlu
dmFsaWQtdXJsLXVzaW5nLW1ldGEtcmVmcmVzaC1kaXNhbGxvd2VkLmh0bWwgZmFpbHMgd2l0aCBh
c3luYyBwb2xpY3kgZGVsZWdhdGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxl
Z2F0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bh
Z2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVsZWdhdGVzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNGNjMzhiNjUzMWMwZDY3MzJhOWY0NmY3Y2JlODQ2ODkxYzg3Yjg2
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Bh
Z2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQtYXN5bmMtZGVsZWdhdGVzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDExIEBACitBIGZyYW1lIGluIHByb3Zpc2lvbmFsIGxvYWQgc3RhZ2Ug
c2hvdWxkIHByZXZlbnQgcGFnZSBjYWNoaW5nLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworcGFnZXNob3cgLSBub3QgZnJvbSBjYWNoZQorUEFTUyBQYWdlIHdhcyBub3QgcmVzdG9y
ZWQgZnJvbSBQYWdlQ2FjaGUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1w
cm92aXNpb25hbC1sb2FkLWFzeW5jLWRlbGVnYXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlM2QyZTA4
YWFkMTg2ZmRmMTg4NDAxZTZlZmUwMjk1NTllN2QyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9u
YWwtbG9hZC1hc3luYy1kZWxlZ2F0ZXMuaHRtbApAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkEgZnJhbWUgaW4gcHJvdmlz
aW9uYWwgbG9hZCBzdGFnZSBzaG91bGQgcHJldmVudCBwYWdlIGNhY2hpbmcuIik7Cit3aW5kb3cu
anNUZXN0SXNBc3luYyA9IHRydWU7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIGlm
ICh0ZXN0UnVubmVyLnNldFNob3VsZERlY2lkZU5hdmlnYXRpb25Qb2xpY3lBZnRlckRlbGF5KQor
ICAgICAgICAgIHRlc3RSdW5uZXIuc2V0U2hvdWxkRGVjaWRlTmF2aWdhdGlvblBvbGljeUFmdGVy
RGVsYXkodHJ1ZSk7CisKKyAgICB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXkiLCAxKTsKK30KKword2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoInBhZ2VzaG93IiwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBkZWJ1ZygicGFnZXNob3cg
LSAiICsgKGV2ZW50LnBlcnNpc3RlZCA/ICIiIDogIm5vdCAiKSArICJmcm9tIGNhY2hlIik7CisK
KyAgICBpZiAoIXdpbmRvdy5zZXNzaW9uU3RvcmFnZS5wYWdlX2NhY2hlX3Byb3Zpc2lvbmFsX2xv
YWRfdGVzdF9zdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxldGUgd2luZG93LnNl
c3Npb25TdG9yYWdlLnBhZ2VfY2FjaGVfcHJvdmlzaW9uYWxfbG9hZF90ZXN0X3N0YXJ0ZWQ7CisK
KyAgICBpZiAoZXZlbnQucGVyc2lzdGVkKQorICAgICAgICB0ZXN0RmFpbGVkKCJQYWdlIHdhcyBy
ZXN0b3JlZCBmcm9tIFBhZ2VDYWNoZSIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdFBhc3NlZCgi
UGFnZSB3YXMgbm90IHJlc3RvcmVkIGZyb20gUGFnZUNhY2hlIik7CisKKyAgICBmaW5pc2hKU1Rl
c3QoKTsKK30sIGZhbHNlKTsKKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIiwg
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB0ZXN0RmFpbGVkKCJwYWdlaGlkZSAtIFBhZ2Ugd2VudCBp
bnRvIFBhZ2VDYWNoZSIpOworfSwgZmFsc2UpOworCitmdW5jdGlvbiBsb2FkU3ViZnJhbWVBbmRO
YXZpZ2F0ZUF3YXkoKQoreworICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5wYWdlX2NhY2hlX3By
b3Zpc2lvbmFsX2xvYWRfdGVzdF9zdGFydGVkID0gdHJ1ZTsKKworICAgIC8vIEZvcmNlIGEgYmFj
ayBuYXZpZ2F0aW9uIGJhY2sgdG8gdGhpcyBwYWdlIGFmdGVyIHRoZSBzdWJmcmFtZSBzdGFydHMg
cHJvdmlzaW9uYWwgbmF2aWdhdGlvbi4KKyAgICB2YXIgdGVzdEZyYW1lID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInRlc3RGcmFtZSIpOworICAgIHRlc3RGcmFtZS5vbmJlZm9yZXVubG9hZCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAicmVzb3VyY2VzL3BhZ2UtY2FjaGUtaGVscGVyLmh0
bWwiOworICAgICAgICB9LCAwKTsKKyAgICB9OworICAgIHRlc3RGcmFtZS5zcmMgPSAiaHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UucGw/ZGVs
YXk9MzAwMCI7Cit9CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZFN1YmZy
YW1lQW5kTmF2aWdhdGVBd2F5LCBmYWxzZSk7CisKKzwvc2NyaXB0PgorPGlmcmFtZSBpZD0idGVz
dEZyYW1lIiBzcmM9ImFib3V0OmJsYW5rIj48L2lmcmFtZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcGFnZS1jYWNoZS1pZnJhbWUt
cHJvdmlzaW9uYWwtbG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L3BhZ2UtY2FjaGUtaWZyYW1lLXByb3Zpc2lvbmFsLWxvYWQuaHRtbAppbmRleCBhZGY4NWJhNmZk
ZTBmYTI3OTI0NTEyZmE5MzQzNGYwN2M2ZWY1MzYzLi45ZWI2YTEyM2NjYjhmYmI1MTE3YzU4Zjlk
MWQ2MTEwYmVlYjA1NDFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmln
YXRpb24vcGFnZS1jYWNoZS1pZnJhbWUtcHJvdmlzaW9uYWwtbG9hZC5odG1sCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9wYWdlLWNhY2hlLWlmcmFtZS1wcm92aXNpb25h
bC1sb2FkLmh0bWwKQEAgLTMxLDE5ICszMSwxOSBAQCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
cGFnZWhpZGUiLCBmdW5jdGlvbihldmVudCkgewogCiBmdW5jdGlvbiBsb2FkU3ViZnJhbWVBbmRO
YXZpZ2F0ZUF3YXkoKQogewotICAgIC8vIEZvcmNlIGEgYmFjayBuYXZpZ2F0aW9uIGJhY2sgdG8g
dGhpcyBwYWdlLgogICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5wYWdlX2NhY2hlX3Byb3Zpc2lv
bmFsX2xvYWRfdGVzdF9zdGFydGVkID0gdHJ1ZTsKLSAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9
ICJyZXNvdXJjZXMvcGFnZS1jYWNoZS1oZWxwZXIuaHRtbCI7CiAKKyAgICAvLyBGb3JjZSBhIGJh
Y2sgbmF2aWdhdGlvbiBiYWNrIHRvIHRoaXMgcGFnZSBhZnRlciB0aGUgc3ViZnJhbWUgc3RhcnRz
IHByb3Zpc2lvbmFsIG5hdmlnYXRpb24uCiAgICAgdmFyIHRlc3RGcmFtZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0ZXN0RnJhbWUiKTsKKyAgICB0ZXN0RnJhbWUub25iZWZvcmV1bmxvYWQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gInJlc291cmNlcy9wYWdlLWNhY2hlLWhlbHBlci5o
dG1sIjsKKyAgICAgICAgfSwgMCk7CisgICAgfTsKICAgICB0ZXN0RnJhbWUuc3JjID0gImh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLnBsP2Rl
bGF5PTMwMDAiOwogfQogCi13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9u
KCkgewotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxvYWRTdWJmcmFtZUFu
ZE5hdmlnYXRlQXdheSgpOwotICAgIH0sIDApOwotfSwgZmFsc2UpOword2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoJ2xvYWQnLCBsb2FkU3ViZnJhbWVBbmROYXZpZ2F0ZUF3YXksIGZhbHNlKTsKIAog
PC9zY3JpcHQ+CiA8aWZyYW1lIGlkPSJ0ZXN0RnJhbWUiIHNyYz0iYWJvdXQ6YmxhbmsiPjwvaWZy
YW1lPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>