| Index: Source/modules/webmidi/MIDIAccessInitializer.cpp
|
| diff --git a/Source/modules/webmidi/MIDIAccessInitializer.cpp b/Source/modules/webmidi/MIDIAccessInitializer.cpp
|
| index b1fda8518b9de403711e7e3cf868bc9992bff26a..19e7bcd18d8e1f4c35ae3582cfe29231b7ec1a60 100644
|
| --- a/Source/modules/webmidi/MIDIAccessInitializer.cpp
|
| +++ b/Source/modules/webmidi/MIDIAccessInitializer.cpp
|
| @@ -20,6 +20,7 @@ namespace blink {
|
| MIDIAccessInitializer::MIDIAccessInitializer(ScriptState* scriptState, const MIDIOptions& options)
|
| : ScriptPromiseResolver(scriptState)
|
| , m_requestSysex(false)
|
| + , m_hasBeenDisposed(false)
|
| {
|
| #if ENABLE(OILPAN)
|
| // A prefinalizer has already been registered (as a LifecycleObserver);
|
| @@ -43,14 +44,27 @@ MIDIAccessInitializer::~MIDIAccessInitializer()
|
| #endif
|
| }
|
|
|
| +void MIDIAccessInitializer::contextDestroyed()
|
| +{
|
| + dispose();
|
| +}
|
| +
|
| void MIDIAccessInitializer::dispose()
|
| {
|
| + if (m_hasBeenDisposed)
|
| + return;
|
| +
|
| + if (!executionContext())
|
| + return;
|
| +
|
| // It is safe to cancel a request which is already finished or cancelled.
|
| Document* document = toDocument(executionContext());
|
| ASSERT(document);
|
| if (MIDIController* controller = MIDIController::from(document->frame()))
|
| controller->cancelSysexPermissionRequest(this);
|
|
|
| + m_hasBeenDisposed = true;
|
| +
|
| #if ENABLE(OILPAN)
|
| // Delegate to LifecycleObserver's prefinalizer.
|
| LifecycleObserver::dispose();
|
|
|