Bug 1781268 - Clean up ResizeObserver error handling. r=Oriol
unobserve() never throws. observe() only threw on a case which should never be reached (an already unlinked observer). We can assert and return instead. Differential Revision: https://phabricator.services.mozilla.com/D152769
This commit is contained in:
@@ -176,11 +176,7 @@ void ResizeObservation::Unlink(RemoveFromObserver aRemoveFromObserver) {
|
|||||||
nsCOMPtr<Element> target = std::move(mTarget);
|
nsCOMPtr<Element> target = std::move(mTarget);
|
||||||
if (observer && target) {
|
if (observer && target) {
|
||||||
if (aRemoveFromObserver == RemoveFromObserver::Yes) {
|
if (aRemoveFromObserver == RemoveFromObserver::Yes) {
|
||||||
IgnoredErrorResult rv;
|
observer->Unobserve(*target);
|
||||||
observer->Unobserve(*target, rv);
|
|
||||||
MOZ_DIAGNOSTIC_ASSERT(!rv.Failed(),
|
|
||||||
"How could we keep the observer and target around "
|
|
||||||
"without being in the observation map?");
|
|
||||||
}
|
}
|
||||||
target->UnbindObject(observer);
|
target->UnbindObject(observer);
|
||||||
}
|
}
|
||||||
@@ -243,10 +239,10 @@ already_AddRefed<ResizeObserver> ResizeObserver::Constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ResizeObserver::Observe(Element& aTarget,
|
void ResizeObserver::Observe(Element& aTarget,
|
||||||
const ResizeObserverOptions& aOptions,
|
const ResizeObserverOptions& aOptions) {
|
||||||
ErrorResult& aRv) {
|
|
||||||
if (MOZ_UNLIKELY(!mDocument)) {
|
if (MOZ_UNLIKELY(!mDocument)) {
|
||||||
return aRv.Throw(NS_ERROR_FAILURE);
|
MOZ_ASSERT_UNREACHABLE("How did we call observe() after unlink?");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(emilio): Per spec, this is supposed to happen on construction, but the
|
// NOTE(emilio): Per spec, this is supposed to happen on construction, but the
|
||||||
@@ -289,7 +285,7 @@ void ResizeObserver::Observe(Element& aTarget,
|
|||||||
mDocument->ScheduleResizeObserversNotification();
|
mDocument->ScheduleResizeObserversNotification();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResizeObserver::Unobserve(Element& aTarget, ErrorResult& aRv) {
|
void ResizeObserver::Unobserve(Element& aTarget) {
|
||||||
RefPtr<ResizeObservation> observation;
|
RefPtr<ResizeObservation> observation;
|
||||||
if (!mObservationMap.Remove(&aTarget, getter_AddRefs(observation))) {
|
if (!mObservationMap.Remove(&aTarget, getter_AddRefs(observation))) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -138,10 +138,8 @@ class ResizeObserver final : public nsISupports, public nsWrapperCache {
|
|||||||
const GlobalObject& aGlobal, ResizeObserverCallback& aCb,
|
const GlobalObject& aGlobal, ResizeObserverCallback& aCb,
|
||||||
ErrorResult& aRv);
|
ErrorResult& aRv);
|
||||||
|
|
||||||
void Observe(Element& aTarget, const ResizeObserverOptions& aOptions,
|
void Observe(Element&, const ResizeObserverOptions&);
|
||||||
ErrorResult& aRv);
|
void Unobserve(Element&);
|
||||||
|
|
||||||
void Unobserve(Element& target, ErrorResult& aRv);
|
|
||||||
|
|
||||||
void Disconnect();
|
void Disconnect();
|
||||||
|
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ interface ResizeObserver {
|
|||||||
[Throws]
|
[Throws]
|
||||||
constructor(ResizeObserverCallback callback);
|
constructor(ResizeObserverCallback callback);
|
||||||
|
|
||||||
[Throws]
|
|
||||||
void observe(Element target, optional ResizeObserverOptions options = {});
|
void observe(Element target, optional ResizeObserverOptions options = {});
|
||||||
[Throws]
|
|
||||||
void unobserve(Element target);
|
void unobserve(Element target);
|
||||||
void disconnect();
|
void disconnect();
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user