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

Side by Side Diff: third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.cpp

Issue 2255933002: Add PermissionDescriptor to the permissions Mojo interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@no_notification_dispatcher
Patch Set: Print the unexpected permission type. Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/webmidi/MIDIAccessInitializer.h" 5 #include "modules/webmidi/MIDIAccessInitializer.h"
6 6
7 #include "bindings/core/v8/ScriptPromise.h" 7 #include "bindings/core/v8/ScriptPromise.h"
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "core/dom/DOMException.h" 9 #include "core/dom/DOMException.h"
10 #include "core/dom/Document.h" 10 #include "core/dom/Document.h"
11 #include "core/dom/ExceptionCode.h" 11 #include "core/dom/ExceptionCode.h"
12 #include "core/frame/LocalFrame.h" 12 #include "core/frame/LocalFrame.h"
13 #include "core/frame/Navigator.h" 13 #include "core/frame/Navigator.h"
14 #include "modules/permissions/PermissionUtils.h"
14 #include "modules/webmidi/MIDIAccess.h" 15 #include "modules/webmidi/MIDIAccess.h"
15 #include "modules/webmidi/MIDIOptions.h" 16 #include "modules/webmidi/MIDIOptions.h"
16 #include "modules/webmidi/MIDIPort.h" 17 #include "modules/webmidi/MIDIPort.h"
17 #include "platform/UserGestureIndicator.h" 18 #include "platform/UserGestureIndicator.h"
18 #include "platform/mojo/MojoHelper.h" 19 #include "platform/mojo/MojoHelper.h"
19 #include "public/platform/InterfaceProvider.h" 20 #include "public/platform/InterfaceProvider.h"
20 #include "third_party/WebKit/public/platform/modules/permissions/permission.mojo m-blink.h" 21 #include "public/platform/modules/permissions/permission.mojom-blink.h"
21 22
22 namespace blink { 23 namespace blink {
23 24
24 using PortState = WebMIDIAccessorClient::MIDIPortState; 25 using PortState = WebMIDIAccessorClient::MIDIPortState;
25 26
26 using mojom::blink::PermissionName;
27 using mojom::blink::PermissionStatus; 27 using mojom::blink::PermissionStatus;
28 28
29 MIDIAccessInitializer::MIDIAccessInitializer(ScriptState* scriptState, 29 MIDIAccessInitializer::MIDIAccessInitializer(ScriptState* scriptState,
30 const MIDIOptions& options) 30 const MIDIOptions& options)
31 : ScriptPromiseResolver(scriptState), m_options(options) {} 31 : ScriptPromiseResolver(scriptState), m_options(options) {}
32 32
33 void MIDIAccessInitializer::contextDestroyed() { 33 void MIDIAccessInitializer::contextDestroyed() {
34 m_permissionService.reset(); 34 m_permissionService.reset();
35 LifecycleObserver::contextDestroyed(); 35 LifecycleObserver::contextDestroyed();
36 } 36 }
37 37
38 ScriptPromise MIDIAccessInitializer::start() { 38 ScriptPromise MIDIAccessInitializer::start() {
39 ScriptPromise promise = this->promise(); 39 ScriptPromise promise = this->promise();
40 m_accessor = MIDIAccessor::create(this); 40 m_accessor = MIDIAccessor::create(this);
41 41
42 Document* document = toDocument(getExecutionContext()); 42 connectToPermissionService(getExecutionContext(),
43 DCHECK(document); 43 mojo::GetProxy(&m_permissionService));
44 44 m_permissionService->RequestPermission(
45 document->frame()->interfaceProvider()->getInterface( 45 createMidiPermissionDescriptor(m_options.hasSysex() && m_options.sysex()),
46 mojo::GetProxy(&m_permissionService)); 46 getExecutionContext()->getSecurityOrigin(),
47
48 bool requestSysEx = m_options.hasSysex() && m_options.sysex();
49 Vector<PermissionName> permissions;
50 permissions.resize(requestSysEx ? 2 : 1);
51
52 permissions[0] = PermissionName::MIDI;
53 if (requestSysEx)
54 permissions[1] = PermissionName::MIDI_SYSEX;
55
56 m_permissionService->RequestPermissions(
57 permissions, getExecutionContext()->getSecurityOrigin(),
58 UserGestureIndicator::processingUserGesture(), 47 UserGestureIndicator::processingUserGesture(),
59 convertToBaseCallback(WTF::bind( 48 convertToBaseCallback(WTF::bind(
60 &MIDIAccessInitializer::onPermissionsUpdated, wrapPersistent(this)))); 49 &MIDIAccessInitializer::onPermissionsUpdated, wrapPersistent(this))));
61 50
62 return promise; 51 return promise;
63 } 52 }
64 53
65 void MIDIAccessInitializer::didAddInputPort(const String& id, 54 void MIDIAccessInitializer::didAddInputPort(const String& id,
66 const String& manufacturer, 55 const String& manufacturer,
67 const String& name, 56 const String& name,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 ec = NotSupportedError; 112 ec = NotSupportedError;
124 } 113 }
125 reject(DOMException::create(ec, message)); 114 reject(DOMException::create(ec, message));
126 } 115 }
127 } 116 }
128 117
129 ExecutionContext* MIDIAccessInitializer::getExecutionContext() const { 118 ExecutionContext* MIDIAccessInitializer::getExecutionContext() const {
130 return getScriptState()->getExecutionContext(); 119 return getScriptState()->getExecutionContext();
131 } 120 }
132 121
133 void MIDIAccessInitializer::onPermissionsUpdated( 122 void MIDIAccessInitializer::onPermissionsUpdated(PermissionStatus status) {
134 const Vector<PermissionStatus>& statusArray) {
135 bool allowed = true;
136 for (const auto status : statusArray) {
137 if (status != PermissionStatus::GRANTED) {
138 allowed = false;
139 break;
140 }
141 }
142 m_permissionService.reset(); 123 m_permissionService.reset();
143 if (allowed) 124 if (status == PermissionStatus::GRANTED)
144 m_accessor->startSession(); 125 m_accessor->startSession();
145 else 126 else
146 reject(DOMException::create(SecurityError)); 127 reject(DOMException::create(SecurityError));
147 } 128 }
148 129
149 void MIDIAccessInitializer::onPermissionUpdated(PermissionStatus status) { 130 void MIDIAccessInitializer::onPermissionUpdated(PermissionStatus status) {
150 m_permissionService.reset(); 131 m_permissionService.reset();
151 if (status == PermissionStatus::GRANTED) 132 if (status == PermissionStatus::GRANTED)
152 m_accessor->startSession(); 133 m_accessor->startSession();
153 else 134 else
154 reject(DOMException::create(SecurityError)); 135 reject(DOMException::create(SecurityError));
155 } 136 }
156 137
157 } // namespace blink 138 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698