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

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

Issue 512163002: ServiceWorker: Change the return value of ServiceWorkerRegistration::unregister to boolean (3/4) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 6 years, 3 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 if (!documentOrigin->canRequest(scriptURL)) { 117 if (!documentOrigin->canRequest(scriptURL)) {
118 resolver->reject(DOMException::create(SecurityError, "The origin of the script must match the current origin.")); 118 resolver->reject(DOMException::create(SecurityError, "The origin of the script must match the current origin."));
119 return promise; 119 return promise;
120 } 120 }
121 121
122 m_provider->registerServiceWorker(patternURL, scriptURL, new CallbackPromise Adapter<ServiceWorkerRegistration, ServiceWorkerError>(resolver)); 122 m_provider->registerServiceWorker(patternURL, scriptURL, new CallbackPromise Adapter<ServiceWorkerRegistration, ServiceWorkerError>(resolver));
123 123
124 return promise; 124 return promise;
125 } 125 }
126 126
127 #ifdef DISABLE_SERVICEWORKER_UNREGISTER_RESOLVE_TO_BOOLEAN
128 class UndefinedValue {
129 public:
130 typedef WebServiceWorkerRegistration WebType;
131 static V8UndefinedType take(ScriptPromiseResolver* resolver, WebType* regist ration)
132 {
133 ASSERT(!registration); // Anything passed here will be leaked.
134 return V8UndefinedType();
135 }
136 static void dispose(WebType* registration)
137 {
138 ASSERT(!registration); // Anything passed here will be leaked.
139 }
140
141 private:
142 UndefinedValue();
143 };
144 #else
145 class BooleanValue { 127 class BooleanValue {
146 public: 128 public:
147 typedef bool WebType; 129 typedef bool WebType;
148 static bool take(ScriptPromiseResolver* resolver, WebType* boolean) 130 static bool take(ScriptPromiseResolver* resolver, WebType* boolean)
149 { 131 {
150 return *boolean; 132 return *boolean;
151 } 133 }
152 static void dispose(WebType* boolean) { } 134 static void dispose(WebType* boolean) { }
153 135
154 private: 136 private:
155 BooleanValue(); 137 BooleanValue();
156 }; 138 };
157 #endif
158 139
159 ScriptPromise ServiceWorkerContainer::unregisterServiceWorker(ScriptState* scrip tState, const String& pattern) 140 ScriptPromise ServiceWorkerContainer::unregisterServiceWorker(ScriptState* scrip tState, const String& pattern)
160 { 141 {
161 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled()); 142 ASSERT(RuntimeEnabledFeatures::serviceWorkerEnabled());
162 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); 143 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState);
163 ScriptPromise promise = resolver->promise(); 144 ScriptPromise promise = resolver->promise();
164 145
165 if (!m_provider) { 146 if (!m_provider) {
166 resolver->reject(DOMException::create(InvalidStateError, "No associated provider is available")); 147 resolver->reject(DOMException::create(InvalidStateError, "No associated provider is available"));
167 return promise; 148 return promise;
168 } 149 }
169 150
170 // FIXME: This should use the container's execution context, not 151 // FIXME: This should use the container's execution context, not
171 // the callers. 152 // the callers.
172 RefPtr<SecurityOrigin> documentOrigin = scriptState->executionContext()->sec urityOrigin(); 153 RefPtr<SecurityOrigin> documentOrigin = scriptState->executionContext()->sec urityOrigin();
173 String errorMessage; 154 String errorMessage;
174 if (!documentOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) { 155 if (!documentOrigin->canAccessFeatureRequiringSecureOrigin(errorMessage)) {
175 resolver->reject(DOMException::create(NotSupportedError, errorMessage)); 156 resolver->reject(DOMException::create(NotSupportedError, errorMessage));
176 return promise; 157 return promise;
177 } 158 }
178 159
179 KURL patternURL = scriptState->executionContext()->completeURL(pattern); 160 KURL patternURL = scriptState->executionContext()->completeURL(pattern);
180 patternURL.removeFragmentIdentifier(); 161 patternURL.removeFragmentIdentifier();
181 if (!pattern.isEmpty() && !documentOrigin->canRequest(patternURL)) { 162 if (!pattern.isEmpty() && !documentOrigin->canRequest(patternURL)) {
182 resolver->reject(DOMException::create(SecurityError, "The scope must mat ch the current origin.")); 163 resolver->reject(DOMException::create(SecurityError, "The scope must mat ch the current origin."));
183 return promise; 164 return promise;
184 } 165 }
185 #ifdef DISABLE_SERVICEWORKER_UNREGISTER_RESOLVE_TO_BOOLEAN
186 m_provider->unregisterServiceWorker(patternURL, new CallbackPromiseAdapter<U ndefinedValue, ServiceWorkerError>(resolver));
187 #else
188 m_provider->unregisterServiceWorker(patternURL, new CallbackPromiseAdapter<B ooleanValue, ServiceWorkerError>(resolver)); 166 m_provider->unregisterServiceWorker(patternURL, new CallbackPromiseAdapter<B ooleanValue, ServiceWorkerError>(resolver));
189 #endif
190 return promise; 167 return promise;
191 } 168 }
192 169
193 ServiceWorkerContainer::ReadyProperty* ServiceWorkerContainer::createReadyProper ty() 170 ServiceWorkerContainer::ReadyProperty* ServiceWorkerContainer::createReadyProper ty()
194 { 171 {
195 return new ReadyProperty(executionContext(), this, ReadyProperty::Ready); 172 return new ReadyProperty(executionContext(), this, ReadyProperty::Ready);
196 } 173 }
197 174
198 ScriptPromise ServiceWorkerContainer::ready(ScriptState* callerState) 175 ScriptPromise ServiceWorkerContainer::ready(ScriptState* callerState)
199 { 176 {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 m_ready = createReadyProperty(); 272 m_ready = createReadyProperty();
296 273
297 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro m(executionContext)) { 274 if (ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::fro m(executionContext)) {
298 m_provider = client->provider(); 275 m_provider = client->provider();
299 if (m_provider) 276 if (m_provider)
300 m_provider->setClient(this); 277 m_provider->setClient(this);
301 } 278 }
302 } 279 }
303 280
304 } // namespace blink 281 } // namespace blink
OLDNEW
« no previous file with comments | « LayoutTests/http/tests/serviceworker/unregister.html ('k') | Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698