| 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 case blink::WebServiceWorkerStateActive: | 130 case blink::WebServiceWorkerStateActive: |
| 131 return active; | 131 return active; |
| 132 case blink::WebServiceWorkerStateDeactivated: | 132 case blink::WebServiceWorkerStateDeactivated: |
| 133 return deactivated; | 133 return deactivated; |
| 134 default: | 134 default: |
| 135 ASSERT_NOT_REACHED(); | 135 ASSERT_NOT_REACHED(); |
| 136 return nullAtom; | 136 return nullAtom; |
| 137 } | 137 } |
| 138 } | 138 } |
| 139 | 139 |
| 140 PassRefPtr<ServiceWorker> ServiceWorker::from(ScriptState* scriptState, WebType*
worker) |
| 141 { |
| 142 blink::WebServiceWorkerProxy* proxy = worker->proxy(); |
| 143 ServiceWorker* existingServiceWorker = proxy ? proxy->unwrap() : 0; |
| 144 if (existingServiceWorker) { |
| 145 ASSERT(existingServiceWorker->executionContext() == scriptState->executi
onContext()); |
| 146 return existingServiceWorker; |
| 147 } |
| 148 |
| 149 return create(scriptState->executionContext(), adoptPtr(worker)); |
| 150 } |
| 151 |
| 140 PassRefPtr<ServiceWorker> ServiceWorker::from(ScriptPromiseResolverWithContext*
resolver, WebType* worker) | 152 PassRefPtr<ServiceWorker> ServiceWorker::from(ScriptPromiseResolverWithContext*
resolver, WebType* worker) |
| 141 { | 153 { |
| 154 RefPtr<ServiceWorker> serviceWorker = ServiceWorker::from(resolver->scriptSt
ate(), worker); |
| 155 |
| 142 ScriptState::Scope scope(resolver->scriptState()); | 156 ScriptState::Scope scope(resolver->scriptState()); |
| 143 RefPtr<ServiceWorker> serviceWorker = create(resolver->scriptState()->execut
ionContext(), adoptPtr(worker)); | |
| 144 serviceWorker->waitOnPromise(resolver->promise()); | 157 serviceWorker->waitOnPromise(resolver->promise()); |
| 158 |
| 145 return serviceWorker; | 159 return serviceWorker; |
| 146 } | 160 } |
| 147 | 161 |
| 148 void ServiceWorker::onPromiseResolved() | 162 void ServiceWorker::onPromiseResolved() |
| 149 { | 163 { |
| 150 ASSERT(m_isPromisePending); | 164 ASSERT(m_isPromisePending); |
| 151 m_isPromisePending = false; | 165 m_isPromisePending = false; |
| 152 m_outerWorker->proxyReadyChanged(); | 166 m_outerWorker->proxyReadyChanged(); |
| 153 } | 167 } |
| 154 | 168 |
| 155 void ServiceWorker::waitOnPromise(ScriptPromise promise) | 169 void ServiceWorker::waitOnPromise(ScriptPromise promise) |
| 156 { | 170 { |
| 157 ASSERT(!m_isPromisePending); | 171 ASSERT(!m_isPromisePending); |
| 158 m_isPromisePending = true; | 172 m_isPromisePending = true; |
| 159 m_outerWorker->proxyReadyChanged(); | 173 m_outerWorker->proxyReadyChanged(); |
| 160 promise.then(ThenFunction::create(this)); | 174 promise.then(ThenFunction::create(this)); |
| 161 } | 175 } |
| 162 | 176 |
| 163 PassRefPtr<ServiceWorker> ServiceWorker::create(ExecutionContext* executionConte
xt, PassOwnPtr<blink::WebServiceWorker> outerWorker) | 177 PassRefPtr<ServiceWorker> ServiceWorker::create(ExecutionContext* executionConte
xt, PassOwnPtr<blink::WebServiceWorker> outerWorker) |
| 164 { | 178 { |
| 165 RefPtr<ServiceWorker> worker = adoptRef(new ServiceWorker(executionContext,
outerWorker)); | 179 RefPtr<ServiceWorker> worker = adoptRef(new ServiceWorker(executionContext,
outerWorker)); |
| 166 worker->suspendIfNeeded(); | 180 worker->suspendIfNeeded(); |
| 167 return worker.release(); | 181 return worker.release(); |
| 168 } | 182 } |
| 169 | 183 |
| 170 ServiceWorker::ServiceWorker(ExecutionContext* executionContext, PassOwnPtr<blin
k::WebServiceWorker> worker) | 184 ServiceWorker::ServiceWorker(ExecutionContext* executionContext, PassOwnPtr<blin
k::WebServiceWorker> worker) |
| 171 : AbstractWorker(executionContext) | 185 : AbstractWorker(executionContext) |
| 186 , WebServiceWorkerProxy(this) |
| 172 , m_outerWorker(worker) | 187 , m_outerWorker(worker) |
| 173 , m_isPromisePending(false) | 188 , m_isPromisePending(false) |
| 174 { | 189 { |
| 175 ScriptWrappable::init(this); | 190 ScriptWrappable::init(this); |
| 176 ASSERT(m_outerWorker); | 191 ASSERT(m_outerWorker); |
| 177 m_outerWorker->setProxy(this); | 192 m_outerWorker->setProxy(this); |
| 178 } | 193 } |
| 179 | 194 |
| 180 } // namespace WebCore | 195 } // namespace WebCore |
| OLD | NEW |