bug 872137 - Make history menu use PromptService asynchronously r=wesj

--HG--
extra : rebase_source : 59a3dc928967a3cf89001f77fb4d7ffd8cd07129
This commit is contained in:
Brad Lassey 2013-05-28 20:14:41 -04:00
Родитель bfca27cbde
Коммит 6f7c102372
1 изменённых файлов: 28 добавлений и 5 удалений

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

@ -63,6 +63,10 @@ XPCOMUtils.defineLazyGetter(this, "Prompt", function() {
return temp.Prompt;
});
XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
"@mozilla.org/uuid-generator;1",
"nsIUUIDGenerator");
// Lazily-loaded browser scripts:
[
["HelperApps", "chrome://browser/content/HelperApps.js"],
@ -244,6 +248,7 @@ var BrowserApp = {
_tabs: [],
_selectedTab: null,
_prefObservers: [],
_promptHandlers: {},
get isTablet() {
let sysInfo = Cc["@mozilla.org/system-info;1"].getService(Ci.nsIPropertyBag2);
@ -293,6 +298,7 @@ var BrowserApp = {
Services.obs.addObserver(this, "FormHistory:Init", false);
Services.obs.addObserver(this, "gather-telemetry", false);
Services.obs.addObserver(this, "keyword-search", false);
Services.obs.addObserver(this, "Prompt:Reply", false);
Services.obs.addObserver(this, "sessionstore-state-purge-complete", false);
@ -1418,6 +1424,18 @@ var BrowserApp = {
browser.contentDocument.mozCancelFullScreen();
break;
case "Prompt:Reply":
{
let data = JSON.parse(aData);
let guid = data.guid;
let handler = this._promptHandlers[guid];
if (!handler)
break;
this._promptHandlers[guid];
handler(data);
}
break;
case "Viewport:Change":
if (this.isBrowserContentDocumentDisplayed())
this.selectedTab.setViewport(JSON.parse(aData));
@ -1482,9 +1500,12 @@ var BrowserApp = {
// selecting selIndex(if fromIndex<=selIndex<=toIndex)
showHistory: function(fromIndex, toIndex, selIndex) {
let browser = this.selectedBrowser;
let guid = uuidgen.generateUUID().toString();
let result = {
type: "Prompt:Show",
multiple: false,
async: true,
guid: guid,
selected: [],
listitems: []
};
@ -1501,11 +1522,13 @@ var BrowserApp = {
result.listitems.push(item);
result.selected.push(i == selIndex);
}
let data = JSON.parse(sendMessageToJava(result));
let selected = data.button;
if (selected == -1)
return;
browser.gotoIndex(toIndex-selected);
this._promptHandlers[guid] = function (data) {
let selected = data.button;
if (selected == -1)
return;
browser.gotoIndex(toIndex-selected);
};
sendMessageToJava(result);
},
};