Diff
Modified: trunk/LayoutTests/ChangeLog (185479 => 185480)
--- trunk/LayoutTests/ChangeLog 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/LayoutTests/ChangeLog 2015-06-12 00:17:32 UTC (rev 185480)
@@ -1,3 +1,13 @@
+2015-06-11 Brady Eidson <beid...@apple.com>
+
+ IndexedDB onupgradeneeded event has incorrect value for oldVersion.
+ <rdar://problem/18309792> and https://bugs.webkit.org/show_bug.cgi?id=136888
+
+ Reviewed by Sam Weinig.
+
+ * storage/indexeddb/version-change-event-basic-expected.txt: Added.
+ * storage/indexeddb/version-change-event-basic.html: Added.
+
2015-06-11 Dean Jackson <d...@apple.com>
Add an appearance keyword for wireless playback / airplay icon
Added: trunk/LayoutTests/storage/indexeddb/version-change-event-basic-expected.txt (0 => 185480)
--- trunk/LayoutTests/storage/indexeddb/version-change-event-basic-expected.txt (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/version-change-event-basic-expected.txt 2015-06-12 00:17:32 UTC (rev 185480)
@@ -0,0 +1,7 @@
+0 version: TypeError: Type error
+Negative version: TypeError: Type error
+String version: TypeError: Type error
+First request: 0 1
+Second request: 0 1
+Third request: 0 2
+
Added: trunk/LayoutTests/storage/indexeddb/version-change-event-basic.html (0 => 185480)
--- trunk/LayoutTests/storage/indexeddb/version-change-event-basic.html (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/version-change-event-basic.html 2015-06-12 00:17:32 UTC (rev 185480)
@@ -0,0 +1,51 @@
+<body>
+<div id="logger"></div>
+<script>
+
+if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+}
+
+function log(msg) {
+ document.getElementById("logger").innerHTML += msg + "<br>";
+}
+
+var request1 = indexedDB.open("vceb1");
+request1._onupgradeneeded_ = function(e) {
+ log("First request: " + e.oldVersion + " " + e.newVersion);
+}
+
+var request2 = indexedDB.open("vceb2", 1);
+request2._onupgradeneeded_ = function(e) {
+ log("Second request: " + e.oldVersion + " " + e.newVersion);
+}
+
+var request3 = indexedDB.open("vceb3", 2);
+request3._onupgradeneeded_ = function(e) {
+ log("Third request: " + e.oldVersion + " " + e.newVersion);
+ if (window.testRunner)
+ testRunner.notifyDone();
+}
+
+try {
+ var request = indexedDB.open("vceb4", 0);
+} catch (e) {
+ log("0 version: " + e);
+}
+
+try {
+ var request = indexedDB.open("vceb5", -1);
+} catch (e) {
+ log("Negative version: " + e);
+}
+
+try {
+ var request = indexedDB.open("vceb6", "string");
+} catch (e) {
+ log("String version: " + e);
+}
+
+</script>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (185479 => 185480)
--- trunk/Source/WebCore/ChangeLog 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/ChangeLog 2015-06-12 00:17:32 UTC (rev 185480)
@@ -1,3 +1,46 @@
+2015-06-11 Brady Eidson <beid...@apple.com>
+
+ IndexedDB onupgradeneeded event has incorrect value for oldVersion.
+ <rdar://problem/18309792> and https://bugs.webkit.org/show_bug.cgi?id=136888
+
+ Reviewed by Sam Weinig.
+
+ Test: storage/indexeddb/version-change-event-basic.html
+
+ "NoIntVersion" is an internal bookkeeping concept that we never should've been passing to _javascript_.
+
+ This cleans up things by:
+ - Adjusting an old version of "NoIntVersion" to "0" before making the version change callback.
+ - Removing the VersionNullness parameter from almost everywhere.
+ - Removing the nullability of the newVersion parameter from the IDL.
+
+ * Modules/indexeddb/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::onVersionChange):
+ * Modules/indexeddb/IDBDatabase.h:
+
+ * Modules/indexeddb/IDBDatabaseBackend.cpp:
+ (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
+ (WebCore::IDBDatabaseBackend::deleteDatabase):
+
+ * Modules/indexeddb/IDBDatabaseCallbacks.h:
+ * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp:
+ (WebCore::IDBDatabaseCallbacksImpl::onVersionChange):
+ * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
+
+ * Modules/indexeddb/IDBOpenDBRequest.cpp:
+ (WebCore::IDBOpenDBRequest::onBlocked):
+ (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
+
+ * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
+ (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
+
+ * Modules/indexeddb/IDBVersionChangeEvent.cpp:
+ (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
+ * Modules/indexeddb/IDBVersionChangeEvent.h:
+ (WebCore::IDBVersionChangeEvent::create):
+ (WebCore::IDBVersionChangeEvent::newVersion):
+ * Modules/indexeddb/IDBVersionChangeEvent.idl:
+
2015-06-11 Matt Rajca <mra...@apple.com>
Media Session: Add plumbing for media control event delivery.
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp 2015-06-12 00:17:32 UTC (rev 185480)
@@ -325,7 +325,7 @@
m_isClosed = true;
}
-void IDBDatabase::onVersionChange(uint64_t oldVersion, uint64_t newVersion, IndexedDB::VersionNullness newVersionNullness)
+void IDBDatabase::onVersionChange(uint64_t oldVersion, uint64_t newVersion)
{
LOG(StorageAPI, "IDBDatabase::onVersionChange");
if (m_contextStopped || !scriptExecutionContext())
@@ -334,7 +334,8 @@
if (m_closePending)
return;
- enqueueEvent(IDBVersionChangeEvent::create(oldVersion, newVersion, newVersionNullness, eventNames().versionchangeEvent));
+ ASSERT(newVersion != IDBDatabaseMetadata::NoIntVersion && newVersion != IDBDatabaseMetadata::DefaultIntVersion);
+ enqueueEvent(IDBVersionChangeEvent::create(oldVersion, newVersion, eventNames().versionchangeEvent));
}
void IDBDatabase::enqueueEvent(PassRefPtr<Event> event)
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h 2015-06-12 00:17:32 UTC (rev 185480)
@@ -72,7 +72,7 @@
void close();
// IDBDatabaseCallbacks
- virtual void onVersionChange(uint64_t oldVersion, uint64_t newVersion, IndexedDB::VersionNullness newVersionNullness);
+ virtual void onVersionChange(uint64_t oldVersion, uint64_t newVersion);
virtual void onAbort(int64_t, PassRefPtr<IDBDatabaseError>);
virtual void onComplete(int64_t);
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp 2015-06-12 00:17:32 UTC (rev 185480)
@@ -500,7 +500,7 @@
for (auto& callback : m_databaseCallbacksSet) {
// Front end ensures the event is not fired at connections that have closePending set.
if (callback != databaseCallbacks)
- callback->onVersionChange(m_metadata.version, requestedVersion, IndexedDB::VersionNullness::Null);
+ callback->onVersionChange(m_metadata.version, requestedVersion);
}
// The spec dictates we wait until all the version change events are
// delivered and then check m_databaseCallbacks.empty() before proceeding
@@ -533,7 +533,7 @@
if (isDeleteDatabaseBlocked()) {
for (auto& callback : m_databaseCallbacksSet) {
// Front end ensures the event is not fired at connections that have closePending set.
- callback->onVersionChange(m_metadata.version, 0, IndexedDB::VersionNullness::Null);
+ callback->onVersionChange(m_metadata.version, 0);
}
// FIXME: Only fire onBlocked if there are open connections after the
// VersionChangeEvents are received, not just set up to fire.
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacks.h (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacks.h 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacks.h 2015-06-12 00:17:32 UTC (rev 185480)
@@ -42,7 +42,7 @@
virtual ~IDBDatabaseCallbacks() { }
virtual void onForcedClose() = 0;
- virtual void onVersionChange(uint64_t oldVersion, uint64_t newVersion, IndexedDB::VersionNullness newVersionNullness) = 0;
+ virtual void onVersionChange(uint64_t oldVersion, uint64_t newVersion) = 0;
virtual void onAbort(int64_t transactionId, PassRefPtr<IDBDatabaseError>) = 0;
virtual void onComplete(int64_t transactionId) = 0;
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp 2015-06-12 00:17:32 UTC (rev 185480)
@@ -52,10 +52,10 @@
m_database->forceClose();
}
-void IDBDatabaseCallbacksImpl::onVersionChange(uint64_t oldVersion, uint64_t newVersion, IndexedDB::VersionNullness newVersionNullness)
+void IDBDatabaseCallbacksImpl::onVersionChange(uint64_t oldVersion, uint64_t newVersion)
{
if (m_database)
- m_database->onVersionChange(oldVersion, newVersion, newVersionNullness);
+ m_database->onVersionChange(oldVersion, newVersion);
}
void IDBDatabaseCallbacksImpl::connect(IDBDatabase* database)
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.h (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.h 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.h 2015-06-12 00:17:32 UTC (rev 185480)
@@ -43,7 +43,7 @@
// IDBDatabaseCallbacks
virtual void onForcedClose() override;
- virtual void onVersionChange(uint64_t oldVersion, uint64_t newVersion, IndexedDB::VersionNullness newVersionNullness) override;
+ virtual void onVersionChange(uint64_t oldVersion, uint64_t newVersion) override;
virtual void onAbort(int64_t transactionId, PassRefPtr<IDBDatabaseError>) override;
virtual void onComplete(int64_t transactionId) override;
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp 2015-06-12 00:17:32 UTC (rev 185480)
@@ -69,7 +69,7 @@
if (!shouldEnqueueEvent())
return;
- enqueueEvent(IDBVersionChangeEvent::create(oldVersion, m_version, m_versionNullness, eventNames().blockedEvent));
+ enqueueEvent(IDBVersionChangeEvent::create(oldVersion, m_version, eventNames().blockedEvent));
}
void IDBOpenDBRequest::onUpgradeNeeded(uint64_t oldVersion, PassRefPtr<IDBDatabaseBackend> prpDatabaseBackend, const IDBDatabaseMetadata& metadata)
@@ -101,7 +101,7 @@
if (m_versionNullness == IndexedDB::VersionNullness::Null)
m_version = 1;
- enqueueEvent(IDBVersionChangeEvent::create(oldVersion, m_version, m_versionNullness, eventNames().upgradeneededEvent));
+ enqueueEvent(IDBVersionChangeEvent::create(oldVersion, m_version, eventNames().upgradeneededEvent));
}
void IDBOpenDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackend> prpBackend, const IDBDatabaseMetadata& metadata)
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp 2015-06-12 00:17:32 UTC (rev 185480)
@@ -238,8 +238,11 @@
LOG(StorageAPI, "VersionChangeOperation");
uint64_t oldVersion = m_transaction->database().metadata().version;
+ if (oldVersion == IDBDatabaseMetadata::NoIntVersion)
+ oldVersion = 0;
+
RefPtr<IDBDatabaseBackend::VersionChangeOperation> operation(this);
- ASSERT(static_cast<uint64_t>(m_version) > oldVersion || oldVersion == IDBDatabaseMetadata::NoIntVersion);
+ ASSERT(static_cast<uint64_t>(m_version) > oldVersion);
std::function<void(PassRefPtr<IDBDatabaseError>)> operationCallback = [oldVersion, operation, this, completionCallback](PassRefPtr<IDBDatabaseError> prpError) {
RefPtr<IDBDatabaseError> error = prpError;
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp 2015-06-12 00:17:32 UTC (rev 185480)
@@ -30,11 +30,10 @@
namespace WebCore {
-IDBVersionChangeEvent::IDBVersionChangeEvent(unsigned long long oldVersion, unsigned long long newVersion, IndexedDB::VersionNullness newVersionNullness, const AtomicString& eventType)
+IDBVersionChangeEvent::IDBVersionChangeEvent(unsigned long long oldVersion, unsigned long long newVersion, const AtomicString& eventType)
: Event(eventType, false /*canBubble*/, false /*cancelable*/)
, m_oldVersion(oldVersion)
, m_newVersion(newVersion)
- , m_newVersionNullness(newVersionNullness)
{
}
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h 2015-06-12 00:17:32 UTC (rev 185480)
@@ -38,24 +38,23 @@
class IDBVersionChangeEvent : public Event {
public:
- static Ref<IDBVersionChangeEvent> create(unsigned long long oldVersion = 0, unsigned long long newVersion = 0, IndexedDB::VersionNullness newVersionNullness = IndexedDB::VersionNullness::Null, const AtomicString& eventType = AtomicString())
+ static Ref<IDBVersionChangeEvent> create(unsigned long long oldVersion = 0, unsigned long long newVersion = 0, const AtomicString& eventType = AtomicString())
{
- return adoptRef(*new IDBVersionChangeEvent(oldVersion, newVersion, newVersionNullness, eventType));
+ return adoptRef(*new IDBVersionChangeEvent(oldVersion, newVersion, eventType));
}
virtual ~IDBVersionChangeEvent();
virtual unsigned long long oldVersion() { return m_oldVersion; }
- virtual unsigned long long newVersion(bool& isNull) { isNull = (m_newVersionNullness == IndexedDB::VersionNullness::Null); return m_newVersion; }
+ virtual unsigned long long newVersion() { return m_newVersion; }
virtual EventInterface eventInterface() const;
private:
- IDBVersionChangeEvent(unsigned long long oldVersion, unsigned long long newVersion, IndexedDB::VersionNullness newVersionNullness, const AtomicString& eventType);
+ IDBVersionChangeEvent(unsigned long long oldVersion, unsigned long long newVersion, const AtomicString& eventType);
unsigned long long m_oldVersion;
unsigned long long m_newVersion;
- IndexedDB::VersionNullness m_newVersionNullness;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl (185479 => 185480)
--- trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl 2015-06-12 00:13:41 UTC (rev 185479)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl 2015-06-12 00:17:32 UTC (rev 185480)
@@ -28,5 +28,5 @@
EnabledAtRuntime=IndexedDB,
] interface IDBVersionChangeEvent : Event {
readonly attribute unsigned long long oldVersion;
- readonly attribute unsigned long long? newVersion;
+ readonly attribute unsigned long long newVersion;
};