Simplify IPC code between WebProcess and StorageProcess for serviceWorker.postMessage()
[WebKit-https.git] / Source / WebCore / workers / service / ServiceWorkerTypes.h
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 "DocumentIdentifier.h"
31 #include "ServiceWorkerIdentifier.h"
32 #include <wtf/EnumTraits.h>
33 #include <wtf/ObjectIdentifier.h>
34 #include <wtf/Variant.h>
35
36 namespace WebCore {
37
38 struct ServiceWorkerData;
39 struct ServiceWorkerClientData;
40 struct ServiceWorkerClientIdentifier;
41
42 enum class ServiceWorkerRegistrationState {
43     Installing = 0,
44     Waiting = 1,
45     Active = 2,
46 };
47
48 enum class ServiceWorkerState {
49     Installing,
50     Installed,
51     Activating,
52     Activated,
53     Redundant,
54 };
55
56 enum class ServiceWorkerClientFrameType {
57     Auxiliary,
58     TopLevel,
59     Nested,
60     None
61 };
62
63 enum class ShouldNotifyWhenResolved { No, Yes };
64
65 enum ServiceWorkerRegistrationIdentifierType { };
66 using ServiceWorkerRegistrationIdentifier = ObjectIdentifier<ServiceWorkerRegistrationIdentifierType>;
67
68 enum ServiceWorkerJobIdentifierType { };
69 using ServiceWorkerJobIdentifier = ObjectIdentifier<ServiceWorkerJobIdentifierType>;
70
71 enum SWServerToContextConnectionIdentifierType { };
72 using SWServerToContextConnectionIdentifier = ObjectIdentifier<SWServerToContextConnectionIdentifierType>;
73
74 enum SWServerConnectionIdentifierType { };
75 using SWServerConnectionIdentifier = ObjectIdentifier<SWServerConnectionIdentifierType>;
76
77 using DocumentOrWorkerIdentifier = Variant<DocumentIdentifier, ServiceWorkerIdentifier>;
78
79 using ServiceWorkerOrClientData = Variant<ServiceWorkerData, ServiceWorkerClientData>;
80 using ServiceWorkerOrClientIdentifier = Variant<ServiceWorkerIdentifier, ServiceWorkerClientIdentifier>;
81
82 } // namespace WebCore
83
84 namespace WTF {
85
86 template <> struct EnumTraits<WebCore::ServiceWorkerClientFrameType> {
87     using values = EnumValues<
88         WebCore::ServiceWorkerClientFrameType,
89         WebCore::ServiceWorkerClientFrameType::Auxiliary,
90         WebCore::ServiceWorkerClientFrameType::TopLevel,
91         WebCore::ServiceWorkerClientFrameType::Nested,
92         WebCore::ServiceWorkerClientFrameType::None
93     >;
94 };
95
96 template <> struct EnumTraits<WebCore::ServiceWorkerRegistrationState> {
97     using values = EnumValues<
98         WebCore::ServiceWorkerRegistrationState,
99         WebCore::ServiceWorkerRegistrationState::Installing,
100         WebCore::ServiceWorkerRegistrationState::Waiting,
101         WebCore::ServiceWorkerRegistrationState::Active
102     >;
103 };
104
105 template <> struct EnumTraits<WebCore::ServiceWorkerState> {
106     using values = EnumValues<
107         WebCore::ServiceWorkerState,
108         WebCore::ServiceWorkerState::Installing,
109         WebCore::ServiceWorkerState::Installed,
110         WebCore::ServiceWorkerState::Activating,
111         WebCore::ServiceWorkerState::Activated,
112         WebCore::ServiceWorkerState::Redundant
113     >;
114 };
115
116 template <> struct EnumTraits<WebCore::ShouldNotifyWhenResolved> {
117     using values = EnumValues<
118         WebCore::ShouldNotifyWhenResolved,
119         WebCore::ShouldNotifyWhenResolved::No,
120         WebCore::ShouldNotifyWhenResolved::Yes
121     >;
122 };
123
124 } // namespace WTF
125
126 #endif // ENABLE(SERVICE_WORKER)