OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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/quota/StorageManager.h" | 5 #include "modules/quota/StorageManager.h" |
6 | 6 |
7 #include "bindings/core/v8/ScriptPromiseResolver.h" | 7 #include "bindings/core/v8/ScriptPromiseResolver.h" |
8 #include "bindings/modules/v8/V8StorageEstimate.h" | 8 #include "bindings/modules/v8/V8StorageEstimate.h" |
9 #include "core/dom/DOMException.h" | 9 #include "core/dom/DOMException.h" |
10 #include "core/dom/Document.h" | 10 #include "core/dom/Document.h" |
11 #include "core/dom/ExceptionCode.h" | 11 #include "core/dom/ExceptionCode.h" |
| 12 #include "core/dom/ExecutionContext.h" |
12 #include "modules/permissions/PermissionUtils.h" | 13 #include "modules/permissions/PermissionUtils.h" |
13 #include "modules/quota/StorageEstimate.h" | 14 #include "modules/quota/StorageEstimate.h" |
14 #include "platform/StorageQuotaCallbacks.h" | 15 #include "platform/StorageQuotaCallbacks.h" |
15 #include "platform/UserGestureIndicator.h" | 16 #include "platform/UserGestureIndicator.h" |
16 #include "platform/wtf/Functional.h" | 17 #include "platform/wtf/Functional.h" |
17 #include "public/platform/Platform.h" | 18 #include "public/platform/Platform.h" |
18 | 19 |
19 namespace blink { | 20 namespace blink { |
20 | 21 |
21 using mojom::blink::PermissionName; | 22 using mojom::blink::PermissionName; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 | 57 |
57 private: | 58 private: |
58 Member<ScriptPromiseResolver> resolver_; | 59 Member<ScriptPromiseResolver> resolver_; |
59 }; | 60 }; |
60 | 61 |
61 } // namespace | 62 } // namespace |
62 | 63 |
63 ScriptPromise StorageManager::persist(ScriptState* script_state) { | 64 ScriptPromise StorageManager::persist(ScriptState* script_state) { |
64 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); | 65 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); |
65 ScriptPromise promise = resolver->Promise(); | 66 ScriptPromise promise = resolver->Promise(); |
66 ExecutionContext* execution_context = script_state->GetExecutionContext(); | 67 ExecutionContext* execution_context = ExecutionContext::From(script_state); |
67 DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL | 68 DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL |
68 SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); | 69 SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); |
69 if (security_origin->IsUnique()) { | 70 if (security_origin->IsUnique()) { |
70 resolver->Reject(V8ThrowException::CreateTypeError( | 71 resolver->Reject(V8ThrowException::CreateTypeError( |
71 script_state->GetIsolate(), kUniqueOriginErrorMessage)); | 72 script_state->GetIsolate(), kUniqueOriginErrorMessage)); |
72 return promise; | 73 return promise; |
73 } | 74 } |
74 | 75 |
75 DCHECK(execution_context->IsDocument()); | 76 DCHECK(execution_context->IsDocument()); |
76 PermissionService* permission_service = | 77 PermissionService* permission_service = |
77 GetPermissionService(script_state->GetExecutionContext()); | 78 GetPermissionService(ExecutionContext::From(script_state)); |
78 if (!permission_service) { | 79 if (!permission_service) { |
79 resolver->Reject(DOMException::Create( | 80 resolver->Reject(DOMException::Create( |
80 kInvalidStateError, | 81 kInvalidStateError, |
81 "In its current state, the global scope can't request permissions.")); | 82 "In its current state, the global scope can't request permissions.")); |
82 return promise; | 83 return promise; |
83 } | 84 } |
84 permission_service->RequestPermission( | 85 permission_service->RequestPermission( |
85 CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE), | 86 CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE), |
86 script_state->GetExecutionContext()->GetSecurityOrigin(), | 87 ExecutionContext::From(script_state)->GetSecurityOrigin(), |
87 UserGestureIndicator::ProcessingUserGesture(), | 88 UserGestureIndicator::ProcessingUserGesture(), |
88 ConvertToBaseCallback( | 89 ConvertToBaseCallback( |
89 WTF::Bind(&StorageManager::PermissionRequestComplete, | 90 WTF::Bind(&StorageManager::PermissionRequestComplete, |
90 WrapPersistent(this), WrapPersistent(resolver)))); | 91 WrapPersistent(this), WrapPersistent(resolver)))); |
91 | 92 |
92 return promise; | 93 return promise; |
93 } | 94 } |
94 | 95 |
95 ScriptPromise StorageManager::persisted(ScriptState* script_state) { | 96 ScriptPromise StorageManager::persisted(ScriptState* script_state) { |
96 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); | 97 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); |
97 ScriptPromise promise = resolver->Promise(); | 98 ScriptPromise promise = resolver->Promise(); |
98 ExecutionContext* execution_context = script_state->GetExecutionContext(); | 99 ExecutionContext* execution_context = ExecutionContext::From(script_state); |
99 DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL | 100 DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL |
100 SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); | 101 SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); |
101 if (security_origin->IsUnique()) { | 102 if (security_origin->IsUnique()) { |
102 resolver->Reject(V8ThrowException::CreateTypeError( | 103 resolver->Reject(V8ThrowException::CreateTypeError( |
103 script_state->GetIsolate(), kUniqueOriginErrorMessage)); | 104 script_state->GetIsolate(), kUniqueOriginErrorMessage)); |
104 return promise; | 105 return promise; |
105 } | 106 } |
106 | 107 |
107 PermissionService* permission_service = | 108 PermissionService* permission_service = |
108 GetPermissionService(script_state->GetExecutionContext()); | 109 GetPermissionService(ExecutionContext::From(script_state)); |
109 if (!permission_service) { | 110 if (!permission_service) { |
110 resolver->Reject(DOMException::Create( | 111 resolver->Reject(DOMException::Create( |
111 kInvalidStateError, | 112 kInvalidStateError, |
112 "In its current state, the global scope can't query permissions.")); | 113 "In its current state, the global scope can't query permissions.")); |
113 return promise; | 114 return promise; |
114 } | 115 } |
115 permission_service->HasPermission( | 116 permission_service->HasPermission( |
116 CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE), | 117 CreatePermissionDescriptor(PermissionName::DURABLE_STORAGE), |
117 script_state->GetExecutionContext()->GetSecurityOrigin(), | 118 ExecutionContext::From(script_state)->GetSecurityOrigin(), |
118 ConvertToBaseCallback( | 119 ConvertToBaseCallback( |
119 WTF::Bind(&StorageManager::PermissionRequestComplete, | 120 WTF::Bind(&StorageManager::PermissionRequestComplete, |
120 WrapPersistent(this), WrapPersistent(resolver)))); | 121 WrapPersistent(this), WrapPersistent(resolver)))); |
121 return promise; | 122 return promise; |
122 } | 123 } |
123 | 124 |
124 ScriptPromise StorageManager::estimate(ScriptState* script_state) { | 125 ScriptPromise StorageManager::estimate(ScriptState* script_state) { |
125 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); | 126 ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); |
126 ScriptPromise promise = resolver->Promise(); | 127 ScriptPromise promise = resolver->Promise(); |
127 ExecutionContext* execution_context = script_state->GetExecutionContext(); | 128 ExecutionContext* execution_context = ExecutionContext::From(script_state); |
128 DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL | 129 DCHECK(execution_context->IsSecureContext()); // [SecureContext] in IDL |
129 SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); | 130 SecurityOrigin* security_origin = execution_context->GetSecurityOrigin(); |
130 if (security_origin->IsUnique()) { | 131 if (security_origin->IsUnique()) { |
131 resolver->Reject(V8ThrowException::CreateTypeError( | 132 resolver->Reject(V8ThrowException::CreateTypeError( |
132 script_state->GetIsolate(), kUniqueOriginErrorMessage)); | 133 script_state->GetIsolate(), kUniqueOriginErrorMessage)); |
133 return promise; | 134 return promise; |
134 } | 135 } |
135 | 136 |
136 KURL storage_partition = KURL(KURL(), security_origin->ToString()); | 137 KURL storage_partition = KURL(KURL(), security_origin->ToString()); |
137 Platform::Current()->QueryStorageUsageAndQuota( | 138 Platform::Current()->QueryStorageUsageAndQuota( |
(...skipping 21 matching lines...) Expand all Loading... |
159 | 160 |
160 void StorageManager::PermissionRequestComplete(ScriptPromiseResolver* resolver, | 161 void StorageManager::PermissionRequestComplete(ScriptPromiseResolver* resolver, |
161 PermissionStatus status) { | 162 PermissionStatus status) { |
162 if (!resolver->GetExecutionContext() || | 163 if (!resolver->GetExecutionContext() || |
163 resolver->GetExecutionContext()->IsContextDestroyed()) | 164 resolver->GetExecutionContext()->IsContextDestroyed()) |
164 return; | 165 return; |
165 resolver->Resolve(status == PermissionStatus::GRANTED); | 166 resolver->Resolve(status == PermissionStatus::GRANTED); |
166 } | 167 } |
167 | 168 |
168 } // namespace blink | 169 } // namespace blink |
OLD | NEW |