Bug 1083617 - Block the blur message if focus is already removed from remote frame. r=yxl

This commit is contained in:
Tim Chien 2014-10-28 23:47:00 -04:00
parent 4466224d40
commit 080d598bb4

View File

@ -249,14 +249,34 @@ this.Keyboard = {
},
forwardEvent: function keyboardForwardEvent(newEventName, msg) {
this.formMM = msg.target.QueryInterface(Ci.nsIFrameLoaderOwner)
.frameLoader.messageManager;
let mm = msg.target.QueryInterface(Ci.nsIFrameLoaderOwner)
.frameLoader.messageManager;
if (newEventName === 'Keyboard:FocusChange' &&
msg.data.type === 'blur') {
// A blur message can't be sent to the keyboard if the focus has
// already taken away at first place.
// This check is here to prevent problem caused by out-of-order
// ipc messages from two processes.
if (mm !== this.formMM) {
return false;
}
this.sendToKeyboard(newEventName, msg.data);
return true;
}
this.formMM = mm;
this.sendToKeyboard(newEventName, msg.data);
return true;
},
handleFocusChange: function keyboardHandleFocusChange(msg) {
this.forwardEvent('Keyboard:FocusChange', msg);
let isSent = this.forwardEvent('Keyboard:FocusChange', msg);
if (!isSent) {
return;
}
// Chrome event, used also to render value selectors; that's why we need
// the info about choices / min / max here as well...