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:
Michael 2016-12-21 11:09:39 -05:00
Родитель 55b519ccc9
Коммит 7fde7078aa
8 изменённых файлов: 70 добавлений и 15 удалений

Просмотреть файл

@ -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);