<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[183909] trunk/Source</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/183909">183909</a></dd>
<dt>Author</dt> <dd>dbates@webkit.org</dd>
<dt>Date</dt> <dd>2015-05-06 20:23:57 -0700 (Wed, 06 May 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS][WK2] Pause/resume database thread when UIProcess enters/leaves the background
https://bugs.webkit.org/show_bug.cgi?id=144657
&lt;rdar://problem/18894598&gt;

Reviewed by Andy Estes.

Source/WebCore:

Export WebCore functionality to pause and resume the database thread so that we can
make use of this functionality from WebKit2.

* Modules/webdatabase/AbstractDatabaseServer.h:
* Modules/webdatabase/DatabaseManager.cpp:
(WebCore::DatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseServer::setPauseAllDatabases().
* Modules/webdatabase/DatabaseManager.h:
* Modules/webdatabase/DatabaseServer.cpp:
(WebCore::DatabaseServer::setPauseAllDatabases): Added; turns around and calls
DatabaseTracker::tracker().setDatabasesPaused() to pause or resume the database thread.
For now, we guard this call with PLATFORM(IOS). We'll look to remove this guard once
we fix &lt;https://bugs.webkit.org/show_bug.cgi?id=144660&gt;.
* Modules/webdatabase/DatabaseServer.h:

Source/WebKit2:

Pause and resume the database thread when the UIProcess enters and leaves the background,
respectively, so that we avoid WebProcess termination due to holding a locked SQLite
database file when the WebProcess is suspended. This behavior matches the analagous
behavior in Legacy WebKit.

* UIProcess/WebPageProxy.h:
* UIProcess/ios/WKContentView.mm:
(-[WKContentView _applicationDidEnterBackground:]): Call WebPageProxy::applicationDidEnterBackground()
when the UIProcess enters the background.
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::applicationDidEnterBackground): Added; notify the WebProcess to pause the database thread.
We temporarily take out background assertion on the WebProcess before sending this notification to ensure that the
WebProcess is running to receive it. We'll release this assertion when the WebProcess replies that it received the
notification.
* WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
(WebKit::WebDatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseManager::setPauseAllDatabases().
* WebProcess/WebCoreSupport/WebDatabaseManager.h:
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in: Add message ApplicationDidEnterBackground(). Also,
add empty lines to help demarcate this message and the other UIKit application lifecycle-related
messages from the rest of the list of messages.
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::applicationWillEnterForeground): Resume the database thread.
(WebKit::WebPage::applicationDidEnterBackground): Pause the database thread.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseAbstractDatabaseServerh">trunk/Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagercpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseServercpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseServerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWKContentViewmm">trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWebPageProxyIOSmm">trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebDatabaseManagercpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebDatabaseManagerh">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagemessagesin">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm">trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebCore/ChangeLog        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2015-05-06  Daniel Bates  &lt;dabates@apple.com&gt;
+
+        [iOS][WK2] Pause/resume database thread when UIProcess enters/leaves the background
+        https://bugs.webkit.org/show_bug.cgi?id=144657
+        &lt;rdar://problem/18894598&gt;
+
+        Reviewed by Andy Estes.
+
+        Export WebCore functionality to pause and resume the database thread so that we can
+        make use of this functionality from WebKit2.
+
+        * Modules/webdatabase/AbstractDatabaseServer.h:
+        * Modules/webdatabase/DatabaseManager.cpp:
+        (WebCore::DatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseServer::setPauseAllDatabases().
+        * Modules/webdatabase/DatabaseManager.h:
+        * Modules/webdatabase/DatabaseServer.cpp:
+        (WebCore::DatabaseServer::setPauseAllDatabases): Added; turns around and calls
+        DatabaseTracker::tracker().setDatabasesPaused() to pause or resume the database thread.
+        For now, we guard this call with PLATFORM(IOS). We'll look to remove this guard once
+        we fix &lt;https://bugs.webkit.org/show_bug.cgi?id=144660&gt;.
+        * Modules/webdatabase/DatabaseServer.h:
+
</ins><span class="cx"> 2015-05-06  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Scroll-snap points do not handle margins and padding propertly
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseAbstractDatabaseServerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -71,6 +71,8 @@
</span><span class="cx">     virtual bool deleteOrigin(SecurityOrigin*) = 0;
</span><span class="cx">     virtual bool deleteDatabase(SecurityOrigin*, const String&amp; name) = 0;
</span><span class="cx"> 
</span><ins>+    virtual void setPauseAllDatabases(bool) = 0;
+
</ins><span class="cx">     virtual void interruptAllDatabasesForContext(const DatabaseContext*) = 0;
</span><span class="cx"> 
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -397,6 +397,11 @@
</span><span class="cx">     return m_server-&gt;deleteDatabase(origin, name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void DatabaseManager::setPauseAllDatabases(bool pauseAllDatabases)
+{
+    m_server-&gt;setPauseAllDatabases(pauseAllDatabases);
+}
+
</ins><span class="cx"> void DatabaseManager::interruptAllDatabasesForContext(ScriptExecutionContext* context)
</span><span class="cx"> {
</span><span class="cx">     RefPtr&lt;DatabaseContext&gt; databaseContext = existingDatabaseContextFor(context);
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -103,6 +103,8 @@
</span><span class="cx">     WEBCORE_EXPORT bool deleteOrigin(SecurityOrigin*);
</span><span class="cx">     WEBCORE_EXPORT bool deleteDatabase(SecurityOrigin*, const String&amp; name);
</span><span class="cx"> 
</span><ins>+    WEBCORE_EXPORT void setPauseAllDatabases(bool);
+
</ins><span class="cx">     void interruptAllDatabasesForContext(ScriptExecutionContext*);
</span><span class="cx"> 
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseServercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.cpp (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.cpp        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.cpp        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -108,6 +108,15 @@
</span><span class="cx">     return DatabaseTracker::tracker().deleteDatabase(origin, name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void DatabaseServer::setPauseAllDatabases(bool pauseAllDatabases)
+{
+#if PLATFORM(IOS)
+    DatabaseTracker::tracker().setDatabasesPaused(pauseAllDatabases);
+#else
+    UNUSED_PARAM(pauseAllDatabases);
+#endif
+}
+
</ins><span class="cx"> void DatabaseServer::interruptAllDatabasesForContext(const DatabaseContext* context)
</span><span class="cx"> {
</span><span class="cx">     DatabaseTracker::tracker().interruptAllDatabasesForContext(context);
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseServerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.h (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.h        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseServer.h        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -60,6 +60,8 @@
</span><span class="cx">     virtual bool deleteOrigin(SecurityOrigin*);
</span><span class="cx">     virtual bool deleteDatabase(SecurityOrigin*, const String&amp; name);
</span><span class="cx"> 
</span><ins>+    void setPauseAllDatabases(bool) override;
+
</ins><span class="cx">     virtual void interruptAllDatabasesForContext(const DatabaseContext*);
</span><span class="cx"> 
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/ChangeLog        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2015-05-06  Daniel Bates  &lt;dabates@apple.com&gt;
+
+        [iOS][WK2] Pause/resume database thread when UIProcess enters/leaves the background
+        https://bugs.webkit.org/show_bug.cgi?id=144657
+        &lt;rdar://problem/18894598&gt;
+
+        Reviewed by Andy Estes.
+
+        Pause and resume the database thread when the UIProcess enters and leaves the background,
+        respectively, so that we avoid WebProcess termination due to holding a locked SQLite
+        database file when the WebProcess is suspended. This behavior matches the analagous
+        behavior in Legacy WebKit.
+
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/ios/WKContentView.mm:
+        (-[WKContentView _applicationDidEnterBackground:]): Call WebPageProxy::applicationDidEnterBackground()
+        when the UIProcess enters the background.
+        * UIProcess/ios/WebPageProxyIOS.mm:
+        (WebKit::WebPageProxy::applicationDidEnterBackground): Added; notify the WebProcess to pause the database thread.
+        We temporarily take out background assertion on the WebProcess before sending this notification to ensure that the
+        WebProcess is running to receive it. We'll release this assertion when the WebProcess replies that it received the
+        notification.
+        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
+        (WebKit::WebDatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseManager::setPauseAllDatabases().
+        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in: Add message ApplicationDidEnterBackground(). Also,
+        add empty lines to help demarcate this message and the other UIKit application lifecycle-related
+        messages from the rest of the list of messages.
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::applicationWillEnterForeground): Resume the database thread.
+        (WebKit::WebPage::applicationDidEnterBackground): Pause the database thread.
+
</ins><span class="cx"> 2015-05-06  Ryuan Choi  &lt;ryuan.choi@navercorp.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL] ewk_view_page_contents_get() API test is flaky
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -493,9 +493,12 @@
</span><span class="cx">     void setAssistedNodeValue(const String&amp;);
</span><span class="cx">     void setAssistedNodeValueAsNumber(double);
</span><span class="cx">     void setAssistedNodeSelectedIndex(uint32_t index, bool allowMultipleSelection = false);
</span><ins>+
</ins><span class="cx">     void applicationWillEnterForeground();
</span><ins>+    void applicationDidEnterBackground();
</ins><span class="cx">     void applicationWillResignActive();
</span><span class="cx">     void applicationDidBecomeActive();
</span><ins>+
</ins><span class="cx">     void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale);
</span><span class="cx">     void commitPotentialTapFailed();
</span><span class="cx">     void didNotHandleTapAsClick(const WebCore::IntPoint&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWKContentViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -551,6 +551,7 @@
</span><span class="cx"> - (void)_applicationDidEnterBackground:(NSNotification*)notification
</span><span class="cx"> {
</span><span class="cx">     _isBackground = YES;
</span><ins>+    _page-&gt;applicationDidEnterBackground();
</ins><span class="cx">     _page-&gt;viewStateDidChange(ViewState::AllFlags &amp; ~ViewState::IsInWindow);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebPageProxyIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -598,6 +598,12 @@
</span><span class="cx">     m_process-&gt;send(Messages::WebPage::ApplicationWillEnterForeground(), m_pageID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPageProxy::applicationDidEnterBackground()
+{
+    uint64_t callbackID = m_callbacks.put(VoidCallback::create([](CallbackBase::Error) { }, m_process-&gt;throttler().backgroundActivityToken()));
+    m_process-&gt;send(Messages::WebPage::ApplicationDidEnterBackground(callbackID), m_pageID);
+}
+
</ins><span class="cx"> void WebPageProxy::applicationWillResignActive()
</span><span class="cx"> {
</span><span class="cx">     m_process-&gt;send(Messages::WebPage::ApplicationWillResignActive(), m_pageID);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebDatabaseManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -137,6 +137,11 @@
</span><span class="cx">     DatabaseManager::singleton().deleteAllDatabases();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebDatabaseManager::setPauseAllDatabases(bool pauseAllDatabases)
+{
+    DatabaseManager::singleton().setPauseAllDatabases(pauseAllDatabases);
+}
+
</ins><span class="cx"> void WebDatabaseManager::setQuotaForOrigin(const String&amp; originIdentifier, unsigned long long quota) const
</span><span class="cx"> {
</span><span class="cx">     // If the quota is set to a value lower than the current usage, that quota will
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebDatabaseManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -46,6 +46,8 @@
</span><span class="cx">     void setQuotaForOrigin(const String&amp; originIdentifier, unsigned long long quota) const;
</span><span class="cx">     void deleteAllDatabases() const;
</span><span class="cx"> 
</span><ins>+    void setPauseAllDatabases(bool);
+
</ins><span class="cx"> private:
</span><span class="cx">     // WebProcessSupplement
</span><span class="cx">     virtual void initialize(const WebProcessCreationParameters&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -786,9 +786,12 @@
</span><span class="cx">     void updateVisibleContentRects(const VisibleContentRectUpdateInfo&amp;, double oldestTimestamp);
</span><span class="cx">     bool scaleWasSetByUIProcess() const { return m_scaleWasSetByUIProcess; }
</span><span class="cx">     void willStartUserTriggeredZooming();
</span><ins>+
</ins><span class="cx">     void applicationWillResignActive();
</span><span class="cx">     void applicationWillEnterForeground();
</span><ins>+    void applicationDidEnterBackground(uint64_t callbackID);
</ins><span class="cx">     void applicationDidBecomeActive();
</span><ins>+
</ins><span class="cx">     void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale);
</span><span class="cx">     void completePendingSyntheticClickForContentChangeObserver();
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -87,9 +87,12 @@
</span><span class="cx">     SetAssistedNodeValue(String value)
</span><span class="cx">     SetAssistedNodeValueAsNumber(double value)
</span><span class="cx">     SetAssistedNodeSelectedIndex(uint32_t index, bool allowMultipleSelection)
</span><ins>+
</ins><span class="cx">     ApplicationWillResignActive()
</span><span class="cx">     ApplicationWillEnterForeground()
</span><ins>+    ApplicationDidEnterBackground(uint64_t callbackID)
</ins><span class="cx">     ApplicationDidBecomeActive()
</span><ins>+
</ins><span class="cx">     ContentSizeCategoryDidChange(String contentSizeCategory)
</span><span class="cx">     ExecuteEditCommandWithCallback(String name, uint64_t callbackID)
</span><span class="cx">     GetLookupContextAtPoint(WebCore::IntPoint point, uint64_t callbackID)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (183908 => 183909)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2015-05-07 03:19:42 UTC (rev 183908)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2015-05-07 03:23:57 UTC (rev 183909)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx"> #import &quot;WKAccessibilityWebPageObjectIOS.h&quot;
</span><span class="cx"> #import &quot;WebChromeClient.h&quot;
</span><span class="cx"> #import &quot;WebCoreArgumentCoders.h&quot;
</span><ins>+#import &quot;WebDatabaseManager.h&quot;
</ins><span class="cx"> #import &quot;WebFrame.h&quot;
</span><span class="cx"> #import &quot;WebImage.h&quot;
</span><span class="cx"> #import &quot;WebKitSystemInterface.h&quot;
</span><span class="lines">@@ -2720,9 +2721,16 @@
</span><span class="cx"> 
</span><span class="cx"> void WebPage::applicationWillEnterForeground()
</span><span class="cx"> {
</span><ins>+    WebProcess::singleton().supplement&lt;WebDatabaseManager&gt;()-&gt;setPauseAllDatabases(false);
</ins><span class="cx">     [[NSNotificationCenter defaultCenter] postNotificationName:WebUIApplicationWillEnterForegroundNotification object:nil];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPage::applicationDidEnterBackground(uint64_t callbackID)
+{
+    WebProcess::singleton().supplement&lt;WebDatabaseManager&gt;()-&gt;setPauseAllDatabases(true);
+    send(Messages::WebPageProxy::VoidCallback(callbackID));
+}
+
</ins><span class="cx"> void WebPage::applicationDidBecomeActive()
</span><span class="cx"> {
</span><span class="cx">     [[NSNotificationCenter defaultCenter] postNotificationName:WebUIApplicationDidBecomeActiveNotification object:nil];
</span></span></pre>
</div>
</div>

</body>
</html>