[WTF] Add makeUnique<T>, which ensures T is fast-allocated, makeUnique / makeUniqueWi...
[WebKit-https.git] / Source / WebKit / UIProcess / API / C / mac / WKPagePrivateMac.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 "WKPagePrivateMac.h"
28
29 #import "FullscreenClient.h"
30 #import "PageLoadStateObserver.h"
31 #import "WKAPICast.h"
32 #import "WKNSURLExtras.h"
33 #import "WKNavigationInternal.h"
34 #import "WKViewInternal.h"
35 #import "WebPageGroup.h"
36 #import "WebPageProxy.h"
37 #import "WebPreferences.h"
38 #import "WebProcessPool.h"
39
40 @interface WKObservablePageState : NSObject <_WKObservablePageState> {
41     RefPtr<WebKit::WebPageProxy> _page;
42     std::unique_ptr<WebKit::PageLoadStateObserver> _observer;
43 }
44
45 @end
46
47 @implementation WKObservablePageState
48
49 - (id)initWithPage:(RefPtr<WebKit::WebPageProxy>&&)page
50 {
51     if (!(self = [super init]))
52         return nil;
53
54     _page = WTFMove(page);
55     _observer = makeUnique<WebKit::PageLoadStateObserver>(self, @"URL");
56     _page->pageLoadState().addObserver(*_observer);
57
58     return self;
59 }
60
61 - (void)dealloc
62 {
63     _page->pageLoadState().removeObserver(*_observer);
64
65     [super dealloc];
66 }
67
68 - (BOOL)isLoading
69 {
70     return _page->pageLoadState().isLoading();
71 }
72
73 - (NSString *)title
74 {
75     return _page->pageLoadState().title();
76 }
77
78 - (NSURL *)URL
79 {
80     return [NSURL _web_URLWithWTFString:_page->pageLoadState().activeURL()];
81 }
82
83 - (BOOL)hasOnlySecureContent
84 {
85     return _page->pageLoadState().hasOnlySecureContent();
86 }
87
88 - (BOOL)_webProcessIsResponsive
89 {
90     return _page->process().isResponsive();
91 }
92
93 - (double)estimatedProgress
94 {
95     return _page->estimatedProgress();
96 }
97
98 - (NSURL *)unreachableURL
99 {
100     return [NSURL _web_URLWithWTFString:_page->pageLoadState().unreachableURL()];
101 }
102
103 - (SecTrustRef)serverTrust
104 {
105 #if HAVE(SEC_TRUST_SERIALIZATION)
106     auto certificateInfo = _page->pageLoadState().certificateInfo();
107     if (!certificateInfo)
108         return nil;
109
110     return certificateInfo->certificateInfo().trust();
111 #else
112     return nil;
113 #endif
114 }
115
116 @end
117
118 id <_WKObservablePageState> WKPageCreateObservableState(WKPageRef pageRef)
119 {
120     return [[WKObservablePageState alloc] initWithPage:WebKit::toImpl(pageRef)];
121 }
122
123 _WKRemoteObjectRegistry *WKPageGetObjectRegistry(WKPageRef pageRef)
124 {
125 #if PLATFORM(MAC)
126     return WebKit::toImpl(pageRef)->remoteObjectRegistry();
127 #else
128     return nil;
129 #endif
130 }
131
132 bool WKPageIsURLKnownHSTSHost(WKPageRef page, WKURLRef url)
133 {
134     WebKit::WebPageProxy* webPageProxy = WebKit::toImpl(page);
135     bool privateBrowsingEnabled = webPageProxy->pageGroup().preferences().privateBrowsingEnabled();
136
137     return webPageProxy->process().processPool().isURLKnownHSTSHost(WebKit::toImpl(url)->string(), privateBrowsingEnabled);
138 }
139
140 WKNavigation *WKPageLoadURLRequestReturningNavigation(WKPageRef pageRef, WKURLRequestRef urlRequestRef)
141 {
142     auto resourceRequest = WebKit::toImpl(urlRequestRef)->resourceRequest();
143     return WebKit::wrapper(WebKit::toImpl(pageRef)->loadRequest(WTFMove(resourceRequest)));
144 }
145
146 WKNavigation *WKPageLoadFileReturningNavigation(WKPageRef pageRef, WKURLRef fileURL, WKURLRef resourceDirectoryURL)
147 {
148     return WebKit::wrapper(WebKit::toImpl(pageRef)->loadFile(WebKit::toWTFString(fileURL), WebKit::toWTFString(resourceDirectoryURL)));
149 }
150
151 #if PLATFORM(MAC)
152 bool WKPageIsPlayingVideoInEnhancedFullscreen(WKPageRef pageRef)
153 {
154     return WebKit::toImpl(pageRef)->isPlayingVideoInEnhancedFullscreen();
155 }
156 #endif
157
158 void WKPageSetFullscreenDelegate(WKPageRef page, id <_WKFullscreenDelegate> delegate)
159 {
160 #if ENABLE(FULLSCREEN_API)
161     downcast<WebKit::FullscreenClient>(WebKit::toImpl(page)->fullscreenClient()).setDelegate(delegate);
162 #endif
163 }
164
165 id <_WKFullscreenDelegate> WKPageGetFullscreenDelegate(WKPageRef page)
166 {
167 #if ENABLE(FULLSCREEN_API)
168     return downcast<WebKit::FullscreenClient>(WebKit::toImpl(page)->fullscreenClient()).delegate().autorelease();
169 #else
170     return nil;
171 #endif
172 }
173