Unreviewed, fix iOS build with recent SDKs.
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / _WKUserContentExtensionStore.mm
1 /*
2  * Copyright (C) 2015 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 "_WKUserContentExtensionStoreInternal.h"
28
29 #import "WKContentRuleListStoreInternal.h"
30 #import "WKContentRuleListStorePrivate.h"
31 #import "WKErrorInternal.h"
32 #import "_WKUserContentExtensionStorePrivate.h"
33 #import "_WKUserContentFilterInternal.h"
34 #import "_WKUserContentFilterPrivate.h"
35 #import <string>
36
37 NSString * const _WKUserContentExtensionsDomain = @"WKErrorDomain";
38
39 static NSError *toUserContentRuleListStoreError(const NSError *error)
40 {
41     if (!error)
42         return nil;
43
44     ASSERT(error.domain == WKErrorDomain);
45     switch (error.code) {
46     case WKErrorContentRuleListStoreLookUpFailed:
47         return [NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorLookupFailed userInfo:error.userInfo];
48     case WKErrorContentRuleListStoreVersionMismatch:
49         return [NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorVersionMismatch userInfo:error.userInfo];
50     case WKErrorContentRuleListStoreCompileFailed:
51         return [NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorCompileFailed userInfo:error.userInfo];
52     case WKErrorContentRuleListStoreRemoveFailed:
53         return [NSError errorWithDomain:_WKUserContentExtensionsDomain code:_WKUserContentExtensionStoreErrorRemoveFailed userInfo:error.userInfo];
54     default:
55         RELEASE_ASSERT_NOT_REACHED();
56     }
57 }
58
59 @implementation _WKUserContentExtensionStore
60
61 + (instancetype)defaultStore
62 {
63     return [[[_WKUserContentExtensionStore alloc] _initWithWKContentRuleListStore:[WKContentRuleListStore defaultStoreWithLegacyFilename]] autorelease];
64 }
65
66 + (instancetype)storeWithURL:(NSURL *)url
67 {
68     return [[[_WKUserContentExtensionStore alloc] _initWithWKContentRuleListStore:[WKContentRuleListStore storeWithURLAndLegacyFilename:url]] autorelease];
69 }
70
71 - (void)compileContentExtensionForIdentifier:(NSString *)identifier encodedContentExtension:(NSString *)encodedContentRuleList completionHandler:(void (^)(_WKUserContentFilter *, NSError *))completionHandler
72 {
73     [_contentRuleListStore _compileContentRuleListForIdentifier:identifier encodedContentRuleList:encodedContentRuleList completionHandler:^(WKContentRuleList *contentRuleList, NSError *error) {
74         _WKUserContentFilter *contentFilter = contentRuleList ? [[[_WKUserContentFilter alloc] _initWithWKContentRuleList:contentRuleList] autorelease] : nil;
75         completionHandler(contentFilter, toUserContentRuleListStoreError(error));
76     }];
77 }
78
79 - (void)lookupContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(_WKUserContentFilter *, NSError *))completionHandler
80 {
81     [_contentRuleListStore lookUpContentRuleListForIdentifier:identifier completionHandler:^(WKContentRuleList *contentRuleList, NSError *error) {
82         _WKUserContentFilter *contentFilter = contentRuleList ? [[[_WKUserContentFilter alloc] _initWithWKContentRuleList:contentRuleList] autorelease] : nil;
83         completionHandler(contentFilter, toUserContentRuleListStoreError(error));
84     }];
85 }
86
87 - (void)removeContentExtensionForIdentifier:(NSString *)identifier completionHandler:(void (^)(NSError *))completionHandler
88 {
89     [_contentRuleListStore removeContentRuleListForIdentifier:identifier completionHandler:^(NSError *error) {
90         completionHandler(toUserContentRuleListStoreError(error));
91     }];
92 }
93
94 #pragma mark WKObject protocol implementation
95
96 - (API::Object&)_apiObject
97 {
98     return [_contentRuleListStore _apiObject];
99 }
100
101 @end
102
103 @implementation _WKUserContentExtensionStore (WKPrivate)
104
105 // For testing only.
106
107 - (void)_removeAllContentExtensions
108 {
109     [_contentRuleListStore _removeAllContentRuleLists];
110 }
111
112 - (void)_invalidateContentExtensionVersionForIdentifier:(NSString *)identifier
113 {
114     [_contentRuleListStore _invalidateContentRuleListVersionForIdentifier:identifier];
115 }
116
117 - (id)_initWithWKContentRuleListStore:(WKContentRuleListStore*)contentRuleListStore
118 {
119     self = [super init];
120     if (!self)
121         return nil;
122     
123     _contentRuleListStore = contentRuleListStore;
124     
125     return self;
126 }
127
128 - (WKContentRuleListStore *)_contentRuleListStore
129 {
130     return _contentRuleListStore.get();
131 }
132
133 @end