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 |