зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1300784 - Combine non-e10s and e10s select dropdown implementations, preffed off. r=mconley
Patch by Michael Wright and Freddy (Junshan) Luo. MozReview-Commit-ID: G0CaZplABpC --HG-- extra : rebase_source : d0e29ecc80835bf227f623643518ec0cf2d01364
This commit is contained in:
Родитель
55b519ccc9
Коммит
7fde7078aa
|
@ -392,7 +392,6 @@ support-files =
|
|||
contentSearchUI.html
|
||||
contentSearchUI.js
|
||||
[browser_selectpopup.js]
|
||||
run-if = e10s
|
||||
[browser_selectTabAtIndex.js]
|
||||
[browser_ssl_error_reports.js]
|
||||
[browser_star_hsts.js]
|
||||
|
|
|
@ -195,6 +195,14 @@ function* doSelectTests(contentType, dtd) {
|
|||
yield BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
|
||||
add_task(function* setup() {
|
||||
yield SpecialPowers.pushPrefEnv({
|
||||
"set": [
|
||||
["dom.select_popup_in_parent.enabled", true],
|
||||
]
|
||||
});
|
||||
});
|
||||
|
||||
add_task(function*() {
|
||||
yield doSelectTests("text/html", "");
|
||||
});
|
||||
|
|
|
@ -118,6 +118,12 @@ nsListControlFrame::~nsListControlFrame()
|
|||
mComboboxFrame = nullptr;
|
||||
}
|
||||
|
||||
static bool ShouldFireDropDownEvent() {
|
||||
return (XRE_IsContentProcess() &&
|
||||
Preferences::GetBool("browser.tabs.remote.desktopbehavior", false)) ||
|
||||
Preferences::GetBool("dom.select_popup_in_parent.enabled", false);
|
||||
}
|
||||
|
||||
// for Bug 47302 (remove this comment later)
|
||||
void
|
||||
nsListControlFrame::DestroyFrom(nsIFrame* aDestructRoot)
|
||||
|
@ -141,8 +147,7 @@ nsListControlFrame::DestroyFrom(nsIFrame* aDestructRoot)
|
|||
mContent->RemoveSystemEventListener(NS_LITERAL_STRING("mousemove"),
|
||||
mEventListener, false);
|
||||
|
||||
if (XRE_IsContentProcess() &&
|
||||
Preferences::GetBool("browser.tabs.remote.desktopbehavior", false)) {
|
||||
if (ShouldFireDropDownEvent()) {
|
||||
nsContentUtils::AddScriptRunner(
|
||||
new AsyncEventDispatcher(mContent,
|
||||
NS_LITERAL_STRING("mozhidedropdown"), true,
|
||||
|
@ -1789,8 +1794,7 @@ nsListControlFrame::GetIndexFromDOMEvent(nsIDOMEvent* aMouseEvent,
|
|||
static bool
|
||||
FireShowDropDownEvent(nsIContent* aContent, bool aShow, bool aIsSourceTouchEvent)
|
||||
{
|
||||
if (XRE_IsContentProcess() &&
|
||||
Preferences::GetBool("browser.tabs.remote.desktopbehavior", false)) {
|
||||
if (ShouldFireDropDownEvent()) {
|
||||
nsString eventName;
|
||||
if (aShow) {
|
||||
eventName = aIsSourceTouchEvent ? NS_LITERAL_STRING("mozshowdropdown-sourcetouch") :
|
||||
|
|
|
@ -117,6 +117,7 @@ pref("browser.download.forbid_open_with", false);
|
|||
|
||||
// Whether or not testing features are enabled.
|
||||
pref("dom.quotaManager.testing", false);
|
||||
pref("dom.select_popup_in_parent.enabled", false);
|
||||
|
||||
// Whether or not indexedDB is enabled.
|
||||
pref("dom.indexedDB.enabled", true);
|
||||
|
|
|
@ -15,6 +15,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "ReaderMode",
|
|||
"resource://gre/modules/ReaderMode.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "BrowserUtils",
|
||||
"resource://gre/modules/BrowserUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "SelectContentHelper",
|
||||
"resource://gre/modules/SelectContentHelper.jsm");
|
||||
|
||||
var global = this;
|
||||
|
||||
|
@ -1825,3 +1827,22 @@ let TelemetryScrollTracker = {
|
|||
};
|
||||
|
||||
TelemetryScrollTracker.init();
|
||||
|
||||
addEventListener("mozshowdropdown", event => {
|
||||
if (!event.isTrusted)
|
||||
return;
|
||||
|
||||
if (!SelectContentHelper.open) {
|
||||
new SelectContentHelper(event.target, {isOpenedViaTouch: false}, this);
|
||||
}
|
||||
});
|
||||
|
||||
addEventListener("mozshowdropdown-sourcetouch", event => {
|
||||
if (!event.isTrusted)
|
||||
return;
|
||||
|
||||
if (!SelectContentHelper.open) {
|
||||
new SelectContentHelper(event.target, {isOpenedViaTouch: true}, this);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -62,7 +62,6 @@ toolkit.jar:
|
|||
content/global/resetProfile.js
|
||||
content/global/resetProfile.xul
|
||||
content/global/resetProfileProgress.xul
|
||||
content/global/select-child.js
|
||||
content/global/TopLevelVideoDocument.js
|
||||
content/global/timepicker.xhtml
|
||||
content/global/treeUtils.js
|
||||
|
|
|
@ -956,6 +956,12 @@
|
|||
this.messageManager.addMessageListener("AudioPlayback:Start", this);
|
||||
this.messageManager.addMessageListener("AudioPlayback:Stop", this);
|
||||
this.messageManager.addMessageListener("AudioPlayback:Block", this);
|
||||
|
||||
if (this.hasAttribute("selectmenulist")) {
|
||||
this.messageManager.addMessageListener("Forms:ShowDropDown", this);
|
||||
this.messageManager.addMessageListener("Forms:HideDropDown", this);
|
||||
}
|
||||
|
||||
}
|
||||
]]>
|
||||
</constructor>
|
||||
|
@ -974,6 +980,11 @@
|
|||
<method name="destroy">
|
||||
<body>
|
||||
<![CDATA[
|
||||
// Make sure that any open select is closed.
|
||||
if (this._selectParentHelper) {
|
||||
let menulist = document.getElementById(this.getAttribute("selectmenulist"));
|
||||
this._selectParentHelper.hide(menulist, this);
|
||||
}
|
||||
if (this.mDestroyed)
|
||||
return;
|
||||
this.mDestroyed = true;
|
||||
|
@ -1045,6 +1056,27 @@
|
|||
case "AudioPlayback:Block":
|
||||
this.audioPlaybackBlocked();
|
||||
break;
|
||||
case "Forms:ShowDropDown": {
|
||||
if (!this._selectParentHelper) {
|
||||
this._selectParentHelper =
|
||||
Cu.import("resource://gre/modules/SelectParentHelper.jsm", {}).SelectParentHelper;
|
||||
}
|
||||
|
||||
let menulist = document.getElementById(this.getAttribute("selectmenulist"));
|
||||
menulist.menupopup.style.direction = data.direction;
|
||||
this._selectParentHelper.populate(menulist, data.options, data.selectedIndex, this._fullZoom);
|
||||
this._selectParentHelper.open(this, menulist, data.rect, data.isOpenedViaTouch);
|
||||
break;
|
||||
}
|
||||
|
||||
case "Forms:HideDropDown": {
|
||||
if (this._selectParentHelper) {
|
||||
let menulist = document.getElementById(this.getAttribute("selectmenulist"));
|
||||
this._selectParentHelper.hide(menulist, this);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return undefined;
|
||||
]]></body>
|
||||
|
|
|
@ -389,7 +389,6 @@
|
|||
if (this.hasAttribute("selectmenulist")) {
|
||||
this.messageManager.addMessageListener("Forms:ShowDropDown", this);
|
||||
this.messageManager.addMessageListener("Forms:HideDropDown", this);
|
||||
this.messageManager.loadFrameScript("chrome://global/content/select-child.js", true);
|
||||
}
|
||||
|
||||
if (!this.hasAttribute("disablehistory")) {
|
||||
|
@ -500,14 +499,6 @@
|
|||
break;
|
||||
}
|
||||
|
||||
case "Forms:HideDropDown": {
|
||||
if (this._selectParentHelper) {
|
||||
let menulist = document.getElementById(this.getAttribute("selectmenulist"));
|
||||
this._selectParentHelper.hide(menulist, this);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "DOMFullscreen:RequestExit": {
|
||||
let windowUtils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
|
||||
.getInterface(Components.interfaces.nsIDOMWindowUtils);
|
||||
|
|
Загрузка…
Ссылка в новой задаче