Title: [178815] branches/safari-600.1.4.15-branch/Source/WebKit2

Diff

Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/ChangeLog (178814 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/ChangeLog	2015-01-21 08:13:04 UTC (rev 178814)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/ChangeLog	2015-01-21 08:15:02 UTC (rev 178815)
@@ -1,5 +1,56 @@
 2015-01-21  Babak Shafiei  <[email protected]>
 
+        Merge r175698.
+
+    2014-11-06  Daniel Bates  <[email protected]>
+
+            [iOS] WebProcess needs to take a background task assertion to prevent being killed
+            for "suspended with locked system files"
+            https://bugs.webkit.org/show_bug.cgi?id=138155
+            <rdar://problem/17939303>
+
+            Reviewed by Anders Carlsson.
+
+            Mitigates an issue where the WebProcess may be killed when suspended holding locked files
+            by allowing the WebProcess to notify the UIProcess when it is holding such files so that
+            both can continue to run for a period of time after the UIProcess transitions to the
+            background. In particular, the WebProcess notifies the UIProcess that it is holding- or
+            relinquished- a locked file when it begins and ends a sequence of SQLite transactions,
+            respectively.
+
+            * UIProcess/WebProcessProxy.cpp:
+            (WebKit::WebProcessProxy::disconnect): Relinquish an existing background task assertion
+            when the WebProcess disconnects. Among other situations, the WebProcess may disconnect as
+            a result of being suspended holding locked files even when the UIProcess requested a
+            background task assertion (i.e. it may have exceeded its background time limit).
+            (WebKit::WebProcessProxy::setIsHoldingLockedFiles): Added. Either acquires a new background
+            task assertion or relinquishes an existing one.
+            * UIProcess/WebProcessProxy.h:
+            * UIProcess/WebProcessProxy.messages.in: Added message SetIsHoldingLockedFiles(bool). The WebProcess
+            dispatches this message to inform the UIProcess that it is holding- or relinquished- a locked file.
+            * WebKit2.xcodeproj/project.pbxproj: Added files WebSQLiteDatabaseTracker.{cpp, h}.
+            * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp: Added.
+            (WebKit::WebSQLiteDatabaseTracker::supplementName): Added.
+            (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker): Added.
+            (WebKit::WebSQLiteDatabaseTracker::initialize): Register to receive SQLiteDatabaseTrackerClient callbacks.
+            (WebKit::WebSQLiteDatabaseTracker::willBeginFirstTransaction): Inform the HysteresisActivity object on
+            the main thread that we began a transaction so that it calls WebSQLiteDatabaseTracker::started().
+            (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction): Inform the HysteresisActivity object on
+            the main thread that we finished a transaction so that it may eventually call WebSQLiteDatabaseTracker::stopped().
+            (WebKit::WebSQLiteDatabaseTracker::started): Notify the UIProcess that the WebProcess is holding
+            a locked file.
+            (WebKit::WebSQLiteDatabaseTracker::stopped): Notify the UIProcess that the WebProcess has
+            relinquished the locked file.
+            * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h: Added. We use a HysteresisActivity object
+            to coalesce SetIsHoldingLockedFiles(false) messages as an optimization to minimize the number of
+            messages exchanged between the UIProcess and WebProcess when a web page performs SQLite transactions
+            in batches.
+            * WebProcess/WebProcess.cpp:
+            (WebKit::WebProcess::WebProcess): Instantiate the supplement WebSQLiteDatabaseTracker when building
+            for iOS.
+
+2015-01-21  Babak Shafiei  <[email protected]>
+
         Merge r175636.
 
     2014-11-04  Jon Honeycutt  <[email protected]>

Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.cpp (178814 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2015-01-21 08:13:04 UTC (rev 178814)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2015-01-21 08:15:02 UTC (rev 178815)
@@ -151,6 +151,7 @@
     }
 
     m_responsivenessTimer.invalidate();
+    m_tokenForHoldingLockedFiles = nullptr;
 
     Vector<RefPtr<WebFrameProxy>> frames;
     copyValuesToVector(m_frameMap, frames);
@@ -753,4 +754,14 @@
     m_throttler->didCancelProcessSuspension();
 }
 
