import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo

This commit is contained in:
Roy Tam 2018-01-19 03:59:58 +08:00
commit dcd9973243
150858 changed files with 23884658 additions and 0 deletions

View file

@ -0,0 +1,38 @@
<?xml version="1.0"?>
<!--
-
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!--
This file contains the nodes that will be overlayed on top of
<chrome://communicator/content/tasksOverlay.xul>.
Declare XML entites that this file refers to in layoutdebug-overlay.dtd.
-->
<!DOCTYPE window SYSTEM "chrome://layoutdebug/locale/layoutdebug-overlay.dtd" >
<overlay id="layoutdebugTaskMenuID"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- SeaMonkey -->
<menupopup id="taskPopup">
<menuitem label="&ldbCmd.label;"
accesskey="&ldbCmd.accesskey;"
oncommand="toOpenWindowByType('mozapp:layoutdebug',
'chrome://layoutdebug/content/');"/>
</menupopup>
<!-- Firefox -->
<menupopup id="menu_ToolsPopup">
<menuitem label="&ldbCmd.label;"
accesskey="&ldbCmd.accesskey;"
insertafter="javascriptConsole"
oncommand="toOpenWindowByType('mozapp:layoutdebug',
'chrome://layoutdebug/content/');"/>
</menupopup>
</overlay>

View file

