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

Side by Side Diff: Source/modules/quota/StorageManager.cpp

Issue 1154573005: Expose Durable Storage API to script (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: ToT Created 5 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698