+void WebProcessProxy::setIsHoldingLockedFiles(bool isHoldingLockedFiles)
+{
+    if (!isHoldingLockedFiles) {
+        m_tokenForHoldingLockedFiles = nullptr;
+        return;
+    }
+    if (!m_tokenForHoldingLockedFiles)
+        m_tokenForHoldingLockedFiles = std::make_unique<ProcessThrottler::BackgroundActivityToken>(*m_throttler);
+}
+
 } // namespace WebKit

Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.h (178814 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.h	2015-01-21 08:13:04 UTC (rev 178814)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.h	2015-01-21 08:15:02 UTC (rev 178815)
@@ -139,7 +139,9 @@
     void processReadyToSuspend();
     void sendCancelProcessWillSuspend();
     void didCancelProcessSuspension();
-    
+
+    void setIsHoldingLockedFiles(bool);
+
     ProcessThrottler& throttler() { return *m_throttler; }
     
 private:
@@ -227,6 +229,7 @@
 
     int m_numberOfTimesSuddenTerminationWasDisabled;
     std::unique_ptr<ProcessThrottler> m_throttler;
+    std::unique_ptr<ProcessThrottler::BackgroundActivityToken> m_tokenForHoldingLockedFiles;
 };
 
 } // namespace WebKit

Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.messages.in (178814 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.messages.in	2015-01-21 08:13:04 UTC (rev 178814)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/UIProcess/WebProcessProxy.messages.in	2015-01-21 08:15:02 UTC (rev 178815)
@@ -49,4 +49,6 @@
 #endif
     ProcessReadyToSuspend()
     DidCancelProcessSuspension()
+
+    SetIsHoldingLockedFiles(bool isHoldingLockedFiles)
 }

Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (178814 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2015-01-21 08:13:04 UTC (rev 178814)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2015-01-21 08:15:02 UTC (rev 178815)
@@ -1595,6 +1595,8 @@
 		CDCA85C9132ABA4E00E961DF /* WKFullScreenWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCA85C7132ABA4E00E961DF /* WKFullScreenWindowController.h */; };
 		CEDA12E2152CD1AE00D9E08D /* WebAlternativeTextClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEDA12DF152CCAE800D9E08D /* WebAlternativeTextClient.cpp */; };
 		CEDA12E3152CD1B300D9E08D /* WebAlternativeTextClient.h in Headers */ = {isa = PBXBuildFile; fileRef = CEDA12DE152CCAE800D9E08D /* WebAlternativeTextClient.h */; };
+		CEDBA84719FDA00A006866A5 /* WebSQLiteDatabaseTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEDBA84519FDA00A006866A5 /* WebSQLiteDatabaseTracker.cpp */; };
+		CEDBA84819FDA00A006866A5 /* WebSQLiteDatabaseTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = CEDBA84619FDA00A006866A5 /* WebSQLiteDatabaseTracker.h */; };
 		D3B9484611FF4B6500032B39 /* WebPopupMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3B9484211FF4B6500032B39 /* WebPopupMenu.cpp */; };
 		D3B9484711FF4B6500032B39 /* WebPopupMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = D3B9484311FF4B6500032B39 /* WebPopupMenu.h */; };
 		D3B9484811FF4B6500032B39 /* WebSearchPopupMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3B9484411FF4B6500032B39 /* WebSearchPopupMenu.cpp */; };
@@ -3693,6 +3695,8 @@
 		CDCA85D4132AC2B300E961DF /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
 		CEDA12DE152CCAE800D9E08D /* WebAlternativeTextClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAlternativeTextClient.h; sourceTree = "<group>"; };
 		CEDA12DF152CCAE800D9E08D /* WebAlternativeTextClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebAlternativeTextClient.cpp; sourceTree = "<group>"; };
+		CEDBA84519FDA00A006866A5 /* WebSQLiteDatabaseTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSQLiteDatabaseTracker.cpp; sourceTree = "<group>"; };
+		CEDBA84619FDA00A006866A5 /* WebSQLiteDatabaseTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSQLiteDatabaseTracker.h; sourceTree = "<group>"; };
 		D3B9484211FF4B6500032B39 /* WebPopupMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPopupMenu.cpp; sourceTree = "<group>"; };
 		D3B9484311FF4B6500032B39 /* WebPopupMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPopupMenu.h; sourceTree = "<group>"; };
 		D3B9484411FF4B6500032B39 /* WebSearchPopupMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSearchPopupMenu.cpp; sourceTree = "<group>"; };
@@ -5705,6 +5709,8 @@
 				1A1E093218861D3800D2DC49 /* WebProgressTrackerClient.h */,
 				D3B9484411FF4B6500032B39 /* WebSearchPopupMenu.cpp */,
 				D3B9484511FF4B6500032B39 /* WebSearchPopupMenu.h */,
+				CEDBA84519FDA00A006866A5 /* WebSQLiteDatabaseTracker.cpp */,
+				CEDBA84619FDA00A006866A5 /* WebSQLiteDatabaseTracker.h */,
 			);
 			path = WebCoreSupport;
 			sourceTree = "<group>";
@@ -7342,6 +7348,7 @@
 				1AAB037A185A7C6A00EDF501 /* MessageSender.h in Headers */,
 				1A6FB7AF11E64B6800DB1371 /* PluginView.h in Headers */,
 				1AFE436618B6C081009C7A48 /* UIDelegate.h in Headers */,
+				CEDBA84819FDA00A006866A5 /* WebSQLiteDatabaseTracker.h in Headers */,
 				E1CC1B9012D7EADF00625838 /* PrintInfo.h in Headers */,
 				BC1A7C581136E19C00FB7167 /* ProcessLauncher.h in Headers */,
 				BC597075116591D000551FCA /* ProcessModel.h in Headers */,
