2 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
27 #import "BrowserExtensionMac.h"
29 #import "BlockExceptions.h"
32 #import "FrameLoadRequest.h"
36 #import "WebCoreFrameBridge.h"
37 #import "WebCorePageBridge.h"
41 BrowserExtensionMac::BrowserExtensionMac(Frame *frame)
46 void BrowserExtensionMac::createNewWindow(const FrameLoadRequest& request)
48 createNewWindow(request, WindowArgs(), NULL);
51 void BrowserExtensionMac::createNewWindow(const FrameLoadRequest& request,
52 const WindowArgs& winArgs,
55 createNewWindow(request, winArgs, &part);
58 void BrowserExtensionMac::createNewWindow(const FrameLoadRequest& request,
59 const WindowArgs& winArgs,
62 BEGIN_BLOCK_OBJC_EXCEPTIONS;
64 ASSERT(!winArgs.dialog || request.m_frameName.isEmpty());
69 const KURL& url = request.m_request.url();
71 NSString *frameName = request.m_frameName.isEmpty() ? nil : (NSString*)request.m_frameName;
73 // FIXME: Can't we just use m_frame->findFrame?
74 if (WebCoreFrameBridge *frameBridge = [m_frame->bridge() findFrameNamed:frameName]) {
76 String argsReferrer = request.m_request.referrer();
78 if (!argsReferrer.isEmpty())
79 referrer = argsReferrer;
81 referrer = [frameBridge referrer];
83 [frameBridge loadURL:url.getNSURL()
85 reload:request.m_request.reload
93 [frameBridge activateWindow];
96 *partResult = [frameBridge impl];
102 WebCorePageBridge *pageBridge;
104 pageBridge = [m_frame->bridge() createModalDialogWithURL:url.getNSURL()];
106 pageBridge = [m_frame->bridge() createWindowWithURL:url.getNSURL()];
110 WebCoreFrameBridge *frameBridge = [pageBridge mainFrame];
111 if ([frameBridge impl])
112 [frameBridge impl]->tree()->setName(AtomicString(request.m_frameName));
115 *partResult = [frameBridge impl];
117 [frameBridge setToolbarsVisible:winArgs.toolBarVisible || winArgs.locationBarVisible];
118 [frameBridge setStatusbarVisible:winArgs.statusBarVisible];
119 [frameBridge setScrollbarsVisible:winArgs.scrollbarsVisible];
120 [frameBridge setWindowIsResizable:winArgs.resizable];
122 NSRect windowRect = [pageBridge impl]->windowRect();
124 windowRect.origin.x = winArgs.x;
126 windowRect.origin.y = winArgs.y;
128 // 'width' and 'height' specify the dimensions of the WebView, but we can only resize the window,
129 // so we compute a WebView delta and apply it to the window.
130 NSRect webViewRect = [[pageBridge outerView] frame];
131 if (winArgs.widthSet)
132 windowRect.size.width += winArgs.width - webViewRect.size.width;
133 if (winArgs.heightSet)
134 windowRect.size.height += winArgs.height - webViewRect.size.height;
136 [pageBridge impl]->setWindowRect(windowRect);
138 [frameBridge showWindow];
140 END_BLOCK_OBJC_EXCEPTIONS;
143 int BrowserExtensionMac::getHistoryLength()
145 return [m_frame->bridge() historyLength];
148 void BrowserExtensionMac::goBackOrForward(int distance)
150 BEGIN_BLOCK_OBJC_EXCEPTIONS;
151 [m_frame->bridge() goBackOrForward:distance];
152 END_BLOCK_OBJC_EXCEPTIONS;
155 KURL BrowserExtensionMac::historyURL(int distance)
157 BEGIN_BLOCK_OBJC_EXCEPTIONS;
158 return KURL([m_frame->bridge() historyURL:distance]);
159 END_BLOCK_OBJC_EXCEPTIONS;
163 bool BrowserExtensionMac::canRunModal()
165 BEGIN_BLOCK_OBJC_EXCEPTIONS;
166 return [m_frame->bridge() canRunModal];
167 END_BLOCK_OBJC_EXCEPTIONS;
171 bool BrowserExtensionMac::canRunModalNow()
173 BEGIN_BLOCK_OBJC_EXCEPTIONS;
174 return [m_frame->bridge() canRunModalNow];
175 END_BLOCK_OBJC_EXCEPTIONS;
179 void BrowserExtensionMac::runModal()
181 BEGIN_BLOCK_OBJC_EXCEPTIONS;
182 [m_frame->bridge() runModal];
183 END_BLOCK_OBJC_EXCEPTIONS;