OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "config.h" | |
6 #include "modules/quota/StorageManager.h" | |
7 | |
8 #include "bindings/core/v8/ScriptPromiseResolver.h" | |
9 #include "core/dom/Document.h" | |
10 #include "core/dom/ExceptionCode.h" | |
11 #include "modules/permissions/Permissions.h" | |
12 #include "public/platform/Platform.h" | |
13 #include "public/platform/WebCallbacks.h" | |
14 #include "public/platform/modules/permissions/WebPermissionClient.h" | |
15 #include "public/platform/modules/permissions/WebPermissionStatus.h" | |
16 | |
17 namespace blink { | |
18 | |
19 namespace { | |
20 | |
21 class DurableStoragePermissionCallbacks final : public WebCallbacks<WebPermissio nStatus*, void> { | |
22 public: | |
23 DurableStoragePermissionCallbacks(ScriptPromiseResolver* resolver) | |
24 : m_resolver(resolver) | |
25 { | |
26 } | |
27 | |
28 void onSuccess(WebPermissionStatus* rawStatus) override | |
29 { | |
30 OwnPtr<WebPermissionStatus> status = adoptPtr(rawStatus); | |
kinuko
2015/08/11 08:53:54
nit: you should be able to pass these permission s
dgrogan
2015/08/11 19:07:51
That would be nicer, yes. I changed it locally bef
| |
31 String toReturn; | |
32 switch (*status) { | |
33 case WebPermissionStatusGranted: | |
34 toReturn = "granted"; | |
35 break; | |
36 case WebPermissionStatusDenied: | |
37 toReturn = "denied"; | |
38 break; | |
39 case WebPermissionStatusPrompt: | |
40 toReturn = "default"; | |
41 break; | |
42 } | |
43 m_resolver->resolve(toReturn); | |
44 } | |
45 void onError() override | |
46 { | |
47 ASSERT_NOT_REACHED(); | |
48 } | |
49 | |
50 private: | |
51 Persistent<ScriptPromiseResolver> m_resolver; | |
52 }; | |
53 | |
54 } // namespace | |
55 | |
56 ScriptPromise StorageManager::requestPersistent(ScriptState* scriptState) | |
57 { | |
58 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; | |
59 ScriptPromise promise = resolver->promise(); | |
60 ExecutionContext* executionContext = scriptState->executionContext(); | |
61 SecurityOrigin* securityOrigin = executionContext->securityOrigin(); | |
62 // TODO(dgrogan): Is the isUnique() check covered by the later | |
63 // isPrivilegedContext() check? If so, maybe remove it. Write a test if it | |
64 // stays. | |
65 if (securityOrigin->isUnique()) { | |
66 resolver->reject(DOMException::create(NotSupportedError)); | |
67 return promise; | |
68 } | |
69 String errorMessage; | |
70 if (!executionContext->isPrivilegedContext(errorMessage)) { | |
71 resolver->reject(DOMException::create(SecurityError, errorMessage)); | |
72 return promise; | |
73 } | |
74 ASSERT(executionContext->isDocument()); | |
75 WebPermissionClient* permissionClient = Permissions::getClient(executionCont ext); | |
76 if (!permissionClient) { | |
77 resolver->reject(DOMException::create(InvalidStateError, "In its current state, the global scope can't request permissions.")); | |
78 return promise; | |
79 } | |
80 permissionClient->requestPermission(WebPermissionTypeDurableStorage, KURL(KU RL(), scriptState->executionContext()->securityOrigin()->toString()), new Durabl eStoragePermissionCallbacks(resolver)); | |
81 | |
82 return promise; | |
83 } | |
84 | |
85 ScriptPromise StorageManager::persistentPermission(ScriptState* scriptState) | |
86 { | |
87 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; | |
88 ScriptPromise promise = resolver->promise(); | |
89 WebPermissionClient* permissionClient = Permissions::getClient(scriptState-> executionContext()); | |
90 if (!permissionClient) { | |
91 resolver->reject(DOMException::create(InvalidStateError, "In its current state, the global scope can't query permissions.")); | |
92 return promise; | |
93 } | |
94 permissionClient->queryPermission(WebPermissionTypeDurableStorage, KURL(KURL (), scriptState->executionContext()->securityOrigin()->toString()), new DurableS toragePermissionCallbacks(resolver)); | |
95 return promise; | |
96 } | |
97 | |
98 DEFINE_TRACE(StorageManager) | |
99 { | |
100 } | |
101 | |
102 } // namespace blink | |
OLD | NEW |