Changeset 24517 in webkit


Ignore:
Timestamp:
Jul 22, 2007 12:46:15 PM (17 years ago)
Author:
oliver
Message:

LayoutTests:

Reviewed by Darin.

Initial input method test case, this tests the behaviour of the
enter key in our "kotoeri" engine.

  • fast/events/inputmethods: Added.
  • fast/events/inputmethods/kotoeri-enter-to-confirm-and-newline-expected.txt: Added.
  • fast/events/inputmethods/kotoeri-enter-to-confirm-and-newline.html: Added.
  • fast/events/inputmethods/kotoeri.js: Added.
  • fast/events/inputmethods/logger.js: Added.

WebKitTools:

Reviewed by Darin.

http://bugs.webkit.org/show_bug.cgi?id=14710

Add preliminary support for testing Input Method/WebKit behaviour and interaction
in DRT. This provides the NSTextInput API which is most of what should be necessary
to mimic the event sequences Input Methods trigger.

  • DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
  • DumpRenderTree/TextInputController.h:
  • DumpRenderTree/TextInputController.m: (-[WebHTMLView interpretKeyEvents:]): (+[TextInputController isSelectorExcludedFromWebScript:]): (+[TextInputController webScriptNameForSelector:]): (-[TextInputController initWithWebView:]): (-[TextInputController dealloc]): (-[TextInputController textInput]): (-[TextInputController setInputMethodHandler:]): (-[TextInputController interpretKeyEvents:withSender:]):
