| OLD | NEW |
| 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/permissions/Permissions.h" | 5 #include "modules/permissions/Permissions.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/Dictionary.h" | 7 #include "bindings/core/v8/Dictionary.h" |
| 8 #include "bindings/core/v8/Nullable.h" | 8 #include "bindings/core/v8/Nullable.h" |
| 9 #include "bindings/core/v8/ScriptPromise.h" | 9 #include "bindings/core/v8/ScriptPromise.h" |
| 10 #include "bindings/core/v8/ScriptPromiseResolver.h" | 10 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 if (!document->frame()) | 95 if (!document->frame()) |
| 96 return nullptr; | 96 return nullptr; |
| 97 PermissionController* controller = PermissionController::from(*document-
>frame()); | 97 PermissionController* controller = PermissionController::from(*document-
>frame()); |
| 98 return controller ? controller->client() : nullptr; | 98 return controller ? controller->client() : nullptr; |
| 99 } | 99 } |
| 100 return Platform::current()->permissionClient(); | 100 return Platform::current()->permissionClient(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 ScriptPromise Permissions::query(ScriptState* scriptState, const Dictionary& raw
Permission) | 103 ScriptPromise Permissions::query(ScriptState* scriptState, const Dictionary& raw
Permission) |
| 104 { | 104 { |
| 105 WebPermissionClient* client = getClient(scriptState->executionContext()); | 105 WebPermissionClient* client = getClient(scriptState->getExecutionContext()); |
| 106 if (!client) | 106 if (!client) |
| 107 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't query pe
rmissions.")); | 107 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't query pe
rmissions.")); |
| 108 | 108 |
| 109 ExceptionState exceptionState(ExceptionState::GetterContext, "query", "Perm
issions", scriptState->context()->Global(), scriptState->isolate()); | 109 ExceptionState exceptionState(ExceptionState::GetterContext, "query", "Perm
issions", scriptState->context()->Global(), scriptState->isolate()); |
| 110 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermissio
n, exceptionState); | 110 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermissio
n, exceptionState); |
| 111 if (exceptionState.hadException()) | 111 if (exceptionState.hadException()) |
| 112 return exceptionState.reject(scriptState); | 112 return exceptionState.reject(scriptState); |
| 113 | 113 |
| 114 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 114 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 115 ScriptPromise promise = resolver->promise(); | 115 ScriptPromise promise = resolver->promise(); |
| 116 | 116 |
| 117 // If the current origin is a file scheme, it will unlikely return a | 117 // If the current origin is a file scheme, it will unlikely return a |
| 118 // meaningful value because most APIs are broken on file scheme and no | 118 // meaningful value because most APIs are broken on file scheme and no |
| 119 // permission prompt will be shown even if the returned permission will most | 119 // permission prompt will be shown even if the returned permission will most |
| 120 // likely be "prompt". | 120 // likely be "prompt". |
| 121 client->queryPermission(type.get(), KURL(KURL(), scriptState->executionConte
xt()->securityOrigin()->toString()), new PermissionCallback(resolver, type.get()
)); | 121 client->queryPermission(type.get(), KURL(KURL(), scriptState->getExecutionCo
ntext()->getSecurityOrigin()->toString()), new PermissionCallback(resolver, type
.get())); |
| 122 return promise; | 122 return promise; |
| 123 } | 123 } |
| 124 | 124 |
| 125 ScriptPromise Permissions::request(ScriptState* scriptState, const Dictionary& r
awPermission) | 125 ScriptPromise Permissions::request(ScriptState* scriptState, const Dictionary& r
awPermission) |
| 126 { | 126 { |
| 127 WebPermissionClient* client = getClient(scriptState->executionContext()); | 127 WebPermissionClient* client = getClient(scriptState->getExecutionContext()); |
| 128 if (!client) | 128 if (!client) |
| 129 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't request
permissions.")); | 129 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't request
permissions.")); |
| 130 | 130 |
| 131 ExceptionState exceptionState(ExceptionState::GetterContext, "request", "Pe
rmissions", scriptState->context()->Global(), scriptState->isolate()); | 131 ExceptionState exceptionState(ExceptionState::GetterContext, "request", "Pe
rmissions", scriptState->context()->Global(), scriptState->isolate()); |
| 132 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermissio
n, exceptionState); | 132 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermissio
n, exceptionState); |
| 133 if (exceptionState.hadException()) | 133 if (exceptionState.hadException()) |
| 134 return exceptionState.reject(scriptState); | 134 return exceptionState.reject(scriptState); |
| 135 | 135 |
| 136 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 136 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 137 ScriptPromise promise = resolver->promise(); | 137 ScriptPromise promise = resolver->promise(); |
| 138 | 138 |
| 139 client->requestPermission(type.get(), KURL(KURL(), scriptState->executionCon
text()->securityOrigin()->toString()), new PermissionCallback(resolver, type.get
())); | 139 client->requestPermission(type.get(), KURL(KURL(), scriptState->getExecution
Context()->getSecurityOrigin()->toString()), new PermissionCallback(resolver, ty
pe.get())); |
| 140 return promise; | 140 return promise; |
| 141 } | 141 } |
| 142 | 142 |
| 143 ScriptPromise Permissions::revoke(ScriptState* scriptState, const Dictionary& ra
wPermission) | 143 ScriptPromise Permissions::revoke(ScriptState* scriptState, const Dictionary& ra
wPermission) |
| 144 { | 144 { |
| 145 WebPermissionClient* client = getClient(scriptState->executionContext()); | 145 WebPermissionClient* client = getClient(scriptState->getExecutionContext()); |
| 146 if (!client) | 146 if (!client) |
| 147 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't revoke p
ermissions.")); | 147 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't revoke p
ermissions.")); |
| 148 | 148 |
| 149 ExceptionState exceptionState(ExceptionState::GetterContext, "revoke", "Per
missions", scriptState->context()->Global(), scriptState->isolate()); | 149 ExceptionState exceptionState(ExceptionState::GetterContext, "revoke", "Per
missions", scriptState->context()->Global(), scriptState->isolate()); |
| 150 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermissio
n, exceptionState); | 150 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermissio
n, exceptionState); |
| 151 if (exceptionState.hadException()) | 151 if (exceptionState.hadException()) |
| 152 return exceptionState.reject(scriptState); | 152 return exceptionState.reject(scriptState); |
| 153 | 153 |
| 154 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 154 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 155 ScriptPromise promise = resolver->promise(); | 155 ScriptPromise promise = resolver->promise(); |
| 156 | 156 |
| 157 client->revokePermission(type.get(), KURL(KURL(), scriptState->executionCont
ext()->securityOrigin()->toString()), new PermissionCallback(resolver, type.get(
))); | 157 client->revokePermission(type.get(), KURL(KURL(), scriptState->getExecutionC
ontext()->getSecurityOrigin()->toString()), new PermissionCallback(resolver, typ
e.get())); |
| 158 return promise; | 158 return promise; |
| 159 } | 159 } |
| 160 | 160 |
| 161 ScriptPromise Permissions::requestAll(ScriptState* scriptState, const Vector<Dic
tionary>& rawPermissions) | 161 ScriptPromise Permissions::requestAll(ScriptState* scriptState, const Vector<Dic
tionary>& rawPermissions) |
| 162 { | 162 { |
| 163 WebPermissionClient* client = getClient(scriptState->executionContext()); | 163 WebPermissionClient* client = getClient(scriptState->getExecutionContext()); |
| 164 if (!client) | 164 if (!client) |
| 165 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't request
permissions.")); | 165 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::
create(InvalidStateError, "In its current state, the global scope can't request
permissions.")); |
| 166 | 166 |
| 167 ExceptionState exceptionState(ExceptionState::GetterContext, "request", "Pe
rmissions", scriptState->context()->Global(), scriptState->isolate()); | 167 ExceptionState exceptionState(ExceptionState::GetterContext, "request", "Pe
rmissions", scriptState->context()->Global(), scriptState->isolate()); |
| 168 OwnPtr<Vector<WebPermissionType>> internalPermissions = adoptPtr(new Vector<
WebPermissionType>()); | 168 OwnPtr<Vector<WebPermissionType>> internalPermissions = adoptPtr(new Vector<
WebPermissionType>()); |
| 169 OwnPtr<Vector<int>> callerIndexToInternalIndex = adoptPtr(new Vector<int>(ra
wPermissions.size())); | 169 OwnPtr<Vector<int>> callerIndexToInternalIndex = adoptPtr(new Vector<int>(ra
wPermissions.size())); |
| 170 for (size_t i = 0; i < rawPermissions.size(); ++i) { | 170 for (size_t i = 0; i < rawPermissions.size(); ++i) { |
| 171 const Dictionary& rawPermission = rawPermissions[i]; | 171 const Dictionary& rawPermission = rawPermissions[i]; |
| 172 | 172 |
| 173 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermi
ssion, exceptionState); | 173 Nullable<WebPermissionType> type = parsePermission(scriptState, rawPermi
ssion, exceptionState); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 184 } else { | 184 } else { |
| 185 internalIndex = it; | 185 internalIndex = it; |
| 186 } | 186 } |
| 187 callerIndexToInternalIndex->operator[](i) = internalIndex; | 187 callerIndexToInternalIndex->operator[](i) = internalIndex; |
| 188 } | 188 } |
| 189 | 189 |
| 190 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 190 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 191 ScriptPromise promise = resolver->promise(); | 191 ScriptPromise promise = resolver->promise(); |
| 192 | 192 |
| 193 WebVector<WebPermissionType> internalWebPermissions = *internalPermissions; | 193 WebVector<WebPermissionType> internalWebPermissions = *internalPermissions; |
| 194 client->requestPermissions(internalWebPermissions, KURL(KURL(), scriptState-
>executionContext()->securityOrigin()->toString()), | 194 client->requestPermissions(internalWebPermissions, KURL(KURL(), scriptState-
>getExecutionContext()->getSecurityOrigin()->toString()), |
| 195 new PermissionsCallback(resolver, internalPermissions.release(), callerI
ndexToInternalIndex.release())); | 195 new PermissionsCallback(resolver, internalPermissions.release(), callerI
ndexToInternalIndex.release())); |
| 196 return promise; | 196 return promise; |
| 197 } | 197 } |
| 198 | 198 |
| 199 } // namespace blink | 199 } // namespace blink |
| OLD | NEW |