зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset dc987632b5bb (bug 1497280) for causing geckoview failures in MediaElementTest. CLOSED TREE
--HG-- rename : toolkit/actors/DateTimePickerParent.jsm => toolkit/modules/DateTimePickerParent.jsm extra : rebase_source : d1b8689074b0efb1cd80d1f6b93b8edaaa772112
This commit is contained in:
Родитель
ef6c54db66
Коммит
3583565bf1
|
@ -459,6 +459,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
|
|||
BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.jsm",
|
||||
ContextualIdentityService: "resource://gre/modules/ContextualIdentityService.jsm",
|
||||
Corroborate: "resource://gre/modules/Corroborate.jsm",
|
||||
DateTimePickerParent: "resource://gre/modules/DateTimePickerParent.jsm",
|
||||
Discovery: "resource:///modules/Discovery.jsm",
|
||||
ExtensionsUI: "resource:///modules/ExtensionsUI.jsm",
|
||||
FxAccounts: "resource://gre/modules/FxAccounts.jsm",
|
||||
|
@ -1396,6 +1397,7 @@ BrowserGlue.prototype = {
|
|||
this._checkForOldBuildUpdates();
|
||||
|
||||
AutoCompletePopup.init();
|
||||
DateTimePickerParent.init();
|
||||
// Check if Sync is configured
|
||||
if (Services.prefs.prefHasUserValue("services.sync.username")) {
|
||||
WeaveService.init();
|
||||
|
@ -1567,6 +1569,7 @@ BrowserGlue.prototype = {
|
|||
AboutPrivateBrowsingHandler.uninit();
|
||||
AboutProtectionsHandler.uninit();
|
||||
AutoCompletePopup.uninit();
|
||||
DateTimePickerParent.uninit();
|
||||
|
||||
Normandy.uninit();
|
||||
RFPHelper.uninit();
|
||||
|
|
|
@ -8,11 +8,13 @@ ChromeUtils.defineModuleGetter(this, "BrowserUtils",
|
|||
|
||||
var EXPORTED_SYMBOLS = ["DateTimePickerChild"];
|
||||
|
||||
const {ActorChild} = ChromeUtils.import("resource://gre/modules/ActorChild.jsm");
|
||||
|
||||
/**
|
||||
* DateTimePickerChild is the communication channel between the input box
|
||||
* (content) for date/time input types and its picker (chrome).
|
||||
*/
|
||||
class DateTimePickerChild extends JSWindowActorChild {
|
||||
class DateTimePickerChild extends ActorChild {
|
||||
/**
|
||||
* On init, just listen for the event to open the picker, once the picker is
|
||||
* opened, we'll listen for update and close events.
|
||||
|
@ -27,7 +29,7 @@ class DateTimePickerChild extends JSWindowActorChild {
|
|||
* Cleanup function called when picker is closed.
|
||||
*/
|
||||
close() {
|
||||
this.removeListeners(this._inputElement);
|
||||
this.removeListeners();
|
||||
let dateTimeBoxElement = this._inputElement.dateTimeBoxElement;
|
||||
if (!dateTimeBoxElement) {
|
||||
this._inputElement = null;
|
||||
|
@ -49,15 +51,25 @@ class DateTimePickerChild extends JSWindowActorChild {
|
|||
* Called after picker is opened to start listening for input box update
|
||||
* events.
|
||||
*/
|
||||
addListeners(aElement) {
|
||||
aElement.ownerGlobal.addEventListener("pagehide", this);
|
||||
addListeners() {
|
||||
this.mm.addEventListener("MozUpdateDateTimePicker", this);
|
||||
this.mm.addEventListener("MozCloseDateTimePicker", this);
|
||||
this.mm.addEventListener("pagehide", this);
|
||||
|
||||
this.mm.addMessageListener("FormDateTime:PickerValueChanged", this);
|
||||
this.mm.addMessageListener("FormDateTime:PickerClosed", this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop listeneing for events when picker is closed.
|
||||
*/
|
||||
removeListeners(aElement) {
|
||||
aElement.ownerGlobal.removeEventListener("pagehide", this);
|
||||
removeListeners() {
|
||||
this.mm.removeEventListener("MozUpdateDateTimePicker", this);
|
||||
this.mm.removeEventListener("MozCloseDateTimePicker", this);
|
||||
this.mm.removeEventListener("pagehide", this);
|
||||
|
||||
this.mm.removeMessageListener("FormDateTime:PickerValueChanged", this);
|
||||
this.mm.removeMessageListener("FormDateTime:PickerClosed", this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -90,10 +102,6 @@ class DateTimePickerChild extends JSWindowActorChild {
|
|||
break;
|
||||
}
|
||||
case "FormDateTime:PickerValueChanged": {
|
||||
if (!this._inputElement) {
|
||||
return;
|
||||
}
|
||||
|
||||
let dateTimeBoxElement = this._inputElement.dateTimeBoxElement;
|
||||
if (!dateTimeBoxElement) {
|
||||
return;
|
||||
|
@ -151,10 +159,10 @@ class DateTimePickerChild extends JSWindowActorChild {
|
|||
new win.CustomEvent("MozSetDateTimePickerState", { detail: true }));
|
||||
}
|
||||
|
||||
this.addListeners(this._inputElement);
|
||||
this.addListeners();
|
||||
|
||||
let value = this._inputElement.getDateTimeInputBoxValue();
|
||||
this.sendAsyncMessage("FormDateTime:OpenPicker", {
|
||||
this.mm.sendAsyncMessage("FormDateTime:OpenPicker", {
|
||||
rect: this.getBoundingContentRect(this._inputElement),
|
||||
dir: this.getComputedDirection(this._inputElement),
|
||||
type: this._inputElement.type,
|
||||
|
@ -174,18 +182,18 @@ class DateTimePickerChild extends JSWindowActorChild {
|
|||
case "MozUpdateDateTimePicker": {
|
||||
let value = this._inputElement.getDateTimeInputBoxValue();
|
||||
value.type = this._inputElement.type;
|
||||
this.sendAsyncMessage("FormDateTime:UpdatePicker", { value });
|
||||
this.mm.sendAsyncMessage("FormDateTime:UpdatePicker", { value });
|
||||
break;
|
||||
}
|
||||
case "MozCloseDateTimePicker": {
|
||||
this.sendAsyncMessage("FormDateTime:ClosePicker", {});
|
||||
this.mm.sendAsyncMessage("FormDateTime:ClosePicker");
|
||||
this.close();
|
||||
break;
|
||||
}
|
||||
case "pagehide": {
|
||||
if (this._inputElement &&
|
||||
this._inputElement.ownerDocument == aEvent.target) {
|
||||
this.sendAsyncMessage("FormDateTime:ClosePicker", {});
|
||||
this.mm.sendAsyncMessage("FormDateTime:ClosePicker");
|
||||
this.close();
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
/* vim: set ts=2 sw=2 sts=2 et tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
"use strict";
|
||||
|
||||
var EXPORTED_SYMBOLS = ["UAWidgetsChild"];
|
||||
|
||||
const {ActorChild} = ChromeUtils.import("resource://gre/modules/ActorChild.jsm");
|
||||
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
class UAWidgetsChild extends JSWindowActorChild {
|
||||
class UAWidgetsChild extends ActorChild {
|
||||
constructor(dispatcher) {
|
||||
super(dispatcher);
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@ FINAL_TARGET_FILES.actors += [
|
|||
'BrowserElementParent.jsm',
|
||||
'ControllersChild.jsm',
|
||||
'DateTimePickerChild.jsm',
|
||||
'DateTimePickerParent.jsm',
|
||||
'ExtFindChild.jsm',
|
||||
'FindBarChild.jsm',
|
||||
'FinderChild.jsm',
|
||||
|
|
|
@ -23,8 +23,7 @@ add_task(async () => {
|
|||
try {
|
||||
await assertShowingMessage(browser, videoID, true);
|
||||
} finally {
|
||||
let uaWidgetUpdate = BrowserTestUtils.waitForContentEvent(browser, "UAWidgetSetupOrChange",
|
||||
true /* capture */);
|
||||
let uaWidgetUpdate = BrowserTestUtils.waitForContentEvent(browser, "UAWidgetSetupOrChange");
|
||||
await BrowserTestUtils.closeWindow(pipWin);
|
||||
await uaWidgetUpdate;
|
||||
}
|
||||
|
|
|
@ -131,23 +131,6 @@ let ACTORS = {
|
|||
allFrames: true,
|
||||
},
|
||||
|
||||
DateTimePicker: {
|
||||
parent: {
|
||||
moduleURI: "resource://gre/actors/DateTimePickerParent.jsm",
|
||||
},
|
||||
|
||||
child: {
|
||||
moduleURI: "resource://gre/actors/DateTimePickerChild.jsm",
|
||||
events: {
|
||||
"MozOpenDateTimePicker": {},
|
||||
"MozUpdateDateTimePicker": {},
|
||||
"MozCloseDateTimePicker": {},
|
||||
},
|
||||
},
|
||||
|
||||
allFrames: true,
|
||||
},
|
||||
|
||||
InlineSpellChecker: {
|
||||
parent: {
|
||||
moduleURI: "resource://gre/actors/InlineSpellCheckerParent.jsm",
|
||||
|
@ -201,18 +184,6 @@ let ACTORS = {
|
|||
|
||||
allFrames: true,
|
||||
},
|
||||
|
||||
UAWidgets: {
|
||||
child: {
|
||||
moduleURI: "resource://gre/actors/UAWidgetsChild.jsm",
|
||||
events: {
|
||||
"UAWidgetSetupOrChange": {},
|
||||
"UAWidgetTeardown": {},
|
||||
},
|
||||
},
|
||||
|
||||
allFrames: true,
|
||||
},
|
||||
};
|
||||
|
||||
let LEGACY_ACTORS = {
|
||||
|
@ -238,6 +209,15 @@ let LEGACY_ACTORS = {
|
|||
},
|
||||
},
|
||||
|
||||
DateTimePicker: {
|
||||
child: {
|
||||
module: "resource://gre/actors/DateTimePickerChild.jsm",
|
||||
events: {
|
||||
"MozOpenDateTimePicker": {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
ExtFind: {
|
||||
child: {
|
||||
module: "resource://gre/actors/ExtFindChild.jsm",
|
||||
|
@ -379,6 +359,16 @@ let LEGACY_ACTORS = {
|
|||
},
|
||||
},
|
||||
|
||||
UAWidgets: {
|
||||
child: {
|
||||
module: "resource://gre/actors/UAWidgetsChild.jsm",
|
||||
events: {
|
||||
"UAWidgetSetupOrChange": {},
|
||||
"UAWidgetTeardown": {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
UnselectedTabHover: {
|
||||
child: {
|
||||
module: "resource://gre/actors/UnselectedTabHoverChild.jsm",
|
||||
|
|
|
@ -11,7 +11,9 @@ function debug(aStr) {
|
|||
}
|
||||
}
|
||||
|
||||
var EXPORTED_SYMBOLS = ["DateTimePickerParent"];
|
||||
var EXPORTED_SYMBOLS = [
|
||||
"DateTimePickerParent",
|
||||
];
|
||||
|
||||
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
ChromeUtils.defineModuleGetter(this, "DateTimePickerPanel", "resource://gre/modules/DateTimePickerPanel.jsm");
|
||||
|
@ -22,53 +24,86 @@ ChromeUtils.defineModuleGetter(this, "DateTimePickerPanel", "resource://gre/modu
|
|||
* DateTimePickerParent listens for picker's events and notifies the content
|
||||
* side (input box) about them.
|
||||
*/
|
||||
class DateTimePickerParent extends JSWindowActorParent {
|
||||
var DateTimePickerParent = {
|
||||
picker: null,
|
||||
weakBrowser: null,
|
||||
|
||||
MESSAGES: [
|
||||
"FormDateTime:OpenPicker",
|
||||
"FormDateTime:ClosePicker",
|
||||
"FormDateTime:UpdatePicker",
|
||||
],
|
||||
|
||||
init() {
|
||||
for (let msg of this.MESSAGES) {
|
||||
Services.mm.addMessageListener(msg, this);
|
||||
}
|
||||
},
|
||||
|
||||
uninit() {
|
||||
for (let msg of this.MESSAGES) {
|
||||
Services.mm.removeMessageListener(msg, this);
|
||||
}
|
||||
},
|
||||
|
||||
// MessageListener
|
||||
receiveMessage(aMessage) {
|
||||
debug("receiveMessage: " + aMessage.name);
|
||||
switch (aMessage.name) {
|
||||
case "FormDateTime:OpenPicker": {
|
||||
let topBrowsingContext = this.manager.browsingContext.top;
|
||||
let browser = topBrowsingContext.embedderElement;
|
||||
this.showPicker(browser, aMessage.data);
|
||||
this.showPicker(aMessage.target, aMessage.data);
|
||||
break;
|
||||
}
|
||||
case "FormDateTime:ClosePicker": {
|
||||
if (!this._picker) {
|
||||
if (!this.picker) {
|
||||
return;
|
||||
}
|
||||
this._picker.closePicker();
|
||||
this.picker.closePicker();
|
||||
this.close();
|
||||
break;
|
||||
}
|
||||
case "FormDateTime:UpdatePicker": {
|
||||
if (!this._picker) {
|
||||
if (!this.picker) {
|
||||
return;
|
||||
}
|
||||
this._picker.setPopupValue(aMessage.data);
|
||||
this.picker.setPopupValue(aMessage.data);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// nsIDOMEventListener
|
||||
handleEvent(aEvent) {
|
||||
debug("handleEvent: " + aEvent.type);
|
||||
switch (aEvent.type) {
|
||||
case "DateTimePickerValueChanged": {
|
||||
this.sendAsyncMessage("FormDateTime:PickerValueChanged", aEvent.detail);
|
||||
this.updateInputBoxValue(aEvent);
|
||||
break;
|
||||
}
|
||||
case "popuphidden": {
|
||||
this.sendAsyncMessage("FormDateTime:PickerClosed", {});
|
||||
this._picker.closePicker();
|
||||
let browser = this.weakBrowser ? this.weakBrowser.get() : null;
|
||||
if (browser) {
|
||||
browser.messageManager.sendAsyncMessage("FormDateTime:PickerClosed");
|
||||
}
|
||||
this.picker.closePicker();
|
||||
this.close();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Called when picker value has changed, notify input box about it.
|
||||
updateInputBoxValue(aEvent) {
|
||||
let browser = this.weakBrowser ? this.weakBrowser.get() : null;
|
||||
if (browser) {
|
||||
browser.messageManager.sendAsyncMessage(
|
||||
"FormDateTime:PickerValueChanged", aEvent.detail);
|
||||
}
|
||||
},
|
||||
|
||||
// Get picker from browser and show it anchored to the input box.
|
||||
showPicker(aBrowser, aData) {
|
||||
|
@ -94,40 +129,42 @@ class DateTimePickerParent extends JSWindowActorParent {
|
|||
return;
|
||||
}
|
||||
|
||||
this.weakBrowser = Cu.getWeakReference(aBrowser);
|
||||
if (!aBrowser.dateTimePicker) {
|
||||
debug("aBrowser.dateTimePicker not found, exiting now.");
|
||||
return;
|
||||
}
|
||||
this._picker = new DateTimePickerPanel(aBrowser.dateTimePicker);
|
||||
this.picker = new DateTimePickerPanel(aBrowser.dateTimePicker);
|
||||
// The arrow panel needs an anchor to work. The popupAnchor (this._anchor)
|
||||
// is a transparent div that the arrow can point to.
|
||||
this._picker.openPicker(type, this._anchor, detail);
|
||||
this.picker.openPicker(type, this._anchor, detail);
|
||||
|
||||
this.addPickerListeners();
|
||||
}
|
||||
},
|
||||
|
||||
// Picker is closed, do some cleanup.
|
||||
close() {
|
||||
this.removePickerListeners();
|
||||
this._picker = null;
|
||||
this.picker = null;
|
||||
this.weakBrowser = null;
|
||||
this._anchor.hidden = true;
|
||||
}
|
||||
},
|
||||
|
||||
// Listen to picker's event.
|
||||
addPickerListeners() {
|
||||
if (!this._picker) {
|
||||
if (!this.picker) {
|
||||
return;
|
||||
}
|
||||
this._picker.element.addEventListener("popuphidden", this);
|
||||
this._picker.element.addEventListener("DateTimePickerValueChanged", this);
|
||||
}
|
||||
this.picker.element.addEventListener("popuphidden", this);
|
||||
this.picker.element.addEventListener("DateTimePickerValueChanged", this);
|
||||
},
|
||||
|
||||
// Stop listening to picker's event.
|
||||
removePickerListeners() {
|
||||
if (!this._picker) {
|
||||
if (!this.picker) {
|
||||
return;
|
||||
}
|
||||
this._picker.element.removeEventListener("popuphidden", this);
|
||||
this._picker.element.removeEventListener("DateTimePickerValueChanged", this);
|
||||
}
|
||||
}
|
||||
this.picker.element.removeEventListener("popuphidden", this);
|
||||
this.picker.element.removeEventListener("DateTimePickerValueChanged", this);
|
||||
},
|
||||
};
|
|
@ -179,6 +179,7 @@ EXTRA_JS_MODULES += [
|
|||
'CreditCard.jsm',
|
||||
'css-selector.js',
|
||||
'DateTimePickerPanel.jsm',
|
||||
'DateTimePickerParent.jsm',
|
||||
'DeferredTask.jsm',
|
||||
'Deprecated.jsm',
|
||||
'E10SUtils.jsm',
|
||||
|
|
Загрузка…
Ссылка в новой задаче