Changeset 162943 in webkit
- Timestamp:
- Jan 28, 2014 10:18:47 AM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r162941 r162943 1 2014-01-27 Alexey Proskuryakov <ap@apple.com> 2 3 Expose SQL database creation and modification times 4 https://bugs.webkit.org/show_bug.cgi?id=127728 5 6 Reviewed by Brady Eidson. 7 8 * platform/FileSystem.h: 9 * platform/posix/FileSystemPOSIX.cpp: 10 (WebCore::getFileCreationTime): 11 * platform/win/FileSystemWin.cpp: 12 (WebCore::getFileCreationTimeFromFindData): 13 (WebCore::getFileCreationTime): 14 Added functions to get file creation times. Not all OSes support that, but Darwin 15 and Windows do, as (I think) various BSD flavors. 16 17 * platform/gtk/FileSystemGtk.cpp: Added a stub for getFileCreationTime(). 18 19 * platform/sql/SQLiteFileSystem.h: 20 * platform/sql/SQLiteFileSystem.cpp: 21 (WebCore::SQLiteFileSystem::databaseCreationTime): 22 (WebCore::SQLiteFileSystem::databaseModificationTime): 23 Expose it in the same strange manner other database file operations are. 24 25 * Modules/webdatabase/DatabaseDetails.h: 26 (WebCore::DatabaseDetails::DatabaseDetails): 27 (WebCore::DatabaseDetails::creationTime): 28 (WebCore::DatabaseDetails::modificationTime): 29 Added creation and modification times to DatabaseDetails. 30 31 * Modules/webdatabase/DatabaseManager.cpp: 32 (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase): 33 (WebCore::DatabaseManager::openDatabaseBackend): 34 ProposedDatabase is an unfortunate mechanism for communicating quota errors to the 35 client, we should really straighten it up. But for now, just leave the times uninitialized. 36 37 * Modules/webdatabase/DatabaseBackendBase.cpp: (WebCore::DatabaseBackendBase::details): 38 This code path is for handling quota errors, so there is no need to initialize most 39 of DatabaseDetails here as well. 40 41 * Modules/webdatabase/DatabaseTracker.cpp: (WebCore::DatabaseTracker::detailsForNameAndOrigin): 42 * Modules/webdatabase/DatabaseTracker.h: 43 Fill in database file times. Inlined and removed usageForDatabase function to 44 avoid rebuilding the path multiple times. 45 1 46 2014-01-28 Jer Noble <jer.noble@apple.com> 2 47 -
trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp
r162787 r162943 456 456 DatabaseDetails DatabaseBackendBase::details() const 457 457 { 458 return DatabaseDetails(stringIdentifier(), displayName(), estimatedSize(), 0); 458 // This code path is only used for database quota delegate calls, so file dates are irrelevant and left uninitialized. 459 return DatabaseDetails(stringIdentifier(), displayName(), estimatedSize(), 0, 0, 0); 459 460 } 460 461 -
trunk/Source/WebCore/Modules/webdatabase/DatabaseDetails.h
r161654 r162943 42 42 : m_expectedUsage(0) 43 43 , m_currentUsage(0) 44 , m_creationTime(0) 45 , m_modificationTime(0) 44 46 #ifndef NDEBUG 45 47 , m_threadID(std::this_thread::get_id()) … … 48 50 } 49 51 50 DatabaseDetails(const String& databaseName, const String& displayName, unsigned long long expectedUsage, unsigned long long currentUsage )52 DatabaseDetails(const String& databaseName, const String& displayName, unsigned long long expectedUsage, unsigned long long currentUsage, double creationTime, double modificationTime) 51 53 : m_name(databaseName) 52 54 , m_displayName(displayName) 53 55 , m_expectedUsage(expectedUsage) 54 56 , m_currentUsage(currentUsage) 57 , m_creationTime(creationTime) 58 , m_modificationTime(modificationTime) 55 59 #ifndef NDEBUG 56 60 , m_threadID(std::this_thread::get_id()) … … 63 67 uint64_t expectedUsage() const { return m_expectedUsage; } 64 68 uint64_t currentUsage() const { return m_currentUsage; } 69 double creationTime() const { return m_creationTime; } 70 double modificationTime() const { return m_modificationTime; } 65 71 #ifndef NDEBUG 66 72 std::thread::id threadID() const { return m_threadID; } … … 72 78 uint64_t m_expectedUsage; 73 79 uint64_t m_currentUsage; 80 double m_creationTime; 81 double m_modificationTime; 74 82 #ifndef NDEBUG 75 83 std::thread::id m_threadID; -
trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp
r161654 r162943 54 54 : m_manager(manager) 55 55 , m_origin(origin->isolatedCopy()) 56 , m_details(name.isolatedCopy(), displayName.isolatedCopy(), estimatedSize, 0 )56 , m_details(name.isolatedCopy(), displayName.isolatedCopy(), estimatedSize, 0, 0, 0) 57 57 { 58 58 m_manager.addProposedDatabase(this); … … 269 269 { 270 270 ProposedDatabase proposedDb(*this, context->securityOrigin(), name, displayName, estimatedSize); 271 databaseContext->databaseExceededQuota(name, 272 DatabaseDetails(name.isolatedCopy(), displayName.isolatedCopy(), estimatedSize, 0)); 271 databaseContext->databaseExceededQuota(name, proposedDb.details()); 273 272 } 274 273 error = DatabaseError::None; -
trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp
r161638 r162943 485 485 } 486 486 487 return DatabaseDetails(name, displayName, expectedUsage, usageForDatabase(name, origin)); 487 String path = fullPathForDatabase(origin, name, false); 488 if (path.isEmpty()) 489 return DatabaseDetails(name, displayName, expectedUsage, 0, 0, 0); 490 return DatabaseDetails(name, displayName, expectedUsage, SQLiteFileSystem::getDatabaseFileSize(path), SQLiteFileSystem::databaseCreationTime(path), SQLiteFileSystem::databaseModificationTime(path)); 488 491 } 489 492 … … 538 541 if (m_client) 539 542 m_client->dispatchDidModifyDatabase(origin, name); 540 }541 542 unsigned long long DatabaseTracker::usageForDatabase(const String& name, SecurityOrigin* origin)543 {544 String path = fullPathForDatabase(origin, name, false);545 if (path.isEmpty())546 return 0;547 548 return SQLiteFileSystem::getDatabaseFileSize(path);549 543 } 550 544 -
trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h
r161638 r162943 91 91 DatabaseDetails detailsForNameAndOrigin(const String&, SecurityOrigin*); 92 92 93 unsigned long long usageForDatabase(const String&, SecurityOrigin*);94 93 unsigned long long usageForOrigin(SecurityOrigin*); 95 94 unsigned long long quotaForOrigin(SecurityOrigin*); -
trunk/Source/WebCore/platform/FileSystem.h
r162451 r162943 145 145 bool getFileSize(const String&, long long& result); 146 146 bool getFileModificationTime(const String&, time_t& result); 147 bool getFileCreationTime(const String&, time_t& result); // Not all platforms store file creation time. 147 148 bool getFileMetadata(const String&, FileMetadata&); 148 149 String pathByAppendingComponent(const String& path, const String& component); -
trunk/Source/WebCore/platform/gtk/FileSystemGtk.cpp
r162921 r162943 131 131 } 132 132 133 bool getFileCreationTime(const String&, time_t&) 134 { 135 // FIXME: Is there a way to retrieve file creation time with Gtk on platforms that support it? 136 return false; 137 } 138 133 139 bool getFileModificationTime(const String& path, time_t& modifiedTime) 134 140 { -
trunk/Source/WebCore/platform/posix/FileSystemPOSIX.cpp
r144760 r162943 184 184 } 185 185 186 bool getFileCreationTime(const String& path, time_t& result) 187 { 188 #if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD) || OS(FREEBSD) 189 CString fsRep = fileSystemRepresentation(path); 190 191 if (!fsRep.data() || fsRep.data()[0] == '\0') 192 return false; 193 194 struct stat fileInfo; 195 196 if (stat(fsRep.data(), &fileInfo)) 197 return false; 198 199 result = fileInfo.st_birthtime; 200 return true; 201 #else 202 UNUSED_PARAM(path); 203 UNUSED_PARAM(result); 204 return false; 205 #endif 206 } 207 186 208 bool getFileModificationTime(const String& path, time_t& result) 187 209 { -
trunk/Source/WebCore/platform/sql/SQLiteFileSystem.cpp
r161589 r162943 128 128 } 129 129 130 double SQLiteFileSystem::databaseCreationTime(const String& fileName) 131 { 132 time_t time; 133 return getFileCreationTime(fileName, time) ? time : 0; 134 } 135 136 double SQLiteFileSystem::databaseModificationTime(const String& fileName) 137 { 138 time_t time; 139 return getFileModificationTime(fileName, time) ? time : 0; 140 } 141 130 142 } // namespace WebCore -
trunk/Source/WebCore/platform/sql/SQLiteFileSystem.h
r161589 r162943 107 107 #endif 108 108 109 // Returns the size of the database file.110 //111 // fileName - The file name.112 109 static long long getDatabaseFileSize(const String& fileName); 110 static double databaseCreationTime(const String& fileName); 111 static double databaseModificationTime(const String& fileName); 113 112 114 113 private: -
trunk/Source/WebCore/platform/win/FileSystemWin.cpp
r156306 r162943 69 69 } 70 70 71 static void getFileCreationTimeFromFindData(const WIN32_FIND_DATAW& findData, time_t& time) 72 { 73 ULARGE_INTEGER fileTime; 74 fileTime.HighPart = findData.ftCreationTime.dwHighDateTime; 75 fileTime.LowPart = findData.ftCreationTime.dwLowDateTime; 76 77 // Information about converting time_t to FileTime is available at http://msdn.microsoft.com/en-us/library/ms724228%28v=vs.85%29.aspx 78 time = fileTime.QuadPart / 10000000 - kSecondsFromFileTimeToTimet; 79 } 80 81 71 82 static void getFileModificationTimeFromFindData(const WIN32_FIND_DATAW& findData, time_t& time) 72 83 { … … 95 106 96 107 getFileModificationTimeFromFindData(findData, time); 108 return true; 109 } 110 111 bool getFileCreationTime(const String& path, time_t& time) 112 { 113 WIN32_FIND_DATAW findData; 114 if (!getFindData(path, findData)) 115 return false; 116 117 getFileCreationTimeFromFindData(findData, time); 97 118 return true; 98 119 } -
trunk/Source/WebKit2/ChangeLog
r162936 r162943 1 2014-01-27 Alexey Proskuryakov <ap@apple.com> 2 3 Expose SQL database creation and modification times 4 https://bugs.webkit.org/show_bug.cgi?id=127728 5 6 Reviewed by Brady Eidson. 7 8 * Shared/WebCoreArgumentCoders.cpp: 9 (IPC::ArgumentCoder<DatabaseDetails>::encode): 10 (IPC::ArgumentCoder<DatabaseDetails>::decode): 11 Encode and decode new DatabaseDetails member variables. 12 13 * UIProcess/API/C/WKDatabaseManager.cpp: 14 (WKDatabaseManagerGetDatabaseDetailsCreationTimeKey): 15 (WKDatabaseManagerGetDatabaseDetailsModificationTimeKey): 16 * UIProcess/API/C/WKDatabaseManager.h: 17 Added new keys for database details. 18 19 * UIProcess/WebDatabaseManagerProxy.cpp: 20 (WebKit::WebDatabaseManagerProxy::databaseDetailsCreationTimeKey): 21 (WebKit::WebDatabaseManagerProxy::databaseDetailsModificationTimeKey): 22 (WebKit::WebDatabaseManagerProxy::didGetDatabasesByOrigin): 23 * UIProcess/WebDatabaseManagerProxy.h: 24 Set the new keys if times are valid. 25 1 26 2014-01-28 Tim Horton <timothy_horton@apple.com> 2 27 -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
r162644 r162943 916 916 encoder << details.expectedUsage(); 917 917 encoder << details.currentUsage(); 918 encoder << details.creationTime(); 919 encoder << details.modificationTime(); 918 920 } 919 921 … … 935 937 if (!decoder.decode(currentUsage)) 936 938 return false; 937 938 details = DatabaseDetails(name, displayName, expectedUsage, currentUsage); 939 940 double creationTime; 941 if (!decoder.decode(creationTime)) 942 return false; 943 944 double modificationTime; 945 if (!decoder.decode(modificationTime)) 946 return false; 947 948 details = DatabaseDetails(name, displayName, expectedUsage, currentUsage, creationTime, modificationTime); 939 949 return true; 940 950 } -
trunk/Source/WebKit2/UIProcess/API/C/WKDatabaseManager.cpp
r160608 r162943 121 121 } 122 122 123 WKStringRef WKDatabaseManagerGetDatabaseDetailsCreationTimeKey() 124 { 125 #if ENABLE(SQL_DATABASE) 126 static API::String* key = API::String::create(WebDatabaseManagerProxy::databaseDetailsCreationTimeKey()).leakRef(); 127 return toAPI(key); 128 #else 129 return 0; 130 #endif 131 } 132 133 WKStringRef WKDatabaseManagerGetDatabaseDetailsModificationTimeKey() 134 { 135 #if ENABLE(SQL_DATABASE) 136 static API::String* key = API::String::create(WebDatabaseManagerProxy::databaseDetailsModificationTimeKey()).leakRef(); 137 return toAPI(key); 138 #else 139 return 0; 140 #endif 141 } 142 123 143 void WKDatabaseManagerSetClient(WKDatabaseManagerRef databaseManagerRef, const WKDatabaseManagerClientBase* wkClient) 124 144 { -
trunk/Source/WebKit2/UIProcess/API/C/WKDatabaseManager.h
r160104 r162943 62 62 WK_EXPORT WKStringRef WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey(); 63 63 64 /* Value type: WKDoubleRef, seconds since January 1st, 1970 UTC */ 65 WK_EXPORT WKStringRef WKDatabaseManagerGetDatabaseDetailsCreationTimeKey(); 66 67 /* Value type: WKDoubleRef, seconds since January 1st, 1970 UTC */ 68 WK_EXPORT WKStringRef WKDatabaseManagerGetDatabaseDetailsModificationTimeKey(); 69 64 70 65 71 // Database Manager Client -
trunk/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.cpp
r161045 r162943 94 94 } 95 95 96 String WebDatabaseManagerProxy::databaseDetailsCreationTimeKey() 97 { 98 static NeverDestroyed<String> key(ASCIILiteral("WebDatabaseManagerDatabaseDetailsCreationTimeKey")); 99 return key; 100 } 101 102 String WebDatabaseManagerProxy::databaseDetailsModificationTimeKey() 103 { 104 static NeverDestroyed<String> key(ASCIILiteral("WebDatabaseManagerDatabaseDetailsModificationTimeKey")); 105 return key; 106 } 107 96 108 PassRefPtr<WebDatabaseManagerProxy> WebDatabaseManagerProxy::create(WebContext* webContext) 97 109 { … … 174 186 detailsMap.set(databaseDetailsExpectedUsageKey(), API::UInt64::create(databaseDetails.expectedUsage())); 175 187 detailsMap.set(databaseDetailsCurrentUsageKey(), API::UInt64::create(databaseDetails.currentUsage())); 188 if (databaseDetails.creationTime()) 189 detailsMap.set(databaseDetailsCreationTimeKey(), API::Double::create(databaseDetails.creationTime())); 190 if (databaseDetails.modificationTime()) 191 detailsMap.set(databaseDetailsModificationTimeKey(), API::Double::create(databaseDetails.modificationTime())); 176 192 177 193 databases.uncheckedAppend(ImmutableDictionary::create(std::move(detailsMap))); -
trunk/Source/WebKit2/UIProcess/WebDatabaseManagerProxy.h
r162139 r162943 71 71 static String databaseDetailsExpectedUsageKey(); 72 72 static String databaseDetailsCurrentUsageKey(); 73 static String databaseDetailsCreationTimeKey(); 74 static String databaseDetailsModificationTimeKey(); 73 75 74 76 using API::Object::ref;
Note: See TracChangeset
for help on using the changeset viewer.