<?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>100791</bug_id>
          
          <creation_ts>2012-10-30 15:04:05 -0700</creation_ts>
          <short_desc>ResourceLoader can start itself in cancel()</short_desc>
          <delta_ts>2014-02-05 11:02:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>754686</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-10-30 15:04:05 -0700</bug_when>
    <thetext>I&apos;ve seen ResourceLoader starting itself in when cancelling.

The sequence is like:

DocumentLoader::stopLoading() cancels a ResourceLoader for a subresource which hasn&apos;t been started yet.
ResourceLoader::cancel() calls releaseResources() which is a virtual function
SubresourceLoader::releaseResources() triggers CachedResourceLoader::loadDone()
CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests() which starts the same job
ResourceLoader::start() is called..
...
SubresourceLoader::releaseResources() calls ResourceLoader::releaseResources() at the end
ResourceLoader::releaseResources() removes itself from ResourceLoadScheduler&apos;s list, however, it is too late!
ResourceLoader::releaseResources() clears ResourceHandle&apos;s client but it doesn&apos;t cancel the job. So the real networking job could still be performed, depending on the implementation.


Initial thought, move &quot;resourceLoadScheduler()-&gt;remove(this)&quot; out of releaseResources(), so make sure it is called before SubresourceLoader triggering &quot;servePendingRequests&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755271</commentid>
    <comment_count>1</comment_count>
      <attachid>171648</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-10-31 07:14:06 -0700</bug_when>
    <thetext>Created attachment 171648
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755283</commentid>
    <comment_count>2</comment_count>
      <attachid>171648</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-31 07:21:22 -0700</bug_when>
    <thetext>Comment on attachment 171648
the patch

Attachment 171648 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14677168</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755284</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-31 07:24:19 -0700</bug_when>
    <thetext>&gt; I&apos;ve seen ResourceLoader starting itself in when cancelling.
&gt; 
&gt; The sequence is like:
&gt; 
&gt; DocumentLoader::stopLoading() cancels a ResourceLoader for a subresource which hasn&apos;t been started yet.
&gt; ResourceLoader::cancel() calls releaseResources() which is a virtual function
&gt; SubresourceLoader::releaseResources() triggers CachedResourceLoader::loadDone()
&gt; CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests() which starts the same job
&gt; ResourceLoader::start() is called..
&gt; ...
&gt; SubresourceLoader::releaseResources() calls ResourceLoader::releaseResources() at the end
&gt; ResourceLoader::releaseResources() removes itself from ResourceLoadScheduler&apos;s list, however, it is too late!
&gt; ResourceLoader::releaseResources() clears ResourceHandle&apos;s client but it doesn&apos;t cancel the job. So the real networking job could still be performed, depending on the implementation.
&gt; 

To be absolutely clear - This backtrace is the *same* ResourceLoader in ::cancel() as it is in ::start()?  And not a different ResourceLoader start()ing as a result of a different one cancel()ing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755285</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-31 07:24:58 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; I&apos;ve seen ResourceLoader starting itself in when cancelling.
&gt; &gt; 
&gt; &gt; The sequence is like:
&gt; &gt; 
&gt; &gt; DocumentLoader::stopLoading() cancels a ResourceLoader for a subresource which hasn&apos;t been started yet.
&gt; &gt; ResourceLoader::cancel() calls releaseResources() which is a virtual function
&gt; &gt; SubresourceLoader::releaseResources() triggers CachedResourceLoader::loadDone()
&gt; &gt; CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests() which starts the same job
&gt; &gt; ResourceLoader::start() is called..
&gt; &gt; ...
&gt; &gt; SubresourceLoader::releaseResources() calls ResourceLoader::releaseResources() at the end
&gt; &gt; ResourceLoader::releaseResources() removes itself from ResourceLoadScheduler&apos;s list, however, it is too late!
&gt; &gt; ResourceLoader::releaseResources() clears ResourceHandle&apos;s client but it doesn&apos;t cancel the job. So the real networking job could still be performed, depending on the implementation.
&gt; &gt; 
&gt; 
&gt; To be absolutely clear - This backtrace is the *same* ResourceLoader in ::cancel() as it is in ::start()?  And not a different ResourceLoader start()ing as a result of a different one cancel()ing?

I know that&apos;s the premise of the bug, but I just want to make it crystal clear that actually debugging has shown these are one-and-the-same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755287</commentid>
    <comment_count>5</comment_count>
      <attachid>171654</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-10-31 07:25:55 -0700</bug_when>
    <thetext>Created attachment 171654
