зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1644379 - Extract extraction of ErrorResult from IDBResult into a function. r=dom-workers-and-storage-reviewers,asuth
Differential Revision: https://phabricator.services.mozilla.com/D78708
This commit is contained in:
Родитель
5e5ea484e9
Коммит
d27dc7b783
|
@ -348,11 +348,8 @@ void IDBTypedCursor<CursorType>::Continue(JSContext* const aCx,
|
|||
Key key;
|
||||
auto result = key.SetFromJSVal(aCx, aKey);
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -362,11 +359,8 @@ void IDBTypedCursor<CursorType>::Continue(JSContext* const aCx,
|
|||
|
||||
result = key.ToLocaleAwareKey(tmp, GetSourceRef().Locale());
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return;
|
||||
}
|
||||
key = tmp;
|
||||
|
@ -457,11 +451,8 @@ void IDBTypedCursor<CursorType>::ContinuePrimaryKey(
|
|||
Key key;
|
||||
auto result = key.SetFromJSVal(aCx, aKey);
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -469,11 +460,8 @@ void IDBTypedCursor<CursorType>::ContinuePrimaryKey(
|
|||
Key tmp;
|
||||
result = key.ToLocaleAwareKey(tmp, GetSourceRef().Locale());
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return;
|
||||
}
|
||||
key = tmp;
|
||||
|
@ -487,11 +475,8 @@ void IDBTypedCursor<CursorType>::ContinuePrimaryKey(
|
|||
Key primaryKey;
|
||||
result = primaryKey.SetFromJSVal(aCx, aPrimaryKey);
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -446,21 +446,15 @@ int16_t IDBFactory::Cmp(JSContext* aCx, JS::Handle<JS::Value> aFirst,
|
|||
Key first, second;
|
||||
auto result = first.SetFromJSVal(aCx, aFirst);
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return 0;
|
||||
}
|
||||
|
||||
result = second.SetFromJSVal(aCx, aSecond);
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,11 +23,8 @@ void GetKeyFromJSVal(JSContext* aCx, JS::Handle<JS::Value> aVal, Key& aKey,
|
|||
ErrorResult& aRv) {
|
||||
auto result = aKey.SetFromJSVal(aCx, aVal);
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -67,10 +67,9 @@ IndexUpdateInfo MakeIndexUpdateInfo(const int64_t aIndexID, const Key& aKey,
|
|||
if (!aLocale.IsEmpty()) {
|
||||
auto result =
|
||||
aKey.ToLocaleAwareKey(indexUpdateInfo.localizedValue(), aLocale);
|
||||
if (result.Is(Invalid)) {
|
||||
aRv->Throw(NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR);
|
||||
} else if (result.Is(indexedDB::Exception)) {
|
||||
*aRv = std::move(result.AsException());
|
||||
if (!result.Is(Ok)) {
|
||||
*aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR>);
|
||||
}
|
||||
}
|
||||
return indexUpdateInfo;
|
||||
|
@ -675,11 +674,8 @@ void IDBObjectStore::GetAddInfo(JSContext* aCx, ValueWrapper& aValueWrapper,
|
|||
// Out-of-line keys must be passed in.
|
||||
auto result = aKey.SetFromJSVal(aCx, aKeyVal);
|
||||
if (!result.Is(Ok)) {
|
||||
if (result.Is(Invalid)) {
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_DATA_ERR);
|
||||
} else {
|
||||
aRv = std::move(result.AsException());
|
||||
}
|
||||
aRv = result.ExtractErrorResult(
|
||||
InvalidMapsTo<NS_ERROR_DOM_INDEXEDDB_DATA_ERR>);
|
||||
return;
|
||||
}
|
||||
} else if (!isAutoIncrement) {
|
||||
|
|
|
@ -125,6 +125,16 @@ class IDBResultBase {
|
|||
|
||||
ErrorResult& AsException() { return mVariant.template as<ErrorResult>(); }
|
||||
|
||||
template <typename... SpecialValueMappers>
|
||||
ErrorResult ExtractErrorResult(SpecialValueMappers... aSpecialValueMappers) {
|
||||
return mVariant.match(
|
||||
[](const ValueType&) -> ErrorResult {
|
||||
MOZ_CRASH("non-value expected");
|
||||
},
|
||||
[](ErrorResult& aException) { return std::move(aException); },
|
||||
aSpecialValueMappers...);
|
||||
}
|
||||
|
||||
protected:
|
||||
using VariantType = Variant<ValueType, ErrorResult, SpecialConstant<S>...>;
|
||||
|
||||
|
@ -158,6 +168,11 @@ class MOZ_MUST_USE_TYPE IDBResult<void, S...>
|
|||
using IDBResult::IDBResultBase::IDBResultBase;
|
||||
};
|
||||
|
||||
template <nsresult E>
|
||||
ErrorResult InvalidMapsTo(const indexedDB::detail::InvalidType&) {
|
||||
return ErrorResult{E};
|
||||
}
|
||||
|
||||
} // namespace indexedDB
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
|
Загрузка…
Ссылка в новой задаче