Index: Source/modules/permissions/Permissions.cpp |
diff --git a/Source/modules/permissions/Permissions.cpp b/Source/modules/permissions/Permissions.cpp |
index ad99d5919370ac6a17ec30974e13c1c53bb627b7..ae73fb2930f75c5724022c6a327a03e9d74d74e8 100644 |
--- a/Source/modules/permissions/Permissions.cpp |
+++ b/Source/modules/permissions/Permissions.cpp |
@@ -108,6 +108,31 @@ ScriptPromise Permissions::query(ScriptState* scriptState, const ScriptValue& ra |
return promise; |
} |
+ScriptPromise Permissions::request(ScriptState* scriptState, const ScriptValue& rawPermission) |
+{ |
+ WebPermissionClient* client = getClient(scriptState->executionContext()); |
+ if (!client) |
+ return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "In its current state, the global scope can't request permissions.")); |
+ |
+ TrackExceptionState exceptionState; |
+ PermissionDescriptor permission = NativeValueTraits<PermissionDescriptor>::nativeValue(scriptState->isolate(), rawPermission.v8Value(), exceptionState); |
+ |
+ if (exceptionState.hadException()) |
+ return ScriptPromise::reject(scriptState, v8::Exception::TypeError(v8String(scriptState->isolate(), exceptionState.message()))); |
+ |
+ RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ |
+ String name = permission.name(); |
+ WebPermissionType type = convertPermissionStringToType(name); |
+ |
+ if (handleDefaultBehaviour(scriptState, rawPermission, resolver, type, exceptionState)) |
+ return promise; |
+ |
+ client->requestPermission(type, KURL(KURL(), scriptState->executionContext()->securityOrigin()->toString()), new PermissionCallback(resolver, type)); |
+ return promise; |
+} |
+ |
ScriptPromise Permissions::revoke(ScriptState* scriptState, const ScriptValue& rawPermission) |
{ |
WebPermissionClient* client = getClient(scriptState->executionContext()); |