Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: Source/modules/serviceworkers/ServiceWorkerContainer.cpp

Issue 1143293003: Service Worker: Add ServiceWorkerContainer.getRegistrations() method. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Remove unused param in claim-not-using-registration.html Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 DEFINE_TRACE(ServiceWorkerContainer) 117 DEFINE_TRACE(ServiceWorkerContainer)
118 { 118 {
119 visitor->trace(m_controller); 119 visitor->trace(m_controller);
120 visitor->trace(m_ready); 120 visitor->trace(m_ready);
121 RefCountedGarbageCollectedEventTargetWithInlineData<ServiceWorkerContainer>: :trace(visitor); 121 RefCountedGarbageCollectedEventTargetWithInlineData<ServiceWorkerContainer>: :trace(visitor);
122 ContextLifecycleObserver::trace(visitor); 122 ContextLifecycleObserver::trace(visitor);
123 } 123 }
124 124
125 ScriptPromise ServiceWorkerContainer::registerServiceWorker(ScriptState* scriptS tate, const String& url, const RegistrationOptions& options) 125 ScriptPromise ServiceWorkerContainer::registerServiceWorker(ScriptState* scriptS tate, const String& url, const RegistrationOptions& options)
126 { 126 {
127 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled());
128 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 127 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
129 ScriptPromise promise = resolver->promise(); 128 ScriptPromise promise = resolver->promise();
130 129
131 if (!m_provider) { 130 if (!m_provider) {
132 resolver->reject(DOMException::create(InvalidStateError, "Failed to regi ster a ServiceWorker: The document is in an invalid state.")); 131 resolver->reject(DOMException::create(InvalidStateError, "Failed to regi ster a ServiceWorker: The document is in an invalid state."));
133 return promise; 132 return promise;
134 } 133 }
135 134
136 ExecutionContext* executionContext = scriptState->executionContext(); 135 ExecutionContext* executionContext = scriptState->executionContext();
137 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); 136 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 return promise; 175 return promise;
177 } 176 }
178 177
179 m_provider->registerServiceWorker(patternURL, scriptURL, new CallbackPromise Adapter<ServiceWorkerRegistration, ServiceWorkerError>(resolver)); 178 m_provider->registerServiceWorker(patternURL, scriptURL, new CallbackPromise Adapter<ServiceWorkerRegistration, ServiceWorkerError>(resolver));
180 179
181 return promise; 180 return promise;
182 } 181 }
183 182
184 ScriptPromise ServiceWorkerContainer::getRegistration(ScriptState* scriptState, const String& documentURL) 183 ScriptPromise ServiceWorkerContainer::getRegistration(ScriptState* scriptState, const String& documentURL)
185 { 184 {
186 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled());
187 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState); 185 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
188 ScriptPromise promise = resolver->promise(); 186 ScriptPromise promise = resolver->promise();
189 187
190 if (!m_provider) { 188 if (!m_provider) {
191 resolver->reject(DOMException::create(InvalidStateError, "Failed to get a ServiceWorkerRegistration: The document is in an invalid state.")); 189 resolver->reject(DOMException::create(InvalidStateError, "Failed to get a ServiceWorkerRegistration: The document is in an invalid state."));
192 return promise; 190 return promise;
193 } 191 }
194 192
195 ExecutionContext* executionContext = scriptState->executionContext(); 193 ExecutionContext* executionContext = scriptState->executionContext();
196 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); 194 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin();
(...skipping 14 matching lines...) Expand all
211 if (!documentOrigin->canRequest(completedURL)) { 209 if (!documentOrigin->canRequest(completedURL)) {
212 RefPtr<SecurityOrigin> documentURLOrigin = SecurityOrigin::create(comple tedURL); 210 RefPtr<SecurityOrigin> documentURLOrigin = SecurityOrigin::create(comple tedURL);
213 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() + "').")); 211 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() + "')."));
214 return promise; 212 return promise;
215 } 213 }
216 m_provider->getRegistration(completedURL, new GetRegistrationCallback(resolv er)); 214 m_provider->getRegistration(completedURL, new GetRegistrationCallback(resolv er));
217 215
218 return promise; 216 return promise;
219 } 217 }
220 218
219 ScriptPromise ServiceWorkerContainer::getRegistrations(ScriptState* scriptState)
220 {
221 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver:: create(scriptState);
222 ScriptPromise promise = resolver->promise();
223
224 if (!m_provider) {
225 resolver->reject(DOMException::create(InvalidStateError, "Failed to get ServiceWorkerRegistration objects: The document is in an invalid state."));
226 return promise;
227 }
228
229 ExecutionContext* executionContext = scriptState->executionContext();
230 RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin();
231 String errorMessage;
232 if (!executionContext->isPrivilegedContext(errorMessage)) {
233 resolver->reject(DOMException::create(NotSupportedError, errorMessage));
234 return promise;
235 }
236
237 KURL pageURL = KURL(KURL(), documentOrigin->toString());
238 if (!pageURL.protocolIsInHTTPFamily()) {
239 resolver->reject(DOMException::create(SecurityError, "Failed to get Serv iceWorkerRegistration objects: The URL protocol of the current origin ('" + docu mentOrigin->toString() + "') is not supported."));
240 return promise;
241 }
242
243 m_provider->getRegistrations(new CallbackPromiseAdapter<ServiceWorkerRegistr ationArray, ServiceWorkerError>(resolver));
244
245 return promise;
246 }
247
221 ServiceWorkerContainer::ReadyProperty* ServiceWorkerContainer::createReadyProper ty() 248 ServiceWorkerContainer::ReadyProperty* ServiceWorkerContainer::createReadyProper ty()
222 { 249 {
223 return new ReadyProperty(executionContext(), this, ReadyProperty::Ready); 250 return new ReadyProperty(executionContext(), this, ReadyProperty::Ready);
224 } 251 }
225 252
226 ScriptPromise ServiceWorkerContainer::ready(ScriptState* callerState) 253 ScriptPromise ServiceWorkerContainer::ready(ScriptState* callerState)
227 { 254 {
228 if (!executionContext()) 255 if (!executionContext())
229 return ScriptPromise(); 256 return ScriptPromise();
230 257
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 return; 314 return;
288 315
289 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro m(executionContext)) { 316 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro m(executionContext)) {
290 m_provider = client->provider(); 317 m_provider = client->provider();
291 if (m_provider) 318 if (m_provider)
292 m_provider->setClient(this); 319 m_provider->setClient(this);
293 } 320 }
294 } 321 }
295 322
296 } // namespace blink 323 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/serviceworkers/ServiceWorkerContainer.h ('k') | Source/modules/serviceworkers/ServiceWorkerContainer.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698