Bug 1268380 - Part 1: Lower the precedence of SyntaxError next to ConstraintError in IDBObjectStore::CreateIndex(). r=khuey

--HG--
extra : rebase_source : 30c995da764e281636c1e134b421baf60a1d1c71
This commit is contained in:
Bevis Tseng 2016-04-29 10:56:02 +08:00
Родитель 4881494273
Коммит 446e7384f0
3 изменённых файлов: 23 добавлений и 61 удалений

Просмотреть файл

@ -1815,50 +1815,12 @@ IDBObjectStore::DeleteInternal(JSContext* aCx,
already_AddRefed<IDBIndex>
IDBObjectStore::CreateIndex(const nsAString& aName,
const nsAString& aKeyPath,
const StringOrStringSequence& aKeyPath,
const IDBIndexParameters& aOptionalParameters,
ErrorResult& aRv)
{
AssertIsOnOwningThread();
KeyPath keyPath(0);
if (NS_FAILED(KeyPath::Parse(aKeyPath, &keyPath)) ||
!keyPath.IsValid()) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return nullptr;
}
return CreateIndexInternal(aName, keyPath, aOptionalParameters, aRv);
}
already_AddRefed<IDBIndex>
IDBObjectStore::CreateIndex(const nsAString& aName,
const Sequence<nsString >& aKeyPath,
const IDBIndexParameters& aOptionalParameters,
ErrorResult& aRv)
{
AssertIsOnOwningThread();
KeyPath keyPath(0);
if (aKeyPath.IsEmpty() ||
NS_FAILED(KeyPath::Parse(aKeyPath, &keyPath)) ||
!keyPath.IsValid()) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return nullptr;
}
return CreateIndexInternal(aName, keyPath, aOptionalParameters, aRv);
}
already_AddRefed<IDBIndex>
IDBObjectStore::CreateIndexInternal(
const nsAString& aName,
const KeyPath& aKeyPath,
const IDBIndexParameters& aOptionalParameters,
ErrorResult& aRv)
{
AssertIsOnOwningThread();
if (mTransaction->GetMode() != IDBTransaction::VERSION_CHANGE ||
mDeletedSpec) {
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR);
@ -1883,7 +1845,24 @@ IDBObjectStore::CreateIndexInternal(
}
}
if (aOptionalParameters.mMultiEntry && aKeyPath.IsArray()) {
KeyPath keyPath(0);
if (aKeyPath.IsString()) {
if (NS_FAILED(KeyPath::Parse(aKeyPath.GetAsString(), &keyPath)) ||
!keyPath.IsValid()) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return nullptr;
}
} else {
MOZ_ASSERT(aKeyPath.IsStringSequence());
if (aKeyPath.GetAsStringSequence().IsEmpty() ||
NS_FAILED(KeyPath::Parse(aKeyPath.GetAsStringSequence(), &keyPath)) ||
!keyPath.IsValid()) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return nullptr;
}
}
if (aOptionalParameters.mMultiEntry && keyPath.IsArray()) {
aRv.Throw(NS_ERROR_DOM_INVALID_ACCESS_ERR);
return nullptr;
}
@ -1912,7 +1891,7 @@ IDBObjectStore::CreateIndexInternal(
#endif
IndexMetadata* metadata = indexes.AppendElement(
IndexMetadata(transaction->NextIndexId(), nsString(aName), aKeyPath,
IndexMetadata(transaction->NextIndexId(), nsString(aName), keyPath,
locale,
aOptionalParameters.mUnique,
aOptionalParameters.mMultiEntry,

Просмотреть файл

@ -30,6 +30,7 @@ class DOMStringList;
class IDBCursor;
class IDBRequest;
class IDBTransaction;
class StringOrStringSequence;
template <typename> class Sequence;
namespace indexedDB {
@ -209,13 +210,7 @@ public:
already_AddRefed<IDBIndex>
CreateIndex(const nsAString& aName,
const nsAString& aKeyPath,
const IDBIndexParameters& aOptionalParameters,
ErrorResult& aRv);
already_AddRefed<IDBIndex>
CreateIndex(const nsAString& aName,
const Sequence<nsString>& aKeyPath,
const StringOrStringSequence& aKeyPath,
const IDBIndexParameters& aOptionalParameters,
ErrorResult& aRv);
@ -345,12 +340,6 @@ private:
const Optional<uint32_t>& aLimit,
ErrorResult& aRv);
already_AddRefed<IDBIndex>
CreateIndexInternal(const nsAString& aName,
const KeyPath& aKeyPath,
const IDBIndexParameters& aOptionalParameters,
ErrorResult& aRv);
already_AddRefed<IDBRequest>
OpenCursorInternal(bool aKeysOnly,
JSContext* aCx,

Просмотреть файл

@ -42,14 +42,8 @@ interface IDBObjectStore {
[Throws]
IDBRequest openCursor (optional any range, optional IDBCursorDirection direction = "next");
// Bug 899972
// IDBIndex createIndex (DOMString name, (DOMString or sequence<DOMString>) keyPath, optional IDBIndexParameters optionalParameters);
[Throws]
IDBIndex createIndex (DOMString name, DOMString keyPath, optional IDBIndexParameters optionalParameters);
[Throws]
IDBIndex createIndex (DOMString name, sequence<DOMString> keyPath, optional IDBIndexParameters optionalParameters);
IDBIndex createIndex (DOMString name, (DOMString or sequence<DOMString>) keyPath, optional IDBIndexParameters optionalParameters);
[Throws]
IDBIndex index (DOMString name);