| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 { | 112 { |
| 113 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled()); | 113 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled()); |
| 114 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); | 114 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 115 ScriptPromise promise = resolver->promise(); | 115 ScriptPromise promise = resolver->promise(); |
| 116 | 116 |
| 117 if (!m_provider) { | 117 if (!m_provider) { |
| 118 resolver->reject(DOMException::create(InvalidStateError, "Failed to regi
ster a ServiceWorker: The document is in an invalid state.")); | 118 resolver->reject(DOMException::create(InvalidStateError, "Failed to regi
ster a ServiceWorker: The document is in an invalid state.")); |
| 119 return promise; | 119 return promise; |
| 120 } | 120 } |
| 121 | 121 |
| 122 // FIXME: This should use the container's execution context, not | |
| 123 // the callers. | |
| 124 ExecutionContext* executionContext = scriptState->executionContext(); | 122 ExecutionContext* executionContext = scriptState->executionContext(); |
| 125 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); | 123 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); |
| 126 String errorMessage; | 124 String errorMessage; |
| 127 if (!documentOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) { | 125 if (!documentOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) { |
| 128 resolver->reject(DOMException::create(NotSupportedError, errorMessage)); | 126 resolver->reject(DOMException::create(NotSupportedError, errorMessage)); |
| 129 return promise; | 127 return promise; |
| 130 } | 128 } |
| 131 | 129 |
| 132 KURL pageURL = KURL(KURL(), documentOrigin->toString()); | 130 KURL pageURL = KURL(KURL(), documentOrigin->toString()); |
| 133 if (!pageURL.protocolIsInHTTPFamily()) { | 131 if (!pageURL.protocolIsInHTTPFamily()) { |
| 134 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The URL protocol of the current origin ('" + documentOrigin->t
oString() + "') is not supported.")); | 132 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The URL protocol of the current origin ('" + documentOrigin->t
oString() + "') is not supported.")); |
| 135 return promise; | 133 return promise; |
| 136 } | 134 } |
| 137 | 135 |
| 138 KURL scriptURL = executionContext->completeURL(url); | 136 KURL scriptURL = callingExecutionContext(scriptState->isolate())->completeUR
L(url); |
| 139 scriptURL.removeFragmentIdentifier(); | 137 scriptURL.removeFragmentIdentifier(); |
| 140 if (!documentOrigin->canRequest(scriptURL)) { | 138 if (!documentOrigin->canRequest(scriptURL)) { |
| 141 RefPtr<SecurityOrigin> scriptOrigin = SecurityOrigin::create(scriptURL); | 139 RefPtr<SecurityOrigin> scriptOrigin = SecurityOrigin::create(scriptURL); |
| 142 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The origin of the provided scriptURL ('" + scriptOrigin->toStr
ing() + "') does not match the current origin ('" + documentOrigin->toString() +
"').")); | 140 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The origin of the provided scriptURL ('" + scriptOrigin->toStr
ing() + "') does not match the current origin ('" + documentOrigin->toString() +
"').")); |
| 143 return promise; | 141 return promise; |
| 144 } | 142 } |
| 145 if (!scriptURL.protocolIsInHTTPFamily()) { | 143 if (!scriptURL.protocolIsInHTTPFamily()) { |
| 146 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The URL protocol of the script ('" + scriptURL.string() + "')
is not supported.")); | 144 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The URL protocol of the script ('" + scriptURL.string() + "')
is not supported.")); |
| 147 return promise; | 145 return promise; |
| 148 } | 146 } |
| 149 | 147 |
| 150 KURL patternURL; | 148 KURL patternURL; |
| 151 if (options.scope().isNull()) | 149 if (options.scope().isNull()) |
| 152 patternURL = KURL(scriptURL, "./"); | 150 patternURL = KURL(scriptURL, "./"); |
| 153 else | 151 else |
| 154 patternURL = executionContext->completeURL(options.scope()); | 152 patternURL = callingExecutionContext(scriptState->isolate())->completeUR
L(options.scope()); |
| 155 patternURL.removeFragmentIdentifier(); | 153 patternURL.removeFragmentIdentifier(); |
| 156 | 154 |
| 157 if (!documentOrigin->canRequest(patternURL)) { | 155 if (!documentOrigin->canRequest(patternURL)) { |
| 158 RefPtr<SecurityOrigin> patternOrigin = SecurityOrigin::create(patternURL
); | 156 RefPtr<SecurityOrigin> patternOrigin = SecurityOrigin::create(patternURL
); |
| 159 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The origin of the provided scope ('" + patternOrigin->toString
() + "') does not match the current origin ('" + documentOrigin->toString() + "'
).")); | 157 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The origin of the provided scope ('" + patternOrigin->toString
() + "') does not match the current origin ('" + documentOrigin->toString() + "'
).")); |
| 160 return promise; | 158 return promise; |
| 161 } | 159 } |
| 162 if (!patternURL.protocolIsInHTTPFamily()) { | 160 if (!patternURL.protocolIsInHTTPFamily()) { |
| 163 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The URL protocol of the scope ('" + patternURL.string() + "')
is not supported.")); | 161 resolver->reject(DOMException::create(SecurityError, "Failed to register
a ServiceWorker: The URL protocol of the scope ('" + patternURL.string() + "')
is not supported.")); |
| 164 return promise; | 162 return promise; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 186 { | 184 { |
| 187 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled()); | 185 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled()); |
| 188 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); | 186 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 189 ScriptPromise promise = resolver->promise(); | 187 ScriptPromise promise = resolver->promise(); |
| 190 | 188 |
| 191 if (!m_provider) { | 189 if (!m_provider) { |
| 192 resolver->reject(DOMException::create(InvalidStateError, "Failed to get
a ServiceWorkerRegistration: The document is in an invalid state.")); | 190 resolver->reject(DOMException::create(InvalidStateError, "Failed to get
a ServiceWorkerRegistration: The document is in an invalid state.")); |
| 193 return promise; | 191 return promise; |
| 194 } | 192 } |
| 195 | 193 |
| 196 // FIXME: This should use the container's execution context, not | |
| 197 // the callers. | |
| 198 ExecutionContext* executionContext = scriptState->executionContext(); | 194 ExecutionContext* executionContext = scriptState->executionContext(); |
| 199 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); | 195 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); |
| 200 String errorMessage; | 196 String errorMessage; |
| 201 if (!documentOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) { | 197 if (!documentOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) { |
| 202 resolver->reject(DOMException::create(NotSupportedError, errorMessage)); | 198 resolver->reject(DOMException::create(NotSupportedError, errorMessage)); |
| 203 return promise; | 199 return promise; |
| 204 } | 200 } |
| 205 | 201 |
| 206 KURL pageURL = KURL(KURL(), documentOrigin->toString()); | 202 KURL pageURL = KURL(KURL(), documentOrigin->toString()); |
| 207 if (!pageURL.protocolIsInHTTPFamily()) { | 203 if (!pageURL.protocolIsInHTTPFamily()) { |
| 208 resolver->reject(DOMException::create(SecurityError, "Failed to get a Se
rviceWorkerRegistration: The URL protocol of the current origin ('" + documentOr
igin->toString() + "') is not supported.")); | 204 resolver->reject(DOMException::create(SecurityError, "Failed to get a Se
rviceWorkerRegistration: The URL protocol of the current origin ('" + documentOr
igin->toString() + "') is not supported.")); |
| 209 return promise; | 205 return promise; |
| 210 } | 206 } |
| 211 | 207 |
| 212 KURL completedURL = executionContext->completeURL(documentURL); | 208 KURL completedURL = callingExecutionContext(scriptState->isolate())->complet
eURL(documentURL); |
| 213 completedURL.removeFragmentIdentifier(); | 209 completedURL.removeFragmentIdentifier(); |
| 214 if (!documentOrigin->canRequest(completedURL)) { | 210 if (!documentOrigin->canRequest(completedURL)) { |
| 215 RefPtr<SecurityOrigin> documentURLOrigin = SecurityOrigin::create(comple
tedURL); | 211 RefPtr<SecurityOrigin> documentURLOrigin = SecurityOrigin::create(comple
tedURL); |
| 216 resolver->reject(DOMException::create(SecurityError, "Failed to get a Se
rviceWorkerRegistration: The origin of the provided documentURL ('" + documentUR
LOrigin->toString() + "') does not match the current origin ('" + documentOrigin
->toString() + "').")); | 212 resolver->reject(DOMException::create(SecurityError, "Failed to get a Se
rviceWorkerRegistration: The origin of the provided documentURL ('" + documentUR
LOrigin->toString() + "') does not match the current origin ('" + documentOrigin
->toString() + "').")); |
| 217 return promise; | 213 return promise; |
| 218 } | 214 } |
| 219 m_provider->getRegistration(completedURL, new GetRegistrationCallback(resolv
er)); | 215 m_provider->getRegistration(completedURL, new GetRegistrationCallback(resolv
er)); |
| 220 | 216 |
| 221 return promise; | 217 return promise; |
| 222 } | 218 } |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 m_ready = createReadyProperty(); | 321 m_ready = createReadyProperty(); |
| 326 | 322 |
| 327 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro
m(executionContext)) { | 323 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro
m(executionContext)) { |
| 328 m_provider = client->provider(); | 324 m_provider = client->provider(); |
| 329 if (m_provider) | 325 if (m_provider) |
| 330 m_provider->setClient(this); | 326 m_provider->setClient(this); |
| 331 } | 327 } |
| 332 } | 328 } |
| 333 | 329 |
| 334 } // namespace blink | 330 } // namespace blink |
| OLD | NEW |