Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2500)

Unified Diff: Source/modules/webmidi/NavigatorWebMIDI.cpp

Issue 77773003: Make WebMIDI use blink Promise. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/webmidi/NavigatorWebMIDI.cpp
diff --git a/Source/modules/webmidi/NavigatorWebMIDI.cpp b/Source/modules/webmidi/NavigatorWebMIDI.cpp
index 87f7b25d31ef0fbc61ed12c4644be689c87b3033..5de010a02ff1655a29f423fbb0f721155f5a57ba 100644
--- a/Source/modules/webmidi/NavigatorWebMIDI.cpp
+++ b/Source/modules/webmidi/NavigatorWebMIDI.cpp
@@ -31,11 +31,16 @@
#include "config.h"
#include "modules/webmidi/NavigatorWebMIDI.h"
+#include "bindings/v8/DOMRequestState.h"
+#include "bindings/v8/ScriptPromise.h"
+#include "bindings/v8/ScriptPromiseResolver.h"
+#include "core/dom/DOMError.h"
#include "core/dom/Document.h"
#include "core/dom/ExecutionContext.h"
#include "core/frame/Frame.h"
#include "core/frame/Navigator.h"
-#include "modules/webmidi/MIDIAccessPromise.h"
+#include "modules/webmidi/MIDIAccess.h"
+#include "modules/webmidi/MIDIOptions.h"
namespace WebCore {
@@ -46,6 +51,7 @@ NavigatorWebMIDI::NavigatorWebMIDI(Frame* frame)
NavigatorWebMIDI::~NavigatorWebMIDI()
{
+ clearPending();
}
const char* NavigatorWebMIDI::supplementName()
@@ -63,20 +69,40 @@ NavigatorWebMIDI* NavigatorWebMIDI::from(Navigator* navigator)
return supplement;
}
-PassRefPtr<MIDIAccessPromise> NavigatorWebMIDI::requestMIDIAccess(Navigator* navigator, const Dictionary& options)
+ScriptPromise NavigatorWebMIDI::requestMIDIAccess(Navigator* navigator, const Dictionary& options)
{
return NavigatorWebMIDI::from(navigator)->requestMIDIAccess(options);
}
-PassRefPtr<MIDIAccessPromise> NavigatorWebMIDI::requestMIDIAccess(const Dictionary& options)
+ScriptPromise NavigatorWebMIDI::requestMIDIAccess(const Dictionary& options)
{
- if (!frame())
- return 0;
+ if (!frame()) {
+ ScriptPromise promise = ScriptPromise::createPending();
+ RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promise);
+ // FIXME: Currently this rejection does not work because the context is stopped.
+ resolver->reject(DOMError::create("AbortError"));
+ return promise;
+ }
+
+ return MIDIAccess::create(MIDIOptions(options), frame()->document(), this)->startRequest();
+}
- ExecutionContext* context = frame()->document();
- ASSERT(context);
+void NavigatorWebMIDI::registerPending(MIDIAccess* access)
+{
+ m_pending.add(PassRefPtr<MIDIAccess>(access));
+}
- return MIDIAccessPromise::create(context, options);
+void NavigatorWebMIDI::unregisterPending(MIDIAccess* access)
+{
+ m_pending.remove(PassRefPtr<MIDIAccess>(access));
+}
+
+void NavigatorWebMIDI::clearPending()
+{
+ HashSet<RefPtr<MIDIAccess> > pending;
+ pending.swap(m_pending);
+ for (HashSet<RefPtr<MIDIAccess> >::iterator i = pending.begin(); i != pending.end(); ++i)
+ (*i)->stop();
}
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698