mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Merge mozilla-central to mozilla-inbound
This commit is contained in:
commit
b867139a85
@ -54,7 +54,7 @@
|
||||
|
||||
<?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://global/skin/webConsole.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/devtools/webconsole.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
|
||||
|
||||
<?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
|
||||
|
@ -12,10 +12,10 @@
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#highlighter-veil-container:not([locked]) > .highlighter-veil,
|
||||
#highlighter-veil-container:not([locked]) > #highlighter-veil-middlebox,
|
||||
#highlighter-veil-container:not([locked]) > #highlighter-veil-middlebox > .highlighter-veil,
|
||||
#highlighter-veil-container:not([locked]) > #highlighter-veil-middlebox > #highlighter-veil-transparentbox {
|
||||
#highlighter-veil-container:not([disable-transitions]) > .highlighter-veil,
|
||||
#highlighter-veil-container:not([disable-transitions]) > #highlighter-veil-middlebox,
|
||||
#highlighter-veil-container:not([disable-transitions]) > #highlighter-veil-middlebox > .highlighter-veil,
|
||||
#highlighter-veil-container:not([disable-transitions]) > #highlighter-veil-middlebox > #highlighter-veil-transparentbox {
|
||||
-moz-transition-property: width, height;
|
||||
-moz-transition-duration: 0.1s;
|
||||
-moz-transition-timing-function: linear;
|
||||
@ -51,7 +51,7 @@
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
#highlighter-nodeinfobar-container:not([locked]) {
|
||||
#highlighter-nodeinfobar-container:not([disable-transitions]) {
|
||||
-moz-transition-property: top, left;
|
||||
-moz-transition-duration: 0.1s;
|
||||
-moz-transition-timing-function: linear;
|
||||
@ -63,6 +63,17 @@
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
#highlighter-nodeinfobar-container[locked] > #highlighter-nodeinfobar {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
#highlighter-nodeinfobar-id,
|
||||
.highlighter-nodeinfobar-class,
|
||||
#highlighter-nodeinfobar-tagname {
|
||||
-moz-user-select: text;
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
.highlighter-nodeinfobar-arrow {
|
||||
display: none;
|
||||
}
|
||||
@ -83,14 +94,6 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
#highlighter-nodeinfobar-id::before {
|
||||
content: "#";
|
||||
}
|
||||
|
||||
.highlighter-nodeinfobar-class::before {
|
||||
content: ".";
|
||||
}
|
||||
|
||||
#highlighter-nodeinfobar-tagname {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
@ -1532,10 +1532,10 @@ ContentPermissionPrompt.prototype = {
|
||||
|
||||
// Different message/options if it is a local file
|
||||
if (requestingURI.schemeIs("file")) {
|
||||
message = browserBundle.formatStringFromName("geolocation.fileWantsToKnow",
|
||||
message = browserBundle.formatStringFromName("geolocation.shareWithFile",
|
||||
[requestingURI.path], 1);
|
||||
} else {
|
||||
message = browserBundle.formatStringFromName("geolocation.siteWantsToKnow",
|
||||
message = browserBundle.formatStringFromName("geolocation.shareWithSite",
|
||||
[requestingURI.host], 1);
|
||||
|
||||
// Don't offer to "always/never share" in PB mode
|
||||
@ -1545,16 +1545,16 @@ ContentPermissionPrompt.prototype = {
|
||||
|
||||
if (!inPrivateBrowsing) {
|
||||
secondaryActions.push({
|
||||
label: browserBundle.GetStringFromName("geolocation.alwaysShare"),
|
||||
accessKey: browserBundle.GetStringFromName("geolocation.alwaysShare.accesskey"),
|
||||
label: browserBundle.GetStringFromName("geolocation.alwaysShareLocation"),
|
||||
accessKey: browserBundle.GetStringFromName("geolocation.alwaysShareLocation.accesskey"),
|
||||
callback: function () {
|
||||
Services.perms.add(requestingURI, "geo", Ci.nsIPermissionManager.ALLOW_ACTION);
|
||||
request.allow();
|
||||
}
|
||||
});
|
||||
secondaryActions.push({
|
||||
label: browserBundle.GetStringFromName("geolocation.neverShare"),
|
||||
accessKey: browserBundle.GetStringFromName("geolocation.neverShare.accesskey"),
|
||||
label: browserBundle.GetStringFromName("geolocation.neverShareLocation"),
|
||||
accessKey: browserBundle.GetStringFromName("geolocation.neverShareLocation.accesskey"),
|
||||
callback: function () {
|
||||
Services.perms.add(requestingURI, "geo", Ci.nsIPermissionManager.DENY_ACTION);
|
||||
request.cancel();
|
||||
|
@ -359,7 +359,7 @@ SessionStoreService.prototype = {
|
||||
// replace the crashed session with a restore-page-only session
|
||||
let pageData = {
|
||||
url: "about:sessionrestore",
|
||||
formdata: { "#sessionData": JSON.stringify(this._initialState) }
|
||||
formdata: { "#sessionData": this._initialState }
|
||||
};
|
||||
this._initialState = { windows: [{ tabs: [{ entries: [pageData] }] }] };
|
||||
}
|
||||
@ -2140,10 +2140,17 @@ SessionStoreService.prototype = {
|
||||
}
|
||||
var isHTTPS = this._getURIFromString((aContent.parent || aContent).
|
||||
document.location.href).schemeIs("https");
|
||||
if (aFullData || this._checkPrivacyLevel(isHTTPS, aIsPinned) ||
|
||||
aContent.top.document.location.href == "about:sessionrestore") {
|
||||
let isAboutSR = aContent.top.document.location.href == "about:sessionrestore";
|
||||
if (aFullData || this._checkPrivacyLevel(isHTTPS, aIsPinned) || isAboutSR) {
|
||||
if (aFullData || aUpdateFormData) {
|
||||
let formData = this._collectFormDataForFrame(aContent.document);
|
||||
|
||||
// We want to avoid saving data for about:sessionrestore as a string.
|
||||
// Since it's stored in the form as stringified JSON, stringifying further
|
||||
// causes an explosion of escape characters. cf. bug 467409
|
||||
if (formData && isAboutSR)
|
||||
formData["#sessionData"] = JSON.parse(formData["#sessionData"]);
|
||||
|
||||
if (formData)
|
||||
aData.formdata = formData;
|
||||
else if (aData.formdata)
|
||||
@ -2981,8 +2988,9 @@ SessionStoreService.prototype = {
|
||||
restoreHistory:
|
||||
function sss_restoreHistory(aWindow, aTabs, aTabData, aIdMap, aDocIdentMap) {
|
||||
var _this = this;
|
||||
while (aTabs.length > 0 && (!aTabs[0].linkedBrowser.__SS_tabStillLoading || !aTabs[0].parentNode)) {
|
||||
aTabs.shift(); // this tab got removed before being completely restored
|
||||
// if the tab got removed before being completely restored, then skip it
|
||||
while (aTabs.length > 0 && !(this._canRestoreTabHistory(aTabs[0]))) {
|
||||
aTabs.shift();
|
||||
aTabData.shift();
|
||||
}
|
||||
if (aTabs.length == 0) {
|
||||
@ -3379,6 +3387,13 @@ SessionStoreService.prototype = {
|
||||
|
||||
let eventType;
|
||||
let value = aData[key];
|
||||
|
||||
// for about:sessionrestore we saved the field as JSON to avoid nested
|
||||
// instances causing humongous sessionstore.js files. cf. bug 467409
|
||||
if (aURL == "about:sessionrestore" && typeof value == "object") {
|
||||
value = JSON.stringify(value);
|
||||
}
|
||||
|
||||
if (typeof value == "string" && node.type != "file") {
|
||||
if (node.value == value)
|
||||
continue; // don't dispatch an input event for no change
|
||||
@ -3996,6 +4011,20 @@ SessionStoreService.prototype = {
|
||||
!aTabState.userTypedValue);
|
||||
},
|
||||
|
||||
/**
|
||||
* Determine if we can restore history into this tab.
|
||||
* This will be false when a tab has been removed (usually between
|
||||
* restoreHistoryPrecursor && restoreHistory) or if the tab is still marked
|
||||
* as loading.
|
||||
*
|
||||
* @param aTab
|
||||
* @returns boolean
|
||||
*/
|
||||
_canRestoreTabHistory: function sss__canRestoreTabHistory(aTab) {
|
||||
return aTab.parentNode && aTab.linkedBrowser &&
|
||||
aTab.linkedBrowser.__SS_tabStillLoading;
|
||||
},
|
||||
|
||||
/**
|
||||
* This is going to take a state as provided at startup (via
|
||||
* nsISessionStartup.state) and split it into 2 parts. The first part
|
||||
|
@ -100,6 +100,7 @@ _BROWSER_TEST_FILES = \
|
||||
browser_465223.js \
|
||||
browser_466937.js \
|
||||
browser_466937_sample.html \
|
||||
browser_467409-backslashplosion.js \
|
||||
browser_477657.js \
|
||||
browser_480148.js \
|
||||
browser_480893.js \
|
||||
|
@ -0,0 +1,90 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// Test Summary:
|
||||
// 1. Open about:sessionrestore via setBrowserState where formdata is a JS object, not a string
|
||||
// 1a. Check that #sessionData on the page is readable after JSON.parse (skipped, checking formdata is sufficient)
|
||||
// 1b. Check that there are no backslashes in the formdata
|
||||
// 1c. Check that formdata (via getBrowserState) doesn't require JSON.parse
|
||||
//
|
||||
// 2. Use the current state (currently about:sessionrestore with data) and then open than in a new instance of about:sessionrestore
|
||||
// 2a. Check that there are no backslashes in the formdata
|
||||
// 2b. Check that formdata (via getBrowserState) doesn't require JSON.parse
|
||||
//
|
||||
// 3. [backwards compat] Use a stringified state as formdata when opening about:sessionrestore
|
||||
// 3a. Make sure there are nodes in the tree on about:sessionrestore (skipped, checking formdata is sufficient)
|
||||
// 3b. Check that there are no backslashes in the formdata
|
||||
// 3c. Check that formdata (via getBrowserState) doesn't require JSON.parse
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
let blankState = { windows: [{ tabs: [{ entries: [{ url: "about:blank" }] }]}]};
|
||||
let crashState = { windows: [{ tabs: [{ entries: [{ url: "about:mozilla" }] }]}]};
|
||||
|
||||
let pagedata = { url: "about:sessionrestore",
|
||||
formdata: { "#sessionData": crashState } };
|
||||
let state = { windows: [{ tabs: [{ entries: [pagedata] }] }] };
|
||||
|
||||
// test1 calls test2 calls test3 calls finish
|
||||
test1(state);
|
||||
|
||||
|
||||
function test1(aState) {
|
||||
waitForBrowserState(aState, function() {
|
||||
checkState("test1", test2);
|
||||
});
|
||||
}
|
||||
|
||||
function test2(aState) {
|
||||
let pagedata2 = { url: "about:sessionrestore",
|
||||
formdata: { "#sessionData": aState } };
|
||||
let state2 = { windows: [{ tabs: [{ entries: [pagedata2] }] }] };
|
||||
|
||||
waitForBrowserState(state2, function() {
|
||||
checkState("test2", test3);
|
||||
});
|
||||
}
|
||||
|
||||
function test3(aState) {
|
||||
let pagedata3 = { url: "about:sessionrestore",
|
||||
formdata: { "#sessionData": JSON.stringify(crashState) } };
|
||||
let state3 = { windows: [{ tabs: [{ entries: [pagedata3] }] }] };
|
||||
waitForBrowserState(state3, function() {
|
||||
// In theory we should do inspection of the treeview on about:sessionrestore,
|
||||
// but we don't actually need to. If we fail tests in checkState then
|
||||
// about:sessionrestore won't be able to turn the form value into a usable page.
|
||||
checkState("test3", function() waitForBrowserState(blankState, finish));
|
||||
});
|
||||
}
|
||||
|
||||
function checkState(testName, callback) {
|
||||
let curState = JSON.parse(ss.getBrowserState());
|
||||
let formdata = curState.windows[0].tabs[0].entries[0].formdata;
|
||||
|
||||
ok(formdata["#sessionData"], testName + ": we have form data for about:sessionrestore");
|
||||
|
||||
let sessionData_raw = JSON.stringify(formdata["#sessionData"]);
|
||||
ok(!/\\/.test(sessionData_raw), testName + ": #sessionData contains no backslashes");
|
||||
info(sessionData_raw);
|
||||
|
||||
let gotError = false;
|
||||
try {
|
||||
JSON.parse(formdata["#sessionData"]);
|
||||
}
|
||||
catch (e) {
|
||||
info(testName + ": got error: " + e);
|
||||
gotError = true;
|
||||
}
|
||||
ok(gotError, testName + ": attempting to JSON.parse form data threw error");
|
||||
|
||||
// Panorama sticks JSON into extData, which we stringify causing the
|
||||
// naive backslash check to fail. extData doesn't matter in the grand
|
||||
// scheme here, so we'll delete the extData so doesn't end up in future states.
|
||||
delete curState.windows[0].extData;
|
||||
delete curState.windows[0].tabs[0].extData;
|
||||
callback(curState);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ function test() {
|
||||
};
|
||||
let pageData = {
|
||||
url: "about:sessionrestore",
|
||||
formdata: { "#sessionData": "(" + JSON.stringify(oldState) + ")" }
|
||||
formdata: { "#sessionData": oldState }
|
||||
};
|
||||
let state = { windows: [{ tabs: [{ entries: [pageData] }] }] };
|
||||
|
||||
|
@ -1091,8 +1091,8 @@ GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
// immediately - don't animate
|
||||
remove: function GroupItem_remove(a, options) {
|
||||
try {
|
||||
var $el;
|
||||
var item;
|
||||
let $el;
|
||||
let item;
|
||||
|
||||
if (a.isAnItem) {
|
||||
item = a;
|
||||
@ -1105,7 +1105,7 @@ GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
if (!options)
|
||||
options = {};
|
||||
|
||||
var index = this._children.indexOf(item);
|
||||
let index = this._children.indexOf(item);
|
||||
if (index != -1)
|
||||
this._children.splice(index, 1);
|
||||
|
||||
@ -1142,7 +1142,9 @@ GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
options.dontClose = true;
|
||||
|
||||
let closed = options.dontClose ? false : this.closeIfEmpty();
|
||||
if (closed) {
|
||||
if (closed ||
|
||||
(this._children.length == 0 && !gBrowser.selectedTab.pinned &&
|
||||
!item.isDragging)) {
|
||||
this._makeLastActiveGroupItemActive();
|
||||
} else if (!options.dontArrange) {
|
||||
this.arrange({animate: !options.immediately});
|
||||
|
@ -260,9 +260,15 @@ TabItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
|
||||
function TabItem_loadThumbnail_callback(error, imageData) {
|
||||
// we could have been unlinked while waiting for the thumbnail to load
|
||||
if (error || !imageData || !self.tab)
|
||||
if (!self.tab)
|
||||
return;
|
||||
|
||||
if (error || !imageData) {
|
||||
// paint the canvas to avoid leaving traces when dragging tab over it
|
||||
self.tabCanvas.paint();
|
||||
return;
|
||||
}
|
||||
|
||||
self._sendToSubscribers("loadedCachedImageData");
|
||||
|
||||
// If we have a cached image, then show it if the loaded URL matches
|
||||
|
@ -164,6 +164,7 @@ _BROWSER_FILES = \
|
||||
browser_tabview_bug685692.js \
|
||||
browser_tabview_bug686654.js \
|
||||
browser_tabview_bug697390.js \
|
||||
browser_tabview_bug705621.js \
|
||||
browser_tabview_click_group.js \
|
||||
browser_tabview_dragdrop.js \
|
||||
browser_tabview_exit_button.js \
|
||||
|
@ -49,6 +49,10 @@ function onTabViewWindowLoaded() {
|
||||
is(appTabCount(groupItemTwo), 1,
|
||||
"there's an app tab icon in the second group");
|
||||
|
||||
// When the tab was pinned, the last active group with an item got the focus.
|
||||
// Therefore, switching the focus back to group item one.
|
||||
contentWindow.UI.setActive(groupItemOne);
|
||||
|
||||
// unpin the tab, make sure the icon goes away and the TabItem comes on
|
||||
gBrowser.unpinTab(xulTab);
|
||||
is(groupItemOne._children.length, 1, "the app tab's TabItem is back");
|
||||
|
@ -104,6 +104,10 @@ function onTabViewShown(win) {
|
||||
ok(!trayContainer.hasClass("appTabTrayContainerTruncated"),
|
||||
"$appTabTray container does not have .appTabTrayContainerTruncated");
|
||||
|
||||
// When the tab was pinned, the last active group with an item got the focus.
|
||||
// Therefore, switching the focus back to group item one.
|
||||
contentWindow.UI.setActive(groupItem);
|
||||
|
||||
// unpin the last remaining tab
|
||||
gBrowser.unpinTab(xulTabs[0]);
|
||||
|
||||
|
30
browser/components/tabview/test/browser_tabview_bug705621.js
Normal file
30
browser/components/tabview/test/browser_tabview_bug705621.js
Normal file
@ -0,0 +1,30 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
newWindowWithTabView(function(win) {
|
||||
registerCleanupFunction(function() {
|
||||
win.close();
|
||||
});
|
||||
|
||||
let cw = win.TabView.getContentWindow();
|
||||
|
||||
let groupItemOne = cw.GroupItems.groupItems[0];
|
||||
is(groupItemOne.getChildren().length, 1, "Group one has 1 tab item");
|
||||
|
||||
let groupItemTwo = createGroupItemWithBlankTabs(win, 300, 300, 40, 1);
|
||||
is(groupItemTwo.getChildren().length, 1, "Group two has 2 tab items");
|
||||
|
||||
whenTabViewIsHidden(function() {
|
||||
executeSoon(function() {
|
||||
win.gBrowser.removeTab(win.gBrowser.selectedTab);
|
||||
is(cw.UI.getActiveTab(), groupItemOne.getChild(0), "TabItem in Group one is selected");
|
||||
finish();
|
||||
});
|
||||
}, win);
|
||||
groupItemTwo.getChild(0).zoomIn();
|
||||
});
|
||||
}
|
||||
|
@ -784,7 +784,7 @@ let UI = {
|
||||
return;
|
||||
}
|
||||
|
||||
var groupItem = GroupItems.getActiveGroupItem();
|
||||
let groupItem = GroupItems.getActiveGroupItem();
|
||||
|
||||
// 1) Only go back to the TabView tab when there you close the last
|
||||
// tab of a groupItem.
|
||||
|
@ -147,9 +147,16 @@ Highlighter.prototype = {
|
||||
|
||||
this.buildInfobar(controlsBox);
|
||||
|
||||
if (!this.IUI.store.getValue(this.winID, "inspecting")) {
|
||||
this.veilContainer.setAttribute("locked", true);
|
||||
this.nodeInfo.container.setAttribute("locked", true);
|
||||
}
|
||||
|
||||
this.browser.addEventListener("resize", this, true);
|
||||
this.browser.addEventListener("scroll", this, true);
|
||||
|
||||
this.transitionDisabler = null;
|
||||
|
||||
this.handleResize();
|
||||
},
|
||||
|
||||
@ -487,7 +494,7 @@ Highlighter.prototype = {
|
||||
this.nodeInfo.tagNameLabel.textContent = this.node.tagName;
|
||||
|
||||
// ID
|
||||
this.nodeInfo.idLabel.textContent = this.node.id;
|
||||
this.nodeInfo.idLabel.textContent = this.node.id ? "#" + this.node.id : "";
|
||||
|
||||
// Classes
|
||||
let classes = this.nodeInfo.classesBox;
|
||||
@ -500,7 +507,7 @@ Highlighter.prototype = {
|
||||
for (let i = 0; i < this.node.classList.length; i++) {
|
||||
let classLabel = this.chromeDoc.createElement("label");
|
||||
classLabel.className = "highlighter-nodeinfobar-class plain";
|
||||
classLabel.textContent = this.node.classList[i];
|
||||
classLabel.textContent = "." + this.node.classList[i];
|
||||
fragment.appendChild(classLabel);
|
||||
}
|
||||
classes.appendChild(fragment);
|
||||
@ -665,6 +672,7 @@ Highlighter.prototype = {
|
||||
this.handleMouseMove(aEvent);
|
||||
break;
|
||||
case "resize":
|
||||
this.brieflyDisableTransitions();
|
||||
this.handleResize(aEvent);
|
||||
break;
|
||||
case "dblclick":
|
||||
@ -674,11 +682,32 @@ Highlighter.prototype = {
|
||||
aEvent.preventDefault();
|
||||
break;
|
||||
case "scroll":
|
||||
this.brieflyDisableTransitions();
|
||||
this.highlight();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Disable the CSS transitions for a short time to avoid laggy animations
|
||||
* during scrolling or resizing.
|
||||
*/
|
||||
brieflyDisableTransitions: function Highlighter_brieflyDisableTransitions()
|
||||
{
|
||||
if (this.transitionDisabler) {
|
||||
this.IUI.win.clearTimeout(this.transitionDisabler);
|
||||
} else {
|
||||
this.veilContainer.setAttribute("disable-transitions", "true");
|
||||
this.nodeInfo.container.setAttribute("disable-transitions", "true");
|
||||
}
|
||||
this.transitionDisabler =
|
||||
this.IUI.win.setTimeout(function() {
|
||||
this.veilContainer.removeAttribute("disable-transitions");
|
||||
this.nodeInfo.container.removeAttribute("disable-transitions");
|
||||
this.transitionDisabler = null;
|
||||
}.bind(this), 500);
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle clicks.
|
||||
*
|
||||
@ -963,6 +992,8 @@ InspectorUI.prototype = {
|
||||
initializeHighlighter: function IUI_initializeHighlighter()
|
||||
{
|
||||
this.highlighter = new Highlighter(this);
|
||||
this.browser.addEventListener("keypress", this, true);
|
||||
this.highlighter.highlighterContainer.addEventListener("keypress", this, true);
|
||||
this.highlighterReady();
|
||||
},
|
||||
|
||||
@ -1086,10 +1117,6 @@ InspectorUI.prototype = {
|
||||
this.treePanel.closeEditor();
|
||||
|
||||
this.inspectToolbutton.checked = true;
|
||||
// Attach event listeners to content window and child windows to enable
|
||||
// highlighting and click to stop inspection.
|
||||
this.browser.addEventListener("keypress", this, true);
|
||||
this.highlighter.highlighterContainer.addEventListener("keypress", this, true);
|
||||
this.highlighter.attachInspectListeners();
|
||||
|
||||
this.inspecting = true;
|
||||
|
@ -24,9 +24,9 @@ function test()
|
||||
function setupInfobarTest()
|
||||
{
|
||||
nodes = [
|
||||
{node: doc.querySelector("#top"), position: "bottom", tag: "DIV", id: "top", classes: "class1 class2"},
|
||||
{node: doc.querySelector("#vertical"), position: "overlap", tag: "DIV", id: "vertical", classes: ""},
|
||||
{node: doc.querySelector("#bottom"), position: "top", tag: "DIV", id: "bottom", classes: ""},
|
||||
{node: doc.querySelector("#top"), position: "bottom", tag: "DIV", id: "#top", classes: ".class1 .class2"},
|
||||
{node: doc.querySelector("#vertical"), position: "overlap", tag: "DIV", id: "#vertical", classes: ""},
|
||||
{node: doc.querySelector("#bottom"), position: "top", tag: "DIV", id: "#bottom", classes: ""},
|
||||
{node: doc.querySelector("body"), position: "overlap", tag: "BODY", id: "", classes: ""},
|
||||
]
|
||||
|
||||
|
@ -187,10 +187,18 @@ function inspectorFocusTab2()
|
||||
is(InspectorUI.store.length, 2, "Inspector.store.length is 2");
|
||||
isnot(InspectorUI.selection, div, "selection does not match the div element");
|
||||
|
||||
// Switch back to tab 1.
|
||||
Services.obs.addObserver(inspectorSecondFocusTab1,
|
||||
InspectorUI.INSPECTOR_NOTIFICATIONS.TREEPANELREADY, false);
|
||||
gBrowser.selectedTab = tab1;
|
||||
// Make sure keybindings still sork
|
||||
EventUtils.synthesizeKey("VK_RETURN", { });
|
||||
|
||||
executeSoon(function() {
|
||||
ok(InspectorUI.inspecting, "Inspector is highlighting");
|
||||
InspectorUI.toggleInspection();
|
||||
|
||||
// Switch back to tab 1.
|
||||
Services.obs.addObserver(inspectorSecondFocusTab1,
|
||||
InspectorUI.INSPECTOR_NOTIFICATIONS.TREEPANELREADY, false);
|
||||
gBrowser.selectedTab = tab1;
|
||||
});
|
||||
}
|
||||
|
||||
function inspectorSecondFocusTab1()
|
||||
|
@ -29,6 +29,7 @@
|
||||
* Mihai Șucan <mihai.sucan@gmail.com>
|
||||
* Michael Ratcliffe <mratcliffe@mozilla.com>
|
||||
* Joe Walker <jwalker@mozilla.com>
|
||||
* Sonny Piers <sonny.piers@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
@ -284,6 +285,9 @@ const ERRORS = { LOG_MESSAGE_MISSING_ARGS:
|
||||
// The indent of a console group in pixels.
|
||||
const GROUP_INDENT = 12;
|
||||
|
||||
// The pref prefix for webconsole filters
|
||||
const PREFS_PREFIX = "devtools.webconsole.filter.";
|
||||
|
||||
/**
|
||||
* Implements the nsIStreamListener and nsIRequestObserver interface. Used
|
||||
* within the HS_httpObserverFactory function to get the response body of
|
||||
@ -1790,9 +1794,18 @@ HUD_SERVICE.prototype =
|
||||
if (!aHUDId){
|
||||
throw new Error(ERRORS.MISSING_ARGS);
|
||||
}
|
||||
this.filterPrefs[aHUDId] = this.defaultFilterPrefs;
|
||||
// init storage objects:
|
||||
this.storage.createDisplay(aHUDId);
|
||||
this.filterPrefs[aHUDId] = {
|
||||
network: Services.prefs.getBoolPref(PREFS_PREFIX + "network"),
|
||||
networkinfo: Services.prefs.getBoolPref(PREFS_PREFIX + "networkinfo"),
|
||||
csserror: Services.prefs.getBoolPref(PREFS_PREFIX + "csserror"),
|
||||
cssparser: Services.prefs.getBoolPref(PREFS_PREFIX + "cssparser"),
|
||||
exception: Services.prefs.getBoolPref(PREFS_PREFIX + "exception"),
|
||||
jswarn: Services.prefs.getBoolPref(PREFS_PREFIX + "jswarn"),
|
||||
error: Services.prefs.getBoolPref(PREFS_PREFIX + "error"),
|
||||
info: Services.prefs.getBoolPref(PREFS_PREFIX + "info"),
|
||||
warn: Services.prefs.getBoolPref(PREFS_PREFIX + "warn"),
|
||||
log: Services.prefs.getBoolPref(PREFS_PREFIX + "log"),
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1839,9 +1852,6 @@ HUD_SERVICE.prototype =
|
||||
|
||||
delete this.hudReferences[aHUDId];
|
||||
|
||||
// remove the related storage object
|
||||
this.storage.removeDisplay(aHUDId);
|
||||
|
||||
for (let windowID in this.windowIds) {
|
||||
if (this.windowIds[windowID] == aHUDId) {
|
||||
delete this.windowIds[windowID];
|
||||
@ -1882,10 +1892,6 @@ HUD_SERVICE.prototype =
|
||||
return;
|
||||
}
|
||||
|
||||
this.storage = new ConsoleStorage();
|
||||
this.defaultFilterPrefs = this.storage.defaultDisplayPrefs;
|
||||
this.defaultGlobalConsolePrefs = this.storage.defaultGlobalConsolePrefs;
|
||||
|
||||
// begin observing HTTP traffic
|
||||
this.startHTTPObservation();
|
||||
|
||||
@ -1911,10 +1917,7 @@ HUD_SERVICE.prototype =
|
||||
this.openRequests = {};
|
||||
this.openResponseHeaders = {};
|
||||
|
||||
// delete the storage as it holds onto channels
|
||||
delete this.storage;
|
||||
delete this.defaultFilterPrefs;
|
||||
delete this.defaultGlobalConsolePrefs;
|
||||
|
||||
delete this.lastFinishedRequestCallback;
|
||||
|
||||
@ -3938,7 +3941,7 @@ HeadsUpDisplay.prototype = {
|
||||
let menuPopup = this.makeXULNode("menupopup");
|
||||
toolbarButton.appendChild(menuPopup);
|
||||
|
||||
let allChecked = true;
|
||||
let someChecked = false;
|
||||
for (let i = 0; i < aDescriptor.severities.length; i++) {
|
||||
let severity = aDescriptor.severities[i];
|
||||
let menuItem = this.makeXULNode("menuitem");
|
||||
@ -3952,8 +3955,8 @@ HeadsUpDisplay.prototype = {
|
||||
|
||||
let checked = this.filterPrefs[prefKey];
|
||||
menuItem.setAttribute("checked", checked);
|
||||
if (!checked) {
|
||||
allChecked = false;
|
||||
if (checked) {
|
||||
someChecked = true;
|
||||
}
|
||||
|
||||
menuItem.addEventListener("command", toggleFilter, false);
|
||||
@ -3961,7 +3964,7 @@ HeadsUpDisplay.prototype = {
|
||||
menuPopup.appendChild(menuItem);
|
||||
}
|
||||
|
||||
toolbarButton.setAttribute("checked", allChecked);
|
||||
toolbarButton.setAttribute("checked", someChecked);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -6331,175 +6334,6 @@ HeadsUpDisplayUICommands = {
|
||||
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// ConsoleStorage
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
var prefs = Services.prefs;
|
||||
|
||||
const GLOBAL_STORAGE_INDEX_ID = "GLOBAL_CONSOLE";
|
||||
const PREFS_PREFIX = "devtools.webconsole.filter.";
|
||||
const PREFS = { network: PREFS_PREFIX + "network",
|
||||
networkinfo: PREFS_PREFIX + "networkinfo",
|
||||
csserror: PREFS_PREFIX + "csserror",
|
||||
cssparser: PREFS_PREFIX + "cssparser",
|
||||
exception: PREFS_PREFIX + "exception",
|
||||
jswarn: PREFS_PREFIX + "jswarn",
|
||||
error: PREFS_PREFIX + "error",
|
||||
info: PREFS_PREFIX + "info",
|
||||
warn: PREFS_PREFIX + "warn",
|
||||
log: PREFS_PREFIX + "log",
|
||||
};
|
||||
|
||||
function ConsoleStorage()
|
||||
{
|
||||
this.sequencer = null;
|
||||
this.consoleDisplays = {};
|
||||
// each display will have an index that tracks each ConsoleEntry
|
||||
this.displayIndexes = {};
|
||||
this.globalStorageIndex = [];
|
||||
this.globalDisplay = {};
|
||||
this.createDisplay(GLOBAL_STORAGE_INDEX_ID);
|
||||
// TODO: need to create a method that truncates the message
|
||||
// see bug 570543
|
||||
|
||||
this.defaultDisplayPrefs = {
|
||||
network: prefs.getBoolPref(PREFS.network),
|
||||
networkinfo: prefs.getBoolPref(PREFS.networkinfo),
|
||||
csserror: prefs.getBoolPref(PREFS.csserror),
|
||||
cssparser: prefs.getBoolPref(PREFS.cssparser),
|
||||
exception: prefs.getBoolPref(PREFS.exception),
|
||||
jswarn: prefs.getBoolPref(PREFS.jswarn),
|
||||
error: prefs.getBoolPref(PREFS.error),
|
||||
info: prefs.getBoolPref(PREFS.info),
|
||||
warn: prefs.getBoolPref(PREFS.warn),
|
||||
log: prefs.getBoolPref(PREFS.log),
|
||||
};
|
||||
}
|
||||
|
||||
ConsoleStorage.prototype = {
|
||||
|
||||
sequenceId: function CS_sequencerId()
|
||||
{
|
||||
if (!this.sequencer) {
|
||||
this.sequencer = this.createSequencer();
|
||||
}
|
||||
return this.sequencer.next();
|
||||
},
|
||||
|
||||
createSequencer: function CS_createSequencer()
|
||||
{
|
||||
function sequencer(aInt) {
|
||||
while(1) {
|
||||
aInt++;
|
||||
yield aInt;
|
||||
}
|
||||
}
|
||||
return sequencer(-1);
|
||||
},
|
||||
|
||||
globalStore: function CS_globalStore(aIndex)
|
||||
{
|
||||
return this.displayStore(GLOBAL_CONSOLE_DOM_NODE_ID);
|
||||
},
|
||||
|
||||
displayStore: function CS_displayStore(aId)
|
||||
{
|
||||
var self = this;
|
||||
var idx = -1;
|
||||
var id = aId;
|
||||
var aLength = self.displayIndexes[id].length;
|
||||
|
||||
function displayStoreGenerator(aInt, aLength)
|
||||
{
|
||||
// create a generator object to iterate through any of the display stores
|
||||
// from any index-starting-point
|
||||
while(1) {
|
||||
// throw if we exceed the length of displayIndexes?
|
||||
aInt++;
|
||||
var indexIt = self.displayIndexes[id];
|
||||
var index = indexIt[aInt];
|
||||
if (aLength < aInt) {
|
||||
// try to see if we have more entries:
|
||||
var newLength = self.displayIndexes[id].length;
|
||||
if (newLength > aLength) {
|
||||
aLength = newLength;
|
||||
}
|
||||
else {
|
||||
throw new StopIteration();
|
||||
}
|
||||
}
|
||||
var entry = self.consoleDisplays[id][index];
|
||||
yield entry;
|
||||
}
|
||||
}
|
||||
|
||||
return displayStoreGenerator(-1, aLength);
|
||||
},
|
||||
|
||||
recordEntries: function CS_recordEntries(aHUDId, aConfigArray)
|
||||
{
|
||||
var len = aConfigArray.length;
|
||||
for (var i = 0; i < len; i++){
|
||||
this.recordEntry(aHUDId, aConfigArray[i]);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
recordEntry: function CS_recordEntry(aHUDId, aConfig)
|
||||
{
|
||||
var id = this.sequenceId();
|
||||
|
||||
this.globalStorageIndex[id] = { hudId: aHUDId };
|
||||
|
||||
var displayStorage = this.consoleDisplays[aHUDId];
|
||||
|
||||
var displayIndex = this.displayIndexes[aHUDId];
|
||||
|
||||
if (displayStorage && displayIndex) {
|
||||
var entry = new ConsoleEntry(aConfig, id);
|
||||
displayIndex.push(entry.id);
|
||||
displayStorage[entry.id] = entry;
|
||||
return entry;
|
||||
}
|
||||
else {
|
||||
throw new Error("Cannot get displayStorage or index object for id " + aHUDId);
|
||||
}
|
||||
},
|
||||
|
||||
getEntry: function CS_getEntry(aId)
|
||||
{
|
||||
var display = this.globalStorageIndex[aId];
|
||||
var storName = display.hudId;
|
||||
return this.consoleDisplays[storName][aId];
|
||||
},
|
||||
|
||||
updateEntry: function CS_updateEntry(aUUID)
|
||||
{
|
||||
// update an individual entry
|
||||
// TODO: see bug 568634
|
||||
},
|
||||
|
||||
createDisplay: function CS_createdisplay(aId)
|
||||
{
|
||||
if (!this.consoleDisplays[aId]) {
|
||||
this.consoleDisplays[aId] = {};
|
||||
this.displayIndexes[aId] = [];
|
||||
}
|
||||
},
|
||||
|
||||
removeDisplay: function CS_removeDisplay(aId)
|
||||
{
|
||||
try {
|
||||
delete this.consoleDisplays[aId];
|
||||
delete this.displayIndexes[aId];
|
||||
}
|
||||
catch (ex) {
|
||||
Cu.reportError("Could not remove console display for id " + aId);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* A Console log entry
|
||||
*
|
||||
|
@ -49,7 +49,7 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<link rel="stylesheet" href="chrome://global/skin/webConsole_networkPanel.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="chrome://browser/skin/devtools/webconsole_networkpanel.css" type="text/css"/>
|
||||
</head>
|
||||
<body role="application">
|
||||
<table id="header">
|
||||
|
@ -22,6 +22,7 @@
|
||||
# Patrick Walton <pcwalton@mozilla.com>
|
||||
# Mihai Șucan <mihai.sucan@gmail.com>
|
||||
# Rob Campbell <rcampbell@mozilla.com>
|
||||
# Sonny Piers <sonny.piers@gmail.com>
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
@ -81,10 +82,6 @@ _BROWSER_TEST_FILES = \
|
||||
browser_webconsole_property_panel.js \
|
||||
browser_webconsole_property_provider.js \
|
||||
browser_webconsole_registries.js \
|
||||
browser_webconsole_storage_create_display.js \
|
||||
browser_webconsole_storage_iteration.js \
|
||||
browser_webconsole_storage_record_entry.js \
|
||||
browser_webconsole_storage_record_many_entries.js \
|
||||
browser_webconsole_bug_587617_output_copy.js \
|
||||
browser_webconsole_bug_585237_line_limit.js \
|
||||
browser_webconsole_bug_581231_close_button.js \
|
||||
|
@ -3,57 +3,114 @@
|
||||
|
||||
function test() {
|
||||
let prefService = Services.prefs;
|
||||
let prefs = [
|
||||
"network",
|
||||
"networkinfo",
|
||||
"csserror",
|
||||
"cssparser",
|
||||
"exception",
|
||||
"jswarn",
|
||||
"error",
|
||||
"warn",
|
||||
"info",
|
||||
"log"
|
||||
];
|
||||
|
||||
//Set all prefs to true
|
||||
prefs.forEach(function(pref) {
|
||||
prefService.setBoolPref("devtools.webconsole.filter." + pref, true);
|
||||
});
|
||||
let prefs = {
|
||||
"net": [
|
||||
"network",
|
||||
"networkinfo"
|
||||
],
|
||||
"css": [
|
||||
"csserror",
|
||||
"cssparser"
|
||||
],
|
||||
"js": [
|
||||
"exception",
|
||||
"jswarn"
|
||||
],
|
||||
"logging": [
|
||||
"error",
|
||||
"warn",
|
||||
"info",
|
||||
"log"
|
||||
]
|
||||
};
|
||||
|
||||
// Set all prefs to true
|
||||
for (let category in prefs) {
|
||||
prefs[category].forEach(function(pref) {
|
||||
prefService.setBoolPref("devtools.webconsole.filter." + pref, true);
|
||||
});
|
||||
}
|
||||
|
||||
addTab("about:blank");
|
||||
openConsole();
|
||||
|
||||
let hud = HUDService.getHudByWindow(content);
|
||||
let hudId = HUDService.getHudIdByWindow(content);
|
||||
|
||||
//Check if the filters menuitems exists and is checked
|
||||
prefs.forEach(function(pref) {
|
||||
let checked = hud.HUDBox.querySelector("menuitem[prefKey=" + pref + "]").
|
||||
getAttribute("checked");
|
||||
is(checked, "true", "menuitem for " + pref + " exists and is checked");
|
||||
});
|
||||
|
||||
//Set all prefs to false
|
||||
prefs.forEach(function(pref) {
|
||||
HUDService.setFilterState(hudId, pref, false);
|
||||
});
|
||||
let hud = HUDService.getHudByWindow(content);
|
||||
|
||||
// Check if the filters menuitems exists and are checked
|
||||
for (let category in prefs) {
|
||||
let button = hud.HUDBox.querySelector(".webconsole-filter-button[category=\""
|
||||
+ category + "\"]");
|
||||
ok(isChecked(button), "main button for " + category + " category is checked");
|
||||
|
||||
prefs[category].forEach(function(pref) {
|
||||
let menuitem = hud.HUDBox.querySelector("menuitem[prefKey=" + pref + "]");
|
||||
ok(isChecked(menuitem), "menuitem for " + pref + " is checked");
|
||||
});
|
||||
}
|
||||
|
||||
// Set all prefs to false
|
||||
for (let category in prefs) {
|
||||
prefs[category].forEach(function(pref) {
|
||||
HUDService.setFilterState(hud.hudId, pref, false);
|
||||
});
|
||||
}
|
||||
|
||||
//Re-init the console
|
||||
closeConsole();
|
||||
openConsole();
|
||||
|
||||
hud = HUDService.getHudByWindow(content);
|
||||
|
||||
//Check if filters menuitems exists and are unchecked
|
||||
prefs.forEach(function(pref) {
|
||||
let checked = hud.HUDBox.querySelector("menuitem[prefKey=" + pref + "]").
|
||||
getAttribute("checked");
|
||||
is(checked, "false", "menuitem for " + pref + " exists and is not checked");
|
||||
prefService.clearUserPref("devtools.webconsole.filter." + pref);
|
||||
});
|
||||
|
||||
|
||||
// Check if the filter button and menuitems are unchecked
|
||||
for (let category in prefs) {
|
||||
let button = hud.HUDBox.querySelector(".webconsole-filter-button[category=\""
|
||||
+ category + "\"]");
|
||||
ok(isUnchecked(button), "main button for " + category + " category is not checked");
|
||||
|
||||
prefs[category].forEach(function(pref) {
|
||||
let menuitem = hud.HUDBox.querySelector("menuitem[prefKey=" + pref + "]");
|
||||
ok(isUnchecked(menuitem), "menuitem for " + pref + " is not checked");
|
||||
});
|
||||
}
|
||||
|
||||
// Set first pref in each category to true
|
||||
for (let category in prefs) {
|
||||
HUDService.setFilterState(hud.hudId, prefs[category][0], true);
|
||||
}
|
||||
|
||||
// Re-init the console
|
||||
closeConsole();
|
||||
openConsole();
|
||||
|
||||
hud = HUDService.getHudByWindow(content);
|
||||
|
||||
// Check the main category button is checked and first menuitem is checked
|
||||
for (let category in prefs) {
|
||||
let button = hud.HUDBox.querySelector(".webconsole-filter-button[category=\""
|
||||
+ category + "\"]");
|
||||
ok(isChecked(button), category + " button is checked when first pref is true");
|
||||
|
||||
let pref = prefs[category][0];
|
||||
let menuitem = hud.HUDBox.querySelector("menuitem[prefKey=" + pref + "]");
|
||||
ok(isChecked(menuitem), "first " + category + " menuitem is checked");
|
||||
}
|
||||
|
||||
// Clear prefs
|
||||
for (let category in prefs) {
|
||||
prefs[category].forEach(function(pref) {
|
||||
prefService.clearUserPref("devtools.webconsole.filter." + pref);
|
||||
});
|
||||
}
|
||||
|
||||
gBrowser.removeCurrentTab();
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
function isChecked(aNode) {
|
||||
return aNode.getAttribute("checked") === "true";
|
||||
}
|
||||
|
||||
function isUnchecked(aNode) {
|
||||
return aNode.getAttribute("checked") === "false";
|
||||
}
|
||||
|
@ -1,73 +0,0 @@
|
||||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is DevTools test code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* David Dahl <ddahl@mozilla.com>
|
||||
* Patrick Walton <pcwalton@mozilla.com>
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
* Mihai Sucan <mihai.sucan@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// Tests that the console message store is initialized properly.
|
||||
|
||||
const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test//browser/test-console.html";
|
||||
|
||||
function test() {
|
||||
addTab(TEST_URI);
|
||||
browser.addEventListener("DOMContentLoaded", testStorageCreateDisplay,
|
||||
false);
|
||||
}
|
||||
|
||||
function testStorageCreateDisplay() {
|
||||
browser.removeEventListener("DOMContentLoaded", testStorageCreateDisplay,
|
||||
false);
|
||||
|
||||
openConsole();
|
||||
|
||||
let cs = HUDService.storage;
|
||||
|
||||
ok(typeof cs.consoleDisplays == "object",
|
||||
"consoledisplays exist");
|
||||
ok(typeof cs.displayIndexes == "object",
|
||||
"console indexes exist");
|
||||
cs.createDisplay("foo");
|
||||
ok(typeof cs.consoleDisplays["foo"] == "object",
|
||||
"foo display exists");
|
||||
ok(typeof cs.displayIndexes["foo"] == "object",
|
||||
"foo index exists");
|
||||
|
||||
cs.removeDisplay("foo");
|
||||
|
||||
finishTest();
|
||||
}
|
||||
|
@ -1,92 +0,0 @@
|
||||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is DevTools test code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* David Dahl <ddahl@mozilla.com>
|
||||
* Patrick Walton <pcwalton@mozilla.com>
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
* Mihai Sucan <mihai.sucan@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// Test that the iterator API of the console message store works.
|
||||
|
||||
const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test//browser/test-console.html";
|
||||
|
||||
function test() {
|
||||
addTab(TEST_URI);
|
||||
browser.addEventListener("DOMContentLoaded", testStorageIteration, false);
|
||||
}
|
||||
|
||||
function testStorageIteration() {
|
||||
browser.removeEventListener("DOMContentLoaded", testStorageIteration,
|
||||
false);
|
||||
|
||||
openConsole();
|
||||
|
||||
let cs = HUDService.storage;
|
||||
|
||||
// Must have enough entries present to avoid exhausting the iterators below.
|
||||
cs.createDisplay("foo");
|
||||
for (let i = 0; i < 300; i++) {
|
||||
cs.recordEntry("foo", { logLevel: "network", message: "foo" });
|
||||
}
|
||||
|
||||
var id = "foo";
|
||||
var it = cs.displayStore(id);
|
||||
var entry = it.next();
|
||||
var entry2 = it.next();
|
||||
|
||||
let entries = [];
|
||||
for (var i = 0; i < 100; i++) {
|
||||
let _entry = it.next();
|
||||
entries.push(_entry);
|
||||
}
|
||||
|
||||
ok(entries.length == 100, "entries length == 100");
|
||||
|
||||
let entries2 = [];
|
||||
|
||||
for (var i = 0; i < 100; i++){
|
||||
let _entry = it.next();
|
||||
entries2.push(_entry);
|
||||
}
|
||||
|
||||
ok(entries[0].id != entries2[0].id,
|
||||
"two distinct pages of log entries");
|
||||
|
||||
cs.removeDisplay("foo");
|
||||
cs = null;
|
||||
|
||||
finishTest();
|
||||
}
|
||||
|
@ -1,81 +0,0 @@
|
||||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is DevTools test code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* David Dahl <ddahl@mozilla.com>
|
||||
* Patrick Walton <pcwalton@mozilla.com>
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
* Mihai Sucan <mihai.sucan@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// Tests that the recordEntry() method of the console store works.
|
||||
|
||||
const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test//browser/test-console.html";
|
||||
|
||||
function test() {
|
||||
addTab(TEST_URI);
|
||||
browser.addEventListener("DOMContentLoaded", testStorageRecordEntry,
|
||||
false);
|
||||
}
|
||||
|
||||
function testStorageRecordEntry() {
|
||||
browser.removeEventListener("DOMContentLoaded", testStorageRecordEntry,
|
||||
false);
|
||||
openConsole();
|
||||
|
||||
let cs = HUDService.storage;
|
||||
|
||||
cs.createDisplay("foo");
|
||||
|
||||
var config = {
|
||||
logLevel: "network",
|
||||
message: "HumminaHummina!",
|
||||
activity: {
|
||||
stage: "barStage",
|
||||
data: "bar bar bar bar"
|
||||
}
|
||||
};
|
||||
var entry = cs.recordEntry("foo", config);
|
||||
var res = entry.id;
|
||||
ok(entry.id != null, "Entry.id is: " + res);
|
||||
ok(cs.displayIndexes["foo"].length == 1,
|
||||
"We added one entry.");
|
||||
entry = cs.getEntry(res);
|
||||
ok(entry.id > -1,
|
||||
"We got an entry through the global interface");
|
||||
|
||||
cs.removeDisplay("foo");
|
||||
cs = null;
|
||||
finishTest();
|
||||
}
|
||||
|
@ -1,83 +0,0 @@
|
||||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is DevTools test code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* David Dahl <ddahl@mozilla.com>
|
||||
* Patrick Walton <pcwalton@mozilla.com>
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
* Mihai Sucan <mihai.sucan@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// Test that the recordManyEntries() method of the console store works.
|
||||
|
||||
const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test//browser/test-console.html";
|
||||
|
||||
function test() {
|
||||
addTab(TEST_URI);
|
||||
browser.addEventListener("DOMContentLoaded", testStorageRecordManyEntries,
|
||||
false);
|
||||
}
|
||||
|
||||
function testStorageRecordManyEntries() {
|
||||
browser.removeEventListener("DOMContentLoaded",
|
||||
testStorageRecordManyEntries, false);
|
||||
|
||||
openConsole();
|
||||
|
||||
let cs = HUDService.storage;
|
||||
|
||||
cs.createDisplay("foo");
|
||||
|
||||
var configArr = [];
|
||||
|
||||
for (var i = 0; i < 1000; i++){
|
||||
let config = {
|
||||
logLevel: "network",
|
||||
message: "HumminaHummina!",
|
||||
activity: {
|
||||
stage: "barStage",
|
||||
data: "bar bar bar bar"
|
||||
}
|
||||
};
|
||||
configArr.push(config);
|
||||
}
|
||||
|
||||
cs.recordEntries("foo", configArr);
|
||||
ok(cs.displayIndexes["foo"].length == 1000,
|
||||
"1000 entries in foo now");
|
||||
|
||||
cs.removeDisplay("foo");
|
||||
|
||||
finishTest();
|
||||
}
|
||||
|
@ -244,18 +244,16 @@ puAlertText=Click here for details
|
||||
|
||||
# Geolocation UI
|
||||
|
||||
# LOCALIZATION NOTE (geolocation.shareLocation geolocation.dontShareLocation geolocation.alwaysShare geolocation.neverShare):
|
||||
# LOCALIZATION NOTE (geolocation.shareLocation geolocation.alwaysShareLocation geolocation.neverShareLocation):
|
||||
#If you're having trouble with the word Share, please use Allow and Block in your language.
|
||||
geolocation.shareLocation=Share Location
|
||||
geolocation.shareLocation.accesskey=a
|
||||
geolocation.dontShareLocation=Don't Share
|
||||
geolocation.dontShareLocation.accesskey=o
|
||||
geolocation.alwaysShare=Always Share
|
||||
geolocation.alwaysShare.accesskey=A
|
||||
geolocation.neverShare=Never Share
|
||||
geolocation.neverShare.accesskey=N
|
||||
geolocation.siteWantsToKnow=%S wants to know your location.
|
||||
geolocation.fileWantsToKnow=The file %S wants to know your location.
|
||||
geolocation.alwaysShareLocation=Always Share Location
|
||||
geolocation.alwaysShareLocation.accesskey=A
|
||||
geolocation.neverShareLocation=Never Share Location
|
||||
geolocation.neverShareLocation.accesskey=N
|
||||
geolocation.shareWithSite=Would you like to share your location with %S?
|
||||
geolocation.shareWithFile=Would you like to share your location with the file %S?
|
||||
# LOCALIZATION NOTE (geolocation.learnMore): Use the unicode ellipsis char, \u2026,
|
||||
# or use "..." if \u2026 doesn't suit traditions in your locale.
|
||||
geolocation.learnMore=Learn More…
|
||||
|
@ -1959,7 +1959,7 @@ panel[dimmed="true"] {
|
||||
/* Highlighter */
|
||||
|
||||
.highlighter-veil {
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
background-color: rgba(25, 25, 25, 0.5);
|
||||
}
|
||||
|
||||
#highlighter-closebutton {
|
||||
|
@ -70,7 +70,7 @@
|
||||
}
|
||||
|
||||
.hud-msg-node {
|
||||
list-style-image: url(chrome://global/skin/icons/webconsole.png);
|
||||
list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
|
||||
-moz-image-region: rect(0, 1px, 0, 0);
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@
|
||||
.webconsole-filter-button > .toolbarbutton-menubutton-button,
|
||||
.webconsole-filter-button:not([type="menu-button"]) {
|
||||
-moz-box-orient: horizontal;
|
||||
list-style-image: url("chrome://global/skin/icons/webconsole.png");
|
||||
list-style-image: url("chrome://browser/skin/devtools/webconsole.png");
|
||||
}
|
||||
|
||||
/* Network styles */
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@ -86,6 +86,9 @@ browser.jar:
|
||||
skin/classic/browser/devtools/arrows.png (devtools/arrows.png)
|
||||
skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png)
|
||||
skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
|
||||
skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css)
|
||||
skin/classic/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css)
|
||||
skin/classic/browser/devtools/webconsole.png (devtools/webconsole.png)
|
||||
skin/classic/browser/devtools/gcli.css (devtools/gcli.css)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-pressed.png (devtools/breadcrumbs/ltr-end-pressed.png)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png (devtools/breadcrumbs/ltr-end-selected-pressed.png)
|
||||
|
@ -2690,7 +2690,7 @@ panel[dimmed="true"] {
|
||||
/* Highlighter */
|
||||
|
||||
.highlighter-veil {
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
background-color: rgba(25, 25, 25, 0.5);
|
||||
}
|
||||
|
||||
#highlighter-closebutton {
|
||||
|
@ -37,7 +37,7 @@
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
%include shared.inc
|
||||
%include ../shared.inc
|
||||
|
||||
.hud-box {
|
||||
border-bottom: 1px solid #aaa;
|
||||
@ -73,7 +73,7 @@
|
||||
}
|
||||
|
||||
.hud-msg-node {
|
||||
list-style-image: url(chrome://global/skin/icons/webconsole.png);
|
||||
list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
|
||||
-moz-image-region: rect(0, 1px, 0, 0);
|
||||
}
|
||||
|
||||
@ -187,7 +187,7 @@
|
||||
-moz-appearance: none;
|
||||
margin: 0;
|
||||
padding: 1px 0;
|
||||
list-style-image: url("chrome://global/skin/icons/webconsole.png");
|
||||
list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
|
||||
-moz-box-orient: horizontal;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@ -127,6 +127,9 @@ browser.jar:
|
||||
skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
|
||||
skin/classic/browser/devtools/gcli.css (devtools/gcli.css)
|
||||
skin/classic/browser/devtools/toolbarbutton-close.png (devtools/toolbarbutton-close.png)
|
||||
* skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css)
|
||||
skin/classic/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css)
|
||||
skin/classic/browser/devtools/webconsole.png (devtools/webconsole.png)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-pressed.png (devtools/breadcrumbs/ltr-end-pressed.png)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png (devtools/breadcrumbs/ltr-end-selected-pressed.png)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-selected.png (devtools/breadcrumbs/ltr-end-selected.png)
|
||||
|
@ -75,6 +75,11 @@
|
||||
-moz-margin-start: -3px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.menu-accel,
|
||||
.menu-iconic-accel {
|
||||
color: graytext;
|
||||
}
|
||||
}
|
||||
|
||||
@media all and (-moz-windows-compositor) {
|
||||
|
@ -2625,7 +2625,7 @@ panel[dimmed="true"] {
|
||||
/* Highlighter */
|
||||
|
||||
.highlighter-veil {
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
background-color: rgba(25, 25, 25, 0.5);
|
||||
}
|
||||
|
||||
#highlighter-closebutton {
|
||||
|
@ -69,7 +69,7 @@
|
||||
}
|
||||
|
||||
.hud-msg-node {
|
||||
list-style-image: url(chrome://global/skin/icons/webconsole.png);
|
||||
list-style-image: url(chrome://browser/skin/devtools/webconsole.png);
|
||||
-moz-image-region: rect(0, 1px, 0, 0);
|
||||
}
|
||||
|
||||
@ -156,7 +156,7 @@
|
||||
|
||||
.webconsole-filter-button > .toolbarbutton-menubutton-button {
|
||||
-moz-box-orient: horizontal;
|
||||
list-style-image: url("chrome://global/skin/icons/webconsole.png");
|
||||
list-style-image: url("chrome://browser/skin/devtools/webconsole.png");
|
||||
}
|
||||
|
||||
.webconsole-filter-button > .toolbarbutton-menubutton-button,
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@ -111,6 +111,9 @@ browser.jar:
|
||||
skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
|
||||
skin/classic/browser/devtools/gcli.css (devtools/gcli.css)
|
||||
skin/classic/browser/devtools/toolbarbutton-close.png (devtools/toolbarbutton-close.png)
|
||||
skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css)
|
||||
skin/classic/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css)
|
||||
skin/classic/browser/devtools/webconsole.png (devtools/webconsole.png)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-pressed.png (devtools/breadcrumbs/ltr-end-pressed.png)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png (devtools/breadcrumbs/ltr-end-selected-pressed.png)
|
||||
skin/classic/browser/devtools/breadcrumbs/ltr-end-selected.png (devtools/breadcrumbs/ltr-end-selected.png)
|
||||
@ -264,6 +267,9 @@ browser.jar:
|
||||
skin/classic/aero/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
|
||||
skin/classic/aero/browser/devtools/gcli.css (devtools/gcli.css)
|
||||
skin/classic/aero/browser/devtools/toolbarbutton-close.png (devtools/toolbarbutton-close.png)
|
||||
skin/classic/aero/browser/devtools/webconsole.css (devtools/webconsole.css)
|
||||
skin/classic/aero/browser/devtools/webconsole_networkpanel.css (devtools/webconsole_networkpanel.css)
|
||||
skin/classic/aero/browser/devtools/webconsole.png (devtools/webconsole.png)
|
||||
skin/classic/aero/browser/devtools/breadcrumbs/ltr-end-pressed.png (devtools/breadcrumbs/ltr-end-pressed.png)
|
||||
skin/classic/aero/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png (devtools/breadcrumbs/ltr-end-selected-pressed.png)
|
||||
skin/classic/aero/browser/devtools/breadcrumbs/ltr-end-selected.png (devtools/breadcrumbs/ltr-end-selected.png)
|
||||
|
@ -815,11 +815,11 @@ LoginManagerPrompter.prototype = {
|
||||
if (aLogin.username) {
|
||||
var displayUser = this._sanitizeUsername(aLogin.username);
|
||||
notificationText = this._getLocalizedString(
|
||||
"rememberPasswordText",
|
||||
"rememberPasswordMsg",
|
||||
[displayUser, displayHost]);
|
||||
} else {
|
||||
notificationText = this._getLocalizedString(
|
||||
"rememberPasswordTextNoUsername",
|
||||
"rememberPasswordMsgNoUsername",
|
||||
[displayHost]);
|
||||
}
|
||||
|
||||
@ -947,11 +947,11 @@ LoginManagerPrompter.prototype = {
|
||||
if (aLogin.username) {
|
||||
var displayUser = this._sanitizeUsername(aLogin.username);
|
||||
dialogText = this._getLocalizedString(
|
||||
"rememberPasswordText",
|
||||
"rememberPasswordMsg",
|
||||
[displayUser, displayHost]);
|
||||
} else {
|
||||
dialogText = this._getLocalizedString(
|
||||
"rememberPasswordTextNoUsername",
|
||||
"rememberPasswordMsgNoUsername",
|
||||
[displayHost]);
|
||||
|
||||
}
|
||||
@ -1018,11 +1018,11 @@ LoginManagerPrompter.prototype = {
|
||||
var notificationText;
|
||||
if (aOldLogin.username)
|
||||
notificationText = this._getLocalizedString(
|
||||
"updatePasswordText",
|
||||
"updatePasswordMsg",
|
||||
[aOldLogin.username]);
|
||||
else
|
||||
notificationText = this._getLocalizedString(
|
||||
"updatePasswordTextNoUser");
|
||||
"updatePasswordMsgNoUser");
|
||||
|
||||
var changeButtonText =
|
||||
this._getLocalizedString("notifyBarUpdateButtonText");
|
||||
@ -1100,11 +1100,11 @@ LoginManagerPrompter.prototype = {
|
||||
var dialogText;
|
||||
if (aOldLogin.username)
|
||||
dialogText = this._getLocalizedString(
|
||||
"updatePasswordText",
|
||||
"updatePasswordMsg",
|
||||
[aOldLogin.username]);
|
||||
else
|
||||
dialogText = this._getLocalizedString(
|
||||
"updatePasswordTextNoUser");
|
||||
"updatePasswordMsgNoUser");
|
||||
|
||||
var dialogTitle = this._getLocalizedString(
|
||||
"passwordChangeTitle");
|
||||
|
@ -346,7 +346,7 @@ function checkTest() {
|
||||
ok(popup, "got notification popup");
|
||||
// Check the text, which comes from the localized saveLoginText string.
|
||||
notificationText = popup.message;
|
||||
expectedText = /^Remember password for \"notifyu1\" on example.org\?$/;
|
||||
expectedText = /^Would you like to remember the password for \"notifyu1\" on example.org\?$/;
|
||||
ok(expectedText.test(notificationText), "Checking text: " + notificationText);
|
||||
popup.remove();
|
||||
break;
|
||||
@ -359,7 +359,7 @@ function checkTest() {
|
||||
ok(popup, "got notification popup");
|
||||
// Check the text, which comes from the localized saveLoginText string.
|
||||
notificationText = popup.message;
|
||||
expectedText = /^Remember password for \"nowisthetimeforallgoodmentocom[^e]\" on example.org\?$/;
|
||||
expectedText = /^Would you like to remember the password for \"nowisthetimeforallgoodmentocom[^e]\" on example.org\?$/;
|
||||
ok(expectedText.test(notificationText), "Checking text: " + notificationText);
|
||||
popup.remove();
|
||||
break;
|
||||
@ -372,7 +372,7 @@ function checkTest() {
|
||||
ok(popup, "got notification popup");
|
||||
// Check the text, which comes from the localized saveLoginTextNoUser string.
|
||||
notificationText = popup.message;
|
||||
expectedText = /^Remember password on example.org\?$/;
|
||||
expectedText = /^Would you like to remember the password on example.org\?$/;
|
||||
ok(expectedText.test(notificationText), "Checking text: " + notificationText);
|
||||
popup.remove();
|
||||
break;
|
||||
|
@ -850,7 +850,7 @@
|
||||
return;
|
||||
}
|
||||
|
||||
var attrName = this.isVideoInFullScreen() ? "enterfullscreenlabel" : "exitfullscreenlabel";
|
||||
var attrName = this.isVideoInFullScreen() ? "exitfullscreenlabel" : "enterfullscreenlabel";
|
||||
var value = this.fullscreenButton.getAttribute(attrName);
|
||||
this.fullscreenButton.setAttribute("aria-label", value);
|
||||
|
||||
|
@ -39,13 +39,13 @@
|
||||
rememberValue = Use Password Manager to remember this value.
|
||||
rememberPassword = Use Password Manager to remember this password.
|
||||
savePasswordTitle = Confirm
|
||||
# LOCALIZATION NOTE (rememberPasswordText):
|
||||
# LOCALIZATION NOTE (rememberPasswordMsg):
|
||||
# 1st string is the username for the login, 2nd is the login's hostname.
|
||||
# Note that long usernames may be truncated.
|
||||
rememberPasswordText = Remember password for "%1$S" on %2$S?
|
||||
# LOCALIZATION NOTE (rememberPasswordTextNoUsername):
|
||||
rememberPasswordMsg = Would you like to remember the password for "%1$S" on %2$S?
|
||||
# LOCALIZATION NOTE (rememberPasswordMsgNoUsername):
|
||||
# String is the login's hostname.
|
||||
rememberPasswordTextNoUsername = Remember password on %S?
|
||||
rememberPasswordMsgNoUsername = Would you like to remember the password on %S?
|
||||
notNowButtonText = &Not Now
|
||||
notifyBarNotNowButtonText = Not Now
|
||||
notifyBarNotNowButtonAccessKey = N
|
||||
@ -56,10 +56,10 @@ rememberButtonText = &Remember
|
||||
notifyBarRememberPasswordButtonText = Remember Password
|
||||
notifyBarRememberPasswordButtonAccessKey = R
|
||||
passwordChangeTitle = Confirm Password Change
|
||||
# LOCALIZATION NOTE (updatePasswordText):
|
||||
# LOCALIZATION NOTE (updatePasswordMsg):
|
||||
# String is the username for the login.
|
||||
updatePasswordText = Update saved password for "%S"?
|
||||
updatePasswordTextNoUser = Update saved password?
|
||||
updatePasswordMsg = Would you like to update the saved password for "%S"?
|
||||
updatePasswordMsgNoUser = Would you like to update the saved password?
|
||||
notifyBarUpdateButtonText = Update Password
|
||||
notifyBarUpdateButtonAccessKey = U
|
||||
notifyBarDontChangeButtonText = Don't Change
|
||||
|
@ -30,8 +30,6 @@ toolkit.jar:
|
||||
+ skin/classic/global/toolbar.css
|
||||
+ skin/classic/global/toolbarbutton.css
|
||||
+ skin/classic/global/tree.css
|
||||
+ skin/classic/global/webConsole.css
|
||||
+ skin/classic/global/webConsole_networkPanel.css
|
||||
+ skin/classic/global/alerts/alert.css (alerts/alert.css)
|
||||
+ skin/classic/global/console/console.css (console/console.css)
|
||||
+ skin/classic/global/console/console.png (console/console.png)
|
||||
@ -48,6 +46,5 @@ toolkit.jar:
|
||||
+ skin/classic/global/icons/panelarrow-vertical.svg (icons/panelarrow-vertical.svg)
|
||||
+ skin/classic/global/icons/resizer.png (icons/resizer.png)
|
||||
+ skin/classic/global/icons/sslWarning.png (icons/sslWarning.png)
|
||||
+ skin/classic/global/icons/webconsole.png (icons/webconsole.png)
|
||||
+ skin/classic/global/icons/wrap.png (icons/wrap.png)
|
||||
+ skin/classic/global/toolbar/spring.png (toolbar/spring.png)
|
||||
|
@ -52,8 +52,6 @@ toolkit.jar:
|
||||
skin/classic/global/toolbarbutton.css
|
||||
skin/classic/global/tree.css
|
||||
* skin/classic/global/viewbuttons.css
|
||||
* skin/classic/global/webConsole.css
|
||||
* skin/classic/global/webConsole_networkPanel.css
|
||||
skin/classic/global/wizard.css
|
||||
skin/classic/global/arrow/arrow-dn-dis.gif (arrow/arrow-dn-dis.gif)
|
||||
skin/classic/global/arrow/arrow-dn-dis.png (arrow/arrow-dn-dis.png)
|
||||
@ -130,7 +128,6 @@ toolkit.jar:
|
||||
skin/classic/global/icons/question-64.png (icons/question-64.png)
|
||||
skin/classic/global/icons/question-large.png (icons/question-large.png)
|
||||
skin/classic/global/icons/sslWarning.png (icons/sslWarning.png)
|
||||
skin/classic/global/icons/webconsole.png (icons/webconsole.png)
|
||||
skin/classic/global/inContentUI/background-texture.png (inContentUI/background-texture.png)
|
||||
skin/classic/global/notification/close.png (notification/close.png)
|
||||
skin/classic/global/notification/critical-bar-background.png (notification/critical-bar-background.png)
|
||||
|
@ -55,8 +55,6 @@ toolkit.jar:
|
||||
* skin/classic/global/toolbar.css
|
||||
skin/classic/global/toolbarbutton.css
|
||||
skin/classic/global/tree.css
|
||||
* skin/classic/global/webConsole.css
|
||||
* skin/classic/global/webConsole_networkPanel.css
|
||||
skin/classic/global/wizard.css
|
||||
skin/classic/global/alerts/alert.css (alerts/alert.css)
|
||||
skin/classic/global/arrow/arrow-dn.gif (arrow/arrow-dn.gif)
|
||||
@ -139,7 +137,6 @@ toolkit.jar:
|
||||
skin/classic/global/icons/warning-16.png (icons/warning-16.png)
|
||||
skin/classic/global/icons/warning-24.png (icons/warning-24.png)
|
||||
skin/classic/global/icons/warning-64.png (icons/warning-64.png)
|
||||
skin/classic/global/icons/webconsole.png (icons/webconsole.png)
|
||||
skin/classic/global/icons/windowControls.png (icons/windowControls.png)
|
||||
skin/classic/global/icons/wrap.png (icons/wrap.png)
|
||||
skin/classic/global/inContentUI/background-texture.png (inContentUI/background-texture.png)
|
||||
@ -232,8 +229,6 @@ toolkit.jar:
|
||||
* skin/classic/aero/global/toolbar.css
|
||||
* skin/classic/aero/global/toolbarbutton.css (toolbarbutton-aero.css)
|
||||
* skin/classic/aero/global/tree.css (tree-aero.css)
|
||||
* skin/classic/aero/global/webConsole.css
|
||||
* skin/classic/aero/global/webConsole_networkPanel.css
|
||||
skin/classic/aero/global/wizard.css
|
||||
skin/classic/aero/global/alerts/alert.css (alerts/alert.css)
|
||||
skin/classic/aero/global/arrow/arrow-dn.gif (arrow/arrow-dn.gif)
|
||||
@ -316,7 +311,6 @@ toolkit.jar:
|
||||
skin/classic/aero/global/icons/warning-16.png (icons/warning-16-aero.png)
|
||||
skin/classic/aero/global/icons/warning-24.png (icons/warning-24-aero.png)
|
||||
skin/classic/aero/global/icons/warning-64.png (icons/warning-64-aero.png)
|
||||
skin/classic/aero/global/icons/webconsole.png (icons/webconsole.png)
|
||||
skin/classic/aero/global/icons/windowControls.png (icons/windowControls-aero.png)
|
||||
skin/classic/aero/global/icons/wrap.png (icons/wrap-aero.png)
|
||||
skin/classic/aero/global/inContentUI/background-texture.png (inContentUI/background-texture.png)
|
||||
|
Loading…
Reference in New Issue
Block a user