diff --git a/dom/bindings/IterableIterator.cpp b/dom/bindings/IterableIterator.cpp index 438d581786d15f932c491b521face9c0647e485a..88680ac1ecb9b3a6cd1f78ce9bed4fd48a964f26 100644 --- a/dom/bindings/IterableIterator.cpp +++ b/dom/bindings/IterableIterator.cpp @@ -67,26 +67,28 @@ void KeyAndValueReturn(JSContext* aCx, JS::Handle<JS::Value> aKey, aResult.set(&dictValue.toObject()); } -void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise, - ErrorResult& aRv) { +void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise) { MOZ_ASSERT(aPromise); + ErrorResult error; JS::Rooted<JSObject*> dict(aCx); - DictReturn(aCx, &dict, true, JS::UndefinedHandleValue, aRv); - if (aRv.Failed()) { + DictReturn(aCx, &dict, true, JS::UndefinedHandleValue, error); + if (error.Failed()) { + aPromise->MaybeReject(std::move(error)); return; } aPromise->MaybeResolve(dict); } void ResolvePromiseWithKeyOrValue(JSContext* aCx, Promise* aPromise, - JS::Handle<JS::Value> aKeyOrValue, - ErrorResult& aRv) { + JS::Handle<JS::Value> aKeyOrValue) { MOZ_ASSERT(aPromise); + ErrorResult error; JS::Rooted<JSObject*> dict(aCx); - DictReturn(aCx, &dict, false, aKeyOrValue, aRv); - if (aRv.Failed()) { + DictReturn(aCx, &dict, false, aKeyOrValue, error); + if (error.Failed()) { + aPromise->MaybeReject(std::move(error)); return; } aPromise->MaybeResolve(dict); @@ -94,13 +96,14 @@ void ResolvePromiseWithKeyOrValue(JSContext* aCx, Promise* aPromise, void ResolvePromiseWithKeyAndValue(JSContext* aCx, Promise* aPromise, JS::Handle<JS::Value> aKey, - JS::Handle<JS::Value> aValue, - ErrorResult& aRv) { + JS::Handle<JS::Value> aValue) { MOZ_ASSERT(aPromise); + ErrorResult error; JS::Rooted<JSObject*> dict(aCx); - KeyAndValueReturn(aCx, aKey, aValue, &dict, aRv); - if (aRv.Failed()) { + KeyAndValueReturn(aCx, aKey, aValue, &dict, error); + if (error.Failed()) { + aPromise->MaybeReject(std::move(error)); return; } aPromise->MaybeResolve(dict); diff --git a/dom/bindings/IterableIterator.h b/dom/bindings/IterableIterator.h index 2534fbbecc88d382360e1895a7aa7fd0e1eb6b77..6a5080deb3af764f4c5522f384d7bbb65e355501 100644 --- a/dom/bindings/IterableIterator.h +++ b/dom/bindings/IterableIterator.h @@ -47,17 +47,14 @@ void KeyAndValueReturn(JSContext* aCx, JS::Handle<JS::Value> aKey, JS::Handle<JS::Value> aValue, JS::MutableHandle<JSObject*> aResult, ErrorResult& aRv); -void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise, - ErrorResult& aRv); +void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise); void ResolvePromiseWithKeyOrValue(JSContext* aCx, Promise* aPromise, - JS::Handle<JS::Value> aKeyOrValue, - ErrorResult& aRv); + JS::Handle<JS::Value> aKeyOrValue); void ResolvePromiseWithKeyAndValue(JSContext* aCx, Promise* aPromise, JS::Handle<JS::Value> aKey, - JS::Handle<JS::Value> aValue, - ErrorResult& aRv); + JS::Handle<JS::Value> aValue); } // namespace iterator_utils class IterableIteratorBase : public nsISupports { diff --git a/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp b/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp index f2d888b518e8895fe271669eaedb4ea4556103d2..dd243ebf318e38d5c40bee0057fb1146c3fd4fae 100644 --- a/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp +++ b/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp @@ -90,34 +90,33 @@ void TestInterfaceAsyncIterableDouble::ResolvePromise(Iterator* aIterator) { AutoJSAPI jsapi; if (NS_WARN_IF(!jsapi.Init(mParent))) { + data->mPromise->MaybeRejectWithInvalidStateError( + "Couldn't get the global."); return; } JSContext* cx = jsapi.cx(); - ErrorResult rv; // Test data: ['a', 'b'], ['c', 'd'], ['e', 'f'] uint32_t idx = data->mIndex; if (idx >= mValues.Length()) { - iterator_utils::ResolvePromiseForFinished(cx, data->mPromise, rv); + iterator_utils::ResolvePromiseForFinished(cx, data->mPromise); } else { JS::Rooted<JS::Value> key(cx); JS::Rooted<JS::Value> value(cx); switch (aIterator->GetIteratorType()) { case IterableIteratorBase::IteratorType::Keys: Unused << ToJSValue(cx, mValues[idx].first, &key); - iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key, - rv); + iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key); break; case IterableIteratorBase::IteratorType::Values: Unused << ToJSValue(cx, mValues[idx].second, &value); - iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value, - rv); + iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value); break; case IterableIteratorBase::IteratorType::Entries: Unused << ToJSValue(cx, mValues[idx].first, &key); Unused << ToJSValue(cx, mValues[idx].second, &value); iterator_utils::ResolvePromiseWithKeyAndValue(cx, data->mPromise, key, - value, rv); + value); break; } diff --git a/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp b/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp index cc76efb616df10c7490f52a0ba1c6a3b8da23861..568e316c424763823b665daefc3dee29224c87a4 100644 --- a/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp +++ b/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp @@ -97,35 +97,34 @@ void TestInterfaceAsyncIterableDoubleUnion::ResolvePromise( AutoJSAPI jsapi; if (NS_WARN_IF(!jsapi.Init(mParent))) { + data->mPromise->MaybeRejectWithInvalidStateError( + "Couldn't get the global."); return; } JSContext* cx = jsapi.cx(); - ErrorResult rv; // Test data: // [long, 1], [string, "a"] uint32_t idx = data->mIndex; if (idx >= mValues.Length()) { - iterator_utils::ResolvePromiseForFinished(cx, data->mPromise, rv); + iterator_utils::ResolvePromiseForFinished(cx, data->mPromise); } else { JS::Rooted<JS::Value> key(cx); JS::Rooted<JS::Value> value(cx); switch (aIterator->GetIteratorType()) { case IterableIteratorBase::IteratorType::Keys: Unused << ToJSValue(cx, mValues[idx].first, &key); - iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key, - rv); + iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key); break; case IterableIteratorBase::IteratorType::Values: Unused << ToJSValue(cx, mValues[idx].second, &value); - iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value, - rv); + iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value); break; case IterableIteratorBase::IteratorType::Entries: Unused << ToJSValue(cx, mValues[idx].first, &key); Unused << ToJSValue(cx, mValues[idx].second, &value); iterator_utils::ResolvePromiseWithKeyAndValue(cx, data->mPromise, key, - value, rv); + value); break; } diff --git a/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp b/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp index 2baa9286da4465b2c39dfe271814e5e37b6cf187..ad9ffbe9190f7c21821c7e67461cea8e4fe946b7 100644 --- a/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp +++ b/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp @@ -98,18 +98,19 @@ void TestInterfaceAsyncIterableSingle::ResolvePromise( IterableIteratorBase* aIterator, IteratorData* aData) { AutoJSAPI jsapi; if (NS_WARN_IF(!jsapi.Init(mParent))) { + aData->mPromise->MaybeRejectWithInvalidStateError( + "Couldn't get the global."); return; } JSContext* cx = jsapi.cx(); - ErrorResult rv; + if (aData->mIndex >= 10) { - iterator_utils::ResolvePromiseForFinished(cx, aData->mPromise, rv); + iterator_utils::ResolvePromiseForFinished(cx, aData->mPromise); } else { JS::Rooted<JS::Value> value(cx); Unused << ToJSValue( cx, (int32_t)(aData->mIndex * 9 % 7 * aData->mMultiplier), &value); - iterator_utils::ResolvePromiseWithKeyOrValue(cx, aData->mPromise, value, - rv); + iterator_utils::ResolvePromiseWithKeyOrValue(cx, aData->mPromise, value); aData->mIndex++; } diff --git a/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp b/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp index 573b47c3f836aba8e0454eff077b1cf6167ca91b..29fab55d49a2d8d2fe838e2daa3761721ada509e 100644 --- a/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp +++ b/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp @@ -50,8 +50,7 @@ struct ValueResolver<IterableIteratorBase::Keys> { return NS_ERROR_INVALID_ARG; } - iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), key, - aError); + iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), key); return NS_OK; } @@ -81,8 +80,7 @@ struct ValueResolver<IterableIteratorBase::Values> { return NS_ERROR_INVALID_ARG; } - iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), value, - aError); + iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), value); return NS_OK; } @@ -118,7 +116,7 @@ struct ValueResolver<IterableIteratorBase::Entries> { } iterator_utils::ResolvePromiseWithKeyAndValue(cx, aPromise.get(), key, - value, aError); + value); return NS_OK; } @@ -159,7 +157,7 @@ class DoubleBufferQueueImpl MOZ_ASSERT(aCx); if (!aValue) { - iterator_utils::ResolvePromiseForFinished(aCx, aPromise.get(), aError); + iterator_utils::ResolvePromiseForFinished(aCx, aPromise.get()); return; }