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

Unified Diff: third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp

Issue 2116763002: Reland: Web MIDI: use mojom::blink::PermissionService directly to ask permission (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove unused method Created 4 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: third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
index 52a38238d8408a2825692b87cc8b98d5839b704a..1e4e0130fc18d17afeb331440bbb2a552a74ed53 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
@@ -9,11 +9,15 @@
#include "core/dom/DOMException.h"
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
+#include "core/frame/LocalFrame.h"
#include "core/frame/Navigator.h"
#include "modules/webmidi/MIDIAccess.h"
-#include "modules/webmidi/MIDIController.h"
#include "modules/webmidi/MIDIOptions.h"
#include "modules/webmidi/MIDIPort.h"
+#include "platform/UserGestureIndicator.h"
+#include "platform/mojo/MojoHelper.h"
+#include "public/platform/ServiceRegistry.h"
+#include "third_party/WebKit/public/platform/modules/permissions/permission.mojom-blink.h"
namespace blink {
@@ -22,41 +26,15 @@ using PortState = WebMIDIAccessorClient::MIDIPortState;
MIDIAccessInitializer::MIDIAccessInitializer(ScriptState* scriptState, const MIDIOptions& options)
: ScriptPromiseResolver(scriptState)
, m_options(options)
- , m_hasBeenDisposed(false)
- , m_permissionResolved(false)
{
}
-MIDIAccessInitializer::~MIDIAccessInitializer()
-{
- dispose();
-}
-
void MIDIAccessInitializer::contextDestroyed()
{
- dispose();
+ m_permissionService.reset();
LifecycleObserver::contextDestroyed();
}
-void MIDIAccessInitializer::dispose()
-{
- if (m_hasBeenDisposed)
- return;
-
- if (!getExecutionContext())
- return;
-
- if (!m_permissionResolved) {
- Document* document = toDocument(getExecutionContext());
- DCHECK(document);
- if (MIDIController* controller = MIDIController::from(document->frame()))
- controller->cancelPermissionRequest(this);
- m_permissionResolved = true;
- }
-
- m_hasBeenDisposed = true;
-}
-
ScriptPromise MIDIAccessInitializer::start()
{
ScriptPromise promise = this->promise();
@@ -64,10 +42,19 @@ ScriptPromise MIDIAccessInitializer::start()
Document* document = toDocument(getExecutionContext());
DCHECK(document);
- if (MIDIController* controller = MIDIController::from(document->frame()))
- controller->requestPermission(this, m_options);
- else
- reject(DOMException::create(SecurityError));
+
+ document->frame()->serviceRegistry()->connectToRemoteService(mojo::GetProxy(&m_permissionService));
+
+ bool requestSysEx = m_options.hasSysex() && m_options.sysex();
+ mojo::WTFArray<mojom::blink::PermissionName> permissions = mojo::WTFArray<mojom::blink::PermissionName>::New(requestSysEx ? 2 : 1);
+ permissions[0] = mojom::blink::PermissionName::MIDI;
+ if (requestSysEx)
+ permissions[1] = mojom::blink::PermissionName::MIDI_SYSEX;
+ m_permissionService->RequestPermissions(
+ permissions.PassStorage(),
Takashi Toyoshima 2016/07/01 12:44:51 I don't have enough confidence on this mojo:WTFArr
Sam McNally 2016/07/05 01:17:54 WTFArray is "move" constructible from a WTF::Vecto
Takashi Toyoshima 2016/07/05 08:03:18 Done.
+ getExecutionContext()->getSecurityOrigin()->toString(),
+ UserGestureIndicator::processingUserGesture(),
+ createBaseCallback(WTF::bind(&MIDIAccessInitializer::onPermissionUpdated, wrapPersistent(this))));
return promise;
}
@@ -125,23 +112,26 @@ void MIDIAccessInitializer::didStartSession(bool success, const String& error, c
}
}
-void MIDIAccessInitializer::resolvePermission(bool allowed)
+ExecutionContext* MIDIAccessInitializer::getExecutionContext() const
+{
+ return getScriptState()->getExecutionContext();
+}
+
+void MIDIAccessInitializer::onPermissionUpdated(mojo::WTFArray<mojom::blink::PermissionStatus> status)
{
- m_permissionResolved = true;
+ bool allowed = true;
+ for (size_t i = 0; i < status.size(); ++i) {
Sam McNally 2016/07/05 01:17:54 I think this would be nicer as a foreach loop. WTF
Takashi Toyoshima 2016/07/05 08:03:18 Done.
+ if (status[i] != mojom::blink::PermissionStatus::GRANTED) {
+ allowed = false;
+ break;
+ }
+ }
+ m_permissionService.reset();
if (allowed)
m_accessor->startSession();
else
reject(DOMException::create(SecurityError));
-}
-SecurityOrigin* MIDIAccessInitializer::getSecurityOrigin() const
-{
- return getExecutionContext()->getSecurityOrigin();
-}
-
-ExecutionContext* MIDIAccessInitializer::getExecutionContext() const
-{
- return getScriptState()->getExecutionContext();
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698