second</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755290</commentid>
    <comment_count>6</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-10-31 07:29:36 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; I&apos;ve seen ResourceLoader starting itself in when cancelling.
&gt; &gt; 
&gt; &gt; The sequence is like:
&gt; &gt; 
&gt; &gt; DocumentLoader::stopLoading() cancels a ResourceLoader for a subresource which hasn&apos;t been started yet.
&gt; &gt; ResourceLoader::cancel() calls releaseResources() which is a virtual function
&gt; &gt; SubresourceLoader::releaseResources() triggers CachedResourceLoader::loadDone()
&gt; &gt; CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests() which starts the same job
&gt; &gt; ResourceLoader::start() is called..
&gt; &gt; ...
&gt; &gt; SubresourceLoader::releaseResources() calls ResourceLoader::releaseResources() at the end
&gt; &gt; ResourceLoader::releaseResources() removes itself from ResourceLoadScheduler&apos;s list, however, it is too late!
&gt; &gt; ResourceLoader::releaseResources() clears ResourceHandle&apos;s client but it doesn&apos;t cancel the job. So the real networking job could still be performed, depending on the implementation.
&gt; &gt; 
&gt; 
&gt; To be absolutely clear - This backtrace is the *same* ResourceLoader in ::cancel() as it is in ::start()?  And not a different ResourceLoader start()ing as a result of a different one cancel()ing?

Yes. It is exactly same ResourceLoader...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755369</commentid>
    <comment_count>7</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-31 09:23:35 -0700</bug_when>
    <thetext>FYI, https://bugs.webkit.org/show_bug.cgi?id=87743 would probably also resolve this by having us do much less in SubresourceLoader::releaseResources().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757355</commentid>
    <comment_count>8</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-11-02 11:08:01 -0700</bug_when>
    <thetext>Actually I don&apos;t like the way how CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests(). In the case user just closes a page or stops loading by clicking on stop button, this just kicks off network jobs that will soon be cancelled (or give bigger troubles if not).

Should we just make CachedResourceLoader::loadDone() schedule a timer in ResourceLoadScheduler rather than serving the requests right away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757364</commentid>
    <comment_count>9</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-11-02 11:17:51 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Actually I don&apos;t like the way how CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests(). In the case user just closes a page or stops loading by clicking on stop button, this just kicks off network jobs that will soon be cancelled (or give bigger troubles if not).
&gt; 
&gt; Should we just make CachedResourceLoader::loadDone() schedule a timer in ResourceLoadScheduler rather than serving the requests right away?

It may actually be unnecessary. ResourceLoader::releaseResources() calls ResourceLoadScheduler::remove(), which if I&apos;m reading it correctly should start a timer for servePendingRequests().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757403</commentid>
    <comment_count>10</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-11-02 11:39:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Actually I don&apos;t like the way how CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests(). In the case user just closes a page or stops loading by clicking on stop button, this just kicks off network jobs that will soon be cancelled (or give bigger troubles if not).
&gt; &gt; 
&gt; &gt; Should we just make CachedResourceLoader::loadDone() schedule a timer in ResourceLoadScheduler rather than serving the requests right away?
&gt; 
&gt; It may actually be unnecessary. ResourceLoader::releaseResources() calls ResourceLoadScheduler::remove(), which if I&apos;m reading it correctly should start a timer for servePendingRequests().

The problem is here:

void CachedResourceLoader::loadDone()
{
    RefPtr&lt;Document&gt; protect(m_document);
    if (frame())
        frame()-&gt;loader()-&gt;loadDone();
    performPostLoadActions();

    if (!m_garbageCollectDocumentResourcesTimer.isActive())
        m_garbageCollectDocumentResourcesTimer.startOneShot(0);
}

void CachedResourceLoader::performPostLoadActions()
{
    checkForPendingPreloads();
    resourceLoadScheduler()-&gt;servePendingRequests();
}

I would like to see performPostLoadActions() being removed, as it shouldn&apos;t be responsible to push ResourceLoadScheduler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757408</commentid>
    <comment_count>11</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-11-02 11:44:29 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Actually I don&apos;t like the way how CachedResourceLoader::loadDone() triggers ResourceLoadScheduler::servePendingRequests(). In the case user just closes a page or stops loading by clicking on stop button, this just kicks off network jobs that will soon be cancelled (or give bigger troubles if not).
