Unreviewed, fix iOS build with recent SDKs.
[WebKit-https.git] / Source / WebKit / UIProcess / API / Cocoa / _WKRemoteWebInspectorViewController.mm
1 /*
2  * Copyright (C) 2016 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 "_WKRemoteWebInspectorViewController.h"
28
29 #if PLATFORM(MAC)
30
31 #import "RemoteWebInspectorProxy.h"
32
33 @interface _WKRemoteWebInspectorViewController ()
34 - (void)sendMessageToBackend:(NSString *)message;
35 - (void)closeFromFrontend;
36 @end
37
38 namespace WebKit {
39
40 class _WKRemoteWebInspectorProxyClient final : public RemoteWebInspectorProxyClient {
41 public:
42     _WKRemoteWebInspectorProxyClient(_WKRemoteWebInspectorViewController *controller)
43         : m_controller(controller)
44     {
45     }
46
47     virtual ~_WKRemoteWebInspectorProxyClient()
48     {
49     }
50
51     void sendMessageToBackend(const String& message) override
52     {
53         [m_controller sendMessageToBackend:message];
54     }
55
56     void closeFromFrontend() override
57     {
58         [m_controller closeFromFrontend];
59     }
60
61 private:
62     _WKRemoteWebInspectorViewController *m_controller;
63 };
64
65 } // namespace WebKit
66
67 @implementation _WKRemoteWebInspectorViewController {
68     RefPtr<WebKit::RemoteWebInspectorProxy> m_remoteInspectorProxy;
69     std::unique_ptr<WebKit::_WKRemoteWebInspectorProxyClient> m_remoteInspectorClient;
70 }
71
72 - (instancetype)init
73 {
74     if (!(self = [super init]))
75         return nil;
76
77     m_remoteInspectorProxy = WebKit::RemoteWebInspectorProxy::create();
78     m_remoteInspectorClient = std::make_unique<WebKit::_WKRemoteWebInspectorProxyClient>(self);
79     m_remoteInspectorProxy->setClient(m_remoteInspectorClient.get());
80
81     return self;
82 }
83
84 - (NSWindow *)window
85 {
86     return m_remoteInspectorProxy->window();
87 }
88
89 - (WKWebView *)webView
90 {
91     return m_remoteInspectorProxy->webView();
92 }
93
94 static String debuggableTypeString(WKRemoteWebInspectorDebuggableType debuggableType)
95 {
96     switch (debuggableType) {
97     case WKRemoteWebInspectorDebuggableTypeJavaScript:
98         return "javascript"_s;
99     case WKRemoteWebInspectorDebuggableTypeServiceWorker:
100         return "service-worker"_s;
101     case WKRemoteWebInspectorDebuggableTypeWeb:
102         return "web"_s;
103     }
104 }
105
106 - (void)loadForDebuggableType:(WKRemoteWebInspectorDebuggableType)debuggableType backendCommandsURL:(NSURL *)backendCommandsURL
107 {
108     m_remoteInspectorProxy->load(debuggableTypeString(debuggableType), backendCommandsURL.absoluteString);
109 }
110
111 - (void)close
112 {
113     m_remoteInspectorProxy->closeFromBackend();
114 }
115
116 - (void)show
117 {
118     m_remoteInspectorProxy->show();
119 }
120
121 - (void)sendMessageToFrontend:(NSString *)message
122 {
123     m_remoteInspectorProxy->sendMessageToFrontend(message);
124 }
125
126 - (void)sendMessageToBackend:(NSString *)message
127 {
128     if (_delegate && [_delegate respondsToSelector:@selector(inspectorViewController:sendMessageToBackend:)])
129         [_delegate inspectorViewController:self sendMessageToBackend:message];
130 }
131
132 - (void)closeFromFrontend
133 {
134     if (_delegate && [_delegate respondsToSelector:@selector(inspectorViewControllerInspectorDidClose:)])
135         [_delegate inspectorViewControllerInspectorDidClose:self];
136 }
137
138 @end
139
140 #endif // PLATFORM(MAC)