blob: 43a908cf1a095fb478b220109f13d71bb56d401f [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/platform/context_lifecycle_notifier.h"
#include "third_party/blink/renderer/platform/bindings/script_forbidden_scope.h"
#include "third_party/blink/renderer/platform/context_lifecycle_observer.h"
namespace blink {
ContextLifecycleNotifier::~ContextLifecycleNotifier() {
// `NotifyContextDestroyed()` must be called prior to destruction.
DCHECK(context_destroyed_);
}
bool ContextLifecycleNotifier::IsContextDestroyed() const {
return context_destroyed_;
}
void ContextLifecycleNotifier::AddContextLifecycleObserver(
ContextLifecycleObserver* observer) {
observers_.AddObserver(observer);
}
void ContextLifecycleNotifier::RemoveContextLifecycleObserver(
ContextLifecycleObserver* observer) {
DCHECK(observers_.HasObserver(observer));
observers_.RemoveObserver(observer);
}
void ContextLifecycleNotifier::NotifyContextDestroyed() {
context_destroyed_ = true;
ScriptForbiddenScope forbid_script;
observers_.ForEachObserver([](ContextLifecycleObserver* observer) {
observer->NotifyContextDestroyed();
});
observers_.Clear();
}
void ContextLifecycleNotifier::Trace(Visitor* visitor) const {
visitor->Trace(observers_);
}
} // namespace blink