6bf3aff01facfd671bbd5887807f3f681b21b0dd
[WebKit-https.git] / WebCore / bridge / win / FrameWin.cpp
1 /*
2  * Copyright (C) 2006 Apple Computer, 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 COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #include "config.h"
27 #include "FrameWin.h"
28
29 #include "BrowserExtensionWin.h"
30 #include "Document.h"
31 #include "PlatformKeyboardEvent.h"
32 #include "KWQKHTMLSettings.h"
33 #include "render_frames.h"
34 #include "Plugin.h"
35 #include "TransferJob.h"
36 #include "FramePrivate.h"
37 #include <windows.h>
38
39 namespace WebCore {
40
41 FrameWin::FrameWin(Page* page, RenderPart* renderPart, FrameWinClient* client)
42     : Frame(page, renderPart)
43 {
44     d->m_extension = new BrowserExtensionWin(this);
45     KHTMLSettings* settings = new KHTMLSettings();
46     settings->setAutoLoadImages(true);
47     settings->setMediumFixedFontSize(16);
48     settings->setMediumFontSize(16);
49     settings->setSerifFontName("Times New Roman");
50     settings->setFixedFontName("Courier New");
51     settings->setSansSerifFontName("Arial");
52     settings->setStdFontName("Times New Roman");
53     settings->setIsJavaScriptEnabled(true);
54
55     setSettings(settings);
56     m_client = client;
57 }
58
59 FrameWin::~FrameWin()
60 {
61     setView(0);
62     clearRecordedFormValues();    
63 }
64
65 void FrameWin::urlSelected(const ResourceRequest& request)
66 {
67     if (m_client)
68         m_client->openURL(request.url().url());
69 }
70
71 void FrameWin::submitForm(const ResourceRequest& request)
72 {
73     // FIXME: this is a hack inherited from FrameMac, and should be pushed into Frame
74     if (d->m_submittedFormURL == request.url())
75         return;
76     d->m_submittedFormURL = request.url();
77
78     if (m_client)
79         m_client->submitForm(request.doPost() ? "POST" : "GET", request.url(), &d->m_submitForm->submitFormData);
80
81     clearRecordedFormValues();
82 }
83
84 String FrameWin::userAgent() const
85 {
86     return "Mozilla/5.0 (PC; U; Intel; Windows; en) AppleWebKit/420+ (KHTML, like Gecko)";
87 }
88
89 void FrameWin::runJavaScriptAlert(String const& message)
90 {
91     String text = message;
92     text.replace(QChar('\\'), backslashAsCurrencySymbol());
93     QChar nullChar('\0');
94     text += String(&nullChar, 1);
95     MessageBox(view()->windowHandle(), (LPCWSTR)text.unicode(), L"JavaScript Alert", MB_OK);
96 }
97
98 bool FrameWin::runJavaScriptConfirm(String const& message)
99 {
100     String text = message;
101     text.replace(QChar('\\'), backslashAsCurrencySymbol());
102     QChar nullChar('\0');
103     text += String(&nullChar, 1);
104     return (MessageBox(view()->windowHandle(), (LPCWSTR)text.unicode(), L"JavaScript Alert", MB_OKCANCEL) == IDOK);
105 }
106
107 // FIXME: This needs to be unified with the keyPress method on FrameMac
108 bool FrameWin::keyPress(const PlatformKeyboardEvent& keyEvent)
109 {
110     bool result;
111     // Check for cases where we are too early for events -- possible unmatched key up
112     // from pressing return in the location bar.
113     Document *doc = document();
114     if (!doc)
115         return false;
116     Node *node = doc->focusNode();
117     if (!node) {
118         if (doc->isHTMLDocument())
119             node = doc->body();
120         else
121             node = doc->documentElement();
122         if (!node)
123             return false;
124     }
125     
126     if (!keyEvent.isKeyUp())
127         prepareForUserAction();
128
129     result = !EventTargetNodeCast(node)->dispatchKeyEvent(keyEvent);
130
131     // FIXME: FrameMac has a keyDown/keyPress hack here which we are not copying.
132
133     return result;
134 }
135
136 }