&gt; &gt; &gt; 
&gt; &gt; &gt; Should we just make CachedResourceLoader::loadDone() schedule a timer in ResourceLoadScheduler rather than serving the requests right away?
&gt; &gt; 
&gt; &gt; It may actually be unnecessary. ResourceLoader::releaseResources() calls ResourceLoadScheduler::remove(), which if I&apos;m reading it correctly should start a timer for servePendingRequests().
&gt; 
&gt; The problem is here:
&gt; 
&gt; void CachedResourceLoader::loadDone()
&gt; {
&gt;     RefPtr&lt;Document&gt; protect(m_document);
&gt;     if (frame())
&gt;         frame()-&gt;loader()-&gt;loadDone();
&gt;     performPostLoadActions();
&gt; 
&gt;     if (!m_garbageCollectDocumentResourcesTimer.isActive())
&gt;         m_garbageCollectDocumentResourcesTimer.startOneShot(0);
&gt; }
&gt; 
&gt; void CachedResourceLoader::performPostLoadActions()
&gt; {
&gt;     checkForPendingPreloads();
&gt;     resourceLoadScheduler()-&gt;servePendingRequests();
&gt; }
&gt; 
&gt; I would like to see performPostLoadActions() being removed, as it shouldn&apos;t be responsible to push ResourceLoadScheduler.

Right. We might not be able to get rid of the checkForPendingPreloads() call, but I *think* servePendingRequests() is redundant in every useful case, and detrimental in the case you&apos;re describing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768243</commentid>
    <comment_count>12</comment_count>
      <attachid>171654</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-11-15 10:16:58 -0800</bug_when>
    <thetext>Comment on attachment 171654
second

cancel the request, as the right solution is probably to make CachedResource not push ResourceLoadSecheduler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787718</commentid>
    <comment_count>13</comment_count>
      <attachid>171654</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-12-10 14:24:31 -0800</bug_when>
    <thetext>Comment on attachment 171654
second

When page is loading, it is good to start next job immediately when it finishes one. Also the patch for Bug 87743 doesn&apos;t solve this issue. Raising review request again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976890</commentid>
    <comment_count>14</comment_count>
      <attachid>171654</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-02-05 11:02:41 -0800</bug_when>
    <thetext>Comment on attachment 171654
second

Clearing review flag on patches from before 2014. If this patch is still relevant, please reset the r? flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171648</attachid>
            <date>2012-10-31 07:14:06 -0700</date>
            <delta_ts>2012-10-31 07:25:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>100791.patch</filename>
            <type>text/plain</type>
            <size>4252</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZmZhODYwLi5kYTk0OTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTItMTAtMzEgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkZXIgY2FuIHN0YXJ0IGl0c2VsZiBpbiBjYW5jZWwoKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNzkxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IG1ldGhvZCB0aGF0IHVucmVn
