601d7e3ee5a5aeb71eb45106ef1153bc6be9e490
[WebKit-https.git] / Source / WebKit2 / 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 "PageLoadStateObserver.h"
30 #import "WKAPICast.h"
31 #import "WKNSURLExtras.h"
32 #import "WKViewInternal.h"
33 #import "WebPageGroup.h"
34 #import "WebPageProxy.h"
35 #import "WebPreferences.h"
36 #import "WebProcessPool.h"
37
38 using namespace WebKit;
39
40 @interface WKObservablePageState : NSObject <_WKObservablePageState> {
41     RefPtr<WebPageProxy> _page;
42     std::unique_ptr<PageLoadStateObserver> _observer;
43 }
44
45 @end
46
47 @implementation WKObservablePageState
48
49 - (id)initWithPage:(RefPtr<WebPageProxy>&&)page
50 {
51     if (!(self = [super init]))
52         return nil;
53
54     _page = WTFMove(page);
55     _observer = std::make_unique<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().responsivenessTimer().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 @end
104
105 id <_WKObservablePageState> WKPageCreateObservableState(WKPageRef pageRef)
106 {
107     return [[WKObservablePageState alloc] initWithPage:toImpl(pageRef)];
108 }
109
110 _WKRemoteObjectRegistry *WKPageGetObjectRegistry(WKPageRef pageRef)
111 {
112 #if WK_API_ENABLED && !TARGET_OS_IPHONE
113     return toImpl(pageRef)->remoteObjectRegistry();
114 #else
115     return nil;
116 #endif
117 }
118
119 pid_t WKPageGetProcessIdentifier(WKPageRef pageRef)
120 {
121     return toImpl(pageRef)->processIdentifier();
122 }
123
124 bool WKPageIsURLKnownHSTSHost(WKPageRef page, WKURLRef url)
125 {
126     WebPageProxy* webPageProxy = toImpl(page);
127     bool privateBrowsingEnabled = webPageProxy->pageGroup().preferences().privateBrowsingEnabled();
128
129     return webPageProxy->process().processPool().isURLKnownHSTSHost(toImpl(url)->string(), privateBrowsingEnabled);
130 }