Fix for https://bugs.webkit.org/show_bug.cgi?id=41073
[WebKit.git] / WebKitTools / MiniBrowser / mac / WebBundle / WebBundleMain.m
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 <Cocoa/Cocoa.h>
27 #include <WebKit2/WKBundle.h>
28 #include <WebKit2/WKBundleInitialize.h>
29 #include <WebKit2/WKBundlePage.h>
30 #include <WebKit2/WKString.h>
31 #include <WebKit2/WKStringCF.h>
32 #include <WebKit2/WKURLCF.h>
33 #include <stdio.h>
34
35 static WKBundleRef globalBundle;
36
37 // WKBundlePageClient
38
39 void _didStartProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
40 {
41 }
42
43 void _didReceiveServerRedirectForProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
44 {
45 }
46
47 void _didFailProvisionalLoadWithErrorForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
48 {
49 }
50
51 void _didCommitLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
52 {
53 }
54
55 void _didFinishLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
56 {
57 }
58
59 void _didFailLoadWithErrorForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
60 {
61 }
62
63 void _didReceiveTitleForFrame(WKBundlePageRef page, WKStringRef title, WKBundleFrameRef frame, const void *clientInfo)
64 {
65 }
66
67 void _didClearWindowForFrame(WKBundlePageRef page, WKBundleFrameRef frame, JSContextRef ctx, JSObjectRef window, const void *clientInfo)
68 {
69     CFURLRef cfURL = WKURLCopyCFURL(0, WKBundlePageGetMainFrameURL(page));
70     NSLog(@"WKBundlePageClient - _didClearWindowForFrame %@", [(NSURL *)cfURL absoluteString]);
71     CFRelease(cfURL);
72
73     WKStringRef message = WKStringCreateWithCFString(CFSTR("Window was cleared"));
74     WKBundlePostMessage(globalBundle, message);
75     WKStringRelease(message);
76 }
77
78
79 // WKBundleClient
80
81 void _didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
82 {
83     NSLog(@"WKBundleClient - didCreatePage\n");
84
85     WKBundlePageClient client = {
86         0,
87         0,
88         _didStartProvisionalLoadForFrame,
89         _didReceiveServerRedirectForProvisionalLoadForFrame,
90         _didFailProvisionalLoadWithErrorForFrame,
91         _didCommitLoadForFrame,
92         _didFinishLoadForFrame,
93         _didFailLoadWithErrorForFrame,
94         _didReceiveTitleForFrame,
95         _didClearWindowForFrame
96     };
97     WKBundlePageSetClient(page, &client);
98 }
99
100 void _willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
101 {
102     NSLog(@"WKBundleClient - willDestroyPage\n");
103 }
104
105 void _didRecieveMessage(WKBundleRef bundle, WKStringRef message, const void *clientInfo)
106 {
107     CFStringRef cfMessage = WKStringCopyCFString(0, message);
108     NSLog(@"WKBundleClient - didRecieveMessage %@\n", cfMessage);
109     CFRelease(cfMessage);
110 }
111
112 void WKBundleInitialize(WKBundleRef bundle)
113 {
114     globalBundle = bundle;
115
116     WKBundleClient client = {
117         0,
118         0,
119         _didCreatePage,
120         _willDestroyPage,
121         _didRecieveMessage
122     };
123     WKBundleSetClient(bundle, &client);
124 }