Changeset 244131 in webkit
- Timestamp:
- Apr 10, 2019, 10:11:26 AM (7 years ago)
- Location:
- branches/safari-607-branch/Source
- Files:
-
- 9 edited
-
WebCore/Modules/webdatabase/DatabaseTracker.cpp (modified) (1 diff)
-
WebCore/Modules/webdatabase/DatabaseTracker.h (modified) (1 diff)
-
WebCore/platform/sql/SQLiteDatabase.cpp (modified) (2 diffs)
-
WebCore/platform/sql/SQLiteDatabase.h (modified) (1 diff)
-
WebCore/platform/sql/SQLiteDatabaseTracker.cpp (modified) (4 diffs)
-
WebKit/Shared/WebSQLiteDatabaseTracker.cpp (modified) (1 diff)
-
WebKit/Shared/WebSQLiteDatabaseTracker.h (modified) (1 diff)
-
WebKit/WebProcess/WebProcess.cpp (modified) (6 diffs)
-
WebKit/WebProcess/WebProcess.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp
r239427 r244131 81 81 } 82 82 83 bool DatabaseTracker::isInitialized() 84 { 85 return !!staticTracker; 86 } 87 83 88 DatabaseTracker& DatabaseTracker::singleton() 84 89 { -
branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.h
r237266 r244131 60 60 61 61 WEBCORE_EXPORT static DatabaseTracker& singleton(); 62 WEBCORE_EXPORT static bool isInitialized(); 62 63 // This singleton will potentially be used from multiple worker threads and the page's context thread simultaneously. To keep this safe, it's 63 64 // currently using 4 locks. In order to avoid deadlock when taking multiple locks, you must take them in the correct order: -
branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.cpp
r243585 r244131 72 72 } 73 73 74 static bool isDatabaseOpeningForbidden = false; 75 static Lock isDatabaseOpeningForbiddenMutex; 76 77 void SQLiteDatabase::setIsDatabaseOpeningForbidden(bool isForbidden) 78 { 79 std::lock_guard<Lock> lock(isDatabaseOpeningForbiddenMutex); 80 isDatabaseOpeningForbidden = isForbidden; 81 } 82 74 83 SQLiteDatabase::SQLiteDatabase() = default; 75 84 … … 85 94 close(); 86 95 87 m_openError = SQLiteFileSystem::openDatabase(filename, &m_db, forWebSQLDatabase); 88 if (m_openError != SQLITE_OK) { 89 m_openErrorMessage = m_db ? sqlite3_errmsg(m_db) : "sqlite_open returned null"; 90 LOG_ERROR("SQLite database failed to load from %s\nCause - %s", filename.ascii().data(), 91 m_openErrorMessage.data()); 92 sqlite3_close(m_db); 93 m_db = 0; 94 return false; 96 { 97 std::lock_guard<Lock> lock(isDatabaseOpeningForbiddenMutex); 98 m_openError = SQLiteFileSystem::openDatabase(filename, &m_db, forWebSQLDatabase); 99 if (m_openError != SQLITE_OK) { 100 m_openErrorMessage = m_db ? sqlite3_errmsg(m_db) : "sqlite_open returned null"; 101 LOG_ERROR("SQLite database failed to load from %s\nCause - %s", filename.ascii().data(), 102 m_openErrorMessage.data()); 103 sqlite3_close(m_db); 104 m_db = 0; 105 return false; 106 } 95 107 } 96 108 -
branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.h
r237266 r244131 137 137 #endif 138 138 139 WEBCORE_EXPORT static void setIsDatabaseOpeningForbidden(bool); 140 139 141 private: 140 142 static int authorizerFunction(void*, int, const char*, const char*, const char*, const char*); -
branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp
r230303 r244131 41 41 void setClient(SQLiteDatabaseTrackerClient* client) 42 42 { 43 ASSERT(client); 44 ASSERT(!s_staticSQLiteDatabaseTrackerClient || s_staticSQLiteDatabaseTrackerClient == client); 43 std::lock_guard<Lock> lock(transactionInProgressMutex); 45 44 s_staticSQLiteDatabaseTrackerClient = client; 46 45 } … … 48 47 void incrementTransactionInProgressCount() 49 48 { 49 std::lock_guard<Lock> lock(transactionInProgressMutex); 50 50 if (!s_staticSQLiteDatabaseTrackerClient) 51 51 return; 52 53 std::lock_guard<Lock> lock(transactionInProgressMutex);54 52 55 53 s_transactionInProgressCounter++; … … 60 58 void decrementTransactionInProgressCount() 61 59 { 60 std::lock_guard<Lock> lock(transactionInProgressMutex); 62 61 if (!s_staticSQLiteDatabaseTrackerClient) 63 62 return; 64 65 std::lock_guard<Lock> lock(transactionInProgressMutex);66 63 67 64 ASSERT(s_transactionInProgressCounter); … … 75 72 bool hasTransactionInProgress() 76 73 { 74 std::lock_guard<Lock> lock(transactionInProgressMutex); 77 75 return !s_staticSQLiteDatabaseTrackerClient || s_transactionInProgressCounter > 0; 78 76 } -
branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.cpp
r242888 r244131 53 53 } 54 54 55 WebSQLiteDatabaseTracker::~WebSQLiteDatabaseTracker() 56 { 57 ASSERT(RunLoop::isMain()); 58 SQLiteDatabaseTracker::setClient(nullptr); 59 60 if (m_hysteresis.state() == PAL::HysteresisState::Started) 61 hysteresisUpdated(PAL::HysteresisState::Stopped); 62 } 63 55 64 void WebSQLiteDatabaseTracker::willBeginFirstTransaction() 56 65 { -
branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.h
r222619 r244131 43 43 explicit WebSQLiteDatabaseTracker(WebProcess&); 44 44 45 ~WebSQLiteDatabaseTracker(); 46 45 47 // WebCore::SQLiteDatabaseTrackerClient 46 48 void willBeginFirstTransaction() override; -
branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.cpp
r242888 r244131 137 137 #endif 138 138 139 #if PLATFORM(IOS_FAMILY) 140 #include "WebSQLiteDatabaseTracker.h" 141 #endif 142 139 143 #if ENABLE(SEC_ITEM_SHIM) 140 144 #include "SecItemShim.h" … … 184 188 , m_nonVisibleProcessCleanupTimer(*this, &WebProcess::nonVisibleProcessCleanupTimerFired) 185 189 #if PLATFORM(IOS_FAMILY) 186 , m_webSQLiteDatabaseTracker( *this)190 , m_webSQLiteDatabaseTracker(std::make_unique<WebSQLiteDatabaseTracker>(*this)) 187 191 #endif 188 192 { … … 1448 1452 1449 1453 #if PLATFORM(IOS_FAMILY) 1454 m_webSQLiteDatabaseTracker = nullptr; 1455 SQLiteDatabase::setIsDatabaseOpeningForbidden(true); 1456 if (DatabaseTracker::isInitialized()) 1457 DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt); 1450 1458 accessibilityProcessSuspendedNotification(true); 1451 1459 #endif … … 1475 1483 1476 1484 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::processWillSuspendImminently()", this); 1477 DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt);1478 1485 actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend::No); 1479 1486 handled = true; … … 1492 1499 1493 1500 #if PLATFORM(IOS_FAMILY) 1501 m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this); 1502 SQLiteDatabase::setIsDatabaseOpeningForbidden(false); 1494 1503 accessibilityProcessSuspendedNotification(false); 1495 1504 #endif … … 1559 1568 1560 1569 #if PLATFORM(IOS_FAMILY) 1570 m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this); 1571 SQLiteDatabase::setIsDatabaseOpeningForbidden(false); 1561 1572 accessibilityProcessSuspendedNotification(false); 1562 1573 #endif -
branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.h
r242888 r244131 53 53 #endif 54 54 55 #if PLATFORM(IOS_FAMILY)56 #include "WebSQLiteDatabaseTracker.h"57 #endif58 59 55 namespace API { 60 56 class Object; … … 107 103 struct WebPageGroupData; 108 104 struct WebPreferencesStore; 105 class WebSQLiteDatabaseTracker 109 106 struct WebProcessCreationParameters; 110 107 struct WebsiteData; … … 468 465 469 466 #if PLATFORM(IOS_FAMILY) 470 WebSQLiteDatabaseTrackerm_webSQLiteDatabaseTracker;467 std::unique_ptr<WebSQLiteDatabaseTracker> m_webSQLiteDatabaseTracker; 471 468 #endif 472 469
Note:
See TracChangeset
for help on using the changeset viewer.