Changeset 244257 in webkit
- Timestamp:
- Apr 15, 2019, 12:43:43 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
r244131 r244257 81 81 } 82 82 83 bool DatabaseTracker::isInitialized()84 {85 return !!staticTracker;86 }87 88 83 DatabaseTracker& DatabaseTracker::singleton() 89 84 { -
branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.h
r244131 r244257 60 60 61 61 WEBCORE_EXPORT static DatabaseTracker& singleton(); 62 WEBCORE_EXPORT static bool isInitialized();63 62 // This singleton will potentially be used from multiple worker threads and the page's context thread simultaneously. To keep this safe, it's 64 63 // 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
r244131 r244257 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 83 74 SQLiteDatabase::SQLiteDatabase() = default; 84 75 … … 94 85 close(); 95 86 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 } 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; 107 95 } 108 96 -
branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.h
r244131 r244257 137 137 #endif 138 138 139 WEBCORE_EXPORT static void setIsDatabaseOpeningForbidden(bool);140 141 139 private: 142 140 static int authorizerFunction(void*, int, const char*, const char*, const char*, const char*); -
branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp
r244131 r244257 41 41 void setClient(SQLiteDatabaseTrackerClient* client) 42 42 { 43 std::lock_guard<Lock> lock(transactionInProgressMutex); 43 ASSERT(client); 44 ASSERT(!s_staticSQLiteDatabaseTrackerClient || s_staticSQLiteDatabaseTrackerClient == client); 44 45 s_staticSQLiteDatabaseTrackerClient = client; 45 46 } … … 47 48 void incrementTransactionInProgressCount() 48 49 { 49 std::lock_guard<Lock> lock(transactionInProgressMutex);50 50 if (!s_staticSQLiteDatabaseTrackerClient) 51 51 return; 52 53 std::lock_guard<Lock> lock(transactionInProgressMutex); 52 54 53 55 s_transactionInProgressCounter++; … … 58 60 void decrementTransactionInProgressCount() 59 61 { 60 std::lock_guard<Lock> lock(transactionInProgressMutex);61 62 if (!s_staticSQLiteDatabaseTrackerClient) 62 63 return; 64 65 std::lock_guard<Lock> lock(transactionInProgressMutex); 63 66 64 67 ASSERT(s_transactionInProgressCounter); … … 72 75 bool hasTransactionInProgress() 73 76 { 74 std::lock_guard<Lock> lock(transactionInProgressMutex);75 77 return !s_staticSQLiteDatabaseTrackerClient || s_transactionInProgressCounter > 0; 76 78 } -
branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.cpp
r244131 r244257 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 64 55 void WebSQLiteDatabaseTracker::willBeginFirstTransaction() 65 56 { -
branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.h
r244131 r244257 43 43 explicit WebSQLiteDatabaseTracker(WebProcess&); 44 44 45 ~WebSQLiteDatabaseTracker();46 47 45 // WebCore::SQLiteDatabaseTrackerClient 48 46 void willBeginFirstTransaction() override; -
branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.cpp
r244131 r244257 137 137 #endif 138 138 139 #if PLATFORM(IOS_FAMILY)140 #include "WebSQLiteDatabaseTracker.h"141 #endif142 143 139 #if ENABLE(SEC_ITEM_SHIM) 144 140 #include "SecItemShim.h" … … 188 184 , m_nonVisibleProcessCleanupTimer(*this, &WebProcess::nonVisibleProcessCleanupTimerFired) 189 185 #if PLATFORM(IOS_FAMILY) 190 , m_webSQLiteDatabaseTracker( std::make_unique<WebSQLiteDatabaseTracker>(*this))186 , m_webSQLiteDatabaseTracker(*this) 191 187 #endif 192 188 { … … 1452 1448 1453 1449 #if PLATFORM(IOS_FAMILY) 1454 m_webSQLiteDatabaseTracker = nullptr;1455 SQLiteDatabase::setIsDatabaseOpeningForbidden(true);1456 if (DatabaseTracker::isInitialized())1457 DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt);1458 1450 accessibilityProcessSuspendedNotification(true); 1459 1451 #endif … … 1483 1475 1484 1476 RELEASE_LOG(ProcessSuspension, "%p - WebProcess::processWillSuspendImminently()", this); 1477 DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt); 1485 1478 actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend::No); 1486 1479 handled = true; … … 1499 1492 1500 1493 #if PLATFORM(IOS_FAMILY) 1501 m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this);1502 SQLiteDatabase::setIsDatabaseOpeningForbidden(false);1503 1494 accessibilityProcessSuspendedNotification(false); 1504 1495 #endif … … 1568 1559 1569 1560 #if PLATFORM(IOS_FAMILY) 1570 m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this);1571 SQLiteDatabase::setIsDatabaseOpeningForbidden(false);1572 1561 accessibilityProcessSuspendedNotification(false); 1573 1562 #endif -
branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.h
r244256 r244257 53 53 #endif 54 54 55 #if PLATFORM(IOS_FAMILY) 56 #include "WebSQLiteDatabaseTracker.h" 57 #endif 58 55 59 namespace API { 56 60 class Object; … … 103 107 struct WebPageGroupData; 104 108 struct WebPreferencesStore; 105 class WebSQLiteDatabaseTracker106 109 struct WebProcessCreationParameters; 107 110 struct WebsiteData; … … 465 468 466 469 #if PLATFORM(IOS_FAMILY) 467 std::unique_ptr<WebSQLiteDatabaseTracker>m_webSQLiteDatabaseTracker;470 WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker; 468 471 #endif 469 472
Note:
See TracChangeset
for help on using the changeset viewer.