OSDN Git Service

Merge WebKit at r64523 : Initial merge by git.
[android-x86/external-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/WKBundleFrame.h>
29 #include <WebKit2/WKBundleInitialize.h>
30 #include <WebKit2/WKBundlePage.h>
31 #include <WebKit2/WKString.h>
32 #include <WebKit2/WKStringCF.h>
33 #include <WebKit2/WKURLCF.h>
34 #include <stdio.h>
35
36 static WKBundleRef globalBundle;
37
38 // WKBundlePageClient
39
40 void didStartProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
41 {
42 }
43
44 void didReceiveServerRedirectForProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
45 {
46 }
47
48 void didFailProvisionalLoadWithErrorForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
49 {
50 }
51
52 void didCommitLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
53 {
54 }
55
56 void didFinishLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
57 {
58 }
59
60 void didFailLoadWithErrorForFrame(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo)
61 {
62 }
63
64 void didReceiveTitleForFrame(WKBundlePageRef page, WKStringRef title, WKBundleFrameRef frame, const void *clientInfo)
65 {
66 }
67
68 void didClearWindowForFrame(WKBundlePageRef page, WKBundleFrameRef frame, JSGlobalContextRef context, JSObjectRef window, const void *clientInfo)
69 {
70     WKURLRef wkURL = WKBundleFrameCopyURL(WKBundlePageGetMainFrame(page));
71     CFURLRef cfURL = WKURLCopyCFURL(0, wkURL);
72     WKURLRelease(wkURL);
73
74     LOG(@"WKBundlePageClient - didClearWindowForFrame %@", [(NSURL *)cfURL absoluteString]);
75     CFRelease(cfURL);
76
77     WKStringRef messageName = WKStringCreateWithCFString(CFSTR("Callback"));
78     WKStringRef messageBody = WKStringCreateWithCFString(CFSTR("Window was cleared"));
79     WKBundlePostMessage(globalBundle, messageName, messageBody);
80     WKStringRelease(messageName);
81     WKStringRelease(messageBody);
82 }
83
84
85 // WKBundleClient
86
87 void didCreatePage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
88 {
89     LOG(@"WKBundleClient - didCreatePage\n");
90
91     WKBundlePageLoaderClient client = {
92         0,
93         0,
94         didStartProvisionalLoadForFrame,
95         didReceiveServerRedirectForProvisionalLoadForFrame,
96         didFailProvisionalLoadWithErrorForFrame,
97         didCommitLoadForFrame,
98         didFinishLoadForFrame,
99         didFailLoadWithErrorForFrame,
100         didReceiveTitleForFrame,
101         didClearWindowForFrame
102     };
103     WKBundlePageSetLoaderClient(page, &client);
104 }
105
106 void willDestroyPage(WKBundleRef bundle, WKBundlePageRef page, const void* clientInfo)
107 {
108     LOG(@"WKBundleClient - willDestroyPage\n");
109 }
110
111 void didRecieveMessage(WKBundleRef bundle, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo)
112 {
113     CFStringRef cfMessageName = WKStringCopyCFString(0, messageName);
114
115     WKTypeID typeID = WKGetTypeID(messageBody);
116     if (typeID == WKStringGetTypeID()) {
117         CFStringRef cfMessageBody = WKStringCopyCFString(0, (WKStringRef)messageBody);
118         LOG(@"WKBundleClient - didRecieveMessage - MessageName: %@ MessageBody %@", cfMessageName, cfMessageBody);
119         CFRelease(cfMessageBody);
120     } else {
121         LOG(@"WKBundleClient - didRecieveMessage - MessageName: %@ (MessageBody Unhandeled)\n", cfMessageName);
122     }
123
124     CFRelease(cfMessageName);
125 }
126
127 void WKBundleInitialize(WKBundleRef bundle)
128 {
129     globalBundle = bundle;
130
131     WKBundleClient client = {
132         0,
133         0,
134         didCreatePage,
135         willDestroyPage,
136         didRecieveMessage
137     };
138     WKBundleSetClient(bundle, &client);
139 }