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