<?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>115964</bug_id>
          
          <creation_ts>2013-05-11 11:12:40 -0700</creation_ts>
          <short_desc>When possible, terminate web processes immediately when closing their last page.</short_desc>
          <delta_ts>2013-05-12 18:07:51 -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>WebKit2</component>
          <version>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>887805</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-11 11:12:40 -0700</bug_when>
    <thetext>For &lt;rdar://problem/10103795&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887806</commentid>
    <comment_count>1</comment_count>
      <attachid>201465</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-11 11:13:55 -0700</bug_when>
    <thetext>Created attachment 201465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887810</commentid>
    <comment_count>2</comment_count>
      <attachid>201465</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-11 11:37:45 -0700</bug_when>
    <thetext>Comment on attachment 201465
Patch

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

r=me!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:204
&gt; +    // Terminate the web process immediately if we have enough information to confidently do so.
&gt; +    // This only works if we&apos;re using a network process. Otherwise we have to wait for the web process to clear caches.

I don&apos;t understand what &quot;clear caches&quot; means, but I guess that&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887812</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-11 11:52:37 -0700</bug_when>
    <thetext>Committed r149934: &lt;http://trac.webkit.org/changeset/149934&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887814</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-11 11:56:40 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 201465 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=201465&amp;action=review
&gt; 
&gt; r=me!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Thanks!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:204
&gt; &gt; +    // Terminate the web process immediately if we have enough information to confidently do so.
&gt; &gt; +    // This only works if we&apos;re using a network process. Otherwise we have to wait for the web process to clear caches.
&gt; 
&gt; I don&apos;t understand what &quot;clear caches&quot; means, but I guess that&apos;s OK.

I changed that to &quot;clean up.&quot; When doing networking in the web process, we have to wait for it to run [[NSURLCache sharedURLCache] removeAllCachedResponses] before exiting. (See WebProcess::platformTerminate())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887850</commentid>
    <comment_count>5</comment_count>
      <attachid>201465</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-11 16:08:08 -0700</bug_when>
    <thetext>Comment on attachment 201465
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:204
&gt;&gt;&gt; +    // This only works if we&apos;re using a network process. Otherwise we have to wait for the web process to clear caches.
&gt;&gt; 
&gt;&gt; I don&apos;t understand what &quot;clear caches&quot; means, but I guess that&apos;s OK.
&gt; 
&gt; I changed that to &quot;clean up.&quot; When doing networking in the web process, we have to wait for it to run [[NSURLCache sharedURLCache] removeAllCachedResponses] before exiting. (See WebProcess::platformTerminate())

I think the key phrase would probably be “caches on disk” or “in the file system” or some phrase like that.

&gt; Source/WebKit2/UIProcess/WebProcessProxy.h:181
&gt; +    bool canTerminateChildProcess();

Should it be const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887852</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-11 16:09:39 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 201465 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=201465&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.h:181
&gt; &gt; +    bool canTerminateChildProcess();
&gt; 
&gt; Should it be const?

I wanted it to be, but that made the patch a bit huge. I&apos;ll fix separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887864</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-11 16:52:22 -0700</bug_when>
    <thetext>I&apos;m surprised that this is a good idea. Even not considering other persistent state that may be inconsistent, a web page at least needs to send a ping request from unload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887877</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-11 18:05:31 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;m surprised that this is a good idea. Even not considering other persistent state that may be inconsistent, a web page at least needs to send a ping request from unload.

How about pushing information about whether a web process has registered unload event handlers to the UI process, and then disabling this short-circuit in that case?

What other persistent state do you have in mind?