@ -0,0 +1,434 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
var gBrowser;
var gProgressListener;
var gDebugger;
var gRTestIndexList;
var gRTestURLList = null;
const nsILayoutDebuggingTools = Components.interfaces.nsILayoutDebuggingTools;
const nsIDocShell = Components.interfaces.nsIDocShell;
const nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
const NS_LAYOUT_DEBUGGINGTOOLS_CONTRACTID = "@mozilla.org/layout-debug/layout-debuggingtools;1";
function nsLDBBrowserContentListener()
{
this.init();
}
nsLDBBrowserContentListener.prototype = {
init : function()
{
this.mStatusText = document.getElementById("status-text");
this.mURLBar = document.getElementById("urlbar");
this.mForwardButton = document.getElementById("forward-button");
this.mBackButton = document.getElementById("back-button");
this.mStopButton = document.getElementById("stop-button");
},
QueryInterface : function(aIID)
{
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
// nsIWebProgressListener implementation
onStateChange : function(aWebProgress, aRequest, aStateFlags, aStatus)
{
if (!(aStateFlags & nsIWebProgressListener.STATE_IS_NETWORK) ||
aWebProgress != gBrowser.webProgress)
return;
if (aStateFlags & nsIWebProgressListener.STATE_START) {
this.setButtonEnabled(this.mStopButton, true);
this.setButtonEnabled(this.mForwardButton, gBrowser.canGoForward);
this.setButtonEnabled(this.mBackButton, gBrowser.canGoBack);
this.mStatusText.value = "loading...";
this.mLoading = true;
} else if (aStateFlags & nsIWebProgressListener.STATE_STOP) {
this.setButtonEnabled(this.mStopButton, false);
this.mStatusText.value = this.mURLBar.value + " loaded";
if (gRTestURLList && this.mLoading) {
// Let other things happen in the first 20ms, since this
// doesn't really seem to be when the page is done loading.
setTimeout("gRTestURLList.doneURL()", 20);
}
this.mLoading = false;
}
},
onProgressChange : function(aWebProgress, aRequest,
aCurSelfProgress, aMaxSelfProgress,
aCurTotalProgress, aMaxTotalProgress)
{
},
onLocationChange : function(aWebProgress, aRequest, aLocation, aFlags)
{
this.mURLBar.value = aLocation.spec;
this.setButtonEnabled(this.mForwardButton, gBrowser.canGoForward);
this.setButtonEnabled(this.mBackButton, gBrowser.canGoBack);
},
onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage)
{
this.mStatusText.value = aMessage;
},
onSecurityChange : function(aWebProgress, aRequest, aState)
{
},
// non-interface methods
setButtonEnabled : function(aButtonElement, aEnabled)
{
if (aEnabled)
aButtonElement.removeAttribute("disabled");
else
aButtonElement.setAttribute("disabled", "true");
},
mStatusText : null,
mURLBar : null,
mForwardButton : null,
mBackButton : null,
mStopButton : null,
mLoading : false
}
function OnLDBLoad()
{
gBrowser = document.getElementById("browser");
gProgressListener = new nsLDBBrowserContentListener();
gBrowser.addProgressListener(gProgressListener);
gDebugger = Components.classes[NS_LAYOUT_DEBUGGINGTOOLS_CONTRACTID].
createInstance(nsILayoutDebuggingTools);
if (window.arguments && window.arguments[0])
gBrowser.loadURI(window.arguments[0]);
else
gBrowser.goHome();
gDebugger.init(gBrowser.contentWindow);
checkPersistentMenus();
gRTestIndexList = new RTestIndexList();
}
function checkPersistentMenu(item)
{
var menuitem = document.getElementById("menu_" + item);
menuitem.setAttribute("checked", gDebugger[item]);
}
function checkPersistentMenus()
{
// Restore the toggles that are stored in prefs.
checkPersistentMenu("paintFlashing");
checkPersistentMenu("paintDumping");
checkPersistentMenu("invalidateDumping");
checkPersistentMenu("eventDumping");
checkPersistentMenu("motionEventDumping");
checkPersistentMenu("crossingEventDumping");
checkPersistentMenu("reflowCounts");
}
function OnLDBUnload()
{
gBrowser.removeProgressListener(gProgressListener);
}
function toggle(menuitem)
{
// trim the initial "menu_"
var feature = menuitem.id.substring(5);
gDebugger[feature] = menuitem.getAttribute("checked") == "true";
}
function openFile()
{
var nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, "Select a File", nsIFilePicker.modeOpen);
fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec &&
fp.fileURL.spec.length > 0) {
gBrowser.loadURI(fp.fileURL.spec);
}
}
const LDB_RDFNS = "http://mozilla.org/newlayout/LDB-rdf#";
const NC_RDFNS = "http://home.netscape.com/NC-rdf#";
function RTestIndexList() {
this.init();
}
RTestIndexList.prototype = {
init : function()
{
const nsIPrefService = Components.interfaces.nsIPrefService;
const PREF_SERVICE_CONTRACTID = "@mozilla.org/preferences-service;1";
const PREF_BRANCH_NAME = "layout_debugger.rtest_url.";
const nsIRDFService = Components.interfaces.nsIRDFService;
const RDF_SERVICE_CONTRACTID = "@mozilla.org/rdf/rdf-service;1";
const nsIRDFDataSource = Components.interfaces.nsIRDFDataSource;
const RDF_DATASOURCE_CONTRACTID =
"@mozilla.org/rdf/datasource;1?name=in-memory-datasource";
this.mPrefService = Components.classes[PREF_SERVICE_CONTRACTID].
getService(nsIPrefService);
this.mPrefBranch = this.mPrefService.getBranch(PREF_BRANCH_NAME);
this.mRDFService = Components.classes[RDF_SERVICE_CONTRACTID].
getService(nsIRDFService);
this.mDataSource = Components.classes[RDF_DATASOURCE_CONTRACTID].
createInstance(nsIRDFDataSource);
this.mLDB_Root = this.mRDFService.GetResource(LDB_RDFNS + "Root");
this.mNC_Name = this.mRDFService.GetResource(NC_RDFNS + "name");
this.mNC_Child = this.mRDFService.GetResource(NC_RDFNS + "child");
this.load();
document.getElementById("menu_RTest_baseline").database.
AddDataSource(this.mDataSource);
document.getElementById("menu_RTest_verify").database.
AddDataSource(this.mDataSource);
document.getElementById("menu_RTest_remove").database.
AddDataSource(this.mDataSource);
},
save : function()
{
this.mPrefBranch.deleteBranch("");
const nsIRDFLiteral = Components.interfaces.nsIRDFLiteral;
const nsIRDFResource = Components.interfaces.nsIRDFResource;
var etor = this.mDataSource.GetTargets(this.mLDB_Root,
this.mNC_Child, true);
var i = 0;
while (etor.hasMoreElements()) {
var resource = etor.getNext().QueryInterface(nsIRDFResource);
var literal = this.mDataSource.GetTarget(resource, this.mNC_Name, true);
literal = literal.QueryInterface(nsIRDFLiteral);
this.mPrefBranch.setCharPref(i.toString(), literal.Value);
++i;
}
this.mPrefService.savePrefFile(null);
},
load : function()
{
var prefList = this.mPrefBranch.getChildList("");
var i = 0;
for (var pref in prefList) {
var file = this.mPrefBranch.getCharPref(pref);
var resource = this.mRDFService.GetResource(file);
var literal = this.mRDFService.GetLiteral(file);
this.mDataSource.Assert(this.mLDB_Root, this.mNC_Child, resource, true);
this.mDataSource.Assert(resource, this.mNC_Name, literal, true);
++i;
}
},
/* Add a new list of regression tests to the menus. */
add : function()
{
const nsIFilePicker = Components.interfaces.nsIFilePicker;
const NS_FILEPICKER_CONTRACTID = "@mozilla.org/filepicker;1";
var fp = Components.classes[NS_FILEPICKER_CONTRACTID].
createInstance(nsIFilePicker);
// XXX l10n (but this is just for 5 developers, so no problem)
fp.init(window, "New Regression Test List", nsIFilePicker.modeOpen);
fp.appendFilters(nsIFilePicker.filterAll);
fp.defaultString = "rtest.lst";
if (fp.show() != nsIFilePicker.returnOK)
return;
var file = fp.file.persistentDescriptor;
var resource = this.mRDFService.GetResource(file);
var literal = this.mRDFService.GetLiteral(file);
this.mDataSource.Assert(this.mLDB_Root, this.mNC_Child, resource, true);
this.mDataSource.Assert(resource, this.mNC_Name, literal, true);
this.save();
},
remove : function(file)
{
var resource = this.mRDFService.GetResource(file);
var literal = this.mRDFService.GetLiteral(file);
this.mDataSource.Unassert(this.mLDB_Root, this.mNC_Child, resource);
this.mDataSource.Unassert(resource, this.mNC_Name, literal);
this.save();
},
mPrefBranch : null,
mPrefService : null,
mRDFService : null,
mDataSource : null,
mLDB_Root : null,
mNC_Child : null,
mNC_Name : null
}
const nsIFileInputStream = Components.interfaces.nsIFileInputStream;
const nsILineInputStream = Components.interfaces.nsILineInputStream;
const nsIFile = Components.interfaces.nsIFile;
const nsILocalFile = Components.interfaces.nsILocalFile;
const nsIFileURL = Components.interfaces.nsIFileURL;
const nsIIOService = Components.interfaces.nsIIOService;
const nsILayoutRegressionTester = Components.interfaces.nsILayoutRegressionTester;
const NS_LOCAL_FILE_CONTRACTID = "@mozilla.org/file/local;1";
const IO_SERVICE_CONTRACTID = "@mozilla.org/network/io-service;1";
const NS_LOCALFILEINPUTSTREAM_CONTRACTID =
"@mozilla.org/network/file-input-stream;1";
function RunRTest(aFilename, aIsBaseline, aIsPrinting)
{
if (gRTestURLList) {
// XXX Does alert work?
alert("Already running regression test.\n");
return;
}
dump("Running " + (aIsBaseline?"baseline":"verify") +
(aIsPrinting?" PrintMode":"") + " test for " + aFilename + ".\n");
var listFile = Components.classes[NS_LOCAL_FILE_CONTRACTID].
createInstance(nsILocalFile);
listFile.persistentDescriptor = aFilename;
gRTestURLList = new RTestURLList(listFile, aIsBaseline, aIsPrinting);
gRTestURLList.startURL();
}
function RTestURLList(aLocalFile, aIsBaseline, aIsPrinting) {
this.init(aLocalFile, aIsBaseline, aIsPrinting);
}
RTestURLList.prototype = {
init : function(aLocalFile, aIsBaseline, aIsPrinting)
{
this.mIsBaseline = aIsBaseline;
this.mIsPrinting = aIsPrinting;
this.mURLs = new Array();
this.readFileList(aLocalFile);
this.mRegressionTester =
Components.classes["@mozilla.org/layout-debug/regressiontester;1"].
createInstance(nsILayoutRegressionTester)
},
readFileList : function(aLocalFile)
{
var ios = Components.classes[IO_SERVICE_CONTRACTID]
.getService(nsIIOService);
var dirURL = ios.newFileURI(aLocalFile.parent);
var fis = Components.classes[NS_LOCALFILEINPUTSTREAM_CONTRACTID].
createInstance(nsIFileInputStream);
fis.init(aLocalFile, -1, -1, false);
var lis = fis.QueryInterface(nsILineInputStream);
var line = {value:null};
do {
var more = lis.readLine(line);
var str = line.value;
str = /^[^#]*/.exec(str); // strip everything after "#"
str = /\S*/.exec(str); // take the first chunk of non-whitespace
if (!str || str == "")
continue;
var item = dirURL.resolve(str);
if (item.match(/\/rtest.lst$/)) {
var itemurl = ios.newURI(item, null, null);
itemurl = itemurl.QueryInterface(nsIFileURL);
this.readFileList(itemurl.file);
} else {
this.mURLs.push( {url:item, dir:aLocalFile.parent, relurl:str} );
}
} while (more);
},
doneURL : function()
{
var basename =
String(this.mCurrentURL.relurl).replace(/[:=&.\/?]/g, "_") + ".rgd";
var data = this.mCurrentURL.dir.clone();
data.append( this.mIsBaseline ? "baseline" : "verify");
if (!data.exists())
data.create(nsIFile.DIRECTORY_TYPE, 0o777)
data.append(basename);
dump("Writing regression data to " +
data.QueryInterface(nsILocalFile).persistentDescriptor + "\n");
if (this.mIsPrinting) {
this.mRegressionTester.dumpFrameModel(gBrowser.contentWindow, data,
nsILayoutRegressionTester.DUMP_FLAGS_MASK_PRINT_MODE);
}
else {
this.mRegressionTester.dumpFrameModel(gBrowser.contentWindow, data, 0);
}
if (!this.mIsBaseline) {
var base_data = this.mCurrentURL.dir.clone();
base_data.append("baseline");
base_data.append(basename);
dump("Comparing to regression data from " +
base_data.QueryInterface(nsILocalFile).persistentDescriptor + "\n");
var filesDiffer =
this.mRegressionTester.compareFrameModels(base_data, data,
nsILayoutRegressionTester.COMPARE_FLAGS_BRIEF)
dump("Comparison for " + this.mCurrentURL.url + " " +
(filesDiffer ? "failed" : "passed") + ".\n");
}
this.mCurrentURL = null;
this.startURL();
},
startURL : function()
{
this.mCurrentURL = this.mURLs.shift();
if (!this.mCurrentURL) {
gRTestURLList = null;
return;
}
gBrowser.loadURI(this.mCurrentURL.url);
},
mURLs : null,
mCurrentURL : null, // url (string), dir (nsIFileURL), relurl (string)
mIsBaseline : null,
mRegressionTester : null,
mIsPrinting : null
}

View file

@ -0,0 +1,187 @@
<?xml version="1.0"?>
<!-- vim: set shiftwidth=2 tabstop=8 expandtab :
-
-
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!DOCTYPE window [
<!ENTITY % layoutdebugDTD
SYSTEM "chrome://layoutdebug/locale/layoutdebug.dtd">
%layoutdebugDTD;
<!ENTITY W3C_RDFNS "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!ENTITY NC_RDFNS "http://home.netscape.com/NC-rdf#">
<!ENTITY LDB_RDFNS "http://mozilla.org/newlayout/LDB-rdf#">
]>
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css" ?>
<?xul-overlay href="chrome://global/content/globalOverlay.xul"?>
<?xul-overlay href="chrome://communicator/content/tasksOverlay.xul"?>
<!--
NOTE: Because this window is used for layout regression tests, the
persist attribute should never be used on anything. Otherwise there
is a risk of running baseline and verify runs under different
conditions.
-->
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:rdf="&W3C_RDFNS;"
id="main-window"
align="stretch"
title="&ldb.MainWindow.title;"
titlemodifier="&ldb.MainWindow.title;"
contenttitlesetting="true"
titlemenuseparator=" - "
windowtype="mozapp:layoutdebug"
onload="OnLDBLoad();"
onunload="OnLDBUnload();"
width="610" height="450"
screenX="4" screenY="4"
>
<script src="chrome://layoutdebug/content/layoutdebug.js"/>
<commandset id="tasksCommands">
<command id="cmd_close" oncommand="window.close();"/>
<command id="cmd_quit"/>
</commandset>
<keyset id="tasksKeys">
<key id="openFileKb" key="&ldb.Open.commandkey;" oncommand="openFile()" modifiers="accel"/>
<key id="key_close"/>
<key id="key_quit"/>
</keyset>
<vbox flex="1">
<toolbox>
<menubar id="main-menubar" grippyhidden="true">
<menu id="menu_file" label="File" accesskey="F">
<menupopup id="menu_FilePopup">
<menuitem id="menu_open" label="&ldb.Open.label;" accesskey="&ldb.Open.accesskey;" key="openFileKb" oncommand="openFile()"/>
<menuitem id="menu_close" label="Close" accesskey="C" oncommand="window.close();"/>
</menupopup>
</menu>
<menu label="&ldb.RegressionTestMenu.label;"
accesskey="&ldb.RegressionTestMenu.accesskey;">
<menupopup>
<menuitem type="checkbox" id="menu_RTestPrintMode" label="&ldb.RegressionPrintMode.label;" accesskey="&ldb.RegressionPrintMode.accesskey;"/>
<menu label="&ldb.RunBaselineMenu.label;"
accesskey="&ldb.RunBaselineMenu.accesskey;"
id="menu_RTest_baseline"
datasources="rdf:null"
containment="&NC_RDFNS;child"
ref="&LDB_RDFNS;Root">
<template>
<menupopup>
<menuitem uri="rdf:*"
label="rdf:&NC_RDFNS;name"
name="rdf:&NC_RDFNS;name"
oncommand="RunRTest(this.getAttribute('name'), true, document.getElementById('menu_RTestPrintMode').getAttribute('checked'));" />
</menupopup>
</template>
</menu>
<menu label="&ldb.RunVerifyMenu.label;"
accesskey="&ldb.RunVerifyMenu.accesskey;"
id="menu_RTest_verify"
datasources="rdf:null"
containment="&NC_RDFNS;child"
ref="&LDB_RDFNS;Root">
<template>
<menupopup>
<menuitem uri="rdf:*"
label="rdf:&NC_RDFNS;name"
name="rdf:&NC_RDFNS;name"
oncommand="RunRTest(this.getAttribute('name'), false, document.getElementById('menu_RTestPrintMode').getAttribute('checked'));" />
</menupopup>
</template>
</menu>
<menuseparator />
<menuitem id="menu_AddNewList" label="&ldb.AddNewList.label;" accesskey="&ldb.AddNewList.accesskey;" oncommand="gRTestIndexList.add();" />
<menu label="&ldb.RemoveListMenu.label;"
accesskey="&ldb.RemoveListMenu.accesskey;"
id="menu_RTest_remove"
datasources="rdf:null"
containment="&NC_RDFNS;child"
ref="&LDB_RDFNS;Root">
<template>
<menupopup>
<menuitem uri="rdf:*"
label="rdf:&NC_RDFNS;name"
name="rdf:&NC_RDFNS;name"
oncommand="gRTestIndexList.remove(this.getAttribute('name'));" />
</menupopup>
</template>
</menu>
</menupopup>
</menu>
<menu label="&ldb.ToggleMenu.label;"
accesskey="&ldb.ToggleMenu.accesskey;">
<menupopup>
<menuitem type="checkbox" id="menu_visualDebugging" label="&ldb.visualDebugging.label;" accesskey="&ldb.visualDebugging.accesskey;" oncommand="toggle(this);" />
<menuitem type="checkbox" id="menu_visualEventDebugging" label="&ldb.visualEventDebugging.label;" accesskey="&ldb.visualEventDebugging.accesskey;" oncommand="toggle(this);" />
<menuseparator />
<menuitem type="checkbox" id="menu_paintFlashing" label="&ldb.paintFlashing.label;" accesskey="&ldb.paintFlashing.accesskey;" oncommand="toggle(this);" />
<menuitem type="checkbox" id="menu_paintDumping" label="&ldb.paintDumping.label;" accesskey="&ldb.paintDumping.accesskey;" oncommand="toggle(this);" />
<menuitem type="checkbox" id="menu_invalidateDumping" label="&ldb.invalidateDumping.label;" accesskey="&ldb.invalidateDumping.accesskey;" oncommand="toggle(this);" />
<menuseparator />
<menuitem type="checkbox" id="menu_eventDumping" label="&ldb.eventDumping.label;" accesskey="&ldb.eventDumping.accesskey;" oncommand="toggle(this);" />
<menuitem type="checkbox" id="menu_motionEventDumping" label="&ldb.motionEventDumping.label;" accesskey="&ldb.motionEventDumping.accesskey;" oncommand="toggle(this);" />
<menuitem type="checkbox" id="menu_crossingEventDumping" label="&ldb.crossingEventDumping.label;" accesskey="&ldb.crossingEventDumping.accesskey;" oncommand="toggle(this);" />
<menuseparator />
<menuitem type="checkbox" id="menu_reflowCounts" label="&ldb.reflowCounts.label;" accesskey="&ldb.reflowCounts.accesskey;" oncommand="toggle(this);" />
</menupopup>
</menu>
<menu label="&ldb.DumpMenu.label;"
accesskey="&ldb.DumpMenu.accesskey;">
<menupopup>
<menuitem id="menu_dumpWebShells" label="&ldb.dumpWebShells.label;" accesskey="&ldb.dumpWebShells.accesskey;" oncommand="gDebugger.dumpWebShells();" />
<menuitem id="menu_dumpContent" label="&ldb.dumpContent.label;" accesskey="&ldb.dumpContent.accesskey;" oncommand="gDebugger.dumpContent();" />
<menuitem id="menu_dumpFrames" label="&ldb.dumpFrames.label;" accesskey="&ldb.dumpFrames.accesskey;" oncommand="gDebugger.dumpFrames();" />
<menuitem id="menu_dumpViews" label="&ldb.dumpViews.label;" accesskey="&ldb.dumpViews.accesskey;" oncommand="gDebugger.dumpViews();" />
<menuseparator />
<menuitem id="menu_dumpStyleSheets" label="&ldb.dumpStyleSheets.label;" accesskey="&ldb.dumpStyleSheets.accesskey;" oncommand="gDebugger.dumpStyleSheets();" />
<menuitem id="menu_dumpStyleContexts" label="&ldb.dumpStyleContexts.label;" accesskey="&ldb.dumpStyleContexts.accesskey;" oncommand="gDebugger.dumpStyleContexts();" />
<menuseparator />
<menuitem id="menu_dumpReflowStats" label="&ldb.dumpReflowStats.label;" accesskey="&ldb.dumpReflowStats.accesskey;" oncommand="gDebugger.dumpReflowStats();" />
</menupopup>
</menu>
<menu id="tasksMenu"/>
<menu id="windowMenu"/>
<menu id="menu_Help"/>
</menubar>
<toolbar grippyhidden="true">
<toolbarbutton id="back-button" class="toolbarbutton-1"
label="&ldb.BackButton.label;"
oncommand="gBrowser.goBack();" />
<toolbarbutton id="forward-button" class="toolbarbutton-1"
label="&ldb.ForwardButton.label;"
oncommand="gBrowser.goForward();" />
<toolbarbutton id="reload-button" class="toolbarbutton-1"
label="&ldb.ReloadButton.label;"
oncommand="gBrowser.reload();" />
<toolbarbutton id="stop-button" class="toolbarbutton-1"
label="&ldb.StopButton.label;"
oncommand="gBrowser.stop();" />
<textbox id="urlbar" flex="1"
onkeypress="if (event.keyCode == 13)
gBrowser.loadURI(this.value);" />
</toolbar>
</toolbox>
<browser flex="1" id="browser" type="content-primary"
homepage="about:blank" />
<hbox>
<description id="status-text" value="" />
</hbox>
</vbox>
</window>