Location:
trunk
Files:
5 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r24512 r24517  
     12007-07-22  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Darin.
     4
     5        Initial input method test case, this tests the behaviour of the
     6        enter key in our "kotoeri" engine.
     7
     8        * fast/events/inputmethods: Added.
     9        * fast/events/inputmethods/kotoeri-enter-to-confirm-and-newline-expected.txt: Added.
     10        * fast/events/inputmethods/kotoeri-enter-to-confirm-and-newline.html: Added.
     11        * fast/events/inputmethods/kotoeri.js: Added.
     12        * fast/events/inputmethods/logger.js: Added.
     13
    1142007-07-21  Sam Weinig  <sam@webkit.org>
    215
  • trunk/WebKitTools/ChangeLog

    r24467 r24517  
     12007-07-22  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Darin.
     4
     5        http://bugs.webkit.org/show_bug.cgi?id=14710
     6
     7        Add preliminary support for testing Input Method/WebKit behaviour and interaction
     8        in DRT.  This provides the NSTextInput API which is most of what should be necessary
     9        to mimic the event sequences Input Methods trigger.
     10
     11        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
     12        * DumpRenderTree/TextInputController.h:
     13        * DumpRenderTree/TextInputController.m:
     14        (-[WebHTMLView interpretKeyEvents:]):
     15        (+[TextInputController isSelectorExcludedFromWebScript:]):
     16        (+[TextInputController webScriptNameForSelector:]):
     17        (-[TextInputController initWithWebView:]):
     18        (-[TextInputController dealloc]):
     19        (-[TextInputController textInput]):
     20        (-[TextInputController setInputMethodHandler:]):
     21        (-[TextInputController interpretKeyEvents:withSender:]):
     22
    1232007-07-20  Adam Roben  <aroben@apple.com>
    224
  • trunk/WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj

    r24456 r24517  
    121121                6508A26D0BFAB71B00AD2696 /* FrameLoadDelegate.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = FrameLoadDelegate.m; sourceTree = "<group>"; };
    122122                9335435F03D75502008635CE /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = WebKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
    123                 9340995408540CAF007F3BC8 /* DumpRenderTree */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = DumpRenderTree; sourceTree = BUILT_PRODUCTS_DIR; };
     123                9340995408540CAF007F3BC8 /* DumpRenderTree */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = file; path = DumpRenderTree; sourceTree = BUILT_PRODUCTS_DIR; };
    124124                93442CF408F8BA4900BFE8CA /* TextInputController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextInputController.h; sourceTree = "<group>"; };
    125125                93442CF508F8BA4900BFE8CA /* TextInputController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextInputController.m; sourceTree = "<group>"; };
  • trunk/WebKitTools/DumpRenderTree/TextInputController.h

    r11962 r24517  
    3030
    3131@class WebView;
     32@class WebHTMLView;
     33@class WebScriptObject;
    3234
    3335@interface TextInputController : NSObject
    3436{
    3537    WebView *webView;
     38    WebHTMLView *inputMethodView;
     39    WebScriptObject *inputMethodHandler;   
    3640}
    3741- (id)initWithWebView:(WebView *)view;
  • trunk/WebKitTools/DumpRenderTree/TextInputController.m

    r24075 r24517  
    11/*
    2  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
     2 * Copyright (C) 2005, 2007 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3333#import <WebKit/WebFrame.h>
    3434#import <WebKit/WebFrameView.h>
     35#import <WebKit/WebHTMLViewPrivate.h>
     36#import <WebKit/WebScriptObject.h>
    3537#import <WebKit/WebView.h>
     38
     39@interface TextInputController (DumpRenderTreeInputMethodHandler)
     40- (BOOL)interpretKeyEvents:(NSArray *)eventArray withSender:(WebHTMLView *)sender;
     41@end
     42
     43@interface WebHTMLView (DumpRenderTreeInputMethodHandler)
     44- (void)interpretKeyEvents:(NSArray *)eventArray;
     45@end
     46
     47@interface WebHTMLView (WebKitSecretsTextInputControllerIsAwareOf)
     48- (WebFrame *)_frame;
     49@end
     50
     51@implementation WebHTMLView (DumpRenderTreeInputMethodHandler)
     52- (void)interpretKeyEvents:(NSArray *)eventArray
     53{
     54    WebScriptObject *obj = [[self _frame] windowObject];
     55    TextInputController *tic = [obj valueForKey:@"textInputController"];
     56    if (![tic interpretKeyEvents:eventArray withSender:self])
     57        [super interpretKeyEvents:eventArray];
     58}
     59@end
    3660
    3761@implementation NSMutableAttributedString (TextInputController)
     
    142166            || aSelector == @selector(characterIndexForPointX:Y:)
    143167            || aSelector == @selector(validAttributesForMarkedText)
    144             || aSelector == @selector(attributedStringWithString:))
     168            || aSelector == @selector(attributedStringWithString:)
     169            || aSelector == @selector(setInputMethodHandler:))
    145170        return NO;
    146171    return YES;
     
    165190    else if (aSelector == @selector(attributedStringWithString:))
    166191        return @"makeAttributedString"; // just a factory method, doesn't call into NSTextInput
     192    else if (aSelector == @selector(setInputMethodHandler:))
     193        return @"setInputMethodHandler";
    167194
    168195    return nil;
     
    173200    self = [super init];
    174201    webView = wv;
     202    inputMethodView = nil;
     203    inputMethodHandler = nil;
    175204    return self;
    176205}
    177206
     207- (void)dealloc
     208{
     209    [inputMethodHandler release];
     210    inputMethodHandler = nil;
     211   
     212    [super dealloc];
     213}
     214
    178215- (NSObject <NSTextInput> *)textInput
    179216{
    180     NSView <NSTextInput> *view = (id)[[[webView mainFrame] frameView] documentView];
     217    NSView <NSTextInput> *view = inputMethodView ? inputMethodView : (id)[[[webView mainFrame] frameView] documentView];
    181218    return [view conformsToProtocol:@protocol(NSTextInput)] ? view : nil;
    182219}
     
    331368}
    332369
    333 @end
     370- (void)setInputMethodHandler:(WebScriptObject *)handler
     371{
     372    if (inputMethodHandler == handler)
     373        return;
     374    [handler retain];
     375    [inputMethodHandler release];
     376    inputMethodHandler = handler;
     377}
     378
     379- (BOOL)interpretKeyEvents:(NSArray *)eventArray withSender:(WebHTMLView *)sender
     380{
     381    if (!inputMethodHandler)
     382        return NO;
     383   
     384    inputMethodView = sender;
     385   
     386    NSEvent *event = [eventArray objectAtIndex:0];
     387    unsigned modifierFlags = [event modifierFlags];
     388    NSMutableArray *modifiers = [[NSMutableArray alloc] init];
     389    if (modifierFlags & NSAlphaShiftKeyMask)
     390        [modifiers addObject:@"NSAlphaShiftKeyMask"];
     391    if (modifierFlags & NSShiftKeyMask)
     392        [modifiers addObject:@"NSShiftKeyMask"];
     393    if (modifierFlags & NSControlKeyMask)
     394        [modifiers addObject:@"NSControlKeyMask"];
     395    if (modifierFlags & NSAlternateKeyMask)
     396        [modifiers addObject:@"NSAlternateKeyMask"];
     397    if (modifierFlags & NSCommandKeyMask)
     398        [modifiers addObject:@"NSCommandKeyMask"];
     399    if (modifierFlags & NSNumericPadKeyMask)
     400        [modifiers addObject:@"NSNumericPadKeyMask"];
     401    if (modifierFlags & NSHelpKeyMask)
     402        [modifiers addObject:@"NSHelpKeyMask"];
     403    if (modifierFlags & NSFunctionKeyMask)
     404        [modifiers addObject:@"NSFunctionKeyMask"];
     405   
     406    WebScriptObject* eventParam = [inputMethodHandler evaluateWebScript:@"new Object();"];
     407    [eventParam setValue:[event characters] forKey:@"characters"];
     408    [eventParam setValue:[event charactersIgnoringModifiers] forKey:@"charactersIgnoringModifiers"];
     409    [eventParam setValue:[NSNumber numberWithBool:[event isARepeat]] forKey:@"isARepeat"];
     410    [eventParam setValue:[NSNumber numberWithUnsignedShort:[event keyCode]] forKey:@"keyCode"];
     411    [eventParam setValue:modifiers forKey:@"modifierFlags"];
     412   
     413    id result = [inputMethodHandler callWebScriptMethod:@"call" withArguments:[NSArray arrayWithObjects:inputMethodHandler, eventParam, nil]];
     414    if (![result respondsToSelector:@selector(boolValue)] || ![result boolValue])
     415        [sender doCommandBySelector:@selector(noop:)]; // AppKit sends noop: if the ime does not handle an event
     416   
     417    inputMethodView = nil;   
     418    return YES;
     419}
     420
     421@end
Note: See TracChangeset for help on using the changeset viewer.