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

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

Issue 2129913005: Revert of Web MIDI: use mojom::blink::PermissionService directly to ask permission (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 acbe79c2a68b5c2e5d41c623a96a6174feac5e56..52a38238d8408a2825692b87cc8b98d5839b704a 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp
@@ -9,33 +9,52 @@
#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 {
using PortState = WebMIDIAccessorClient::MIDIPortState;
-using mojom::blink::PermissionName;
-using mojom::blink::PermissionStatus;
-
MIDIAccessInitializer::MIDIAccessInitializer(ScriptState* scriptState, const MIDIOptions& options)
: ScriptPromiseResolver(scriptState)
, m_options(options)
+ , m_hasBeenDisposed(false)
+ , m_permissionResolved(false)
{
+}
+
+MIDIAccessInitializer::~MIDIAccessInitializer()
+{
+ dispose();
}
void MIDIAccessInitializer::contextDestroyed()
{
- m_permissionService.reset();
+ dispose();
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()
@@ -45,28 +64,10 @@
Document* document = toDocument(getExecutionContext());
DCHECK(document);
-
- document->frame()->serviceRegistry()->connectToRemoteService(mojo::GetProxy(&m_permissionService));
-
- bool requestSysEx = m_options.hasSysex() && m_options.sysex();
- if (requestSysEx) {
- Vector<PermissionName> permissions = { PermissionName::MIDI, PermissionName::MIDI_SYSEX };
- m_permissionService->RequestPermissions(
- mojo::WTFArray<PermissionName>(std::move(permissions)),
- getExecutionContext()->getSecurityOrigin()->toString(),
- UserGestureIndicator::processingUserGesture(),
- createBaseCallback(WTF::bind(&MIDIAccessInitializer::onPermissionsUpdated, wrapPersistent(this))));
- } else {
- // TODO(toyoshim): Merge this MIDI only code path to the other one for
- // MIDI and MIDI_SYSEX. This is a workaround to pass
- // org.chromium.android_webview.test.AwPermissionManagerTest#testRequestMultiple
- // because of RequestPermissions not implemented in AndroidWebView.
- m_permissionService->RequestPermission(
- PermissionName::MIDI,
- getExecutionContext()->getSecurityOrigin()->toString(),
- UserGestureIndicator::processingUserGesture(),
- createBaseCallback(WTF::bind(&MIDIAccessInitializer::onPermissionUpdated, wrapPersistent(this))));
- }
+ if (MIDIController* controller = MIDIController::from(document->frame()))
+ controller->requestPermission(this, m_options);
+ else
+ reject(DOMException::create(SecurityError));
return promise;
}
@@ -124,35 +125,23 @@
}
}
+void MIDIAccessInitializer::resolvePermission(bool allowed)
+{
+ m_permissionResolved = true;
+ if (allowed)
+ m_accessor->startSession();
+ else
+ reject(DOMException::create(SecurityError));
+}
+
+SecurityOrigin* MIDIAccessInitializer::getSecurityOrigin() const
+{
+ return getExecutionContext()->getSecurityOrigin();
+}
+
ExecutionContext* MIDIAccessInitializer::getExecutionContext() const
{
return getScriptState()->getExecutionContext();
}
-void MIDIAccessInitializer::onPermissionsUpdated(mojo::WTFArray<PermissionStatus> statusArray)
-{
- bool allowed = true;
- for (const auto status : statusArray.storage()) {
- if (status != PermissionStatus::GRANTED) {
- allowed = false;
- break;
- }
- }
- m_permissionService.reset();
- if (allowed)
- m_accessor->startSession();
- else
- reject(DOMException::create(SecurityError));
-
-}
-
-void MIDIAccessInitializer::onPermissionUpdated(PermissionStatus status)
-{
- m_permissionService.reset();
- if (status == PermissionStatus::GRANTED)
- m_accessor->startSession();
- else
- reject(DOMException::create(SecurityError));
-}
-
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698