WebKit:
[WebKit-https.git] / WebKit / mac / WebCoreSupport / WebViewFactory.mm
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 <WebKit/WebViewFactory.h>
30
31 #import <WebKit/WebFrameInternal.h>
32 #import <WebKit/WebViewInternal.h>
33 #import <WebKit/WebHTMLViewInternal.h>
34 #import <WebKit/WebLocalizableStrings.h>
35 #import <WebKit/WebNSUserDefaultsExtras.h>
36 #import <WebKit/WebNSObjectExtras.h>
37 #import <WebKit/WebNSViewExtras.h>
38 #import <WebKit/WebPluginDatabase.h>
39 #import <WebKitSystemInterface.h>
40 #import <wtf/Assertions.h>
41
42 @interface NSMenu (WebViewFactoryAdditions)
43 - (NSMenuItem *)addItemWithTitle:(NSString *)title action:(SEL)action tag:(int)tag;
44 @end
45
46 @implementation NSMenu (WebViewFactoryAdditions)
47
48 - (NSMenuItem *)addItemWithTitle:(NSString *)title action:(SEL)action tag:(int)tag
49 {
50     NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:title action:action keyEquivalent:@""] autorelease];
51     [item setTag:tag];
52     [self addItem:item];
53     return item;
54 }
55
56 @end
57
58 @implementation WebViewFactory
59
60 + (void)createSharedFactory
61 {
62     if (![self sharedFactory]) {
63         [[[self alloc] init] release];
64     }
65     ASSERT([[self sharedFactory] isKindOfClass:self]);
66 }
67
68 - (NSArray *)pluginsInfo
69 {
70     return [[WebPluginDatabase sharedDatabase] plugins];
71 }
72
73 - (void)refreshPlugins
74 {
75     [[WebPluginDatabase sharedDatabase] refresh];
76 }
77
78 - (NSString *)inputElementAltText
79 {
80     return UI_STRING_KEY("Submit", "Submit (input element)", "alt text for <input> elements with no alt, title, or value");
81 }
82
83 - (NSString *)resetButtonDefaultLabel
84 {
85     return UI_STRING("Reset", "default label for Reset buttons in forms on web pages");
86 }
87
88 - (NSString *)searchableIndexIntroduction
89 {
90     return UI_STRING("This is a searchable index. Enter search keywords: ",
91         "text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'");
92 }
93
94 - (NSString *)submitButtonDefaultLabel
95 {
96     return UI_STRING("Submit", "default label for Submit buttons in forms on web pages");
97 }
98
99 - (NSString *)fileButtonChooseFileLabel
100 {
101     return UI_STRING("Choose File", "title for file button used in HTML forms");
102 }
103
104 - (NSString *)fileButtonNoFileSelectedLabel
105 {
106     return UI_STRING("no file selected", "text to display in file button used in HTML forms when no file is selected");
107 }
108
109 - (NSString *)copyImageUnknownFileLabel
110 {
111     return UI_STRING("unknown", "Unknown filename");
112 }
113
114 - (NSString *)searchMenuNoRecentSearchesText
115 {
116     return UI_STRING("No recent searches", "Label for only item in menu that appears when clicking on the search field image, when no searches have been performed");
117 }
118
119 - (NSString *)searchMenuRecentSearchesText
120 {
121     return UI_STRING("Recent Searches", "label for first item in the menu that appears when clicking on the search field image, used as embedded menu title");
122 }
123
124 - (NSString *)searchMenuClearRecentSearchesText
125 {
126     return UI_STRING("Clear Recent Searches", "menu item in Recent Searches menu that empties menu's contents");
127 }
128
129 - (NSString *)defaultLanguageCode
130 {
131     return [NSUserDefaults _webkit_preferredLanguageCode];
132 }
133
134 - (NSString *)contextMenuItemTagOpenLinkInNewWindow
135 {
136     return UI_STRING("Open Link in New Window", "Open in New Window context menu item");
137 }
138
139 - (NSString *)contextMenuItemTagDownloadLinkToDisk
140 {
141     return UI_STRING("Download Linked File", "Download Linked File context menu item");
142 }
143
144 - (NSString *)contextMenuItemTagCopyLinkToClipboard
145 {
146     return UI_STRING("Copy Link", "Copy Link context menu item");
147 }
148
149 - (NSString *)contextMenuItemTagOpenImageInNewWindow
150 {
151     return UI_STRING("Open Image in New Window", "Open Image in New Window context menu item");
152 }
153
154 - (NSString *)contextMenuItemTagDownloadImageToDisk
155 {
156     return UI_STRING("Download Image", "Download Image context menu item");
157 }
158
159 - (NSString *)contextMenuItemTagCopyImageToClipboard
160 {
161     return UI_STRING("Copy Image", "Copy Image context menu item");
162 }
163
164 - (NSString *)contextMenuItemTagOpenFrameInNewWindow
165 {
166     return UI_STRING("Open Frame in New Window", "Open Frame in New Window context menu item");
167 }
168
169 - (NSString *)contextMenuItemTagCopy
170 {
171     return UI_STRING("Copy", "Copy context menu item");
172 }
173
174 - (NSString *)contextMenuItemTagGoBack
175 {
176     return UI_STRING("Back", "Back context menu item");
177 }
178
179 - (NSString *)contextMenuItemTagGoForward
180 {
181     return UI_STRING("Forward", "Forward context menu item");
182 }
183
184 - (NSString *)contextMenuItemTagStop
185 {
186     return UI_STRING("Stop", "Stop context menu item");
187 }
188
189 - (NSString *)contextMenuItemTagReload
190 {
191     return UI_STRING("Reload", "Reload context menu item");
192 }
193
194 - (NSString *)contextMenuItemTagCut
195 {
196     return UI_STRING("Cut", "Cut context menu item");
197 }
198
199 - (NSString *)contextMenuItemTagPaste
200 {
201     return UI_STRING("Paste", "Paste context menu item");
202 }
203
204 - (NSString *)contextMenuItemTagNoGuessesFound
205 {
206     return UI_STRING("No Guesses Found", "No Guesses Found context menu item");
207 }
208
209 - (NSString *)contextMenuItemTagIgnoreSpelling
210 {
211     return UI_STRING("Ignore Spelling", "Ignore Spelling context menu item");
212 }
213
214 - (NSString *)contextMenuItemTagLearnSpelling
215 {
216     return UI_STRING("Learn Spelling", "Learn Spelling context menu item");
217 }
218
219 - (NSString *)contextMenuItemTagSearchInSpotlight
220 {
221     return UI_STRING("Search in Spotlight", "Search in Spotlight context menu item");
222 }
223
224 - (NSString *)contextMenuItemTagSearchWeb
225 {
226     return UI_STRING("Search in Google", "Search in Google context menu item");
227 }
228
229 - (NSString *)contextMenuItemTagLookUpInDictionary
230 {
231     return UI_STRING("Look Up in Dictionary", "Look Up in Dictionary context menu item");
232 }
233
234 - (NSString *)contextMenuItemTagOpenLink
235 {
236     return UI_STRING("Open Link", "Open Link context menu item");
237 }
238
239 - (NSString *)contextMenuItemTagIgnoreGrammar
240 {
241     return UI_STRING("Ignore Grammar", "Ignore Grammar context menu item");
242 }
243
244 - (NSString *)contextMenuItemTagSpellingMenu
245 {
246 #ifndef BUILDING_ON_TIGER
247     return UI_STRING("Spelling and Grammar", "Spelling and Grammar context sub-menu item");
248 #else
249     return UI_STRING("Spelling", "Spelling context sub-menu item");
250 #endif
251 }
252
253 - (NSString *)contextMenuItemTagShowSpellingPanel:(bool)show
254 {
255 #ifndef BUILDING_ON_TIGER
256     if (show)
257         return UI_STRING("Show Spelling and Grammar", "menu item title");
258     return UI_STRING("Hide Spelling and Grammar", "menu item title");
259 #else
260     return UI_STRING("Spelling...", "menu item title");
261 #endif
262 }
263
264 - (NSString *)contextMenuItemTagCheckSpelling
265 {
266 #ifndef BUILDING_ON_TIGER
267     return UI_STRING("Check Document Now", "Check spelling context menu item");
268 #else
269     return UI_STRING("Check Spelling", "Check spelling context menu item");
270 #endif
271 }
272
273 - (NSString *)contextMenuItemTagCheckSpellingWhileTyping
274 {
275 #ifndef BUILDING_ON_TIGER
276     return UI_STRING("Check Spelling While Typing", "Check spelling while typing context menu item");
277 #else
278     return UI_STRING("Check Spelling as You Type", "Check spelling while typing context menu item");
279 #endif
280 }
281
282 - (NSString *)contextMenuItemTagCheckGrammarWithSpelling
283 {
284     return UI_STRING("Check Grammar With Spelling", "Check grammar with spelling context menu item");
285 }
286
287 - (NSString *)contextMenuItemTagFontMenu
288 {
289     return UI_STRING("Font", "Font context sub-menu item");
290 }
291
292 - (NSString *)contextMenuItemTagShowFonts
293 {
294     return UI_STRING("Show Fonts", "Show fonts context menu item");
295 }
296
297 - (NSString *)contextMenuItemTagBold
298 {
299     return UI_STRING("Bold", "Bold context menu item");
300 }
301
302 - (NSString *)contextMenuItemTagItalic
303 {
304     return UI_STRING("Italic", "Italic context menu item");
305 }
306
307 - (NSString *)contextMenuItemTagUnderline
308 {
309     return UI_STRING("Underline", "Underline context menu item");
310 }
311
312 - (NSString *)contextMenuItemTagOutline
313 {
314     return UI_STRING("Outline", "Outline context menu item");
315 }
316
317 - (NSString *)contextMenuItemTagStyles
318 {
319     return UI_STRING("Styles...", "Styles context menu item");
320 }
321
322 - (NSString *)contextMenuItemTagShowColors
323 {
324     return UI_STRING("Show colors", "Show colors context menu item");
325 }
326
327 - (NSString *)contextMenuItemTagSpeechMenu
328 {
329     return UI_STRING("Speech", "Speech context sub-menu item");
330 }
331
332 - (NSString *)contextMenuItemTagStartSpeaking
333 {
334     return UI_STRING("Start Speaking", "Start speaking context menu item");
335 }
336
337 - (NSString *)contextMenuItemTagStopSpeaking
338 {
339     return UI_STRING("Stop Speaking", "Stop speaking context menu item");
340 }
341
342 - (NSString *)contextMenuItemTagWritingDirectionMenu
343 {
344 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
345     return UI_STRING("Paragraph Direction", "Paragraph direction context sub-menu item");
346 #else
347     return UI_STRING("Writing Direction", "Writing direction context sub-menu item");
348 #endif
349 }
350
351 - (NSString *)contextMenuItemTagTextDirectionMenu
352 {
353     return UI_STRING("Selection Direction", "Selection direction context sub-menu item");
354 }
355
356 - (NSString *)contextMenuItemTagDefaultDirection
357 {
358     return UI_STRING("Default", "Default writing direction context menu item");
359 }
360
361 - (NSString *)contextMenuItemTagLeftToRight
362 {
363     return UI_STRING("Left to Right", "Left to Right context menu item");
364 }
365
366 - (NSString *)contextMenuItemTagRightToLeft
367 {
368     return UI_STRING("Right to Left", "Right to Left context menu item");
369 }
370
371 - (NSString *)contextMenuItemTagInspectElement
372 {
373     return UI_STRING("Inspect Element", "Inspect Element context menu item");
374 }
375
376 - (BOOL)objectIsTextMarker:(id)object
377 {
378     return object != nil && CFGetTypeID(object) == WKGetAXTextMarkerTypeID();
379 }
380
381 - (BOOL)objectIsTextMarkerRange:(id)object
382 {
383     return object != nil && CFGetTypeID(object) == WKGetAXTextMarkerRangeTypeID();
384 }
385
386 - (WebCoreTextMarker *)textMarkerWithBytes:(const void *)bytes length:(size_t)length
387 {
388     return WebCFAutorelease(WKCreateAXTextMarker(bytes, length));
389 }
390
391 - (BOOL)getBytes:(void *)bytes fromTextMarker:(WebCoreTextMarker *)textMarker length:(size_t)length
392 {
393     return WKGetBytesFromAXTextMarker(textMarker, bytes, length);
394 }
395
396 - (WebCoreTextMarkerRange *)textMarkerRangeWithStart:(WebCoreTextMarker *)start end:(WebCoreTextMarker *)end
397 {
398     ASSERT(start != nil);
399     ASSERT(end != nil);
400     ASSERT(CFGetTypeID(start) == WKGetAXTextMarkerTypeID());
401     ASSERT(CFGetTypeID(end) == WKGetAXTextMarkerTypeID());
402     return WebCFAutorelease(WKCreateAXTextMarkerRange(start, end));
403 }
404
405 - (WebCoreTextMarker *)startOfTextMarkerRange:(WebCoreTextMarkerRange *)range
406 {
407     ASSERT(range != nil);
408     ASSERT(CFGetTypeID(range) == WKGetAXTextMarkerRangeTypeID());
409     return WebCFAutorelease(WKCopyAXTextMarkerRangeStart(range));
410 }
411
412 - (WebCoreTextMarker *)endOfTextMarkerRange:(WebCoreTextMarkerRange *)range
413 {
414     ASSERT(range != nil);
415     ASSERT(CFGetTypeID(range) == WKGetAXTextMarkerRangeTypeID());
416     return WebCFAutorelease(WKCopyAXTextMarkerRangeEnd(range));
417 }
418
419 - (void)accessibilityHandleFocusChanged
420 {
421     WKAccessibilityHandleFocusChanged();
422 }
423
424 - (AXUIElementRef)AXUIElementForElement:(id)element
425 {
426     return WKCreateAXUIElementRef(element);
427 }
428
429 - (CGRect)accessibilityConvertScreenRect:(CGRect)bounds
430 {
431     NSArray *screens = [NSScreen screens];
432     if ([screens count]) {
433         CGFloat screenHeight = NSHeight([[screens objectAtIndex:0] frame]);
434         bounds.origin.y = (screenHeight - (bounds.origin.y + bounds.size.height));
435     } else
436         bounds = CGRectZero;    
437
438     return bounds;
439 }
440
441 - (void)unregisterUniqueIdForUIElement:(id)element
442 {
443     WKUnregisterUniqueIdForElement(element);
444 }
445
446 - (NSString *)AXWebAreaText
447 {
448     return UI_STRING("HTML content", "accessibility role description for web area");
449 }
450
451 - (NSString *)AXLinkText
452 {
453     return UI_STRING("link", "accessibility role description for link");
454 }
455
456 - (NSString *)AXListMarkerText
457 {
458     return UI_STRING("list marker", "accessibility role description for list marker");
459 }
460
461 - (NSString *)AXImageMapText
462 {
463     return UI_STRING("image map", "accessibility role description for image map");
464 }
465
466 - (NSString *)AXHeadingText
467 {
468     return UI_STRING("heading", "accessibility role description for headings");
469 }
470
471 - (NSString *)AXDefinitionListTermText
472 {
473     return UI_STRING("term", "term word of a definition");
474 }
475
476 - (NSString *)AXDefinitionListDefinitionText
477 {
478     return UI_STRING("definition", "definition phrase");
479 }
480
481 - (NSString *)AXButtonActionVerb
482 {
483     return UI_STRING("press", "Verb stating the action that will occur when a button is pressed, as used by accessibility");
484 }
485
486 - (NSString *)AXRadioButtonActionVerb
487 {
488     return UI_STRING("select", "Verb stating the action that will occur when a radio button is clicked, as used by accessibility");
489 }
490
491 - (NSString *)AXTextFieldActionVerb
492 {
493     return UI_STRING("activate", "Verb stating the action that will occur when a text field is selected, as used by accessibility");
494 }
495
496 - (NSString *)AXCheckedCheckBoxActionVerb
497 {
498     return UI_STRING("uncheck", "Verb stating the action that will occur when a checked checkbox is clicked, as used by accessibility");
499 }
500
501 - (NSString *)AXUncheckedCheckBoxActionVerb
502 {
503     return UI_STRING("check", "Verb stating the action that will occur when an unchecked checkbox is clicked, as used by accessibility");
504 }
505
506 - (NSString *)AXLinkActionVerb
507 {
508     return UI_STRING("jump", "Verb stating the action that will occur when a link is clicked, as used by accessibility");
509 }
510
511 - (NSString *)multipleFileUploadTextForNumberOfFiles:(unsigned)numberOfFiles
512 {
513     return [NSString stringWithFormat:UI_STRING("%d files", "Label to describe the number of files selected in a file upload control that allows multiple files"), numberOfFiles];
514 }
515
516 - (NSString *)unknownFileSizeText
517 {
518     return UI_STRING("Unknown", "Unknown filesize FTP directory listing item");
519 }
520
521 - (NSString*)imageTitleForFilename:(NSString*)filename width:(int)width height:(int)height
522 {
523     return [NSString stringWithFormat:UI_STRING("%@ %d×%d pixels", "window title for a standalone image (uses multiplication symbol, not x)"), filename, width, height];
524 }
525
526 @end