| 1 | /* | 
| 2 |  * Copyright (C) 2017 Apple Inc. All rights reserved. | 
| 3 |  * | 
| 4 |  * Redistribution and use in source and binary forms, with or without | 
| 5 |  * modification, are permitted provided that the following conditions | 
| 6 |  * are met: | 
| 7 |  * 1. Redistributions of source code must retain the above copyright | 
| 8 |  *    notice, this list of conditions and the following disclaimer. | 
| 9 |  * 2. Redistributions in binary form must reproduce the above copyright | 
| 10 |  *    notice, this list of conditions and the following disclaimer in the | 
| 11 |  *    documentation and/or other materials provided with the distribution. | 
| 12 |  * | 
| 13 |  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' | 
| 14 |  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | 
| 15 |  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 
| 16 |  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS | 
| 17 |  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
| 18 |  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
| 19 |  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
| 20 |  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
| 21 |  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
| 22 |  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | 
| 23 |  * THE POSSIBILITY OF SUCH DAMAGE. | 
| 24 |  */ | 
| 25 |  | 
| 26 | #pragma once | 
| 27 |  | 
| 28 | #if ENABLE(SERVICE_WORKER) | 
| 29 |  | 
| 30 | #include "ServiceWorkerIdentifier.h" | 
| 31 | #include "ServiceWorkerTypes.h" | 
| 32 | #include <wtf/URL.h> | 
| 33 | #include "WorkerType.h" | 
| 34 |  | 
| 35 | namespace WebCore { | 
| 36 |  | 
| 37 | struct ServiceWorkerData { | 
| 38 |     ServiceWorkerIdentifier identifier; | 
| 39 |     URL scriptURL; | 
| 40 |     ServiceWorkerState state; | 
| 41 |     WorkerType type; | 
| 42 |     ServiceWorkerRegistrationIdentifier registrationIdentifier; | 
| 43 |  | 
| 44 |     ServiceWorkerData isolatedCopy() const; | 
| 45 |  | 
| 46 |     template<class Encoder> void encode(Encoder&) const; | 
| 47 |     template<class Decoder> static Optional<ServiceWorkerData> decode(Decoder&); | 
| 48 | }; | 
| 49 |  | 
| 50 | template<class Encoder> | 
| 51 | void ServiceWorkerData::encode(Encoder& encoder) const | 
| 52 | { | 
| 53 |     encoder << identifier << scriptURL << state << type << registrationIdentifier; | 
| 54 | } | 
| 55 |  | 
| 56 | template<class Decoder> | 
| 57 | Optional<ServiceWorkerData> ServiceWorkerData::decode(Decoder& decoder) | 
| 58 | { | 
| 59 |     Optional<ServiceWorkerIdentifier> identifier; | 
| 60 |     decoder >> identifier; | 
| 61 |     if (!identifier) | 
| 62 |         return WTF::nullopt; | 
| 63 |  | 
| 64 |     Optional<URL> scriptURL; | 
| 65 |     decoder >> scriptURL; | 
| 66 |     if (!scriptURL) | 
| 67 |         return WTF::nullopt; | 
| 68 |  | 
| 69 |     Optional<ServiceWorkerState> state; | 
| 70 |     decoder >> state; | 
| 71 |     if (!state) | 
| 72 |         return WTF::nullopt; | 
| 73 |  | 
| 74 |     Optional<WorkerType> type; | 
| 75 |     decoder >> type; | 
| 76 |     if (!type) | 
| 77 |         return WTF::nullopt; | 
| 78 |  | 
| 79 |     Optional<ServiceWorkerRegistrationIdentifier> registrationIdentifier; | 
| 80 |     decoder >> registrationIdentifier; | 
| 81 |     if (!registrationIdentifier) | 
| 82 |         return WTF::nullopt; | 
| 83 |  | 
| 84 |     return { { WTFMove(*identifier), WTFMove(*scriptURL), WTFMove(*state), WTFMove(*type), WTFMove(*registrationIdentifier) } }; | 
| 85 | } | 
| 86 |  | 
| 87 | } // namespace WebCore | 
| 88 |  | 
| 89 | #endif // ENABLE(SERVICE_WORKER) | 
| 90 |  |