| 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 |