@@ -8977,6 +8984,7 @@
 				371B32DD184D67490013E2B2 /* WKNSURLProtectionSpace.mm in Sources */,
 				BCC43ABA127B95DC00317F16 /* PlatformPopupMenuData.cpp in Sources */,
 				1A6FB7D211E651E200DB1371 /* Plugin.cpp in Sources */,
+				CEDBA84719FDA00A006866A5 /* WebSQLiteDatabaseTracker.cpp in Sources */,
 				31A67E0C165B2A99006CBA66 /* PlugInAutoStartProvider.cpp in Sources */,
 				1A8EF4CC1252403700F7067F /* PluginControllerProxy.cpp in Sources */,
 				1A2D91A61281D739001EB962 /* PluginControllerProxyMac.mm in Sources */,

Copied: branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp (from rev 175698, trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp) (0 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp	                        (rev 0)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp	2015-01-21 08:15:02 UTC (rev 178815)
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebSQLiteDatabaseTracker.h"
+
+#if ENABLE(SQL_DATABASE)
+
+#include "WebProcess.h"
+#include "WebProcessProxyMessages.h"
+#include <WebCore/SQLiteDatabaseTracker.h>
+#include <wtf/MainThread.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+const char* WebSQLiteDatabaseTracker::supplementName()
+{
+    return "WebSQLiteDatabaseTracker";
+}
+
+WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker(WebProcess* process)
+    : m_process(process)
+    , m_hysteresis(*this)
+{
+}
+
+void WebSQLiteDatabaseTracker::initialize(const WebProcessCreationParameters&)
+{
+    SQLiteDatabaseTracker::setClient(this);
+}
+
+void WebSQLiteDatabaseTracker::willBeginFirstTransaction()
+{
+    callOnMainThread([this] {
+        m_hysteresis.start();
+    });
+}
+
+void WebSQLiteDatabaseTracker::didFinishLastTransaction()
+{
+    callOnMainThread([this] {
+        m_hysteresis.stop();
+    });
+}
+
+void WebSQLiteDatabaseTracker::started()
+{
+    m_process->parentProcessConnection()->send(Messages::WebProcessProxy::SetIsHoldingLockedFiles(true), 0);
+}
+
+void WebSQLiteDatabaseTracker::stopped()
+{
+    m_process->parentProcessConnection()->send(Messages::WebProcessProxy::SetIsHoldingLockedFiles(false), 0);
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(SQL_DATABASE)

Copied: branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h (from rev 175698, trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h) (0 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h	                        (rev 0)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h	2015-01-21 08:15:02 UTC (rev 178815)
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebSQLiteDatabaseTracker_h
+#define WebSQLiteDatabaseTracker_h
+
+#include "WebProcessSupplement.h"
+#include <WebCore/HysteresisActivity.h>
+#include <WebCore/SQLiteDatabaseTrackerClient.h>
+#include <wtf/Noncopyable.h>
+
+#if ENABLE(SQL_DATABASE)
+
+namespace WebKit {
+
+class WebProcess;
+
+class WebSQLiteDatabaseTracker : public WebCore::SQLiteDatabaseTrackerClient, public WebProcessSupplement {
+    WTF_MAKE_NONCOPYABLE(WebSQLiteDatabaseTracker);
+public:
+    explicit WebSQLiteDatabaseTracker(WebProcess*);
+
+    static const char* supplementName();
+
+    // WebSupplement
+    virtual void initialize(const WebProcessCreationParameters&) override;
+
+    // WebCore::SQLiteDatabaseTrackerClient
+    virtual void willBeginFirstTransaction() override;
+    virtual void didFinishLastTransaction() override;
+
+private:
+    // WebCore::HysteresisActivity
+    friend class WebCore::HysteresisActivity<WebSQLiteDatabaseTracker>;
+    void started();
+    void stopped();
+
+    WebProcess* m_process;
+    WebCore::HysteresisActivity<WebSQLiteDatabaseTracker> m_hysteresis;
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(SQL_DATABASE)
+
+#endif // WebSQLiteDatabaseTracker_h

Modified: branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebProcess.cpp (178814 => 178815)


--- branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebProcess.cpp	2015-01-21 08:13:04 UTC (rev 178814)
+++ branches/safari-600.1.4.15-branch/Source/WebKit2/WebProcess/WebProcess.cpp	2015-01-21 08:15:02 UTC (rev 178815)
@@ -113,7 +113,10 @@
 
 #if ENABLE(SQL_DATABASE)
 #include "WebDatabaseManager.h"
+#if PLATFORM(IOS)
+#include "WebSQLiteDatabaseTracker.h"
 #endif
+#endif
 
 #if ENABLE(BATTERY_STATUS)
 #include "WebBatteryManager.h"
@@ -192,7 +195,11 @@
     
 #if ENABLE(SQL_DATABASE)
     addSupplement<WebDatabaseManager>();
+#if PLATFORM(IOS)
+    addSupplement<WebSQLiteDatabaseTracker>();
 #endif
+#endif
+
 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
     addSupplement<WebNotificationManager>();
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to