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

Unified Diff: Source/modules/permissions/Permissions.cpp

Issue 1236003004: blink: permissions: add plumbing to request permissions (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@permissions
Patch Set: Rebase Created 5 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: 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());

Powered by Google App Engine
This is Rietveld 408576698