WKProcessPool should use secondary processes + network process
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / Cocoa / WKProcessPool.mm
1 /*
2  * Copyright (C) 2014 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 "WKProcessPoolInternal.h"
28
29 #if WK_API_ENABLED
30
31 #import "HistoryClient.h"
32 #import "ProcessModel.h"
33 #import "WKObject.h"
34 #import "WKProcessPoolConfigurationPrivate.h"
35 #import "WebCertificateInfo.h"
36 #import "WebContext.h"
37 #import <WebCore/CertificateInfo.h>
38 #import <wtf/RetainPtr.h>
39
40 #if PLATFORM(IOS)
41 #import <WebCore/WebCoreThreadSystemInterface.h>
42 #endif
43
44 @implementation WKProcessPool
45
46 - (instancetype)init
47 {
48     return [self initWithConfiguration:adoptNS([[WKProcessPoolConfiguration alloc] init]).get()];
49 }
50
51 - (instancetype)initWithConfiguration:(WKProcessPoolConfiguration *)configuration
52 {
53     if (!(self = [super init]))
54         return nil;
55
56     _configuration = adoptNS([configuration copy]);
57
58 #if PLATFORM(IOS)
59     // FIXME: Remove once <rdar://problem/15256572> is fixed.
60     InitWebCoreThreadSystemInterface();
61 #endif
62
63     String bundlePath;
64     if (NSURL *bundleURL = [_configuration _injectedBundleURL]) {
65         if (!bundleURL.isFileURL)
66             [NSException raise:NSInvalidArgumentException format:@"Injected Bundle URL must be a file URL"];
67
68         bundlePath = bundleURL.path;
69     }
70
71     API::Object::constructInWrapper<WebKit::WebContext>(self, bundlePath);
72     _context->setHistoryClient(std::make_unique<WebKit::HistoryClient>());
73     _context->setUsesNetworkProcess(true);
74     _context->setProcessModel(WebKit::ProcessModelMultipleSecondaryProcesses);
75
76     return self;
77 }
78
79 - (void)dealloc
80 {
81     _context->~WebContext();
82
83     [super dealloc];
84 }
85
86 - (NSString *)description
87 {
88     return [NSString stringWithFormat:@"<%@: %p; configuration = %@>", NSStringFromClass(self.class), self, _configuration.get()];
89 }
90
91 - (WKProcessPoolConfiguration *)configuration
92 {
93     return [[_configuration copy] autorelease];
94 }
95
96 - (API::Object&)_apiObject
97 {
98     return *_context;
99 }
100
101 @end
102
103 @implementation WKProcessPool (WKPrivate)
104
105 - (void)_setAllowsSpecificHTTPSCertificate:(NSArray *)certificateChain forHost:(NSString *)host
106 {
107     _context->allowSpecificHTTPSCertificateForHost(WebKit::WebCertificateInfo::create(WebCore::CertificateInfo((CFArrayRef)certificateChain)).get(), host);
108 }
109
110 @end
111
112 #endif // WK_API_ENABLED