1/* 2 * Copyright (C) 2005 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 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#import <Cocoa/Cocoa.h> 30 31#import <Foundation/NSURLRequest.h> 32 33#import <WebKit/WebDefaultUIDelegate.h> 34#import <WebKit/WebJavaScriptTextInputPanel.h> 35#import <WebKit/WebView.h> 36#import <WebKit/WebUIDelegatePrivate.h> 37#import <WebKit/DOM.h> 38#import "WebTypesInternal.h" 39 40@interface NSApplication (DeclarationStolenFromAppKit) 41- (void)_cycleWindowsReversed:(BOOL)reversed; 42@end 43 44@implementation WebDefaultUIDelegate 45 46static WebDefaultUIDelegate *sharedDelegate = nil; 47 48// Return a object with vanilla implementations of the protocol's methods 49// Note this feature relies on our default delegate being stateless. This 50// is probably an invalid assumption for the WebUIDelegate. 51// If we add any real functionality to this default delegate we probably 52// won't be able to use a singleton. 53+ (WebDefaultUIDelegate *)sharedUIDelegate 54{ 55 if (!sharedDelegate) { 56 sharedDelegate = [[WebDefaultUIDelegate alloc] init]; 57 } 58 return sharedDelegate; 59} 60 61- (WebView *)webView: (WebView *)wv createWebViewWithRequest:(NSURLRequest *)request windowFeatures:(NSDictionary *)features 62{ 63 // If the new API method doesn't exist, fallback to the old version of createWebViewWithRequest 64 // for backwards compatability 65 if (![[wv UIDelegate] respondsToSelector:@selector(webView:createWebViewWithRequest:windowFeatures:)] && [[wv UIDelegate] respondsToSelector:@selector(webView:createWebViewWithRequest:)]) 66 return [[wv UIDelegate] webView:wv createWebViewWithRequest:request]; 67 return nil; 68} 69 70- (void)webViewShow: (WebView *)wv 71{ 72} 73 74- (void)webViewClose: (WebView *)wv 75{ 76 [[wv window] close]; 77} 78 79- (void)webViewFocus: (WebView *)wv 80{ 81 [[wv window] makeKeyAndOrderFront:wv]; 82} 83 84- (void)webViewUnfocus: (WebView *)wv 85{ 86 if ([[wv window] isKeyWindow] || [[[wv window] attachedSheet] isKeyWindow]) { 87 [NSApp _cycleWindowsReversed:FALSE]; 88 } 89} 90 91- (NSResponder *)webViewFirstResponder: (WebView *)wv 92{ 93 return [[wv window] firstResponder]; 94} 95 96- (void)webView: (WebView *)wv makeFirstResponder:(NSResponder *)responder 97{ 98 [[wv window] makeFirstResponder:responder]; 99} 100 101- (void)webView: (WebView *)wv setStatusText:(NSString *)text 102{ 103} 104 105- (NSString *)webViewStatusText: (WebView *)wv 106{ 107 return nil; 108} 109 110- (void)webView: (WebView *)wv mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(NSUInteger)modifierFlags 111{ 112} 113 114- (BOOL)webViewAreToolbarsVisible: (WebView *)wv 115{ 116 return NO; 117} 118 119- (void)webView: (WebView *)wv setToolbarsVisible:(BOOL)visible 120{ 121} 122 123- (BOOL)webViewIsStatusBarVisible: (WebView *)wv 124{ 125 return NO; 126} 127 128- (void)webView: (WebView *)wv setStatusBarVisible:(BOOL)visible 129{ 130} 131 132- (BOOL)webViewIsResizable: (WebView *)wv 133{ 134 return [[wv window] showsResizeIndicator]; 135} 136 137- (void)webView: (WebView *)wv setResizable:(BOOL)resizable 138{ 139 // FIXME: This doesn't actually change the resizability of the window, 140 // only visibility of the indicator. 141 [[wv window] setShowsResizeIndicator:resizable]; 142} 143 144- (void)webView: (WebView *)wv setFrame:(NSRect)frame 145{ 146 [[wv window] setFrame:frame display:YES]; 147} 148 149- (NSRect)webViewFrame: (WebView *)wv 150{ 151 NSWindow *window = [wv window]; 152 return window == nil ? NSZeroRect : [window frame]; 153} 154 155- (void)webView: (WebView *)wv runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame 156{ 157 // FIXME: We want a default here, but that would add localized strings. 158} 159 160- (BOOL)webView: (WebView *)wv runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame 161{ 162 // FIXME: We want a default here, but that would add localized strings. 163 return NO; 164} 165 166- (NSString *)webView: (WebView *)wv runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WebFrame *)frame 167{ 168 WebJavaScriptTextInputPanel *panel = [[WebJavaScriptTextInputPanel alloc] initWithPrompt:prompt text:defaultText]; 169 [panel showWindow:nil]; 170 NSString *result; 171 if ([NSApp runModalForWindow:[panel window]]) { 172 result = [panel text]; 173 } else { 174 result = nil; 175 } 176 [[panel window] close]; 177 [panel release]; 178 return result; 179} 180 181- (void)webView: (WebView *)wv runOpenPanelForFileButtonWithResultListener:(id<WebOpenPanelResultListener>)resultListener 182{ 183 // FIXME: We want a default here, but that would add localized strings. 184} 185 186- (void)webView:(WebView *)sender printFrameView:(WebFrameView *)frameView 187{ 188} 189 190 191- (BOOL)webView:(WebView *)webView shouldBeginDragForElement:(NSDictionary *)element dragImage:(NSImage *)dragImage mouseDownEvent:(NSEvent *)mouseDownEvent mouseDraggedEvent:(NSEvent *)mouseDraggedEvent 192{ 193 return YES; 194} 195 196- (NSUInteger)webView:(WebView *)webView dragDestinationActionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo 197{ 198 return WebDragDestinationActionAny; 199} 200 201- (void)webView:(WebView *)webView willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:(id <NSDraggingInfo>)draggingInfo 202{ 203} 204 205- (NSUInteger)webView:(WebView *)webView dragSourceActionMaskForPoint:(NSPoint)point 206{ 207 return WebDragSourceActionAny; 208} 209 210- (void)webView:(WebView *)webView willPerformDragSourceAction:(WebDragSourceAction)action fromPoint:(NSPoint)point withPasteboard:(NSPasteboard *)pasteboard 211{ 212} 213 214- (void)webView:(WebView *)sender didDrawRect:(NSRect)rect 215{ 216} 217 218- (void)webView:(WebView *)sender didScrollDocumentInFrameView:(WebFrameView *)frameView 219{ 220} 221 222- (void)webView:(WebView *)sender willPopupMenu:(NSMenu *)menu 223{ 224} 225 226- (void)webView:(WebView *)sender contextMenuItemSelected:(NSMenuItem *)item forElement:(NSDictionary *)element 227{ 228} 229 230- (void)webView:(WebView *)sender exceededApplicationCacheOriginQuotaForSecurityOrigin:(WebSecurityOrigin *)origin 231{ 232} 233 234- (BOOL)webView:(WebView *)sender shouldReplaceUploadFile:(NSString *)path usingGeneratedFilename:(NSString **)filename 235{ 236 return NO; 237} 238 239- (NSString *)webView:(WebView *)sender generateReplacementFile:(NSString *)path 240{ 241 return nil; 242} 243 244@end 245