| 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 "config.h" | 5 #include "config.h" |
| 6 #include "modules/background_sync/SyncCallbacks.h" | 6 #include "modules/background_sync/SyncCallbacks.h" |
| 7 | 7 |
| 8 #include "bindings/core/v8/ScriptPromiseResolver.h" | 8 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 9 #include "modules/background_sync/PeriodicSyncRegistration.h" | 9 #include "modules/background_sync/PeriodicSyncRegistration.h" |
| 10 #include "modules/background_sync/SyncError.h" | 10 #include "modules/background_sync/SyncError.h" |
| 11 #include "modules/background_sync/SyncRegistration.h" | 11 #include "modules/background_sync/SyncRegistration.h" |
| 12 #include "modules/serviceworkers/ServiceWorkerRegistration.h" | 12 #include "modules/serviceworkers/ServiceWorkerRegistration.h" |
| 13 #include "wtf/OwnPtr.h" | 13 #include "wtf/OwnPtr.h" |
| 14 #include "wtf/PassOwnPtr.h" | 14 #include "wtf/PassOwnPtr.h" |
| 15 | 15 |
| 16 namespace blink { | 16 namespace blink { |
| 17 | 17 |
| 18 SyncRegistrationCallbacks::SyncRegistrationCallbacks(ScriptPromiseResolver* reso
lver, ServiceWorkerRegistration* serviceWorkerRegistration) | 18 SyncRegistrationCallbacks::SyncRegistrationCallbacks(ScriptPromiseResolver* reso
lver, ServiceWorkerRegistration* serviceWorkerRegistration) |
| 19 : m_resolver(resolver) | 19 : m_resolver(resolver) |
| 20 , m_serviceWorkerRegistration(serviceWorkerRegistration) | 20 , m_serviceWorkerRegistration(serviceWorkerRegistration) |
| 21 { | 21 { |
| 22 ASSERT(m_resolver); | 22 ASSERT(m_resolver); |
| 23 ASSERT(m_serviceWorkerRegistration); | 23 ASSERT(m_serviceWorkerRegistration); |
| 24 } | 24 } |
| 25 | 25 |
| 26 SyncRegistrationCallbacks::~SyncRegistrationCallbacks() | 26 SyncRegistrationCallbacks::~SyncRegistrationCallbacks() |
| 27 { | 27 { |
| 28 } | 28 } |
| 29 | 29 |
| 30 void SyncRegistrationCallbacks::onSuccess(WebSyncRegistration* webSyncRegistrati
on) | 30 void SyncRegistrationCallbacks::onSuccess(WebPassOwnPtr<WebSyncRegistration> web
SyncRegistration) |
| 31 { | 31 { |
| 32 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 32 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 33 SyncRegistration::dispose(webSyncRegistration); | |
| 34 return; | 33 return; |
| 35 } | 34 } |
| 36 | 35 |
| 37 if (!webSyncRegistration) { | 36 OwnPtr<WebSyncRegistration> registration = webSyncRegistration.release(); |
| 37 if (!registration) { |
| 38 m_resolver->resolve(v8::Null(m_resolver->scriptState()->isolate())); | 38 m_resolver->resolve(v8::Null(m_resolver->scriptState()->isolate())); |
| 39 return; | 39 return; |
| 40 } | 40 } |
| 41 switch (webSyncRegistration->periodicity) { | 41 switch (registration->periodicity) { |
| 42 case WebSyncRegistration::PeriodicityPeriodic: | 42 case WebSyncRegistration::PeriodicityPeriodic: |
| 43 m_resolver->resolve(PeriodicSyncRegistration::take(m_resolver.get(), web
SyncRegistration, m_serviceWorkerRegistration)); | 43 m_resolver->resolve(PeriodicSyncRegistration::take(m_resolver.get(), reg
istration.release(), m_serviceWorkerRegistration)); |
| 44 break; | 44 break; |
| 45 case WebSyncRegistration::PeriodicityOneShot: | 45 case WebSyncRegistration::PeriodicityOneShot: |
| 46 m_resolver->resolve(SyncRegistration::take(m_resolver.get(), webSyncRegi
stration, m_serviceWorkerRegistration)); | 46 m_resolver->resolve(SyncRegistration::take(m_resolver.get(), registratio
n.release(), m_serviceWorkerRegistration)); |
| 47 break; | 47 break; |
| 48 } | 48 } |
| 49 } | 49 } |
| 50 | 50 |
| 51 void SyncRegistrationCallbacks::onError(WebSyncError* error) | 51 void SyncRegistrationCallbacks::onError(const WebSyncError& error) |
| 52 { | 52 { |
| 53 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 53 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 54 SyncError::dispose(error); | |
| 55 return; | 54 return; |
| 56 } | 55 } |
| 57 m_resolver->reject(SyncError::take(m_resolver.get(), error)); | 56 m_resolver->reject(SyncError::take(m_resolver.get(), error)); |
| 58 } | 57 } |
| 59 | 58 |
| 60 SyncNotifyWhenDoneCallbacks::SyncNotifyWhenDoneCallbacks(ScriptPromiseResolver*
resolver, ServiceWorkerRegistration* serviceWorkerRegistration) | 59 SyncNotifyWhenDoneCallbacks::SyncNotifyWhenDoneCallbacks(ScriptPromiseResolver*
resolver, ServiceWorkerRegistration* serviceWorkerRegistration) |
| 61 : m_resolver(resolver) | 60 : m_resolver(resolver) |
| 62 , m_serviceWorkerRegistration(serviceWorkerRegistration) | 61 , m_serviceWorkerRegistration(serviceWorkerRegistration) |
| 63 { | 62 { |
| 64 ASSERT(m_resolver); | 63 ASSERT(m_resolver); |
| 65 ASSERT(m_serviceWorkerRegistration); | 64 ASSERT(m_serviceWorkerRegistration); |
| 66 } | 65 } |
| 67 | 66 |
| 68 SyncNotifyWhenDoneCallbacks::~SyncNotifyWhenDoneCallbacks() | 67 SyncNotifyWhenDoneCallbacks::~SyncNotifyWhenDoneCallbacks() |
| 69 { | 68 { |
| 70 } | 69 } |
| 71 | 70 |
| 72 void SyncNotifyWhenDoneCallbacks::onSuccess(bool* status) | 71 void SyncNotifyWhenDoneCallbacks::onSuccess(bool status) |
| 73 { | 72 { |
| 74 OwnPtr<bool> statusPtr = adoptPtr(status); | |
| 75 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 73 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 76 return; | 74 return; |
| 77 } | 75 } |
| 78 | 76 |
| 79 m_resolver->resolve(*status); | 77 m_resolver->resolve(status); |
| 80 } | 78 } |
| 81 | 79 |
| 82 void SyncNotifyWhenDoneCallbacks::onError(WebSyncError* error) | 80 void SyncNotifyWhenDoneCallbacks::onError(const WebSyncError& error) |
| 83 { | 81 { |
| 84 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 82 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 85 SyncError::dispose(error); | |
| 86 return; | 83 return; |
| 87 } | 84 } |
| 88 m_resolver->reject(SyncError::take(m_resolver.get(), error)); | 85 m_resolver->reject(SyncError::take(m_resolver.get(), error)); |
| 89 } | 86 } |
| 90 | 87 |
| 91 SyncUnregistrationCallbacks::SyncUnregistrationCallbacks(ScriptPromiseResolver*
resolver, ServiceWorkerRegistration* serviceWorkerRegistration) | 88 SyncUnregistrationCallbacks::SyncUnregistrationCallbacks(ScriptPromiseResolver*
resolver, ServiceWorkerRegistration* serviceWorkerRegistration) |
| 92 : m_resolver(resolver) | 89 : m_resolver(resolver) |
| 93 , m_serviceWorkerRegistration(serviceWorkerRegistration) | 90 , m_serviceWorkerRegistration(serviceWorkerRegistration) |
| 94 { | 91 { |
| 95 ASSERT(m_resolver); | 92 ASSERT(m_resolver); |
| 96 ASSERT(m_serviceWorkerRegistration); | 93 ASSERT(m_serviceWorkerRegistration); |
| 97 } | 94 } |
| 98 | 95 |
| 99 SyncUnregistrationCallbacks::~SyncUnregistrationCallbacks() | 96 SyncUnregistrationCallbacks::~SyncUnregistrationCallbacks() |
| 100 { | 97 { |
| 101 } | 98 } |
| 102 | 99 |
| 103 void SyncUnregistrationCallbacks::onSuccess(bool* status) | 100 void SyncUnregistrationCallbacks::onSuccess(bool status) |
| 104 { | 101 { |
| 105 OwnPtr<bool> statusPtr = adoptPtr(status); | |
| 106 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 102 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 107 return; | 103 return; |
| 108 } | 104 } |
| 109 | 105 |
| 110 m_resolver->resolve(*status); | 106 m_resolver->resolve(status); |
| 111 } | 107 } |
| 112 | 108 |
| 113 void SyncUnregistrationCallbacks::onError(WebSyncError* error) | 109 void SyncUnregistrationCallbacks::onError(const WebSyncError& error) |
| 114 { | 110 { |
| 115 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 111 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 116 SyncError::dispose(error); | |
| 117 return; | 112 return; |
| 118 } | 113 } |
| 119 m_resolver->reject(SyncError::take(m_resolver.get(), error)); | 114 m_resolver->reject(SyncError::take(m_resolver.get(), error)); |
| 120 } | 115 } |
| 121 | 116 |
| 122 SyncGetRegistrationsCallbacks::SyncGetRegistrationsCallbacks(ScriptPromiseResolv
er* resolver, ServiceWorkerRegistration* serviceWorkerRegistration) | 117 SyncGetRegistrationsCallbacks::SyncGetRegistrationsCallbacks(ScriptPromiseResolv
er* resolver, ServiceWorkerRegistration* serviceWorkerRegistration) |
| 123 : m_resolver(resolver) | 118 : m_resolver(resolver) |
| 124 , m_serviceWorkerRegistration(serviceWorkerRegistration) | 119 , m_serviceWorkerRegistration(serviceWorkerRegistration) |
| 125 { | 120 { |
| 126 ASSERT(m_resolver); | 121 ASSERT(m_resolver); |
| 127 ASSERT(m_serviceWorkerRegistration); | 122 ASSERT(m_serviceWorkerRegistration); |
| 128 } | 123 } |
| 129 | 124 |
| 130 SyncGetRegistrationsCallbacks::~SyncGetRegistrationsCallbacks() | 125 SyncGetRegistrationsCallbacks::~SyncGetRegistrationsCallbacks() |
| 131 { | 126 { |
| 132 } | 127 } |
| 133 | 128 |
| 134 void SyncGetRegistrationsCallbacks::onSuccess(WebVector<WebSyncRegistration*>* w
ebSyncRegistrations) | 129 void SyncGetRegistrationsCallbacks::onSuccess(const WebVector<WebSyncRegistratio
n*>& webSyncRegistrations) |
| 135 { | 130 { |
| 131 Vector<OwnPtr<WebSyncRegistration>> registrations; |
| 132 for (WebSyncRegistration* r : webSyncRegistrations) { |
| 133 registrations.append(adoptPtr(r)); |
| 134 } |
| 136 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 135 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 137 if (webSyncRegistrations) { | |
| 138 for (size_t i = 0; i < webSyncRegistrations->size(); ++i) | |
| 139 SyncRegistration::dispose((*webSyncRegistrations)[i]); | |
| 140 delete (webSyncRegistrations); | |
| 141 } | |
| 142 return; | 136 return; |
| 143 } | 137 } |
| 144 | 138 |
| 145 if (!webSyncRegistrations) { | 139 if (webSyncRegistrations.size() && webSyncRegistrations[0]->periodicity == W
ebSyncRegistration::PeriodicityOneShot) { |
| 146 m_resolver->resolve(v8::Null(m_resolver->scriptState()->isolate())); | |
| 147 return; | |
| 148 } | |
| 149 | |
| 150 if (webSyncRegistrations->size() && (*webSyncRegistrations)[0]->periodicity
== WebSyncRegistration::PeriodicityOneShot) { | |
| 151 Vector<SyncRegistration*> syncRegistrations; | 140 Vector<SyncRegistration*> syncRegistrations; |
| 152 for (size_t i = 0; i < webSyncRegistrations->size(); ++i) { | 141 for (auto& r : registrations) { |
| 153 WebSyncRegistration* webSyncRegistration = (*webSyncRegistrations)[i
]; | 142 SyncRegistration* reg = SyncRegistration::take(m_resolver.get(), r.r
elease(), m_serviceWorkerRegistration); |
| 154 SyncRegistration* reg = SyncRegistration::take(m_resolver.get(), web
SyncRegistration, m_serviceWorkerRegistration); | |
| 155 syncRegistrations.append(reg); | 143 syncRegistrations.append(reg); |
| 156 } | 144 } |
| 157 delete (webSyncRegistrations); | |
| 158 m_resolver->resolve(syncRegistrations); | 145 m_resolver->resolve(syncRegistrations); |
| 159 } else { | 146 } else { |
| 160 Vector<PeriodicSyncRegistration*> syncRegistrations; | 147 Vector<PeriodicSyncRegistration*> syncRegistrations; |
| 161 for (size_t i = 0; i < webSyncRegistrations->size(); ++i) { | 148 for (auto& r : registrations) { |
| 162 WebSyncRegistration* webSyncRegistration = (*webSyncRegistrations)[i
]; | 149 PeriodicSyncRegistration* reg = PeriodicSyncRegistration::take(m_res
olver.get(), r.release(), m_serviceWorkerRegistration); |
| 163 PeriodicSyncRegistration* reg = PeriodicSyncRegistration::take(m_res
olver.get(), webSyncRegistration, m_serviceWorkerRegistration); | |
| 164 syncRegistrations.append(reg); | 150 syncRegistrations.append(reg); |
| 165 } | 151 } |
| 166 delete (webSyncRegistrations); | |
| 167 m_resolver->resolve(syncRegistrations); | 152 m_resolver->resolve(syncRegistrations); |
| 168 } | 153 } |
| 169 } | 154 } |
| 170 | 155 |
| 171 void SyncGetRegistrationsCallbacks::onError(WebSyncError* error) | 156 void SyncGetRegistrationsCallbacks::onError(const WebSyncError& error) |
| 172 { | 157 { |
| 173 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 158 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 174 SyncError::dispose(error); | |
| 175 return; | 159 return; |
| 176 } | 160 } |
| 177 m_resolver->reject(SyncError::take(m_resolver.get(), error)); | 161 m_resolver->reject(SyncError::take(m_resolver.get(), error)); |
| 178 } | 162 } |
| 179 | 163 |
| 180 SyncGetPermissionStatusCallbacks::SyncGetPermissionStatusCallbacks(ScriptPromise
Resolver* resolver, ServiceWorkerRegistration* serviceWorkerRegistration) | 164 SyncGetPermissionStatusCallbacks::SyncGetPermissionStatusCallbacks(ScriptPromise
Resolver* resolver, ServiceWorkerRegistration* serviceWorkerRegistration) |
| 181 : m_resolver(resolver) | 165 : m_resolver(resolver) |
| 182 , m_serviceWorkerRegistration(serviceWorkerRegistration) | 166 , m_serviceWorkerRegistration(serviceWorkerRegistration) |
| 183 { | 167 { |
| 184 ASSERT(m_resolver); | 168 ASSERT(m_resolver); |
| 185 ASSERT(m_serviceWorkerRegistration); | 169 ASSERT(m_serviceWorkerRegistration); |
| 186 } | 170 } |
| 187 | 171 |
| 188 SyncGetPermissionStatusCallbacks::~SyncGetPermissionStatusCallbacks() | 172 SyncGetPermissionStatusCallbacks::~SyncGetPermissionStatusCallbacks() |
| 189 { | 173 { |
| 190 } | 174 } |
| 191 | 175 |
| 192 void SyncGetPermissionStatusCallbacks::onSuccess(WebSyncPermissionStatus* status
) | 176 void SyncGetPermissionStatusCallbacks::onSuccess(WebSyncPermissionStatus status) |
| 193 { | 177 { |
| 194 OwnPtr<WebSyncPermissionStatus> statusPtr = adoptPtr(status); | |
| 195 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 178 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 196 return; | 179 return; |
| 197 } | 180 } |
| 198 | 181 |
| 199 m_resolver->resolve(permissionString(*statusPtr)); | 182 m_resolver->resolve(permissionString(status)); |
| 200 } | 183 } |
| 201 | 184 |
| 202 void SyncGetPermissionStatusCallbacks::onError(WebSyncError* error) | 185 void SyncGetPermissionStatusCallbacks::onError(const WebSyncError& error) |
| 203 { | 186 { |
| 204 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { | 187 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ
eDOMObjectsAreStopped()) { |
| 205 SyncError::dispose(error); | |
| 206 return; | 188 return; |
| 207 } | 189 } |
| 208 m_resolver->reject(SyncError::take(m_resolver.get(), error)); | 190 m_resolver->reject(SyncError::take(m_resolver.get(), error)); |
| 209 } | 191 } |
| 210 | 192 |
| 211 // static | 193 // static |
| 212 String SyncGetPermissionStatusCallbacks::permissionString(WebSyncPermissionStatu
s status) | 194 String SyncGetPermissionStatusCallbacks::permissionString(WebSyncPermissionStatu
s status) |
| 213 { | 195 { |
| 214 switch (status) { | 196 switch (status) { |
| 215 case WebSyncPermissionStatusGranted: | 197 case WebSyncPermissionStatusGranted: |
| 216 return "granted"; | 198 return "granted"; |
| 217 case WebSyncPermissionStatusDenied: | 199 case WebSyncPermissionStatusDenied: |
| 218 return "denied"; | 200 return "denied"; |
| 219 case WebSyncPermissionStatusPrompt: | 201 case WebSyncPermissionStatusPrompt: |
| 220 return "prompt"; | 202 return "prompt"; |
| 221 } | 203 } |
| 222 | 204 |
| 223 ASSERT_NOT_REACHED(); | 205 ASSERT_NOT_REACHED(); |
| 224 return "denied"; | 206 return "denied"; |
| 225 } | 207 } |
| 226 | 208 |
| 227 } // namespace blink | 209 } // namespace blink |
| OLD | NEW |