Title: [244131] branches/safari-607-branch/Source

Diff

Modified: branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp (244130 => 244131)


--- branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp	2019-04-10 17:11:26 UTC (rev 244131)
@@ -80,6 +80,11 @@
     staticTracker = new DatabaseTracker(databasePath);
 }
 
+bool DatabaseTracker::isInitialized()
+{
+    return !!staticTracker;
+}
+    
 DatabaseTracker& DatabaseTracker::singleton()
 {
     if (!staticTracker)

Modified: branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.h (244130 => 244131)


--- branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.h	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.h	2019-04-10 17:11:26 UTC (rev 244131)
@@ -59,6 +59,7 @@
     static void initializeTracker(const String& databasePath);
 
     WEBCORE_EXPORT static DatabaseTracker& singleton();
+    WEBCORE_EXPORT static bool isInitialized();
     // This singleton will potentially be used from multiple worker threads and the page's context thread simultaneously.  To keep this safe, it's
     // currently using 4 locks.  In order to avoid deadlock when taking multiple locks, you must take them in the correct order:
     // m_databaseGuard before quotaManager if both locks are needed.

Modified: branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.cpp (244130 => 244131)


--- branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.cpp	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.cpp	2019-04-10 17:11:26 UTC (rev 244131)
@@ -71,6 +71,15 @@
     });
 }
 
+static bool isDatabaseOpeningForbidden = false;
+static Lock isDatabaseOpeningForbiddenMutex;
+
+void SQLiteDatabase::setIsDatabaseOpeningForbidden(bool isForbidden)
+{
+    std::lock_guard<Lock> lock(isDatabaseOpeningForbiddenMutex);
+    isDatabaseOpeningForbidden = isForbidden;
+}
+
 SQLiteDatabase::SQLiteDatabase() = default;
 
 SQLiteDatabase::~SQLiteDatabase()
@@ -84,14 +93,17 @@
 
     close();
 