Do you think it would be better to start a watchdog timer when sending WebPage::Close and deferring this mechanism until that fires? (and canceling it if the child process terminates.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888028</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-12 16:22:00 -0700</bug_when>
    <thetext>Web processes with unload event handlers registered will now prevent the UI process from killing them (bug 115988.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888045</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-12 18:07:51 -0700</bug_when>
    <thetext>Unload (and beforeunload) are necessary to run for JS applications to cleanly shut down themselves. 

WebProcess itself may also be in the middle of writing to a file, and terminating it without a chance to finish that is not nice. This includes Keychain, Web SQL database, and possibly more.

&gt; For &lt;rdar://problem/10103795&gt;.

Perhaps the right way forward is to chat about this change on IRC. There are already mechanisms that are supposed to prevent this kind of behavior, and it&apos;s unclear to me from this bug why they were found inadequate. I didn&apos;t look into this very deeply, but I was under the impression that we needed a bugfix, not a redesign.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201465</attachid>
            <date>2013-05-11 11:13:55 -0700</date>
            <delta_ts>2013-05-11 16:08:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115964.diff</filename>
            <type>text/plain</type>
            <size>3888</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzMTc5YTBhLi40Yjk3ZmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTMtMDUtMTEgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIFdoZW4gcG9zc2libGUsIHRlcm1pbmF0ZSB3ZWIgcHJvY2Vzc2VzIGltbWVkaWF0ZWx5IHdo
ZW4gY2xvc2luZyB0aGVpciBsYXN0IHBhZ2UuCisgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzExNTk2ND4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMTAzNzk1PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UncmUgdXNpbmcgYSBu
ZXR3b3JrIHByb2Nlc3MsIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgdGhlIFVJIHByb2Nlc3MgdG8gd2Fp
dCBmb3Igd2ViIHByb2Nlc3NlcworICAgICAgICB0byBjbGVhciByZXNvdXJjZSBjYWNoZXMgYW5k
IHRlcm1pbmF0ZSBuaWNlbHkuCisKKyAgICAgICAgV2UgY2FuIGp1c3Qga2lsbCB0aGVtIG9mZiBy
aWdodCBhd2F5IGluIFdlYlByb2Nlc3NQcm94eTo6cmVtb3ZlV2ViUGFnZSgpIHdoZW4gdGhlIGxh
c3QgcGFnZSBpcyBjbG9zZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdlKToK
KworICAgICAgICAgICAgVGVybWluYXRlIHRoZSBjaGlsZCBwcm9jZXNzIGltbWVkaWF0ZWx5IGlm
IHBvc3NpYmxlLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNhblRlcm1pbmF0ZUNoaWxkUHJvY2Vzcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2hvdWxkVGVybWluYXRlKToKKwor
ICAgICAgICAgICAgQnJva2Ugb3V0IHRoZSBsb2dpYyBmcm9tIHRoZSBzaG91bGRUZXJtaW5hdGUo
KSBJUEMgbWVzc2FnZSBoYW5kbGVyIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbgorICAgICAgICAg
ICAgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSByZW1vdmVXZWJQYWdlKCkuCisKIDIwMTMtMDUtMTEg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCB3
aGVuIHRlcm1pbmF0aW5nIGEgcHJvY2VzcyB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSBsYXVuY2hl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAx
ZDYyZDM1Li4wN2I1NGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcApAQCAtMTk4LDYgKzE5OCwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cmVt
b3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpCiAgICAgbV9wcm9jZXNzU3VwcHJlc3NpYmxlUGFn
ZXMucmVtb3ZlKHBhZ2VJRCk7CiAgICAgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsK
ICNlbmRpZgorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICAvLyBUZXJtaW5hdGUg
dGhlIHdlYiBwcm9jZXNzIGltbWVkaWF0ZWx5IGlmIHdlIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9u
IHRvIGNvbmZpZGVudGx5IGRvIHNvLgorICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSdyZSB1
c2luZyBhIG5ldHdvcmsgcHJvY2Vzcy4gT3RoZXJ3aXNlIHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhl
IHdlYiBwcm9jZXNzIHRvIGNsZWFyIGNhY2hlcy4KKyAgICBpZiAoY2FuVGVybWluYXRlQ2hpbGRQ
cm9jZXNzKCkgJiYgbV9jb250ZXh0LT51c2VzTmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAgcmVx
dWVzdFRlcm1pbmF0aW9uKCk7CisjZW5kaWYKIH0KIAogVmVjdG9yPFdlYlBhZ2VQcm94eSo+IFdl
YlByb2Nlc3NQcm94eTo6cGFnZXMoKSBjb25zdApAQCAtNTA1LDE3ICs1MTIsMjcgQEAgc2l6ZV90
IFdlYlByb2Nlc3NQcm94eTo6ZnJhbWVDb3VudEluUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpIGNv
bnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNob3Vs
ZFRlcm1pbmF0ZShib29sJiBzaG91bGRUZXJtaW5hdGUpCitib29sIFdlYlByb2Nlc3NQcm94eTo6
Y2FuVGVybWluYXRlQ2hpbGRQcm9jZXNzKCkKIHsKLSAgICBpZiAoIW1fcGFnZU1hcC5pc0VtcHR5
KCkgfHwgKG1fZG93bmxvYWRQcm94eU1hcCAmJiAhbV9kb3dubG9hZFByb3h5TWFwLT5pc0VtcHR5
KCkpIHx8ICFtX2NvbnRleHQtPnNob3VsZFRlcm1pbmF0ZSh0aGlzKSkgewotICAgICAgICBzaG91
bGRUZXJtaW5hdGUgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1f
cGFnZU1hcC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNob3VsZFRl
cm1pbmF0ZSA9IHRydWU7CisgICAgaWYgKG1fZG93bmxvYWRQcm94eU1hcCAmJiAhbV9kb3dubG9h
ZFByb3h5TWFwLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIFdl
IGtub3cgdGhhdCB0aGUgd2ViIHByb2Nlc3MgaXMgZ29pbmcgdG8gdGVybWluYXRlIHNvIGRpc2Nv
bm5lY3QgaXQgZnJvbSB0aGUgY29udGV4dC4KLSAgICBkaXNjb25uZWN0KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPnNob3VsZFRlcm1pbmF0ZSh0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzaG91bGRUZXJt
aW5hdGUoYm9vbCYgc2hvdWxkVGVybWluYXRlKQoreworICAgIHNob3VsZFRlcm1pbmF0ZSA9IGNh
blRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpOworICAgIGlmIChzaG91bGRUZXJtaW5hdGUpIHsKKyAg
ICAgICAgLy8gV2Uga25vdyB0aGF0IHRoZSB3ZWIgcHJvY2VzcyBpcyBnb2luZyB0byB0ZXJtaW5h
dGUgc28gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSBjb250ZXh0LgorICAgICAgICBkaXNjb25uZWN0
KCk7CisgICAgfQogfQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlVGV4dENoZWNrZXJT
dGF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXgg
NmJkMmNkZi4uOGE1YWI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaApAQCAtMTc4LDYgKzE3OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRSZWNlaXZl
V2ViUHJvY2Vzc1Byb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVz
c2FnZURlY29kZXImKTsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jV2ViUHJvY2Vzc1Byb3h5TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25Q
dHI8Q29yZUlQQzo6TWVzc2FnZUVuY29kZXI+Jik7CiAKKyAgICBib29sIGNhblRlcm1pbmF0ZUNo
aWxkUHJvY2VzcygpOworCiAgICAgUmVzcG9uc2l2ZW5lc3NUaW1lciBtX3Jlc3BvbnNpdmVuZXNz
VGltZXI7CiAgICAgCiAgICAgUmVmUHRyPFdlYkNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fd2Vi
Q29ubmVjdGlvbjsK
</data>
<flag name="review"
          id="222790"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>