WebKit2: Crash when InjectedBundlePageLoaderClient::willSendRequestForFrame returns...
[WebKit.git] / Source / WebKit2 / WebProcess / InjectedBundle / InjectedBundlePageLoaderClient.cpp
1 /*
2  * Copyright (C) 2010 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 #include "config.h"
27 #include "InjectedBundlePageLoaderClient.h"
28
29 #include "InjectedBundleScriptWorld.h"
30 #include "WKAPICast.h"
31 #include "WKBundleAPICast.h"
32 #include "WebError.h"
33 #include <wtf/text/WTFString.h>
34
35 using namespace WebCore;
36
37 namespace WebKit {
38
39 void InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
40 {
41     if (!m_client.didStartProvisionalLoadForFrame)
42         return;
43
44     WKTypeRef userDataToPass = 0;
45     m_client.didStartProvisionalLoadForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
46     userData = adoptRef(toImpl(userDataToPass));
47 }
48
49 void InjectedBundlePageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
50 {
51     if (!m_client.didReceiveServerRedirectForProvisionalLoadForFrame)
52         return;
53
54     WKTypeRef userDataToPass = 0;
55     m_client.didReceiveServerRedirectForProvisionalLoadForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
56     userData = adoptRef(toImpl(userDataToPass));
57 }
58
59 void InjectedBundlePageLoaderClient::didFailProvisionalLoadWithErrorForFrame(WebPage* page, WebFrame* frame, const ResourceError& error, RefPtr<APIObject>& userData)
60 {
61     if (!m_client.didFailProvisionalLoadWithErrorForFrame)
62         return;
63
64     WKTypeRef userDataToPass = 0;
65     m_client.didFailProvisionalLoadWithErrorForFrame(toAPI(page), toAPI(frame), toAPI(error), &userDataToPass, m_client.clientInfo);
66     userData = adoptRef(toImpl(userDataToPass));
67 }
68
69 void InjectedBundlePageLoaderClient::didCommitLoadForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
70 {
71     if (!m_client.didCommitLoadForFrame)
72         return;
73
74     WKTypeRef userDataToPass = 0;
75     m_client.didCommitLoadForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
76     userData = adoptRef(toImpl(userDataToPass));
77 }
78
79 void InjectedBundlePageLoaderClient::didFinishDocumentLoadForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
80 {
81     if (!m_client.didFinishDocumentLoadForFrame)
82         return;
83
84     WKTypeRef userDataToPass = 0;
85     m_client.didFinishDocumentLoadForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
86     userData = adoptRef(toImpl(userDataToPass));
87 }
88
89 void InjectedBundlePageLoaderClient::didFinishLoadForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
90 {
91     if (!m_client.didFinishLoadForFrame)
92         return;
93
94     WKTypeRef userDataToPass = 0;
95     m_client.didFinishLoadForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
96     userData = adoptRef(toImpl(userDataToPass));
97 }
98
99 void InjectedBundlePageLoaderClient::didFailLoadWithErrorForFrame(WebPage* page, WebFrame* frame, const ResourceError& error, RefPtr<APIObject>& userData)
100 {
101     if (!m_client.didFailLoadWithErrorForFrame)
102         return;
103
104     WKTypeRef userDataToPass = 0;
105     m_client.didFailLoadWithErrorForFrame(toAPI(page), toAPI(frame), toAPI(error), &userDataToPass, m_client.clientInfo);
106     userData = adoptRef(toImpl(userDataToPass));
107 }
108
109 void InjectedBundlePageLoaderClient::didSameDocumentNavigationForFrame(WebPage* page, WebFrame* frame, SameDocumentNavigationType type, RefPtr<APIObject>& userData)
110 {
111     if (!m_client.didSameDocumentNavigationForFrame)
112         return;
113
114     WKTypeRef userDataToPass = 0;
115     m_client.didSameDocumentNavigationForFrame(toAPI(page), toAPI(frame), toAPI(type), &userDataToPass, m_client.clientInfo);
116     userData = adoptRef(toImpl(userDataToPass));
117 }
118
119 void InjectedBundlePageLoaderClient::didReceiveTitleForFrame(WebPage* page, const String& title, WebFrame* frame, RefPtr<APIObject>& userData)
120 {
121     if (!m_client.didReceiveTitleForFrame)
122         return;
123
124     WKTypeRef userDataToPass = 0;
125     m_client.didReceiveTitleForFrame(toAPI(page), toAPI(title.impl()), toAPI(frame), &userDataToPass, m_client.clientInfo);
126     userData = adoptRef(toImpl(userDataToPass));
127 }
128
129 void InjectedBundlePageLoaderClient::didFirstLayoutForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
130 {
131     if (!m_client.didFirstLayoutForFrame)
132         return;
133
134     WKTypeRef userDataToPass = 0;
135     m_client.didFirstLayoutForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
136     userData = adoptRef(toImpl(userDataToPass));
137 }
138
139 void InjectedBundlePageLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
140 {
141     if (!m_client.didFirstVisuallyNonEmptyLayoutForFrame)
142         return;
143
144     WKTypeRef userDataToPass = 0;
145     m_client.didFirstVisuallyNonEmptyLayoutForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
146     userData = adoptRef(toImpl(userDataToPass));
147 }
148
149 void InjectedBundlePageLoaderClient::didRemoveFrameFromHierarchy(WebPage* page , WebFrame* frame, RefPtr<APIObject>& userData)
150 {
151     if (!m_client.didRemoveFrameFromHierarchy)
152         return;
153
154     WKTypeRef userDataToPass = 0;
155     m_client.didRemoveFrameFromHierarchy(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
156     userData = adoptRef(toImpl(userDataToPass));
157 }
158
159 void InjectedBundlePageLoaderClient::didDisplayInsecureContentForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
160 {
161     if (!m_client.didDisplayInsecureContentForFrame)
162         return;
163
164     WKTypeRef userDataToPass = 0;
165     m_client.didDisplayInsecureContentForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
166     userData = adoptRef(toImpl(userDataToPass));
167 }
168
169 void InjectedBundlePageLoaderClient::didRunInsecureContentForFrame(WebPage* page, WebFrame* frame, RefPtr<APIObject>& userData)
170 {
171     if (!m_client.didRunInsecureContentForFrame)
172         return;
173
174     WKTypeRef userDataToPass = 0;
175     m_client.didRunInsecureContentForFrame(toAPI(page), toAPI(frame), &userDataToPass, m_client.clientInfo);
176     userData = adoptRef(toImpl(userDataToPass));
177 }
178
179 void InjectedBundlePageLoaderClient::willSendRequestForFrame(WebPage* page, WebFrame* frame, uint64_t identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
180 {
181     if (!m_client.willSendRequestForFrame)
182         return;
183
184     RefPtr<WebURLRequest> returnedRequest = toImpl(m_client.willSendRequestForFrame(toAPI(page), toAPI(frame), identifier, toAPI(request), toAPI(redirectResponse), m_client.clientInfo));
185     if (returnedRequest)
186         request = returnedRequest->resourceRequest();
187     else
188         request = ResourceRequest();
189 }
190
191 void InjectedBundlePageLoaderClient::didClearWindowObjectForFrame(WebPage* page, WebFrame* frame, DOMWrapperWorld* world)
192 {
193     if (!m_client.didClearWindowObjectForFrame)
194         return;
195
196     m_client.didClearWindowObjectForFrame(toAPI(page), toAPI(frame), toAPI(InjectedBundleScriptWorld::getOrCreate(world).get()), m_client.clientInfo);
197 }
198
199 void InjectedBundlePageLoaderClient::didCancelClientRedirectForFrame(WebPage* page, WebFrame* frame)
200 {
201     if (!m_client.didCancelClientRedirectForFrame)
202         return;
203
204     m_client.didCancelClientRedirectForFrame(toAPI(page), toAPI(frame), m_client.clientInfo);
205 }
206
207 void InjectedBundlePageLoaderClient::willPerformClientRedirectForFrame(WebPage* page, WebFrame* frame, const String& url, double delay, double date)
208 {
209     if (!m_client.willPerformClientRedirectForFrame)
210         return;
211
212     m_client.willPerformClientRedirectForFrame(toAPI(page), toAPI(frame), toURLRef(url.impl()), delay, date, m_client.clientInfo);
213 }
214
215 void InjectedBundlePageLoaderClient::didHandleOnloadEventsForFrame(WebPage* page, WebFrame* frame)
216 {
217     if (!m_client.didHandleOnloadEventsForFrame)
218         return;
219
220     m_client.didHandleOnloadEventsForFrame(toAPI(page), toAPI(frame), m_client.clientInfo);
221 }
222
223 } // namespace WebKit