-    m_openError = SQLiteFileSystem::openDatabase(filename, &m_db, forWebSQLDatabase);
-    if (m_openError != SQLITE_OK) {
-        m_openErrorMessage = m_db ? sqlite3_errmsg(m_db) : "sqlite_open returned null";
-        LOG_ERROR("SQLite database failed to load from %s\nCause - %s", filename.ascii().data(),
-            m_openErrorMessage.data());
-        sqlite3_close(m_db);
-        m_db = 0;
-        return false;
+    {
+        std::lock_guard<Lock> lock(isDatabaseOpeningForbiddenMutex);
+        m_openError = SQLiteFileSystem::openDatabase(filename, &m_db, forWebSQLDatabase);
+        if (m_openError != SQLITE_OK) {
+            m_openErrorMessage = m_db ? sqlite3_errmsg(m_db) : "sqlite_open returned null";
+            LOG_ERROR("SQLite database failed to load from %s\nCause - %s", filename.ascii().data(),
+                m_openErrorMessage.data());
+            sqlite3_close(m_db);
+            m_db = 0;
+            return false;
+        }
     }
 
     overrideUnauthorizedFunctions();

Modified: branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.h (244130 => 244131)


--- branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.h	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.h	2019-04-10 17:11:26 UTC (rev 244131)
@@ -136,6 +136,8 @@
     WEBCORE_EXPORT void disableThreadingChecks() {}
 #endif
 
+    WEBCORE_EXPORT static void setIsDatabaseOpeningForbidden(bool);
+
 private:
     static int authorizerFunction(void*, int, const char*, const char*, const char*, const char*);
 

Modified: branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp (244130 => 244131)


--- branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp	2019-04-10 17:11:26 UTC (rev 244131)
@@ -40,18 +40,16 @@
 
 void setClient(SQLiteDatabaseTrackerClient* client)
 {
-    ASSERT(client);
-    ASSERT(!s_staticSQLiteDatabaseTrackerClient || s_staticSQLiteDatabaseTrackerClient == client);
+    std::lock_guard<Lock> lock(transactionInProgressMutex);
     s_staticSQLiteDatabaseTrackerClient = client;
 }
 
 void incrementTransactionInProgressCount()
 {
+    std::lock_guard<Lock> lock(transactionInProgressMutex);
     if (!s_staticSQLiteDatabaseTrackerClient)
         return;
 
-    std::lock_guard<Lock> lock(transactionInProgressMutex);
-
     s_transactionInProgressCounter++;
     if (s_transactionInProgressCounter == 1)
         s_staticSQLiteDatabaseTrackerClient->willBeginFirstTransaction();
@@ -59,11 +57,10 @@
 
 void decrementTransactionInProgressCount()
 {
+    std::lock_guard<Lock> lock(transactionInProgressMutex);
     if (!s_staticSQLiteDatabaseTrackerClient)
         return;
 
-    std::lock_guard<Lock> lock(transactionInProgressMutex);
-
     ASSERT(s_transactionInProgressCounter);
     s_transactionInProgressCounter--;
 
@@ -74,6 +71,7 @@
 #if !ASSERT_DISABLED
 bool hasTransactionInProgress()
 {
+    std::lock_guard<Lock> lock(transactionInProgressMutex);
     return !s_staticSQLiteDatabaseTrackerClient || s_transactionInProgressCounter > 0;
 }
 #endif

Modified: branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.cpp (244130 => 244131)


--- branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.cpp	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.cpp	2019-04-10 17:11:26 UTC (rev 244131)
@@ -52,6 +52,15 @@
     SQLiteDatabaseTracker::setClient(this);
 }
 
+WebSQLiteDatabaseTracker::~WebSQLiteDatabaseTracker()
+{
+    ASSERT(RunLoop::isMain());
+    SQLiteDatabaseTracker::setClient(nullptr);
+
+    if (m_hysteresis.state() == PAL::HysteresisState::Started)
+        hysteresisUpdated(PAL::HysteresisState::Stopped);
+}
+
 void WebSQLiteDatabaseTracker::willBeginFirstTransaction()
 {
     callOnMainThread([this] {

Modified: branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.h (244130 => 244131)


--- branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.h	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.h	2019-04-10 17:11:26 UTC (rev 244131)
@@ -42,6 +42,8 @@
     explicit WebSQLiteDatabaseTracker(NetworkProcess&);
     explicit WebSQLiteDatabaseTracker(WebProcess&);
 
+    ~WebSQLiteDatabaseTracker();
+
     // WebCore::SQLiteDatabaseTrackerClient
     void willBeginFirstTransaction() override;
     void didFinishLastTransaction() override;

Modified: branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.cpp (244130 => 244131)


--- branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.cpp	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.cpp	2019-04-10 17:11:26 UTC (rev 244131)
@@ -136,6 +136,10 @@
 #include "UserMediaCaptureManager.h"
 #endif
 
+#if PLATFORM(IOS_FAMILY)
+#include "WebSQLiteDatabaseTracker.h"
+#endif
+
 #if ENABLE(SEC_ITEM_SHIM)
 #include "SecItemShim.h"
 #endif
@@ -183,7 +187,7 @@
 #endif
     , m_nonVisibleProcessCleanupTimer(*this, &WebProcess::nonVisibleProcessCleanupTimerFired)
 #if PLATFORM(IOS_FAMILY)
-    , m_webSQLiteDatabaseTracker(*this)
+    , m_webSQLiteDatabaseTracker(std::make_unique<WebSQLiteDatabaseTracker>(*this))
 #endif
 {
     // Initialize our platform strategies.
@@ -1447,6 +1451,10 @@
 #endif
 
 #if PLATFORM(IOS_FAMILY)
+    m_webSQLiteDatabaseTracker = nullptr;
+    SQLiteDatabase::setIsDatabaseOpeningForbidden(true);
+    if (DatabaseTracker::isInitialized())
+        DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt);
     accessibilityProcessSuspendedNotification(true);
 #endif
 
@@ -1474,7 +1482,6 @@
     }
 
     RELEASE_LOG(ProcessSuspension, "%p - WebProcess::processWillSuspendImminently()", this);
-    DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt);
     actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend::No);
     handled = true;
 }
@@ -1491,6 +1498,8 @@
     unfreezeAllLayerTrees();
 
 #if PLATFORM(IOS_FAMILY)
+    m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this);
+    SQLiteDatabase::setIsDatabaseOpeningForbidden(false);
     accessibilityProcessSuspendedNotification(false);
 #endif
     
@@ -1558,6 +1567,8 @@
     unfreezeAllLayerTrees();
     
 #if PLATFORM(IOS_FAMILY)
+    m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this);
+    SQLiteDatabase::setIsDatabaseOpeningForbidden(false);
     accessibilityProcessSuspendedNotification(false);
 #endif
 }

Modified: branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.h (244130 => 244131)


--- branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.h	2019-04-10 17:11:23 UTC (rev 244130)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.h	2019-04-10 17:11:26 UTC (rev 244131)
@@ -52,10 +52,6 @@
 #include <wtf/MachSendRight.h>
 #endif
 
-#if PLATFORM(IOS_FAMILY)
-#include "WebSQLiteDatabaseTracker.h"
-#endif
-
 namespace API {
 class Object;
 }
@@ -106,6 +102,7 @@
 struct WebPageCreationParameters;
 struct WebPageGroupData;
 struct WebPreferencesStore;
+class WebSQLiteDatabaseTracker
 struct WebProcessCreationParameters;
 struct WebsiteData;
 struct WebsiteDataStoreParameters;
@@ -467,7 +464,7 @@
     RefPtr<WebCore::ApplicationCacheStorage> m_applicationCacheStorage;
 
 #if PLATFORM(IOS_FAMILY)
-    WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker;
+    std::unique_ptr<WebSQLiteDatabaseTracker> m_webSQLiteDatabaseTracker;
 #endif
 
     enum PageMarkingLayersAsVolatileCounterType { };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to