Unreviewed, fix iOS build with recent SDKs.
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / WKBrowsingContextGroup.mm
1 /*
2  * Copyright (C) 2011 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 "config.h"
27 #import "WKBrowsingContextGroupInternal.h"
28 #import "WKBrowsingContextGroupPrivate.h"
29
30 #import "APIArray.h"
31 #import "APIString.h"
32 #import "WKAPICast.h"
33 #import "WKArray.h"
34 #import "WKPageGroup.h"
35 #import "WKPreferencesRef.h"
36 #import "WKRetainPtr.h"
37 #import "WKSharedAPICast.h"
38 #import "WKStringCF.h"
39 #import "WKURL.h"
40 #import "WKURLCF.h"
41 #import <wtf/Vector.h>
42
43 IGNORE_WARNINGS_BEGIN("deprecated-implementations")
44 @implementation WKBrowsingContextGroup {
45 IGNORE_WARNINGS_END
46     API::ObjectStorage<WebKit::WebPageGroup> _pageGroup;
47 }
48
49 - (void)dealloc
50 {
51     _pageGroup->~WebPageGroup();
52
53     [super dealloc];
54 }
55
56 - (id)initWithIdentifier:(NSString *)identifier
57 {
58     self = [super init];
59     if (!self)
60         return nil;
61
62     API::Object::constructInWrapper<WebKit::WebPageGroup>(self, identifier);
63
64     // Give the WKBrowsingContextGroup a identifier-less preferences, so that they
65     // don't get automatically written to the disk. The automatic writing has proven
66     // confusing to users of the API.
67     WKRetainPtr<WKPreferencesRef> preferences = adoptWK(WKPreferencesCreate());
68     WKPageGroupSetPreferences(WebKit::toAPI(_pageGroup.get()), preferences.get());
69
70     return self;
71 }
72
73 - (BOOL)allowsJavaScript
74 {
75     return WKPreferencesGetJavaScriptEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())));
76 }
77
78 - (void)setAllowsJavaScript:(BOOL)allowsJavaScript
79 {
80     WKPreferencesSetJavaScriptEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())), allowsJavaScript);
81 }
82
83 - (BOOL)allowsJavaScriptMarkup
84 {
85     return WKPreferencesGetJavaScriptMarkupEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())));
86 }
87
88 - (void)setAllowsJavaScriptMarkup:(BOOL)allowsJavaScriptMarkup
89 {
90     WKPreferencesSetJavaScriptMarkupEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())), allowsJavaScriptMarkup);
91 }
92
93 - (BOOL)allowsPlugIns
94 {
95     return WKPreferencesGetPluginsEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())));
96 }
97
98 - (void)setAllowsPlugIns:(BOOL)allowsPlugIns
99 {
100     WKPreferencesSetPluginsEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())), allowsPlugIns);
101 }
102
103 - (BOOL)privateBrowsingEnabled
104 {
105     return WKPreferencesGetPrivateBrowsingEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())));
106 }
107
108 - (void)setPrivateBrowsingEnabled:(BOOL)enablePrivateBrowsing
109 {
110     WKPreferencesSetPrivateBrowsingEnabled(WKPageGroupGetPreferences(WebKit::toAPI(_pageGroup.get())), enablePrivateBrowsing);
111 }
112
113 static WKRetainPtr<WKArrayRef> createWKArray(NSArray *array)
114 {
115     NSUInteger count = [array count];
116
117     if (!count)
118         return nullptr;
119
120     Vector<RefPtr<API::Object>> strings;
121     strings.reserveInitialCapacity(count);
122
123     for (id entry in array) {
124         if ([entry isKindOfClass:[NSString class]])
125             strings.uncheckedAppend(adoptRef(WebKit::toImpl(WKStringCreateWithCFString((__bridge CFStringRef)entry))));
126     }
127
128     return WebKit::toAPI(&API::Array::create(WTFMove(strings)).leakRef());
129 }
130
131 -(void)addUserStyleSheet:(NSString *)source baseURL:(NSURL *)baseURL whitelistedURLPatterns:(NSArray *)whitelist blacklistedURLPatterns:(NSArray *)blacklist mainFrameOnly:(BOOL)mainFrameOnly
132 {
133     if (!source)
134         CRASH();
135
136     WKRetainPtr<WKStringRef> wkSource = adoptWK(WKStringCreateWithCFString((__bridge CFStringRef)source));
137     WKRetainPtr<WKURLRef> wkBaseURL = adoptWK(WKURLCreateWithCFURL((__bridge CFURLRef)baseURL));
138     auto wkWhitelist = createWKArray(whitelist);
139     auto wkBlacklist = createWKArray(blacklist);
140     WKUserContentInjectedFrames injectedFrames = mainFrameOnly ? kWKInjectInTopFrameOnly : kWKInjectInAllFrames;
141
142     WKPageGroupAddUserStyleSheet(WebKit::toAPI(_pageGroup.get()), wkSource.get(), wkBaseURL.get(), wkWhitelist.get(), wkBlacklist.get(), injectedFrames);
143 }
144
145 - (void)removeAllUserStyleSheets
146 {
147     WKPageGroupRemoveAllUserStyleSheets(WebKit::toAPI(_pageGroup.get()));
148 }
149
150 - (void)addUserScript:(NSString *)source baseURL:(NSURL *)baseURL whitelistedURLPatterns:(NSArray *)whitelist blacklistedURLPatterns:(NSArray *)blacklist injectionTime:(_WKUserScriptInjectionTime)injectionTime mainFrameOnly:(BOOL)mainFrameOnly
151 {
152     if (!source)
153         CRASH();
154
155     WKRetainPtr<WKStringRef> wkSource = adoptWK(WKStringCreateWithCFString((__bridge CFStringRef)source));
156     WKRetainPtr<WKURLRef> wkBaseURL = adoptWK(WKURLCreateWithCFURL((__bridge CFURLRef)baseURL));
157     auto wkWhitelist = createWKArray(whitelist);
158     auto wkBlacklist = createWKArray(blacklist);
159     WKUserContentInjectedFrames injectedFrames = mainFrameOnly ? kWKInjectInTopFrameOnly : kWKInjectInAllFrames;
160
161     WKPageGroupAddUserScript(WebKit::toAPI(_pageGroup.get()), wkSource.get(), wkBaseURL.get(), wkWhitelist.get(), wkBlacklist.get(), injectedFrames, injectionTime);
162 }
163
164 - (void)removeAllUserScripts
165 {
166     WKPageGroupRemoveAllUserScripts(WebKit::toAPI(_pageGroup.get()));
167 }
168
169 #pragma mark WKObject protocol implementation
170
171 - (API::Object&)_apiObject
172 {
173     return *_pageGroup;
174 }
175
176 @end
177
178 ALLOW_DEPRECATED_DECLARATIONS_BEGIN
179 IGNORE_WARNINGS_BEGIN("deprecated-implementations")
180 @implementation WKBrowsingContextGroup (Private)
181 IGNORE_WARNINGS_END
182
183 - (WKPageGroupRef)_pageGroupRef
184 {
185     return WebKit::toAPI(_pageGroup.get());
186 }
187
188 @end
189 ALLOW_DEPRECATED_DECLARATIONS_END