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

Unified Diff: Source/modules/mediastream/MediaDevicesRequest.cpp

Issue 1184743002: Implement enumerateDevices() according to spec. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix expected output of global interface listing test Created 5 years, 6 months 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/mediastream/MediaDevicesRequest.cpp
diff --git a/Source/modules/mediastream/MediaDevicesRequest.cpp b/Source/modules/mediastream/MediaDevicesRequest.cpp
index 9049fd053c785dcb1065d85ce2c7b23ec0982a24..6987d42f00f279911f64925e96eb9d56206c2d0f 100644
--- a/Source/modules/mediastream/MediaDevicesRequest.cpp
+++ b/Source/modules/mediastream/MediaDevicesRequest.cpp
@@ -27,23 +27,26 @@
#include "modules/mediastream/MediaDevicesRequest.h"
-#include "bindings/core/v8/ExceptionState.h"
+#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "bindings/core/v8/ScriptState.h"
+#include "core/dom/DOMException.h"
#include "core/dom/Document.h"
+#include "core/dom/ExceptionCode.h"
#include "modules/mediastream/UserMediaController.h"
namespace blink {
-MediaDevicesRequest* MediaDevicesRequest::create(ExecutionContext* context, UserMediaController* controller, MediaDeviceInfoCallback* callback, ExceptionState& exceptionState)
+MediaDevicesRequest* MediaDevicesRequest::create(ScriptState* state, UserMediaController* controller)
{
- MediaDevicesRequest* request = new MediaDevicesRequest(context, controller, callback);
+ MediaDevicesRequest* request = new MediaDevicesRequest(state, controller);
request->suspendIfNeeded();
return request;
}
-MediaDevicesRequest::MediaDevicesRequest(ExecutionContext* context, UserMediaController* controller, MediaDeviceInfoCallback* callback)
- : ActiveDOMObject(context)
+MediaDevicesRequest::MediaDevicesRequest(ScriptState* state, UserMediaController* controller)
+ : ActiveDOMObject(state->executionContext())
, m_controller(controller)
- , m_callback(callback)
+ , m_resolver(ScriptPromiseResolver::create(state))
{
}
@@ -60,30 +63,35 @@ Document* MediaDevicesRequest::ownerDocument()
return 0;
}
-void MediaDevicesRequest::start()
+ScriptPromise MediaDevicesRequest::start()
{
- if (m_controller)
+ if (m_controller) {
+ m_resolver->keepAliveWhilePending();
m_controller->requestMediaDevices(this);
+ return m_resolver->promise();
+ }
+
+ return ScriptPromise::rejectWithDOMException(m_resolver->scriptState(), DOMException::create(NotSupportedError, "No media device controller available"));
Peter Beverloo 2015/06/18 14:28:50 I'd still like to know when this occurs (dito with
}
void MediaDevicesRequest::succeed(const MediaDeviceInfoVector& mediaDevices)
{
- if (!executionContext() || !m_callback)
+ if (!executionContext() || !m_resolver)
return;
- m_callback->handleEvent(mediaDevices);
+ m_resolver->resolve(mediaDevices);
}
void MediaDevicesRequest::stop()
{
- m_callback.clear();
m_controller.clear();
+ m_resolver.clear();
}
DEFINE_TRACE(MediaDevicesRequest)
{
visitor->trace(m_controller);
- visitor->trace(m_callback);
+ visitor->trace(m_resolver);
ActiveDOMObject::trace(visitor);
}

Powered by Google App Engine
This is Rietveld 408576698