aXN0ZXJzIHRoZSBsb2FkZXIgZnJvbSBzY2hlZHVsZXIncyB3YWl0IGxpc3QsIGFuZCBjYWxsIGl0
IGF0IHN1aXRhYmxlIHBsYWNlcy4KKyAgICAgICAgMS4gV2UgZG9uJ3QgbmVlZCB0byBjYWxsIGl0
IGluIGluaXQoKSBhcyBpdCBpcyBub3QgeWV0IGluIHNjaGVkdWxlcidzIGxpc3QgYXQgdGhhdCBw
b2ludC4KKyAgICAgICAgMi4gQ2FsbCBpdCBpbiBjYW5jZWwoKSBlYXJsaWVyIHRvIGF2b2lkIHRo
ZSBzY2hlZHVsZXIgZnJvbSBzdGFydGluZyB0aGlzIGxvYWRlciBhZ2FpbiBpbiBzdWJzZXF1ZW50
IGNhbGxzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSSBkb24ndCBrbm93IGhvdyB0byBtYWtl
IGEgdGVzdCBmb3IgdGhpcy4gV2l0aCBBU1NFUlQoIW1fY2FuY2VsbGVkKSBpbiBSZXNvdXJjZUxv
YWRlcjo6c3RhcnQoKSwKKyAgICAgICAgaXQgaXMgbm90IGhhcmQgdG8gcmVwcm9kdWNlIGl0IGJ5
IHN3aXRjaGluZyBiZXR3ZWVuIHNvbWUgaGVhdmUgd2ViIHBhZ2VzLgorCisgICAgICAgICogbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
Ojp1bnJlZ2lzdGVyRnJvbUxvYWRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmNh
bmNlbCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChSZXNv
dXJjZUxvYWRlcik6CisKIDIwMTItMTAtMzEgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBYLUZyYW1lLU9wdGlvbnMgY29uc29sZSBtZXNzYWdlIHNob3VsZCBiZSBh
c3NvY2lhdGVkIHdpdGggYSByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAKaW5kZXggMGRhZDg3Zi4uZTFlMjRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwCkBAIC03NCw2ICs3NCwxNSBAQCBSZXNvdXJjZUxvYWRlcjo6flJl
c291cmNlTG9hZGVyKCkKICAgICBBU1NFUlQobV9yZWFjaGVkVGVybWluYWxTdGF0ZSk7CiB9CiAK
K3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnVucmVnaXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpIGNvbnN0
Cit7CisjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVnaWVz
KCktPmxvYWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5yZW1vdmUodGhp
cyk7CisjZWxzZQorICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5yZW1vdmUodGhpcyk7Cisj
ZW5kaWYKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcygpCiB7CiAg
ICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKTsKQEAgLTkxLDEzICsxMDAsNyBAQCB2
b2lkIFJlc291cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKCkKICAgICAvLyB0aGUgcmVzb3Vy
Y2VzIHRvIHByZXZlbnQgYSBkb3VibGUgZGVhbGxvYyBvZiBXZWJWaWV3IDxyZGFyOi8vcHJvYmxl
bS80MzcyNjI4PgogICAgIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGUgPSB0cnVlOwogCi0jaWYgVVNF
KFBMQVRGT1JNX1NUUkFURUdJRVMpCi0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0
cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5yZW1vdmUodGhpcyk7Ci0jZW5kaWYK
ICAgICBtX2lkZW50aWZpZXIgPSAwOwotI2lmICFVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKLSAg
ICByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+cmVtb3ZlKHRoaXMpOwotI2VuZGlmCiAKICAgICBp
ZiAobV9oYW5kbGUpIHsKICAgICAgICAgLy8gQ2xlYXIgb3V0IHRoZSBSZXNvdXJjZUhhbmRsZSdz
IGNsaWVudCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJ5IHRvIGNhbGwKQEAgLTE0OSw2ICsxNTIsNyBA
QCBib29sIFJlc291cmNlTG9hZGVyOjppbml0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcikKIAog
dm9pZCBSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogeworICAgIEFTU0VSVCghbV9jYW5jZWxsZWQp
OwogICAgIEFTU0VSVCghbV9oYW5kbGUpOwogICAgIEFTU0VSVCghbV9yZXF1ZXN0LmlzTnVsbCgp
KTsKICAgICBBU1NFUlQobV9kZWZlcnJlZFJlcXVlc3QuaXNOdWxsKCkpOwpAQCAtMzExLDYgKzMx
NSw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlz
aFRpbWUpCiAgICAgLy8gdGhlIHJlc291cmNlcyBhIHNlY29uZCB0aW1lLCB0aGV5IGhhdmUgYmVl
biByZWxlYXNlZCBieSBjYW5jZWwuCiAgICAgaWYgKG1fY2FuY2VsbGVkKQogICAgICAgICByZXR1
cm47CisgICAgdW5yZWdpc3RlckZyb21Mb2FkU2NoZWR1bGVyKCk7CiAgICAgcmVsZWFzZVJlc291
cmNlcygpOwogfQogCkBAIC0zNDgsNiArMzUzLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlk
RmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICAgICAgICAgIGZyYW1lTG9hZGVy
KCktPm5vdGlmaWVyKCktPmRpZEZhaWxUb0xvYWQodGhpcywgZXJyb3IpOwogICAgIH0KIAorICAg
IHVucmVnaXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpOwogICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsK
IH0KIApAQCAtMzgwLDYgKzM4Niw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmNhbmNlbChjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICAvLyBsZWZ0IG9mZiB3aXRob3V0IHJlZG9pbmcg
YW55IG9mIHRoaXMgd29yay4KICAgICBpZiAoIW1fY2FuY2VsbGVkKSB7CiAgICAgICAgIG1fY2Fu
Y2VsbGVkID0gdHJ1ZTsKKyAgICAgICAgLy8gVW5yZWdpc3RlciBmcm9tIFJlc291cmNlTG9hZFNj
aGVkdWxlcidzIHdhaXQgbGlzdCBub3cgc28gaXQgd2lsbCBub3Qgc3RhcnQgdGhpcyBsb2FkZXIu
CisgICAgICAgIHVucmVnaXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpOwogICAgICAgICAKICAgICAg
ICAgaWYgKEZvcm1EYXRhKiBkYXRhID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCkpCiAgICAgICAgICAg
ICBkYXRhLT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRlci5oCmluZGV4IDA2NDJiYWMuLjE5YTE1ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCkBAIC0xNzcsNiArMTc3LDcgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9y
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYp
ID0gMDsKKyAgICB2b2lkIHVucmVnaXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpIGNvbnN0OwogCiAg
ICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKICAgICBSZXNvdXJjZVJlcXVlc3QgbV9vcmln
aW5hbFJlcXVlc3Q7IC8vIEJlZm9yZSByZWRpcmVjdHMuCg==
</data>
<flag name="commit-queue"
          id="185644"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171654</attachid>
            <date>2012-10-31 07:25:55 -0700</date>
            <delta_ts>2014-02-05 11:02:41 -0800</delta_ts>
            <desc>second</desc>
            <filename>100791.patch</filename>
            <type>text/plain</type>
            <size>4240</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZmZhODYwLi5kYTk0OTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTItMTAtMzEgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkZXIgY2FuIHN0YXJ0IGl0c2VsZiBpbiBjYW5jZWwoKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNzkxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IG1ldGhvZCB0aGF0IHVucmVn
