Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebKit / UIProcess / API / C / WKPageGroup.cpp
1 /*
2  * Copyright (C) 2010 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 #include "config.h"
27 #include "WKPageGroup.h"
28
29 #include "APIArray.h"
30 #include "APIContentRuleList.h"
31 #include "APIUserContentWorld.h"
32 #include "APIUserScript.h"
33 #include "APIUserStyleSheet.h"
34 #include "InjectUserScriptImmediately.h"
35 #include "WKAPICast.h"
36 #include "WebPageGroup.h"
37 #include "WebPreferences.h"
38 #include "WebUserContentController.h"
39 #include "WebUserContentControllerProxy.h"
40
41 using namespace WebKit;
42
43 WKTypeID WKPageGroupGetTypeID()
44 {
45     return toAPI(WebPageGroup::APIType);
46 }
47
48 WKPageGroupRef WKPageGroupCreateWithIdentifier(WKStringRef identifier)
49 {
50     auto pageGroup = WebPageGroup::create(toWTFString(identifier));
51     return toAPI(&pageGroup.leakRef());
52 }
53
54 void WKPageGroupSetPreferences(WKPageGroupRef pageGroupRef, WKPreferencesRef preferencesRef)
55 {
56     toImpl(pageGroupRef)->setPreferences(toImpl(preferencesRef));
57 }
58
59 WKPreferencesRef WKPageGroupGetPreferences(WKPageGroupRef pageGroupRef)
60 {
61     return toAPI(&toImpl(pageGroupRef)->preferences());
62 }
63
64 WKUserContentControllerRef WKPageGroupGetUserContentController(WKPageGroupRef pageGroupRef)
65 {
66     return toAPI(&toImpl(pageGroupRef)->userContentController());
67 }
68
69 void WKPageGroupAddUserStyleSheet(WKPageGroupRef pageGroupRef, WKStringRef sourceRef, WKURLRef baseURLRef, WKArrayRef whitelistedURLPatterns, WKArrayRef blacklistedURLPatterns, WKUserContentInjectedFrames injectedFrames)
70 {
71     auto source = toWTFString(sourceRef);
72
73     if (source.isEmpty())
74         return;
75
76     auto baseURLString = toWTFString(baseURLRef);
77     auto whitelist = toImpl(whitelistedURLPatterns);
78     auto blacklist = toImpl(blacklistedURLPatterns);
79
80     Ref<API::UserStyleSheet> userStyleSheet = API::UserStyleSheet::create(WebCore::UserStyleSheet { source, (baseURLString.isEmpty() ? WTF::blankURL() :  URL(URL(), baseURLString)), whitelist ? whitelist->toStringVector() : Vector<String>(), blacklist ? blacklist->toStringVector() : Vector<String>(), toUserContentInjectedFrames(injectedFrames), WebCore::UserStyleUserLevel }, API::UserContentWorld::normalWorld());
81
82     toImpl(pageGroupRef)->userContentController().addUserStyleSheet(userStyleSheet.get());
83 }
84
85 void WKPageGroupRemoveAllUserStyleSheets(WKPageGroupRef pageGroup)
86 {
87     toImpl(pageGroup)->userContentController().removeAllUserStyleSheets();
88 }
89
90 void WKPageGroupAddUserScript(WKPageGroupRef pageGroupRef, WKStringRef sourceRef, WKURLRef baseURLRef, WKArrayRef whitelistedURLPatterns, WKArrayRef blacklistedURLPatterns, WKUserContentInjectedFrames injectedFrames, _WKUserScriptInjectionTime injectionTime)
91 {
92     auto source = toWTFString(sourceRef);
93
94     if (source.isEmpty())
95         return;
96
97     auto baseURLString = toWTFString(baseURLRef);
98     auto whitelist = toImpl(whitelistedURLPatterns);
99     auto blacklist = toImpl(blacklistedURLPatterns);
100     
101     auto url = baseURLString.isEmpty() ? WTF::blankURL() :  URL(URL(), baseURLString);
102     Ref<API::UserScript> userScript = API::UserScript::create(WebCore::UserScript { WTFMove(source), WTFMove(url), whitelist ? whitelist->toStringVector() : Vector<String>(), blacklist ? blacklist->toStringVector() : Vector<String>(), toUserScriptInjectionTime(injectionTime), toUserContentInjectedFrames(injectedFrames) }, API::UserContentWorld::normalWorld());
103     toImpl(pageGroupRef)->userContentController().addUserScript(userScript.get(), InjectUserScriptImmediately::No);
104 }
105
106 void WKPageGroupRemoveAllUserScripts(WKPageGroupRef pageGroupRef)
107 {
108     toImpl(pageGroupRef)->userContentController().removeAllUserScripts();
109 }