Changeset 31236 in webkit


Ignore:
Timestamp:
Mar 23, 2008 3:48:18 AM (16 years ago)
Author:
oliver@apple.com
Message:

Bug 17670: Key events may improperly propagate from iframe to parent frame
Bug 16381: REGRESSION: Shift, command, option, ctrl keys in Gmail Rich Text changes focus

Reviewed by Maciej

Prevent the Cocoa event system from propagating key events to the parent WebHTMLView,
as that results in us dispatching the key events for each frame going up the frame
tree.

Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r31232 r31236  
     12008-03-23  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        Test to ensure key events don't propagate up the frame tree.
     6
     7        * fast/events/key-events-in-frame-expected.txt: Added.
     8        * fast/events/key-events-in-frame.html: Added.
     9
    1102008-03-22  Eric Seidel  <eric@webkit.org>
    211
  • trunk/WebKit/mac/ChangeLog

    r31209 r31236  
     12008-03-23  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        Bug 17670: Key events may improperly propagate from iframe to parent frame
     6        <http://bugs.webkit.org/show_bug.cgi?id=17670>
     7        Bug 16381: REGRESSION: Shift, command, option, ctrl keys in Gmail Rich Text changes focus
     8        <http://bugs.webkit.org/show_bug.cgi?id=16381>
     9
     10        Prevent the Cocoa event system from propagating key events to the parent WebHTMLView,
     11        as that results in us dispatching the key events for each frame going up the frame
     12        tree.
     13
     14        * WebView/WebHTMLView.mm:
     15        (-[WebHTMLView keyDown:]):
     16        (-[WebHTMLView keyUp:]):
     17        (-[WebHTMLView flagsChanged:]):
     18
    1192008-03-21  Timothy Hatcher  <timothy@apple.com>
    220
  • trunk/WebKit/mac/WebView/WebHTMLView.mm

    r31028 r31236  
    35343534    BOOL completionPopupWasOpen = _private->compController && [_private->compController popupWindowIsOpen];
    35353535    Frame* coreFrame = core([self _frame]);
    3536     if (!eventWasSentToWebCore && coreFrame && coreFrame->eventHandler()->keyEvent(event)) {
     3536    if (!eventWasSentToWebCore && coreFrame) {
     3537        coreFrame->eventHandler()->keyEvent(event);
    35373538        // WebCore processed a key event, bail on any preexisting complete: UI
    35383539        if (completionPopupWasOpen)
     
    35533554    BOOL eventWasSentToWebCore = (_private->keyDownEvent == event);
    35543555
    3555     [self retain];
     3556    RetainPtr<WebHTMLView> selfProtector = self;
    35563557    Frame* coreFrame = core([self _frame]);
    3557     if (eventWasSentToWebCore || !coreFrame || !coreFrame->eventHandler()->keyEvent(event))
    3558         [super keyUp:event];   
    3559     [self release];
     3558    if (coreFrame && !eventWasSentToWebCore)
     3559        coreFrame->eventHandler()->keyEvent(event);
     3560    else
     3561        [super keyUp:event];
    35603562}
    35613563
     
    35693571
    35703572    unsigned short keyCode = [event keyCode];
     3573
    35713574    //Don't make an event from the num lock and function keys
    3572     if (coreFrame && keyCode != 0 && keyCode != 10 && keyCode != 63)
     3575    if (coreFrame && keyCode != 0 && keyCode != 10 && keyCode != 63) {
    35733576        coreFrame->eventHandler()->keyEvent(PlatformKeyboardEvent(event));
     3577        return;
     3578    }
    35743579       
    35753580    [super flagsChanged:event];
Note: See TracChangeset for help on using the changeset viewer.