mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Bug 708397 - "addon-options-displayed" notification fires before XBL bindings apply; r=Unfocused, a=Unfocused
This commit is contained in:
parent
929200be45
commit
f8efdbf2ab
@ -2881,7 +2881,8 @@ var gDetailView = {
|
||||
var xml = xhr.responseXML;
|
||||
var settings = xml.querySelectorAll(":root > setting");
|
||||
|
||||
for (var i = 0, first = true; i < settings.length; i++) {
|
||||
var firstSetting = null;
|
||||
for (var i = 0; i < settings.length; i++) {
|
||||
var setting = settings[i];
|
||||
|
||||
// Remove setting description, for replacement later
|
||||
@ -2897,9 +2898,9 @@ var gDetailView = {
|
||||
|
||||
rows.appendChild(setting);
|
||||
var visible = window.getComputedStyle(setting, null).getPropertyValue("display") != "none";
|
||||
if (first && visible) {
|
||||
if (!firstSetting && visible) {
|
||||
setting.setAttribute("first-row", true);
|
||||
first = false;
|
||||
firstSetting = setting;
|
||||
}
|
||||
|
||||
// Add a new row containing the description
|
||||
@ -2916,7 +2917,20 @@ var gDetailView = {
|
||||
}
|
||||
}
|
||||
|
||||
Services.obs.notifyObservers(document, "addon-options-displayed", this._addon.id);
|
||||
// Ensure the page has loaded and force the XBL bindings to be synchronously applied,
|
||||
// then notify observers.
|
||||
if (gViewController.viewPort.selectedPanel.hasAttribute("loading")) {
|
||||
gDetailView.node.addEventListener("ViewChanged", function viewChangedEventListener() {
|
||||
gDetailView.node.removeEventListener("ViewChanged", viewChangedEventListener, false);
|
||||
if (firstSetting)
|
||||
firstSetting.clientTop;
|
||||
Services.obs.notifyObservers(document, "addon-options-displayed", gDetailView._addon.id);
|
||||
}, false);
|
||||
} else {
|
||||
if (firstSetting)
|
||||
firstSetting.clientTop;
|
||||
Services.obs.notifyObservers(document, "addon-options-displayed", this._addon.id);
|
||||
}
|
||||
},
|
||||
|
||||
getSelectedAddon: function() {
|
||||
|
@ -16,8 +16,14 @@ MockFilePicker.reset();
|
||||
var observer = {
|
||||
lastData: null,
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
if (aTopic == "addon-options-displayed")
|
||||
if (aTopic == "addon-options-displayed") {
|
||||
this.lastData = aData;
|
||||
// Test if the binding has applied before the observers are notified. We test the second setting here,
|
||||
// because the code operates on the first setting and we want to check it applies to all.
|
||||
var setting = aSubject.querySelector("rows > setting[first-row] ~ setting");
|
||||
var input = gManagerWindow.document.getAnonymousElementByAttribute(setting, "class", "setting-label");
|
||||
isnot(input, null, "XBL binding should be applied");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -463,11 +469,15 @@ add_test(function() {
|
||||
var grid = gManagerWindow.document.getElementById("detail-grid");
|
||||
var settings = grid.querySelectorAll("rows > setting");
|
||||
is(settings.length, 0, "Grid should not have settings children");
|
||||
|
||||
observer.lastData = null;
|
||||
|
||||
// enable
|
||||
var button = gManagerWindow.document.getElementById("detail-enable-btn");
|
||||
EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
|
||||
|
||||
is(observer.lastData, "inlinesettings1@tests.mozilla.org", "Observer notification should have fired");
|
||||
|
||||
settings = grid.querySelectorAll("rows > setting");
|
||||
is(settings.length, SETTINGS_ROWS, "Grid should have settings children");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user