aXN0ZXJzIHRoZSBsb2FkZXIgZnJvbSBzY2hlZHVsZXIncyB3YWl0IGxpc3QsIGFuZCBjYWxsIGl0
IGF0IHN1aXRhYmxlIHBsYWNlcy4KKyAgICAgICAgMS4gV2UgZG9uJ3QgbmVlZCB0byBjYWxsIGl0
IGluIGluaXQoKSBhcyBpdCBpcyBub3QgeWV0IGluIHNjaGVkdWxlcidzIGxpc3QgYXQgdGhhdCBw
b2ludC4KKyAgICAgICAgMi4gQ2FsbCBpdCBpbiBjYW5jZWwoKSBlYXJsaWVyIHRvIGF2b2lkIHRo
ZSBzY2hlZHVsZXIgZnJvbSBzdGFydGluZyB0aGlzIGxvYWRlciBhZ2FpbiBpbiBzdWJzZXF1ZW50
IGNhbGxzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSSBkb24ndCBrbm93IGhvdyB0byBtYWtl
IGEgdGVzdCBmb3IgdGhpcy4gV2l0aCBBU1NFUlQoIW1fY2FuY2VsbGVkKSBpbiBSZXNvdXJjZUxv
YWRlcjo6c3RhcnQoKSwKKyAgICAgICAgaXQgaXMgbm90IGhhcmQgdG8gcmVwcm9kdWNlIGl0IGJ5
IHN3aXRjaGluZyBiZXR3ZWVuIHNvbWUgaGVhdmUgd2ViIHBhZ2VzLgorCisgICAgICAgICogbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
Ojp1bnJlZ2lzdGVyRnJvbUxvYWRTY2hlZHVsZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmNh
bmNlbCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChSZXNv
dXJjZUxvYWRlcik6CisKIDIwMTItMTAtMzEgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBYLUZyYW1lLU9wdGlvbnMgY29uc29sZSBtZXNzYWdlIHNob3VsZCBiZSBh
c3NvY2lhdGVkIHdpdGggYSByZXF1ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAKaW5kZXggMGRhZDg3Zi4uZTFlMjRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwCkBAIC03NCw2ICs3NCwxNSBAQCBSZXNvdXJjZUxvYWRlcjo6flJl
c291cmNlTG9hZGVyKCkKICAgICBBU1NFUlQobV9yZWFjaGVkVGVybWluYWxTdGF0ZSk7CiB9CiAK
K3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnVucmVnaXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpCit7Cisj
aWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxv
YWRlclN0cmF0ZWd5KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5yZW1vdmUodGhpcyk7Cisj
ZWxzZQorICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5yZW1vdmUodGhpcyk7CisjZW5kaWYK
K30KKwogdm9pZCBSZXNvdXJjZUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcygpCiB7CiAgICAgQVNT
RVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0YXRlKTsKQEAgLTkxLDEzICsxMDAsNyBAQCB2b2lkIFJl
c291cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKCkKICAgICAvLyB0aGUgcmVzb3VyY2VzIHRv
IHByZXZlbnQgYSBkb3VibGUgZGVhbGxvYyBvZiBXZWJWaWV3IDxyZGFyOi8vcHJvYmxlbS80Mzcy
NjI4PgogICAgIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGUgPSB0cnVlOwogCi0jaWYgVVNFKFBMQVRG
T1JNX1NUUkFURUdJRVMpCi0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5
KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5yZW1vdmUodGhpcyk7Ci0jZW5kaWYKICAgICBt
X2lkZW50aWZpZXIgPSAwOwotI2lmICFVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKLSAgICByZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+cmVtb3ZlKHRoaXMpOwotI2VuZGlmCiAKICAgICBpZiAobV9o
YW5kbGUpIHsKICAgICAgICAgLy8gQ2xlYXIgb3V0IHRoZSBSZXNvdXJjZUhhbmRsZSdzIGNsaWVu
dCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJ5IHRvIGNhbGwKQEAgLTE0OSw2ICsxNTIsNyBAQCBib29s
IFJlc291cmNlTG9hZGVyOjppbml0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcikKIAogdm9pZCBS
ZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogeworICAgIEFTU0VSVCghbV9jYW5jZWxsZWQpOwogICAg
IEFTU0VSVCghbV9oYW5kbGUpOwogICAgIEFTU0VSVCghbV9yZXF1ZXN0LmlzTnVsbCgpKTsKICAg
ICBBU1NFUlQobV9kZWZlcnJlZFJlcXVlc3QuaXNOdWxsKCkpOwpAQCAtMzExLDYgKzMxNSw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUp
CiAgICAgLy8gdGhlIHJlc291cmNlcyBhIHNlY29uZCB0aW1lLCB0aGV5IGhhdmUgYmVlbiByZWxl
YXNlZCBieSBjYW5jZWwuCiAgICAgaWYgKG1fY2FuY2VsbGVkKQogICAgICAgICByZXR1cm47Cisg
ICAgdW5yZWdpc3RlckZyb21Mb2FkU2NoZWR1bGVyKCk7CiAgICAgcmVsZWFzZVJlc291cmNlcygp
OwogfQogCkBAIC0zNDgsNiArMzUzLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICAgICAgICAgIGZyYW1lTG9hZGVyKCktPm5v
dGlmaWVyKCktPmRpZEZhaWxUb0xvYWQodGhpcywgZXJyb3IpOwogICAgIH0KIAorICAgIHVucmVn
aXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpOwogICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKIH0KIApA
QCAtMzgwLDYgKzM4Niw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmNhbmNlbChjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKICAgICAvLyBsZWZ0IG9mZiB3aXRob3V0IHJlZG9pbmcgYW55IG9m
IHRoaXMgd29yay4KICAgICBpZiAoIW1fY2FuY2VsbGVkKSB7CiAgICAgICAgIG1fY2FuY2VsbGVk
ID0gdHJ1ZTsKKyAgICAgICAgLy8gVW5yZWdpc3RlciBmcm9tIFJlc291cmNlTG9hZFNjaGVkdWxl
cidzIHdhaXQgbGlzdCBub3cgc28gaXQgd2lsbCBub3Qgc3RhcnQgdGhpcyBsb2FkZXIuCisgICAg
ICAgIHVucmVnaXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpOwogICAgICAgICAKICAgICAgICAgaWYg
KEZvcm1EYXRhKiBkYXRhID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCkpCiAgICAgICAgICAgICBkYXRh
LT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRlci5oCmluZGV4IDA2NDJiYWMuLjE5YTE1ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRlci5oCkBAIC0xNzcsNiArMTc3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgd2lsbENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsK
KyAgICB2b2lkIHVucmVnaXN0ZXJGcm9tTG9hZFNjaGVkdWxlcigpOwogCiAgICAgUmVzb3VyY2VS
ZXF1ZXN0IG1fcmVxdWVzdDsKICAgICBSZXNvdXJjZVJlcXVlc3QgbV9vcmlnaW5hbFJlcXVlc3Q7
IC8vIEJlZm9yZSByZWRpcmVjdHMuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>