Merge mozilla-central to mozilla-inbound

This commit is contained in:
Marco Bonardo 2011-11-30 12:48:06 +01:00
commit b867139a85
49 changed files with 422 additions and 655 deletions

View File

@ -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"?>

View File

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

View File

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

View File

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

View File

@ -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 \

View File

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

View File

@ -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] }] }] };

View File

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

View File

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

View File

@ -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 \

View File

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

View File

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

View 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();
});
}

View File

@ -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.

View File

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

View File

@ -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: ""},
]

View File

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

View File

@ -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
*

View File

@ -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">

View File

@ -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 \

View File

@ -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";
}

View File

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

View File

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

View File

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

View File

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

View File

@ -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…

View File

@ -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 {

View File

@ -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 */

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

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

View File

@ -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 {

View File

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

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

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

View File

@ -75,6 +75,11 @@
-moz-margin-start: -3px;
position: relative;
}
.menu-accel,
.menu-iconic-accel {
color: graytext;
}
}
@media all and (-moz-windows-compositor) {

View File

@ -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 {

View File

@ -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,

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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