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