Unreviewed, fix iOS build with recent SDKs.
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / WKWebsiteDataRecordInternal.h
1 /*
2  * Copyright (C) 2015-2018 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 #import "WKWebsiteDataRecordPrivate.h"
27
28 #import "APIWebsiteDataRecord.h"
29 #import "WKObject.h"
30 #import <wtf/OptionSet.h>
31 #import <wtf/Optional.h>
32
33 namespace WebKit {
34
35 template<> struct WrapperTraits<API::WebsiteDataRecord> {
36     using WrapperClass = WKWebsiteDataRecord;
37 };
38
39 static inline Optional<WebsiteDataType> toWebsiteDataType(NSString *websiteDataType)
40 {
41     if ([websiteDataType isEqualToString:WKWebsiteDataTypeCookies])
42         return WebsiteDataType::Cookies;
43     if ([websiteDataType isEqualToString:WKWebsiteDataTypeFetchCache])
44         return WebsiteDataType::DOMCache;
45     if ([websiteDataType isEqualToString:WKWebsiteDataTypeDiskCache])
46         return WebsiteDataType::DiskCache;
47     if ([websiteDataType isEqualToString:WKWebsiteDataTypeMemoryCache])
48         return WebsiteDataType::MemoryCache;
49     if ([websiteDataType isEqualToString:WKWebsiteDataTypeOfflineWebApplicationCache])
50         return WebsiteDataType::OfflineWebApplicationCache;
51     if ([websiteDataType isEqualToString:WKWebsiteDataTypeSessionStorage])
52         return WebsiteDataType::SessionStorage;
53     if ([websiteDataType isEqualToString:WKWebsiteDataTypeLocalStorage])
54         return WebsiteDataType::LocalStorage;
55     if ([websiteDataType isEqualToString:WKWebsiteDataTypeWebSQLDatabases])
56         return WebsiteDataType::WebSQLDatabases;
57     if ([websiteDataType isEqualToString:WKWebsiteDataTypeIndexedDBDatabases])
58         return WebsiteDataType::IndexedDBDatabases;
59 #if ENABLE(SERVICE_WORKER)
60     if ([websiteDataType isEqualToString:WKWebsiteDataTypeServiceWorkerRegistrations])
61         return WebsiteDataType::ServiceWorkerRegistrations;
62 #endif
63     if ([websiteDataType isEqualToString:_WKWebsiteDataTypeHSTSCache])
64         return WebsiteDataType::HSTSCache;
65     if ([websiteDataType isEqualToString:_WKWebsiteDataTypeMediaKeys])
66         return WebsiteDataType::MediaKeys;
67     if ([websiteDataType isEqualToString:_WKWebsiteDataTypeSearchFieldRecentSearches])
68         return WebsiteDataType::SearchFieldRecentSearches;
69 #if ENABLE(NETSCAPE_PLUGIN_API)
70     if ([websiteDataType isEqualToString:_WKWebsiteDataTypePlugInData])
71         return WebsiteDataType::PlugInData;
72 #endif
73     if ([websiteDataType isEqualToString:_WKWebsiteDataTypeResourceLoadStatistics])
74         return WebsiteDataType::ResourceLoadStatistics;
75     if ([websiteDataType isEqualToString:_WKWebsiteDataTypeCredentials])
76         return WebsiteDataType::Credentials;
77     return WTF::nullopt;
78 }
79
80 static inline OptionSet<WebKit::WebsiteDataType> toWebsiteDataTypes(NSSet *websiteDataTypes)
81 {
82     OptionSet<WebKit::WebsiteDataType> result;
83
84     for (NSString *websiteDataType in websiteDataTypes) {
85         if (auto dataType = toWebsiteDataType(websiteDataType))
86             result.add(*dataType);
87     }
88
89     return result;
90 }
91
92 static inline RetainPtr<NSSet> toWKWebsiteDataTypes(OptionSet<WebKit::WebsiteDataType> websiteDataTypes)
93 {
94     auto wkWebsiteDataTypes = adoptNS([[NSMutableSet alloc] init]);
95
96     if (websiteDataTypes.contains(WebsiteDataType::Cookies))
97         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeCookies];
98     if (websiteDataTypes.contains(WebsiteDataType::DiskCache))
99         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeDiskCache];
100     if (websiteDataTypes.contains(WebsiteDataType::DOMCache))
101         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeFetchCache];
102     if (websiteDataTypes.contains(WebsiteDataType::MemoryCache))
103         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeMemoryCache];
104     if (websiteDataTypes.contains(WebsiteDataType::OfflineWebApplicationCache))
105         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeOfflineWebApplicationCache];
106     if (websiteDataTypes.contains(WebsiteDataType::SessionStorage))
107         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeSessionStorage];
108     if (websiteDataTypes.contains(WebsiteDataType::LocalStorage))
109         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeLocalStorage];
110     if (websiteDataTypes.contains(WebsiteDataType::WebSQLDatabases))
111         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeWebSQLDatabases];
112     if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases))
113         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeIndexedDBDatabases];
114 #if ENABLE(SERVICE_WORKER)
115     if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations))
116         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeServiceWorkerRegistrations];
117 #endif
118     if (websiteDataTypes.contains(WebsiteDataType::HSTSCache))
119         [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeHSTSCache];
120     if (websiteDataTypes.contains(WebsiteDataType::MediaKeys))
121         [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeMediaKeys];
122     if (websiteDataTypes.contains(WebsiteDataType::SearchFieldRecentSearches))
123         [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeSearchFieldRecentSearches];
124 #if ENABLE(NETSCAPE_PLUGIN_API)
125     if (websiteDataTypes.contains(WebsiteDataType::PlugInData))
126         [wkWebsiteDataTypes addObject:_WKWebsiteDataTypePlugInData];
127 #endif
128     if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics))
129         [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeResourceLoadStatistics];
130     if (websiteDataTypes.contains(WebsiteDataType::Credentials))
131         [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeCredentials];
132
133     return wkWebsiteDataTypes;
134 }
135
136 }
137
138 @interface WKWebsiteDataRecord () <WKObject> {
139 @package
140     API::ObjectStorage<API::WebsiteDataRecord> _websiteDataRecord;
141 }
142 @end