Merge mozilla-central to mozilla-inbound

This commit is contained in:
Carsten "Tomcat" Book 2016-05-02 11:40:02 +02:00
Родитель 6e76c672f2 548d98c27e
Коммит 9afcd53619
163 изменённых файлов: 15009 добавлений и 13097 удалений

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

@ -1,5 +1,5 @@
<?xml version="1.0"?>
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1461272551000">
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1461962224000">
<emItems>
<emItem blockID="i58" id="webmaster@buzzzzvideos.info">
<versionRange minVersion="0" maxVersion="*">
@ -3594,6 +3594,7 @@
<device>0x0046</device>
</devices>
<featureStatus>BLOCKED_DRIVER_VERSION</featureStatus> <driverVersion>8.15.10.2086</driverVersion> <driverVersionComparator>EQUAL</driverVersionComparator> </gfxBlacklistEntry>
<gfxBlacklistEntry blockID="g1208"> <os>All</os> <vendor>0x8086</vendor> <feature>FEATURE_HARDWARE_VIDEO_DECODING</feature> <featureStatus>BLOCKED_DRIVER_VERSION</featureStatus> <driverVersion>10.18.10.3947</driverVersion> <driverVersionComparator>EQUAL</driverVersionComparator> </gfxBlacklistEntry>
</gfxItems>
<certItems>
@ -3731,9 +3732,6 @@
</certItem>
<certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg==">
<serialNumber>O2S99lVUxErLSk56GvWRv+E=</serialNumber>
</certItem>
<certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg==">
<serialNumber>F7PAjw2k0dTX5escPnyVOBo=</serialNumber>
</certItem>
<certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg==">
<serialNumber>Mq0P6o03FDk0B2bnJ+mYPGo=</serialNumber>
@ -3770,6 +3768,174 @@
</certItem>
<certItem issuerName="MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp">
<serialNumber>TA6EVg==</serialNumber>
</certItem>
<certItem issuerName="MGExCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEbMBkGA1UEAxMSR2VvVHJ1c3QgRFYgU1NMIENB">
<serialNumber>CWhp</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzI=">
<serialNumber>XhcFm2g619rt8Sro+a4rHA==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzI=">
<serialNumber>EDQMI0tR4kSntv1O37N10g==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzI=">
<serialNumber>P6G7IYSL2RZxtzTh8I6qPA==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>HNo1DR4XCe4mS1iUMsY6Wg==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>KjoVfZ3by6+pL8fssyfM6A==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>UW3oKZKTDsrPy/rfwmGNaQ==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>XLhHIg7vP+tWfRqvuKeAxw==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>YNOos6YJoPC77qwSGCpb7w==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>dItWlz2V62Philqj9m6Pbg==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>ORFgmCj072NjcJnrxOMfQA==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM=">
<serialNumber>L79XLVO2ZmtAu7FAG8Wmzw==</serialNumber>
</certItem>
<certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzQ=">
<serialNumber>H08=</serialNumber>
</certItem>
<certItem issuerName="MGgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEiMCAGA1UEAxMZR2VvVHJ1c3QgRFYgU1NMIFNIQTI1NiBDQQ==">
<serialNumber>OE4/d+p3YRzzcSl+kmZ8Mw==</serialNumber>
</certItem>
<certItem issuerName="MGgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEiMCAGA1UEAxMZR2VvVHJ1c3QgRFYgU1NMIFNIQTI1NiBDQQ==">
<serialNumber>ZgwfEqZnBsUNvNuZ77FbQA==</serialNumber>
</certItem>
<certItem issuerName="MEYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR8wHQYDVQQDExZHZW9UcnVzdCBTSEEyNTYgU1NMIENB">
<serialNumber>OUvvVscW0/NltofkmV9qmg==</serialNumber>
</certItem>
<certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMg==">
<serialNumber>SdegFrLaFTCsoMAW5ED+zA==</serialNumber>
</certItem>
<certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMg==">
<serialNumber>VfTSum25nb65YPlpuhJAvg==</serialNumber>
</certItem>
<certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMg==">
<serialNumber>WX89jn8yGZVvoKTD9jDfRQ==</serialNumber>
</certItem>
<certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMw==">
<serialNumber>cpqpXVWPk5AXzGw+zNIcBw==</serialNumber>
</certItem>
<certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMw==">
<serialNumber>RUT1Gehd1KKYPfqOlgspoQ==</serialNumber>
</certItem>
<certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMw==">
<serialNumber>bx/XHJqcwxDOptxJ2lh5vw==</serialNumber>
</certItem>
<certItem issuerName="MHMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEkMCIGA1UEAxMbU3ltYW50ZWMgQ2xhc3MgMyBEU0EgU1NMIENB">
<serialNumber>AuhvPsYZfVP6UDsuyjeZ4Q==</serialNumber>
</certItem>
<certItem issuerName="MH8xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBFQ0MgMjU2IGJpdCBFViBDQSAtIEcy">
<serialNumber>OhrtngFwotLcm4i+z00SjA==</serialNumber>
</certItem>
<certItem issuerName="MHsxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEsMCoGA1UEAxMjU3ltYW50ZWMgQ2xhc3MgMyBFQ0MgMjU2IGJpdCBTU0wgQ0E=">
<serialNumber>U3SgRR3J+D6575WuCxuXeQ==</serialNumber>
</certItem>
<certItem issuerName="MHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgQ2xhc3MgMyBFViBTU0wgQ0EgLSBHMg==">
<serialNumber>UVKsEezpGWOVQ4W9esstng==</serialNumber>
</certItem>
<certItem issuerName="MHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgQ2xhc3MgMyBFViBTU0wgQ0EgLSBHMw==">
<serialNumber>acI1CFIgmwSFBoU5+ahDgg==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>Sx51x7V8pYe8rp7PMP/3qg==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>PAdKZPiaac2CvPxbOrsHOw==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>E77H6yvyFQjO0PcN3x0H+Q==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>d8AtKymQwkOPDBj+hjPzFg==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>TurPPI6eivtNeGYdM0ZWXQ==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>a9/VeyVWrzFD7rM2PEHwQA==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>LnfcUaXG/pxV2CpXM5+YSg==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>AygWP2Fgd2T+iLbmAlKT6g==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>ezdAeCxKH7BFs7vn3byYaw==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>45KI4WIxyXfNrdtdj7C6</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>UMUwXwT1Z4juyQ/CNTf4mw==</serialNumber>
</certItem>
<certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ=">
<serialNumber>HZyLf+K70FKc+jomm8DiDw==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>IIxFSyNM6mWtCgTG0IL3Og==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>Rvm2CEw2IC2Mu/ax0A46QQ==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>TqfXw+FkhxfVgE9GVMgjWQ==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>E5I2y6sIonl4a+TmlXc7fw==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>GdXz4L1b6FKNCMG9Jz2tjA==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>BUrYjru5px1ym4QUN33TOQ==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>CqZgEvHAsnzkT//QV9KjXw==</serialNumber>
</certItem>
<certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI=">
<serialNumber>DYifRdP6aQQ8MLbXZY2f5g==</serialNumber>
</certItem>
<certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxUaGF3dGUsIEluYy4xGzAZBgNVBAMTElRoYXd0ZSBTR0MgQ0EgLSBHMg==">
<serialNumber>cDggUYfwJ3A1YcdoeT6s4A==</serialNumber>
</certItem>
<certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxUaGF3dGUsIEluYy4xGzAZBgNVBAMTElRoYXd0ZSBTR0MgQ0EgLSBHMg==">
<serialNumber>e0bEFhI16xx9U1yvlI56rA==</serialNumber>
</certItem>
<certItem issuerName="MEMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAMTFHRoYXd0ZSBTSEEyNTYgU1NMIENB">
<serialNumber>UKKK5ol/rKBZchAAOnZjaA==</serialNumber>
</certItem>
<certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xGzAZBgNVBAMTEnRoYXd0ZSBTU0wgQ0EgLSBHMg==">
<serialNumber>FNISyWWTGi5Yco6fGh58/A==</serialNumber>
</certItem>
<certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xGzAZBgNVBAMTEnRoYXd0ZSBTU0wgQ0EgLSBHMg==">
<serialNumber>JpUvYJyWjdGmeoH7YcYunw==</serialNumber>
</certItem>
<certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM=">
<serialNumber>OnvXX72mvUI2Id/NMzegmg==</serialNumber>
</certItem>
<certItem issuerName="MIG1MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS8wLQYDVQQDEyZWZXJpU2lnbiBDbGFzcyAzIFNlY3VyZSBTZXJ2ZXIgQ0EgLSBHMw==">
<serialNumber>QZBvapTZFvmYktEPsBYLQQ==</serialNumber>
</certItem>
<certItem issuerName="MIG1MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS8wLQYDVQQDEyZWZXJpU2lnbiBDbGFzcyAzIFNlY3VyZSBTZXJ2ZXIgQ0EgLSBHMw==">
<serialNumber>OqQ2rV0ISTc308Z/oQgzFw==</serialNumber>
</certItem>
<certItem issuerName="MIG1MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS8wLQYDVQQDEyZWZXJpU2lnbiBDbGFzcyAzIFNlY3VyZSBTZXJ2ZXIgQ0EgLSBHMw==">
<serialNumber>NvEJoRYL2yvAZrAjbDIipQ==</serialNumber>
</certItem>
</certItems>

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

@ -486,6 +486,8 @@ pref("browser.bookmarks.autoExportHTML", false);
// 0: no backups created (and deletes all existing backups)
pref("browser.bookmarks.max_backups", 15);
pref("browser.bookmarks.showRecentlyBookmarked", true);
// Scripts & Windows prefs
pref("dom.disable_open_during_load", true);
pref("javascript.options.showInConsole", true);

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

@ -550,11 +550,14 @@ var PlacesCommandHook = {
get uniqueCurrentPages() {
let uniquePages = {};
let URIs = [];
gBrowser.visibleTabs.forEach(function (tab) {
let spec = tab.linkedBrowser.currentURI.spec;
gBrowser.visibleTabs.forEach(tab => {
let browser = tab.linkedBrowser;
let uri = browser.currentURI;
let spec = uri.spec;
if (!tab.pinned && !(spec in uniquePages)) {
uniquePages[spec] = null;
URIs.push(tab.linkedBrowser.currentURI);
URIs.push({ uri, title: browser.contentTitle });
}
});
return URIs;
@ -1326,8 +1329,8 @@ var BookmarkingUI = {
return;
}
this._updateRecentBookmarks(document.getElementById("BMB_recentBookmarks"),
"subviewbutton");
this._initRecentBookmarks(document.getElementById("BMB_recentBookmarks"),
"subviewbutton");
if (!this._popupNeedsUpdate)
return;
@ -1362,7 +1365,68 @@ var BookmarkingUI = {
});
},
_updateRecentBookmarks: function(aHeaderItem, extraCSSClass = "") {
RECENTLY_BOOKMARKED_PREF: "browser.bookmarks.showRecentlyBookmarked",
_initRecentBookmarks(aHeaderItem, aExtraCSSClass) {
this._populateRecentBookmarks(aHeaderItem, aExtraCSSClass);
// Add observers and listeners and remove them again when the menupopup closes.
let bookmarksMenu = aHeaderItem.parentNode;
let placesContextMenu = document.getElementById("placesContext");
let prefObserver = () => {
this._populateRecentBookmarks(aHeaderItem, aExtraCSSClass);
};
let updatePlacesContextMenu = (shouldHidePrefUI = false) => {
let prefEnabled = !shouldHidePrefUI && Services.prefs.getBoolPref(this.RECENTLY_BOOKMARKED_PREF);
document.getElementById("placesContext_showRecentlyBookmarked").hidden = shouldHidePrefUI || prefEnabled;
document.getElementById("placesContext_hideRecentlyBookmarked").hidden = shouldHidePrefUI || !prefEnabled;
document.getElementById("placesContext_recentlyBookmarkedSeparator").hidden = shouldHidePrefUI;
};
let onPlacesContextMenuShowing = event => {
if (event.target == event.currentTarget) {
let triggerPopup = event.target.triggerNode;
while (triggerPopup && triggerPopup.localName != "menupopup") {
triggerPopup = triggerPopup.parentNode;
}
let shouldHidePrefUI = triggerPopup != bookmarksMenu;
updatePlacesContextMenu(shouldHidePrefUI);
}
};
let onBookmarksMenuHidden = event => {
if (event.target == event.currentTarget) {
updatePlacesContextMenu(true);
Services.prefs.removeObserver(this.RECENTLY_BOOKMARKED_PREF, prefObserver, false);
placesContextMenu.removeEventListener("popupshowing", onPlacesContextMenuShowing);
bookmarksMenu.removeEventListener("popuphidden", onBookmarksMenuHidden);
}
};
Services.prefs.addObserver(this.RECENTLY_BOOKMARKED_PREF, prefObserver, false);
placesContextMenu.addEventListener("popupshowing", onPlacesContextMenuShowing);
bookmarksMenu.addEventListener("popuphidden", onBookmarksMenuHidden);
},
_populateRecentBookmarks(aHeaderItem, aExtraCSSClass = "") {
while (aHeaderItem.nextSibling &&
aHeaderItem.nextSibling.localName == "menuitem") {
aHeaderItem.nextSibling.remove();
}
let shouldShow = Services.prefs.getBoolPref(this.RECENTLY_BOOKMARKED_PREF);
let separator = aHeaderItem.previousSibling;
aHeaderItem.hidden = !shouldShow;
separator.hidden = !shouldShow;
if (!shouldShow) {
return;
}
const kMaxResults = 5;
let options = PlacesUtils.history.getNewQueryOptions();
@ -1372,11 +1436,6 @@ var BookmarkingUI = {
options.maxResults = kMaxResults;
let query = PlacesUtils.history.getNewQuery();
while (aHeaderItem.nextSibling &&
aHeaderItem.nextSibling.localName == "menuitem") {
aHeaderItem.nextSibling.remove();
}
let onItemCommand = function (aEvent) {
let item = aEvent.target;
openUILink(item.getAttribute("targetURI"), aEvent);
@ -1397,8 +1456,9 @@ var BookmarkingUI = {
"menuitem");
item.setAttribute("label", title || uri);
item.setAttribute("targetURI", uri);
item.setAttribute("context", "hideRecentlyBookmarked");
item.setAttribute("class", "menuitem-iconic menuitem-with-favicon bookmark-item " +
extraCSSClass);
aExtraCSSClass);
item.addEventListener("command", onItemCommand);
if (icon) {
item.setAttribute("image", icon);
@ -1407,6 +1467,15 @@ var BookmarkingUI = {
}
root.containerOpen = false;
aHeaderItem.parentNode.insertBefore(fragment, aHeaderItem.nextSibling);
aHeaderItem.setAttribute("context", "hideRecentlyBookmarked");
},
showRecentlyBookmarked() {
Services.prefs.setBoolPref(this.RECENTLY_BOOKMARKED_PREF, true);
},
hideRecentlyBookmarked() {
Services.prefs.setBoolPref(this.RECENTLY_BOOKMARKED_PREF, false);
},
_updateCustomizationState: function BUI__updateCustomizationState() {
@ -1599,7 +1668,7 @@ var BookmarkingUI = {
this._updateBookmarkPageMenuItem();
PlacesCommandHook.updateBookmarkAllTabsCommand();
this._updateRecentBookmarks(document.getElementById("menu_recentBookmarks"));
this._initRecentBookmarks(document.getElementById("menu_recentBookmarks"));
},
_showBookmarkedNotification: function BUI_showBookmarkedNotification() {

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

@ -383,7 +383,35 @@
#include browser-context.inc
</menupopup>
<menupopup id="placesContext"/>
<menupopup id="placesContext">
<menuseparator id="placesContext_recentlyBookmarkedSeparator"
ignoreitem="true"
ordinal="2"
hidden="true"/>
<menuitem id="placesContext_hideRecentlyBookmarked"
label="&hideRecentlyBookmarked.label;"
accesskey="&hideRecentlyBookmarked.accesskey;"
oncommand="BookmarkingUI.hideRecentlyBookmarked();"
closemenu="single"
ignoreitem="true"
ordinal="2"
hidden="true"/>
<menuitem id="placesContext_showRecentlyBookmarked"
label="&showRecentlyBookmarked.label;"
accesskey="&showRecentlyBookmarked.accesskey;"
oncommand="BookmarkingUI.showRecentlyBookmarked();"
closemenu="single"
ignoreitem="true"
ordinal="2"
hidden="true"/>
</menupopup>
<menupopup id="hideRecentlyBookmarked">
<menuitem label="&hideRecentlyBookmarked.label;"
accesskey="&hideRecentlyBookmarked.accesskey;"
oncommand="BookmarkingUI.hideRecentlyBookmarked();"
closemenu="single"/>
</menupopup>
<panel id="ctrlTab-panel" class="KUI-panel" hidden="true" norestorefocus="true" level="top">
<hbox>

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

@ -324,7 +324,7 @@ add_task(function* checkAdvancedDetailsForHSTS() {
});
isnot(message.divDisplay, "none", "Debug information is visible");
ok(message.text.includes(badStsUri.spec), "Correct URL found");
ok(message.text.includes("requested domain name does not match the server's certificate"),
ok(message.text.includes("requested domain name does not match the server\u2019s certificate"),
"Correct error message found");
ok(message.text.includes("HTTP Strict Transport Security: false"),
"Correct HSTS value found");

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

@ -1,168 +1,244 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* This list allows pre-existing or 'unfixable' issues to remain, while we
* detect newly occurring issues in shipping files. It is a list of objects
* specifying conditions under which an error should be ignored.
*
* As each issue is found in the whitelist, it is removed from the list. At
* the end of the test, there is an assertion that all items have been
* removed from the whitelist, thus ensuring there are no stale entries. */
let gWhitelist = [{
file: "search.properties",
key: "searchForSomethingWith",
type: "single-quote"
}, {
file: "browser.dtd",
key: "social.activated.description",
type: "single-quote"
}, {
file: "netError.dtd",
key: "certerror.introPara",
type: "single-quote"
}, {
file: "netError.dtd",
key: "weakCryptoAdvanced.longDesc",
type: "single-quote"
}, {
file: "netError.dtd",
key: "weakCryptoAdvanced.override",
type: "single-quote"
}, {
file: "netError.dtd",
key: "inadequateSecurityError.longDesc",
type: "single-quote"
}, {
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* This list allows pre-existing or 'unfixable' issues to remain, while we
* detect newly occurring issues in shipping files. It is a list of objects
* specifying conditions under which an error should be ignored.
*
* As each issue is found in the whitelist, it is removed from the list. At
* the end of the test, there is an assertion that all items have been
* removed from the whitelist, thus ensuring there are no stale entries. */
let gWhitelist = [{
file: "search.properties",
key: "searchForSomethingWith",
type: "single-quote"
}, {
file: "browser.dtd",
key: "social.activated.description",
type: "single-quote"
}, {
file: "netError.dtd",
key: "certerror.introPara",
type: "single-quote"
}, {
file: "netError.dtd",
key: "weakCryptoAdvanced.longDesc",
type: "single-quote"
}, {
file: "netError.dtd",
key: "weakCryptoAdvanced.override",
type: "single-quote"
}, {
file: "netError.dtd",
key: "inadequateSecurityError.longDesc",
type: "single-quote"
}, {
file: "netError.dtd",
key: "certerror.wrongSystemTime",
type: "single-quote"
}, {
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.malwarePage.shortDesc",
type: "single-quote"
}, {
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.unwantedPage.shortDesc",
type: "single-quote"
}, {
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.phishingPage.shortDesc2",
type: "single-quote"
}, {
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.forbiddenPage.shortDesc2",
type: "single-quote"
}
];
var moduleLocation = gTestPath.replace(/\/[^\/]*$/i, "/parsingTestHelpers.jsm");
var {generateURIsFromDirTree} = Cu.import(moduleLocation, {});
/**
* Check if an error should be ignored due to matching one of the whitelist
* objects defined in gWhitelist.
*
* @param filepath The URI spec of the locale file
* @param key The key of the entity that is being checked
* @param type The type of error that has been found
* @return true if the error should be ignored, false otherwise.
*/
function ignoredError(filepath, key, type) {
for (let index in gWhitelist) {
let whitelistItem = gWhitelist[index];
if (filepath.endsWith(whitelistItem.file) &&
key == whitelistItem.key &&
type == whitelistItem.type) {
gWhitelist.splice(index, 1);
return true;
}
}
return false;
}
function fetchFile(uri) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open("GET", uri, true);
xhr.onreadystatechange = function() {
if (this.readyState != this.DONE) {
return;
}
try {
resolve(this.responseText);
} catch (ex) {
ok(false, `Script error reading ${uri}: ${ex}`);
resolve("");
}
};
xhr.onerror = error => {
ok(false, `XHR error reading ${uri}: ${error}`);
resolve("");
};
xhr.send(null);
});
}
function testForError(filepath, key, str, pattern, type, helpText) {
if (str.match(pattern) &&
!ignoredError(filepath, key, type)) {
ok(false, `${filepath} with key=${key} has a misused ${type}. ${helpText}`);
}
}
function testForErrors(filepath, key, str) {
testForError(filepath, key, str, /\w'\w/, "apostrophe", "Strings with apostrophes should use foo\u2019s instead of foo's.");
testForError(filepath, key, str, /\w\u2018\w/, "incorrect-apostrophe", "Strings with apostrophes should use foo\u2019s instead of foo\u2018s.");
testForError(filepath, key, str, /'.+'/, "single-quote", "Single-quoted strings should use Unicode \u2018foo\u2019 instead of 'foo'.");
testForError(filepath, key, str, /"/, "double-quote", "Double-quoted strings should use Unicode \u201cfoo\u201d instead of \"foo\".");
testForError(filepath, key, str, /\.\.\./, "ellipsis", "Strings with an ellipsis should use the Unicode \u2026 character instead of three periods.");
}
add_task(function* checkAllTheProperties() {
let appDir = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
// This asynchronously produces a list of URLs (sadly, mostly sync on our
// test infrastructure because it runs against jarfiles there, and
// our zipreader APIs are all sync)
let uris = yield generateURIsFromDirTree(appDir, [".properties"]);
ok(uris.length, `Found ${uris.length} .properties files to scan for misused characters`);
for (let uri of uris) {
let bundle = new StringBundle(uri.spec);
let entities = bundle.getAll();
for (let entity of entities) {
testForErrors(uri.spec, entity.key, entity.value);
}
}
});
var checkDTD = Task.async(function* (aURISpec) {
let rawContents = yield fetchFile(aURISpec);
// The regular expression below is adapted from:
// https://hg.mozilla.org/mozilla-central/file/68c0b7d6f16ce5bb023e08050102b5f2fe4aacd8/python/compare-locales/compare_locales/parser.py#l233
let entities = rawContents.match(/<!ENTITY\s+([\w\.]*)\s+("[^"]*"|'[^']*')\s*>/g);
for (let entity of entities) {
let [, key, str] = entity.match(/<!ENTITY\s+([\w\.]*)\s+("[^"]*"|'[^']*')\s*>/);
// The matched string includes the enclosing quotation marks,
// we need to slice them off.
str = str.slice(1, -1);
testForErrors(aURISpec, key, str);
}
});
add_task(function* checkAllTheDTDs() {
let appDir = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
let uris = yield generateURIsFromDirTree(appDir, [".dtd"]);
ok(uris.length, `Found ${uris.length} .dtd files to scan for misused characters`);
for (let uri of uris) {
yield checkDTD(uri.spec);
}
// This support DTD file supplies a string with a newline to make sure
// the regex in checkDTD works correctly for that case.
let dtdLocation = gTestPath.replace(/\/[^\/]*$/i, "/bug1262648_string_with_newlines.dtd");
yield checkDTD(dtdLocation);
});
add_task(function* ensureWhiteListIsEmpty() {
is(gWhitelist.length, 0, "No remaining whitelist entries exist");
});
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.malwarePage.shortDesc",
type: "single-quote"
}, {
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.unwantedPage.shortDesc",
type: "single-quote"
}, {
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.phishingPage.shortDesc2",
type: "single-quote"
}, {
file: "phishing-afterload-warning-message.dtd",
key: "safeb.blocked.forbiddenPage.shortDesc2",
type: "single-quote"
}, {
file: "mathfont.properties",
key: "operator.\\u002E\\u002E\\u002E.postfix",
type: "ellipsis"
}, {
file: "layout_errors.properties",
key: "ImageMapRectBoundsError",
type: "double-quote"
}, {
file: "layout_errors.properties",
key: "ImageMapCircleWrongNumberOfCoords",
type: "double-quote"
}, {
file: "layout_errors.properties",
key: "ImageMapCircleNegativeRadius",
type: "double-quote"
}, {
file: "layout_errors.properties",
key: "ImageMapPolyWrongNumberOfCoords",
type: "double-quote"
}, {
file: "layout_errors.properties",
key: "ImageMapPolyOddNumberOfCoords",
type: "double-quote"
}, {
file: "xbl.properties",
key: "CommandNotInChrome",
type: "double-quote"
}, {
file: "dom.properties",
key: "PatternAttributeCompileFailure",
type: "single-quote"
}, {
file: "pipnss.properties",
key: "certErrorMismatchSingle2",
type: "double-quote"
}, {
file: "pipnss.properties",
key: "certErrorCodePrefix2",
type: "double-quote"
}, {
file: "aboutSupport.dtd",
key: "aboutSupport.pageSubtitle",
type: "single-quote"
}, {
file: "aboutSupport.dtd",
key: "aboutSupport.userJSDescription",
type: "single-quote"
}, {
file: "netError.dtd",
key: "inadequateSecurityError.longDesc",
type: "single-quote"
}, {
file: "netErrorApp.dtd",
key: "securityOverride.warningContent",
type: "single-quote"
}, {
file: "sync.properties",
key: "client.name2",
type: "apostrophe"
}
];
var moduleLocation = gTestPath.replace(/\/[^\/]*$/i, "/parsingTestHelpers.jsm");
var {generateURIsFromDirTree} = Cu.import(moduleLocation, {});
/**
* Check if an error should be ignored due to matching one of the whitelist
* objects defined in gWhitelist.
*
* @param filepath The URI spec of the locale file
* @param key The key of the entity that is being checked
* @param type The type of error that has been found
* @return true if the error should be ignored, false otherwise.
*/
function ignoredError(filepath, key, type) {
for (let index in gWhitelist) {
let whitelistItem = gWhitelist[index];
if (filepath.endsWith(whitelistItem.file) &&
key == whitelistItem.key &&
type == whitelistItem.type) {
gWhitelist.splice(index, 1);
return true;
}
}
return false;
}
function fetchFile(uri) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open("GET", uri, true);
xhr.onreadystatechange = function() {
if (this.readyState != this.DONE) {
return;
}
try {
resolve(this.responseText);
} catch (ex) {
ok(false, `Script error reading ${uri}: ${ex}`);
resolve("");
}
};
xhr.onerror = error => {
ok(false, `XHR error reading ${uri}: ${error}`);
resolve("");
};
xhr.send(null);
});
}
function testForError(filepath, key, str, pattern, type, helpText) {
if (str.match(pattern) &&
!ignoredError(filepath, key, type)) {
ok(false, `${filepath} with key=${key} has a misused ${type}. ${helpText}`);
}
}
function testForErrors(filepath, key, str) {
testForError(filepath, key, str, /\w'\w/, "apostrophe", "Strings with apostrophes should use foo\u2019s instead of foo's.");
testForError(filepath, key, str, /\w\u2018\w/, "incorrect-apostrophe", "Strings with apostrophes should use foo\u2019s instead of foo\u2018s.");
testForError(filepath, key, str, /'.+'/, "single-quote", "Single-quoted strings should use Unicode \u2018foo\u2019 instead of 'foo'.");
testForError(filepath, key, str, /"/, "double-quote", "Double-quoted strings should use Unicode \u201cfoo\u201d instead of \"foo\".");
testForError(filepath, key, str, /\.\.\./, "ellipsis", "Strings with an ellipsis should use the Unicode \u2026 character instead of three periods.");
}
function* getAllTheFiles(extension) {
let appDirGreD = Services.dirsvc.get("GreD", Ci.nsIFile);
let appDirXCurProcD = Services.dirsvc.get("XCurProcD", Ci.nsIFile);
if (appDirGreD.contains(appDirXCurProcD)) {
return yield generateURIsFromDirTree(appDirGreD, [extension]);
}
if (appDirXCurProcD.contains(appDirGreD)) {
return yield generateURIsFromDirTree(appDirXCurProcD, [extension]);
}
let urisGreD = yield generateURIsFromDirTree(appDirGreD, [extension]);
let urisXCurProcD = yield generateURIsFromDirTree(appDirXCurProcD, [extension]);
return Array.from(new Set(urisGreD.concat(appDirXCurProcD)));
}
add_task(function* checkAllTheProperties() {
// This asynchronously produces a list of URLs (sadly, mostly sync on our
// test infrastructure because it runs against jarfiles there, and
// our zipreader APIs are all sync)
let uris = yield getAllTheFiles(".properties");
ok(uris.length, `Found ${uris.length} .properties files to scan for misused characters`);
for (let uri of uris) {
let bundle = new StringBundle(uri.spec);
let entities = bundle.getAll();
for (let entity of entities) {
testForErrors(uri.spec, entity.key, entity.value);
}
}
});
var checkDTD = Task.async(function* (aURISpec) {
let rawContents = yield fetchFile(aURISpec);
// The regular expression below is adapted from:
// https://hg.mozilla.org/mozilla-central/file/68c0b7d6f16ce5bb023e08050102b5f2fe4aacd8/python/compare-locales/compare_locales/parser.py#l233
let entities = rawContents.match(/<!ENTITY\s+([\w\.]*)\s+("[^"]*"|'[^']*')\s*>/g);
if (!entities) {
// Some files, such as requestAutocomplete.dtd, have no entities defined.
return;
}
for (let entity of entities) {
let [, key, str] = entity.match(/<!ENTITY\s+([\w\.]*)\s+("[^"]*"|'[^']*')\s*>/);
// The matched string includes the enclosing quotation marks,
// we need to slice them off.
str = str.slice(1, -1);
testForErrors(aURISpec, key, str);
}
});
add_task(function* checkAllTheDTDs() {
let uris = yield getAllTheFiles(".dtd");
ok(uris.length, `Found ${uris.length} .dtd files to scan for misused characters`);
for (let uri of uris) {
yield checkDTD(uri.spec);
}
// This support DTD file supplies a string with a newline to make sure
// the regex in checkDTD works correctly for that case.
let dtdLocation = gTestPath.replace(/\/[^\/]*$/i, "/bug1262648_string_with_newlines.dtd");
yield checkDTD(dtdLocation);
});
add_task(function* ensureWhiteListIsEmpty() {
is(gWhitelist.length, 0, "No remaining whitelist entries exist");
});

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

@ -20,7 +20,7 @@ function test() {
let uris = PlacesCommandHook.uniqueCurrentPages;
is(uris.length, 1, "Only one uri is returned");
is(uris[0].spec, tabTwo.linkedBrowser.currentURI.spec, "It's the correct URI");
is(uris[0].uri.spec, tabTwo.linkedBrowser.currentURI.spec, "It's the correct URI");
gBrowser.removeTab(tabOne);
gBrowser.removeTab(tabTwo);

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

@ -133,6 +133,12 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<field name="gotResultForCurrentQuery">false</field>
<field name="handleEnterWhenGotResult">false</field>
<!--
For performance reasons we want to limit the size of the text runs we
build and show to the user.
-->
<field name="textRunsMaxLen">255</field>
<!--
onBeforeValueGet is called by the base-binding's .value getter.
It can return an object with a "value" property, to override the

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

@ -557,10 +557,15 @@ var BookmarkPropertiesPanel = {
_getTransactionsForURIList: function BPP__getTransactionsForURIList() {
var transactions = [];
for (let uri of this._URIs) {
let title = this._getURITitleFromHistory(uri);
let createTxn = new PlacesCreateBookmarkTransaction(uri, -1,
PlacesUtils.bookmarks.DEFAULT_INDEX,
title);
// uri should be an object in the form { url, title }. Though add-ons
// could still use the legacy form, where it's an nsIURI.
let [_uri, _title] = uri instanceof Ci.nsIURI ?
[uri, this._getURITitleFromHistory(uri)] : [uri.uri, uri.title];
let createTxn =
new PlacesCreateBookmarkTransaction(_uri, -1,
PlacesUtils.bookmarks.DEFAULT_INDEX,
_title);
transactions.push(createTxn);
}
return transactions;

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

@ -560,6 +560,8 @@ PlacesController.prototype = {
* Detects information (meta-data rules) about the current selection in the
* view (see _buildSelectionMetadata) and sets the visibility state for each
* of the menu-items in the given popup with the following rules applied:
* 0) The "ignoreitem" attribute may be set to "true" for this code not to
* handle that menuitem.
* 1) The "selectiontype" attribute may be set on a menu-item to "single"
* if the menu-item should be visible only if there is a single node
* selected, or to "multiple" if the menu-item should be visible only if
@ -601,6 +603,9 @@ PlacesController.prototype = {
var usableItemCount = 0;
for (var i = 0; i < aPopup.childNodes.length; ++i) {
var item = aPopup.childNodes[i];
if (item.getAttribute("ignoreitem") == "true") {
continue;
}
if (item.localName != "menuseparator") {
// We allow pasting into tag containers, so special case that.
var hideIfNoIP = item.getAttribute("hideifnoinsertionpoint") == "true" &&

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

@ -0,0 +1,9 @@
<html>
<head>
<title>Bookmark Dummy 1</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"></meta>
</head>
<body>
<p>Bookmark Dummy 1</p>
</body>
</html>

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

@ -0,0 +1,9 @@
<html>
<head>
<title>Bookmark Dummy 2</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"></meta>
</head>
<body>
<p>Bookmark Dummy 2</p>
</body>
</html>

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

@ -51,3 +51,7 @@ skip-if = true # temporarily disabled for breaking the treeview - bug 658744
[browser_toolbar_migration.js]
[browser_toolbarbutton_menu_context.js]
[browser_views_liveupdate.js]
[browser_bookmark_all_tabs.js]
support-files =
bookmark_dummy_1.html
bookmark_dummy_2.html

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

@ -0,0 +1,37 @@
/**
* Test for Bug 446171 - Name field of bookmarks saved via 'Bookmark All Tabs'
* has '(null)' value if history is disabled or just in private browsing mode
*/
"use strict"
add_task(function* () {
const BASE_URL = "http://example.org/browser/browser/components/places/tests/browser/";
const TEST_PAGES = [
BASE_URL + "bookmark_dummy_1.html",
BASE_URL + "bookmark_dummy_2.html",
BASE_URL + "bookmark_dummy_1.html"
];
function promiseAddTab(url) {
return BrowserTestUtils.openNewForegroundTab(gBrowser, url);
}
let tabs = yield Promise.all(TEST_PAGES.map(promiseAddTab));
let URIs = PlacesCommandHook.uniqueCurrentPages;
is(URIs.length, 3, "Only unique pages are returned");
Assert.deepEqual(URIs.map(URI => URI.uri.spec), [
"about:blank",
BASE_URL + "bookmark_dummy_1.html",
BASE_URL + "bookmark_dummy_2.html"
], "Correct URIs are returned");
Assert.deepEqual(URIs.map(URI => URI.title), [
"", "Bookmark Dummy 1", "Bookmark Dummy 2"
], "Correct titles are returned");
registerCleanupFunction(function* () {
yield Promise.all(tabs.map(BrowserTestUtils.removeTab));
});
});

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

@ -89,6 +89,8 @@ var gAdvancedPane = {
gAdvancedPane.showCertificates);
setEventListener("viewSecurityDevicesButton", "command",
gAdvancedPane.showSecurityDevices);
setEventListener("cacheSize", "change",
gAdvancedPane.updateCacheSizePref);
#ifdef MOZ_WIDGET_GTK
// GTK tabbox' allow the scroll wheel to change the selected tab,

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

@ -280,7 +280,6 @@
&limitCacheSizeBefore.label;
</label>
<textbox id="cacheSize" type="number" size="4" max="1024"
onchange="gAdvancedPane.updateCacheSizePref();"
aria-labelledby="useCacheBefore cacheSize useCacheAfter"/>
<label id="useCacheAfter" flex="1">&limitCacheSizeAfter.label;</label>
</hbox>

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

@ -26,6 +26,7 @@ skip-if = os == "mac" # bug 967013
[browser_eBay.js]
[browser_eBay_behavior.js]
[browser_google.js]
[browser_google_codes.js]
[browser_google_behavior.js]
[browser_healthreport.js]
[browser_hiddenOneOffs_cleanup.js]

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

@ -18,7 +18,7 @@ function test() {
// Test search URLs (including purposes).
url = engine.getSubmission("foo").uri.spec;
is(url, base, "Check search URL for 'foo'");
is(url, base + "&form=MOZSBR", "Check search URL for 'foo'");
url = engine.getSubmission("foo", null, "contextmenu").uri.spec;
is(url, base + "&form=MOZCON", "Check context menu search URL for 'foo'");
url = engine.getSubmission("foo", null, "keyword").uri.spec;
@ -39,7 +39,7 @@ function test() {
name: "Bing",
alias: null,
description: "Bing. Search by Microsoft.",
searchForm: "https://www.bing.com/search?q=&pc=MOZI",
searchForm: "https://www.bing.com/search?q=&pc=MOZI&form=MOZSBR",
hidden: false,
wrappedJSObject: {
queryCharset: "UTF-8",

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

@ -23,7 +23,7 @@ function test() {
// Test search URLs (including purposes).
url = engine.getSubmission("foo").uri.spec;
is(url, base, "Check search URL for 'foo'");
is(url, base + "&form=MOZSBR", "Check search URL for 'foo'");
waitForExplicitFinish();

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

@ -0,0 +1,161 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const kUrlPref = "geoSpecificDefaults.url";
const BROWSER_SEARCH_PREF = "browser.search.";
var originalGeoURL;
/**
* Clean the profile of any cache file left from a previous run.
* Returns a boolean indicating if the cache file existed.
*/
function removeCacheFile()
{
const CACHE_FILENAME = "search.json.mozlz4";
let file = Services.dirsvc.get("ProfD", Ci.nsIFile);
file.append(CACHE_FILENAME);
if (file.exists()) {
file.remove(false);
return true;
}
return false;
}
/**
* Returns a promise that is resolved when an observer notification from the
* search service fires with the specified data.
*
* @param aExpectedData
* The value the observer notification sends that causes us to resolve
* the promise.
*/
function waitForSearchNotification(aExpectedData, aCallback) {
const SEARCH_SERVICE_TOPIC = "browser-search-service";
Services.obs.addObserver(function observer(aSubject, aTopic, aData) {
if (aData != aExpectedData)
return;
Services.obs.removeObserver(observer, SEARCH_SERVICE_TOPIC);
aCallback();
}, SEARCH_SERVICE_TOPIC, false);
}
function asyncInit() {
return new Promise(resolve => {
Services.search.init(function() {
ok(Services.search.isInitialized, "search service should be initialized");
resolve();
});
});
}
function asyncReInit() {
const kLocalePref = "general.useragent.locale";
let promise = new Promise(resolve => {
waitForSearchNotification("reinit-complete", resolve);
});
Services.search.QueryInterface(Ci.nsIObserver)
.observe(null, "nsPref:changed", kLocalePref);
return promise;
}
let gEngineCount;
add_task(function* preparation() {
// ContentSearch is interferring with our async re-initializations of the
// search service: once _initServicePromise has resolved, it will access
// the search service, thus causing unpredictable behavior due to
// synchronous initializations of the service.
let originalContentSearchPromise = ContentSearch._initServicePromise;
ContentSearch._initServicePromise = new Promise(resolve => {
registerCleanupFunction(() => {
ContentSearch._initServicePromise = originalContentSearchPromise;
resolve();
});
});
yield asyncInit();
gEngineCount = Services.search.getVisibleEngines().length;
waitForSearchNotification("uninit-complete", () => {
// Verify search service is not initialized
is(Services.search.isInitialized, false, "Search service should NOT be initialized");
removeCacheFile();
// Geo specific defaults won't be fetched if there's no country code.
Services.prefs.setCharPref("browser.search.geoip.url",
'data:application/json,{"country_code": "US"}');
Services.prefs.setBoolPref("browser.search.geoSpecificDefaults", true);
// Make the new Google the only engine
originalGeoURL = Services.prefs.getCharPref(BROWSER_SEARCH_PREF + kUrlPref);
let geoUrl = 'data:application/json,{"interval": 31536000, "settings": {"searchDefault": "Google", "visibleDefaultEngines": ["google"]}}';
Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF).setCharPref(kUrlPref, geoUrl);
});
yield asyncReInit();
yield new Promise(resolve => {
waitForSearchNotification("write-cache-to-disk-complete", resolve);
});
});
add_task(function* tests() {
let engines = Services.search.getEngines();
is(Services.search.currentEngine.name, "Google", "Search engine should be Google");
is(engines.length, 1, "There should only be one engine");
let engine = Services.search.getEngineByName("Google");
ok(engine, "Google");
let base = "https://www.google.com/search?q=foo&ie=utf-8&oe=utf-8&client=firefox-b";
// Keyword uses a slightly different code
let keywordBase = base + "-ab";
let url;
// Test search URLs (including purposes).
url = engine.getSubmission("foo", null, "contextmenu").uri.spec;
is(url, base, "Check context menu search URL for 'foo'");
url = engine.getSubmission("foo", null, "keyword").uri.spec;
is(url, keywordBase, "Check keyword search URL for 'foo'");
url = engine.getSubmission("foo", null, "searchbar").uri.spec;
is(url, base, "Check search bar search URL for 'foo'");
url = engine.getSubmission("foo", null, "homepage").uri.spec;
is(url, base, "Check homepage search URL for 'foo'");
url = engine.getSubmission("foo", null, "newtab").uri.spec;
is(url, base, "Check newtab search URL for 'foo'");
url = engine.getSubmission("foo", null, "system").uri.spec;
is(url, base, "Check system search URL for 'foo'");
});
add_task(function* cleanup() {
waitForSearchNotification("uninit-complete", () => {
// Verify search service is not initialized
is(Services.search.isInitialized, false,
"Search service should NOT be initialized");
removeCacheFile();
Services.prefs.clearUserPref("browser.search.geoip.url");
// We can't clear the pref because it's set to false by testing/profiles/prefs_general.js
Services.prefs.setBoolPref("browser.search.geoSpecificDefaults", false);
Services.prefs.getDefaultBranch(BROWSER_SEARCH_PREF).setCharPref(kUrlPref, originalGeoURL);
});
yield asyncReInit();
is(gEngineCount, Services.search.getVisibleEngines().length,
"correct engine count after cleanup");
});

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

@ -18,7 +18,21 @@ function test() {
// Test search URLs (including purposes).
url = engine.getSubmission("foo").uri.spec;
is(url, base, "Check search URL for 'foo'");
is(url, base + "&hsimp=yhs-001", "Check search URL for 'foo'");
url = engine.getSubmission("foo", null, "searchbar").uri.spec;
is(url, base + "&hsimp=yhs-001", "Check search bar search URL for 'foo'");
url = engine.getSubmission("foo", null, "keyword").uri.spec;
is(url, base + "&hsimp=yhs-002", "Check keyword search URL for 'foo'");
url = engine.getSubmission("foo", null, "homepage").uri.spec;
is(url, base + "&hsimp=yhs-003", "Check homepage search URL for 'foo'");
url = engine.getSubmission("foo", null, "newtab").uri.spec;
is(url, base + "&hsimp=yhs-004", "Check newtab search URL for 'foo'");
url = engine.getSubmission("foo", null, "contextmenu").uri.spec;
is(url, base + "&hsimp=yhs-005", "Check context menu search URL for 'foo'");
url = engine.getSubmission("foo", null, "system").uri.spec;
is(url, base + "&hsimp=yhs-007", "Check system search URL for 'foo'");
url = engine.getSubmission("foo", null, "invalid").uri.spec;
is(url, base + "&hsimp=yhs-001", "Check invalid URL for 'foo'");
// Check search suggestion URL.
url = engine.getSubmission("foo", "application/x-suggestions+json").uri.spec;
@ -29,7 +43,7 @@ function test() {
name: "Yahoo",
alias: null,
description: "Yahoo Search",
searchForm: "https://search.yahoo.com/yhs/search?p=&ei=UTF-8&hspart=mozilla",
searchForm: "https://search.yahoo.com/yhs/search?p=&ei=UTF-8&hspart=mozilla&hsimp=yhs-001",
hidden: false,
wrappedJSObject: {
queryCharset: "UTF-8",

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

@ -23,7 +23,7 @@ function test() {
// Test search URLs (including purposes).
url = engine.getSubmission("foo").uri.spec;
is(url, base, "Check search URL for 'foo'");
is(url, base + "&hsimp=yhs-001", "Check search URL for 'foo'");
waitForExplicitFinish();

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

@ -6,6 +6,7 @@
Cu.import("resource:///modules/experiments/Experiments.jsm");
Cu.import("resource://gre/modules/TelemetryController.jsm", this);
Cu.import("resource://gre/modules/TelemetrySession.jsm", this);
const FILE_MANIFEST = "experiments.manifest";
const SEC_IN_ONE_DAY = 24 * 60 * 60;
@ -52,7 +53,8 @@ add_task(function* test_setup() {
createAppInfo();
gProfileDir = do_get_profile();
startAddonManagerOnly();
yield TelemetryController.testSetup();
yield TelemetryController.setup();
yield TelemetrySession.setup();
gPolicy = new Experiments.Policy();
patchPolicy(gPolicy, {
@ -327,5 +329,5 @@ add_task(function* test_times() {
});
add_task(function* test_shutdown() {
yield TelemetryController.testShutdown();
yield TelemetrySession.shutdown(false);
});

26
browser/extensions/e10srollout/bootstrap.js поставляемый
Просмотреть файл

@ -9,10 +9,9 @@ Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/UpdateUtils.jsm");
// The amount of people to be part of e10s, in %
// The amount of people to be part of e10s
const TEST_THRESHOLD = {
"beta" : 50,
"release" : 0,
"beta" : 0.5, // 50%
};
const PREF_COHORT_SAMPLE = "e10s.rollout.cohortSample";
@ -79,14 +78,23 @@ function uninstall() {
}
function getUserSample() {
let existingVal = Preferences.get(PREF_COHORT_SAMPLE, undefined);
if (typeof(existingVal) == "number") {
return existingVal;
let prefValue = Preferences.get(PREF_COHORT_SAMPLE, undefined);
let value = 0.0;
if (typeof(prefValue) == "string") {
value = parseFloat(prefValue, 10);
return value;
}
let val = Math.floor(Math.random() * 100);
Preferences.set(PREF_COHORT_SAMPLE, val);
return val;
if (typeof(prefValue) == "number") {
// convert old integer value
value = prefValue / 100;
} else {
value = Math.random();
}
Preferences.set(PREF_COHORT_SAMPLE, value.toString().substr(0, 8));
return value;
}
function setCohort(cohortName) {

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

@ -1,3 +1,3 @@
This is the pdf.js project output, https://github.com/mozilla/pdf.js
Current extension version is: 1.4.258
Current extension version is: 1.5.222

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

@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdf = {}));
// Use strict in our context only - users might not want it
'use strict';
var pdfjsVersion = '1.4.258';
var pdfjsBuild = '990150c';
var pdfjsVersion = '1.5.222';
var pdfjsBuild = 'd20002b';
var pdfjsFilePath =
typeof document !== 'undefined' && document.currentScript ?
@ -2935,23 +2935,21 @@ var renderTextLayer = (function renderTextLayerClosure() {
}
var width = ctx.measureText(textDiv.textContent).width;
if (width > 0) {
textLayerFrag.appendChild(textDiv);
var transform;
if (textDiv.dataset.canvasWidth !== undefined) {
// Dataset values come of type string.
var textScale = textDiv.dataset.canvasWidth / width;
transform = 'scaleX(' + textScale + ')';
} else {
transform = '';
}
var rotation = textDiv.dataset.angle;
if (rotation) {
transform = 'rotate(' + rotation + 'deg) ' + transform;
}
if (transform) {
CustomStyle.setProp('transform' , textDiv, transform);
}
textLayerFrag.appendChild(textDiv);
var transform;
if (textDiv.dataset.canvasWidth !== undefined && width > 0) {
// Dataset values come of type string.
var textScale = textDiv.dataset.canvasWidth / width;
transform = 'scaleX(' + textScale + ')';
} else {
transform = '';
}
var rotation = textDiv.dataset.angle;
if (rotation) {
transform = 'rotate(' + rotation + 'deg) ' + transform;
}
if (transform) {
CustomStyle.setProp('transform' , textDiv, transform);
}
}
capability.resolve();
@ -7621,28 +7619,26 @@ var WorkerTransport = (function WorkerTransportClosure() {
case 'Font':
var exportedData = data[2];
var font;
if ('error' in exportedData) {
var error = exportedData.error;
warn('Error during font loading: ' + error);
this.commonObjs.resolve(id, error);
var exportedError = exportedData.error;
warn('Error during font loading: ' + exportedError);
this.commonObjs.resolve(id, exportedError);
break;
} else {
var fontRegistry = null;
if (getDefaultSetting('pdfBug') && globalScope.FontInspector &&
globalScope['FontInspector'].enabled) {
fontRegistry = {
registerFont: function (font, url) {
globalScope['FontInspector'].fontAdded(font, url);
}
};
}
font = new FontFaceObject(exportedData, {
isEvalSuported: getDefaultSetting('isEvalSupported'),
disableFontFace: getDefaultSetting('disableFontFace'),
fontRegistry: fontRegistry
});
}
var fontRegistry = null;
if (getDefaultSetting('pdfBug') && globalScope.FontInspector &&
globalScope['FontInspector'].enabled) {
fontRegistry = {
registerFont: function (font, url) {
globalScope['FontInspector'].fontAdded(font, url);
}
};
}
var font = new FontFaceObject(exportedData, {
isEvalSuported: getDefaultSetting('isEvalSupported'),
disableFontFace: getDefaultSetting('disableFontFace'),
fontRegistry: fontRegistry
});
this.fontLoader.bind(
[font],
@ -8450,8 +8446,6 @@ exports._UnsupportedManager = _UnsupportedManager;
exports.isWorker = isWorker;
exports.PDFJS = globalScope.PDFJS;
}));
}).call(pdfjsLibs);
exports.PDFJS = pdfjsLibs.pdfjsDisplayGlobal.PDFJS;
@ -8483,4 +8477,3 @@ exports._UnsupportedManager = _UnsupportedManager;
exports.addLinkAttributes = pdfjsLibs.pdfjsDisplayDOMUtils.addLinkAttributes;
}));

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

@ -28,8 +28,8 @@ factory((root.pdfjsDistBuildPdfWorker = {}));
// Use strict in our context only - users might not want it
'use strict';
var pdfjsVersion = '1.4.258';
var pdfjsBuild = '990150c';
var pdfjsVersion = '1.5.222';
var pdfjsBuild = 'd20002b';
var pdfjsFilePath =
typeof document !== 'undefined' && document.currentScript ?
@ -451,7 +451,7 @@ exports.ArithmeticDecoder = ArithmeticDecoder;
types[j] = 'EN';
}
// do after
for (j = i + 1; j < strLength; --j) {
for (j = i + 1; j < strLength; ++j) {
if (types[j] !== 'ET') {
break;
}
@ -34156,6 +34156,12 @@ var XRef = (function XRefClosure() {
error('Invalid entry in XRef subsection: ' + first + ', ' + count);
}
// The first xref table entry, i.e. obj 0, should be free. Attempting
// to adjust an incorrect first obj # (fixes issue 3248 and 7229).
if (i === 0 && entry.free && first === 1) {
first = 0;
}
if (!this.entries[i + first]) {
this.entries[i + first] = entry;
}
@ -34169,12 +34175,6 @@ var XRef = (function XRefClosure() {
delete tableState.entryCount;
}
// Per issue 3248: hp scanners generate bad XRef
if (first === 1 && this.entries[1] && this.entries[1].free) {
// shifting the entries
this.entries.shift();
}
// Sanity check: as per spec, first object must be free
if (this.entries[0] && !this.entries[0].free) {
error('Invalid XRef table: unexpected first object');
@ -41542,11 +41542,8 @@ exports.setPDFNetworkStreamClass = setPDFNetworkStreamClass;
exports.WorkerTask = WorkerTask;
exports.WorkerMessageHandler = WorkerMessageHandler;
}));
}).call(pdfjsLibs);
exports.WorkerMessageHandler = pdfjsLibs.pdfjsCoreWorker.WorkerMessageHandler;
}));

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

@ -531,7 +531,7 @@ var PDFBug = (function PDFBugClosure() {
});
}
},
init: function init(pdfjsLib) {
init: function init(pdfjsLib, container) {
/*
* Basic Layout:
* PDFBug
@ -552,7 +552,6 @@ var PDFBug = (function PDFBugClosure() {
panels.setAttribute('class', 'panels');
ui.appendChild(panels);
var container = document.getElementById('viewerContainer');
container.appendChild(ui);
container.style.right = panelWidth + 'px';

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

@ -1,14 +1,14 @@
/* globals FirefoxCom */
'use strict';
// Small subset of the webL10n API by Fabien Cazenave for pdf.js extension.
(function(window) {
var gLanguage = '';
var gExternalLocalizerServices = null;
// fetch an l10n objects
function getL10nData(key) {
var response = FirefoxCom.requestSync('getStrings', key);
var response = gExternalLocalizerServices.getStrings(key);
var data = JSON.parse(response);
if (!data) {
console.warn('[l10n] #' + key + ' missing for [' + gLanguage + ']');
@ -94,8 +94,8 @@
}
}
window.addEventListener('DOMContentLoaded', function() {
gLanguage = FirefoxCom.requestSync('getLocale', null);
function translateDocument() {
gLanguage = gExternalLocalizerServices.getLocale();
translateFragment();
@ -104,6 +104,13 @@
evtObject.initEvent('localized', false, false);
evtObject.language = gLanguage;
window.dispatchEvent(evtObject);
}
window.addEventListener('DOMContentLoaded', function() {
if (gExternalLocalizerServices) {
translateDocument();
}
// ... else see setExternalLocalizerServices below
});
// Public API
@ -128,6 +135,16 @@
return (rtlList.indexOf(shortCode) >= 0) ? 'rtl' : 'ltr';
},
setExternalLocalizerServices: function (externalLocalizerServices) {
gExternalLocalizerServices = externalLocalizerServices;
// ... in case if we missed DOMContentLoaded above.
if (window.document.readyState === 'interactive' ||
window.document.readyState === 'complete') {
translateDocument();
}
},
// translate an element or document fragment
translate: translateFragment
};

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

@ -159,6 +159,15 @@
border: none;
}
.pdfViewer.singlePageView {
display: inline-block;
}
.pdfViewer.singlePageView .page {
margin: 0;
border: none;
}
.pdfViewer .page canvas {
margin: 0;
display: block;

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -171,6 +171,10 @@ These should match what Safari and other Apple applications use on OS X Lion. --
<!ENTITY recentBookmarks.label "Recently Bookmarked">
<!ENTITY otherBookmarksCmd.label "Other Bookmarks">
<!ENTITY bookmarksToolbarChevron.tooltip "Show more bookmarks">
<!ENTITY showRecentlyBookmarked.label "Show Recently Bookmarked">
<!ENTITY showRecentlyBookmarked.accesskey "h">
<!ENTITY hideRecentlyBookmarked.label "Hide Recently Bookmarked">
<!ENTITY hideRecentlyBookmarked.accesskey "H">
<!ENTITY backCmd.label "Back">
<!ENTITY backButton.tooltip "Go back one page">

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

@ -12,7 +12,7 @@
<Param name="q" value="{searchTerms}"/>
<Param name="ie" value="utf-8"/>
<Param name="oe" value="utf-8"/>
<Param name="client" value="firefox-b"/>
<MozParam name="client" condition="purpose" purpose="keyword" value="firefox-b-ab"/>
<MozParam name="client" condition="purpose" purpose="searchbar" value="firefox-b"/>
</Url>
</SearchPlugin>

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

@ -61,6 +61,7 @@ html {
.item.client .item-twisty-container {
-moz-appearance: treetwistyopen;
margin-top: 3px;
margin-left: 2px;
}
.item.client.closed .item-twisty-container {

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

@ -0,0 +1,58 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* 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/. */
/**
* A partial implementation of the MenuItem API provided by electron:
* https://github.com/electron/electron/blob/master/docs/api/menu-item.md.
*
* Missing features:
* - id String - Unique within a single menu. If defined then it can be used
* as a reference to this item by the position attribute.
* - role String - Define the action of the menu item; when specified the
* click property will be ignored
* - sublabel String
* - accelerator Accelerator
* - icon NativeImage
* - visible Boolean - If false, the menu item will be entirely hidden.
* - position String - This field allows fine-grained definition of the
* specific location within a given menu.
*
* Implemented features:
* @param Object options
* Function click
* Will be called with click(menuItem, browserWindow) when the menu item is clicked
* String type
* Can be normal, separator, submenu, checkbox or radio
* String label
* Boolean enabled
* If false, the menu item will be greyed out and unclickable.
* Boolean checked
* Should only be specified for checkbox or radio type menu items.
* Menu submenu
* Should be specified for submenu type menu items. If submenu is specified, the type: 'submenu' can be omitted. If the value is not a Menu then it will be automatically converted to one using Menu.buildFromTemplate.
*
*/
function MenuItem({
accesskey = null,
checked = false,
click = () => {},
disabled = false,
label = "",
id = null,
submenu = null,
type = "normal",
} = { }) {
this.accesskey = accesskey;
this.checked = checked;
this.click = click;
this.disabled = disabled;
this.id = id;
this.label = label;
this.submenu = submenu;
this.type = type;
}
module.exports = MenuItem;

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

@ -0,0 +1,149 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* 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/. */
const MenuItem = require("./menu-item");
const EventEmitter = require("devtools/shared/event-emitter");
/**
* A partial implementation of the Menu API provided by electron:
* https://github.com/electron/electron/blob/master/docs/api/menu.md.
*
* Extra features:
* - Emits an 'open' and 'close' event when the menu is opened/closed
* @param String id (non standard)
* Needed so tests can confirm the XUL implementation is working
*/
function Menu({id=null} = {}) {
this.menuitems = [];
this.id = id;
Object.defineProperty(this, "items", {
get() {
return this.menuitems;
}
});
EventEmitter.decorate(this);
}
/**
* Add an item to the end of the Menu
*
* @param {MenuItem} menuItem
*/
Menu.prototype.append = function(menuItem) {
this.menuitems.push(menuItem);
};
/**
* Add an item to a specified position in the menu
*
* @param {int} pos
* @param {MenuItem} menuItem
*/
Menu.prototype.insert = function(pos, menuItem) {
throw "Not implemented";
};
/**
* Show the Menu at a specified location on the screen
*
* Missing features:
* - browserWindow - BrowserWindow (optional) - Default is null.
* - positioningItem Number - (optional) OS X
*
* @param {int} screenX
* @param {int} screenY
* @param Toolbox toolbox (non standard)
* Needed so we in which window to inject XUL
*/
Menu.prototype.popup = function(screenX, screenY, toolbox) {
let doc = toolbox.doc;
let popup = doc.createElement("menupopup");
popup.setAttribute("menu-api", "true");
if (this.id) {
popup.id = this.id;
}
this._createMenuItems(popup);
// Remove the menu from the DOM once it's hidden.
popup.addEventListener("popuphidden", (e) => {
if (e.target === popup) {
popup.remove();
this.emit("close");
}
});
popup.addEventListener("popupshown", (e) => {
if (e.target === popup) {
this.emit("open");
}
});
doc.querySelector("popupset").appendChild(popup);
popup.openPopupAtScreen(screenX, screenY, true);
};
Menu.prototype._createMenuItems = function(parent) {
let doc = parent.ownerDocument;
this.menuitems.forEach(item => {
if (item.submenu) {
let menupopup = doc.createElement("menupopup");
item.submenu._createMenuItems(menupopup);
let menu = doc.createElement("menu");
menu.appendChild(menupopup);
menu.setAttribute("label", item.label);
parent.appendChild(menu);
} else if (item.type === "separator") {
let menusep = doc.createElement("menuseparator");
parent.appendChild(menusep);
} else {
let menuitem = doc.createElement("menuitem");
menuitem.setAttribute("label", item.label);
menuitem.addEventListener("command", () => {
item.click();
});
if (item.type === "checkbox") {
menuitem.setAttribute("type", "checkbox");
}
if (item.type === "radio") {
menuitem.setAttribute("type", "radio");
}
if (item.disabled) {
menuitem.setAttribute("disabled", "true");
}
if (item.checked) {
menuitem.setAttribute("checked", "true");
}
if (item.accesskey) {
menuitem.setAttribute("accesskey", item.accesskey);
}
if (item.id) {
menuitem.id = item.id;
}
parent.appendChild(menuitem);
}
});
};
Menu.setApplicationMenu = () => {
throw "Not implemented";
};
Menu.sendActionToFirstResponder = () => {
throw "Not implemented";
};
Menu.buildFromTemplate = () => {
throw "Not implemented";
};
module.exports = Menu;

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

@ -16,6 +16,8 @@ DevToolsModules(
'devtools-browser.js',
'devtools.js',
'gDevTools.jsm',
'menu-item.js',
'menu.js',
'selection.js',
'sidebar.js',
'source-location.js',

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

@ -29,6 +29,7 @@ support-files =
[browser_keybindings_01.js]
[browser_keybindings_02.js]
[browser_keybindings_03.js]
[browser_menu_api.js]
[browser_new_activation_workflow.js]
[browser_source-location-01.js]
[browser_source-location-02.js]

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

@ -0,0 +1,161 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Test that the Menu API works
const URL = "data:text/html;charset=utf8,test page for menu api";
const Menu = require("devtools/client/framework/menu");
const MenuItem = require("devtools/client/framework/menu-item");
add_task(function*() {
info("Create a test tab and open the toolbox");
let tab = yield addTab(URL);
let target = TargetFactory.forTab(tab);
let toolbox = yield gDevTools.showToolbox(target, "webconsole");
yield testMenuItems();
yield testMenuPopup(toolbox);
yield testSubmenu(toolbox);
});
function* testMenuItems() {
let menu = new Menu();
let menuItem1 = new MenuItem();
let menuItem2 = new MenuItem();
menu.append(menuItem1);
menu.append(menuItem2);
is(menu.items.length, 2, "Correct number of 'items'");
is(menu.items[0], menuItem1, "Correct reference to MenuItem");
is(menu.items[1], menuItem2, "Correct reference to MenuItem");
}
function* testMenuPopup(toolbox) {
let clickFired = false;
let menu = new Menu({
id: "menu-popup",
});
menu.append(new MenuItem({ type: "separator" }));
let MENU_ITEMS = [
new MenuItem({
id: "menu-item-1",
label: "Normal Item",
click: () => {
info("Click callback has fired for menu item");
clickFired = true;
},
}),
new MenuItem({
label: "Checked Item",
type: "checkbox",
checked: true,
}),
new MenuItem({
label: "Radio Item",
type: "radio",
}),
new MenuItem({
label: "Disabled Item",
disabled: true,
}),
];
for (let item of MENU_ITEMS) {
menu.append(item);
}
menu.popup(0, 0, toolbox);
ok(toolbox.doc.querySelector("#menu-popup"), "A popup is in the DOM");
let menuSeparators = toolbox.doc.querySelectorAll("#menu-popup > menuseparator");
is(menuSeparators.length, 1, "A separator is in the menu");
let menuItems = toolbox.doc.querySelectorAll("#menu-popup > menuitem");
is(menuItems.length, MENU_ITEMS.length, "Correct number of menuitems");
is(menuItems[0].id, MENU_ITEMS[0].id, "Correct id for menuitem");
is(menuItems[0].getAttribute("label"), MENU_ITEMS[0].label, "Correct label");
is(menuItems[1].getAttribute("label"), MENU_ITEMS[1].label, "Correct label");
is(menuItems[1].getAttribute("type"), "checkbox", "Correct type attribute");
is(menuItems[1].getAttribute("checked"), "true", "Has checked attribute");
is(menuItems[2].getAttribute("label"), MENU_ITEMS[2].label, "Correct label");
is(menuItems[2].getAttribute("type"), "radio", "Correct type attribute");
ok(!menuItems[2].hasAttribute("checked"), "Doesn't have checked attribute");
is(menuItems[3].getAttribute("label"), MENU_ITEMS[3].label, "Correct label");
is(menuItems[3].getAttribute("disabled"), "true", "disabled attribute menuitem");
yield once(menu, "open");
let closed = once(menu, "close");
EventUtils.synthesizeMouseAtCenter(menuItems[0], {}, toolbox.doc.defaultView);
yield closed;
ok(clickFired, "Click has fired");
ok(!toolbox.doc.querySelector("#menu-popup"), "The popup is removed from the DOM");
}
function* testSubmenu(toolbox) {
let clickFired = false;
let menu = new Menu({
id: "menu-popup",
});
let submenu = new Menu({
id: "submenu-popup",
});
submenu.append(new MenuItem({
label: "Submenu item",
click: () => {
info("Click callback has fired for submenu item");
clickFired = true;
},
}));
menu.append(new MenuItem({
label: "Submenu parent",
submenu: submenu,
}));
menu.popup(0, 0, toolbox);
ok(toolbox.doc.querySelector("#menu-popup"), "A popup is in the DOM");
is(toolbox.doc.querySelectorAll("#menu-popup > menuitem").length, 0, "No menuitem children");
let menus = toolbox.doc.querySelectorAll("#menu-popup > menu");
is(menus.length, 1, "Correct number of menus");
is(menus[0].getAttribute("label"), "Submenu parent", "Correct label for menus");
let subMenuItems = menus[0].querySelectorAll("menupopup > menuitem");
is(subMenuItems.length, 1, "Correct number of submenu items");
is(subMenuItems[0].getAttribute("label"), "Submenu item", "Correct label");
yield once(menu, "open");
let closed = once(menu, "close");
info("Using keyboard navigation to open, close, and reopen the submenu");
let shown = once(menus[0], "popupshown");
EventUtils.synthesizeKey("VK_DOWN", {});
EventUtils.synthesizeKey("VK_RIGHT", {});
yield shown;
let hidden = once(menus[0], "popuphidden");
EventUtils.synthesizeKey("VK_LEFT", {});
yield hidden;
shown = once(menus[0], "popupshown");
EventUtils.synthesizeKey("VK_RIGHT", {});
yield shown;
info("Clicking the submenu item");
EventUtils.synthesizeMouseAtCenter(subMenuItems[0], {}, toolbox.doc.defaultView);
yield closed;
ok(clickFired, "Click has fired");
}

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

@ -8,8 +8,8 @@
"use strict";
const EXPECTED_RESULT = "Not supporting directive 'reflected-xss'. Directive " +
"and values will be ignored.";
const EXPECTED_RESULT = "Not supporting directive \u2018reflected-xss\u2019. " +
"Directive and values will be ignored.";
const TEST_FILE = "http://example.com/browser/devtools/client/webconsole/" +
"test/test_bug1045902_console_csp_ignore_reflected_xss_" +
"message.html";
@ -40,13 +40,13 @@ function testViolationMessage() {
let aOutputNode = hud.outputNode;
return waitForSuccess({
name: "Confirming that CSP logs messages to the console when " +
"'reflected-xss' directive is used!",
validator: function() {
console.log(aOutputNode.textContent);
let success = false;
success = aOutputNode.textContent.indexOf(EXPECTED_RESULT) > -1;
return success;
}
});
name: "Confirming that CSP logs messages to the console when " +
"\u2018reflected-xss\u2019 directive is used!",
validator: function() {
console.log(aOutputNode.textContent);
let success = false;
success = aOutputNode.textContent.indexOf(EXPECTED_RESULT) > -1;
return success;
}
});
}

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

@ -43,7 +43,7 @@ function test() {
severity: SEVERITY_ERROR,
},
{
text: "Unknown property 'test-color'",
text: "Unknown property \u2018test-color\u2019",
category: CATEGORY_CSS,
severity: SEVERITY_WARNING,
},

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

@ -31,7 +31,7 @@ add_task(function* () {
{
name: "Logged mixed active content",
text: "Loading mixed (insecure) active content " +
"\"http://example.com/\" on a secure page",
"\u201chttp://example.com/\u201d on a secure page",
category: CATEGORY_SECURITY,
severity: SEVERITY_WARNING,
objects: true,
@ -39,7 +39,7 @@ add_task(function* () {
{
name: "Logged mixed passive content - image",
text: "Loading mixed (insecure) display content " +
"\"http://example.com/tests/image/test/mochitest/blue.png\" " +
"\u201chttp://example.com/tests/image/test/mochitest/blue.png\u201d " +
"on a secure page",
category: CATEGORY_SECURITY,
severity: SEVERITY_WARNING,

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

@ -33,14 +33,14 @@ add_task(function* () {
messages: [
{
name: "Logged blocking mixed active content",
text: "Blocked loading mixed active content \"http://example.com/\"",
text: "Blocked loading mixed active content \u201chttp://example.com/\u201d",
category: CATEGORY_SECURITY,
severity: SEVERITY_ERROR,
objects: true,
},
{
name: "Logged blocking mixed passive content - image",
text: "Blocked loading mixed active content \"http://example.com/\"",
text: "Blocked loading mixed active content \u201chttp://example.com/\u201d",
category: CATEGORY_SECURITY,
severity: SEVERITY_ERROR,
objects: true,
@ -78,7 +78,7 @@ function mixedContentOverrideTest2(hud, browser) {
{
name: "Logged blocking mixed active content",
text: "Loading mixed (insecure) active content " +
"\"http://example.com/\" on a secure page",
"\u201chttp://example.com/\u201d on a secure page",
category: CATEGORY_SECURITY,
severity: SEVERITY_WARNING,
objects: true,
@ -86,7 +86,7 @@ function mixedContentOverrideTest2(hud, browser) {
{
name: "Logged blocking mixed passive content - image",
text: "Loading mixed (insecure) display content" +
" \"http://example.com/tests/image/test/mochitest/blue.png\"" +
" \u201chttp://example.com/tests/image/test/mochitest/blue.png\u201d" +
" on a secure page",
category: CATEGORY_SECURITY,
severity: SEVERITY_WARNING,

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

@ -20,14 +20,14 @@ const TEST_URI = "data:text/html;charset=utf8,Web Console CSP report only " +
"test (bug 1010953)";
const TEST_VIOLATION = "http://example.com/browser/devtools/client/" +
"webconsole/test/test_bug_1010953_cspro.html";
const CSP_VIOLATION_MSG = "Content Security Policy: The page's settings " +
const CSP_VIOLATION_MSG = "Content Security Policy: The page\u2019s settings " +
"blocked the loading of a resource at " +
"http://some.example.com/test.png " +
"(\"img-src http://example.com\").";
const CSP_REPORT_MSG = "Content Security Policy: The page\'s settings " +
"(\u201cimg-src http://example.com\u201d).";
const CSP_REPORT_MSG = "Content Security Policy: The page\u2019s settings " +
"observed the loading of a resource at " +
"http://some.example.com/test_bug_1010953_cspro.js " +
"(\"script-src http://example.com\"). A CSP report is " +
"(\u201cscript-src http://example.com\u201d). A CSP report is " +
"being sent.";
add_task(function* () {

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

@ -31,7 +31,7 @@ add_task(function* () {
});
function onContentLoaded() {
let cssWarning = "Unknown property '-moz-opacity'. Declaration dropped.";
let cssWarning = "Unknown property \u2018-moz-opacity\u2019. Declaration dropped.";
return waitForMessages({
webconsole: hud,

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

@ -224,9 +224,9 @@ function testCssLimits2() {
severity: SEVERITY_WARNING,
}],
}).then(() => {
testLogEntry(outputNode, "Unknown property '-moz-foobar0'",
testLogEntry(outputNode, "Unknown property \u2018-moz-foobar0\u2019",
"first message is pruned", false, true);
findLogEntry("Unknown property '-moz-foobar1'");
findLogEntry("Unknown property \u2018-moz-foobar1\u2019");
// Check if the sentinel entry is still there.
findLogEntry("testing CSS limits");

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

@ -10,10 +10,10 @@
const TEST_URI = "data:text/html;charset=utf8,Web Console CSP violation test";
const TEST_VIOLATION = "https://example.com/browser/devtools/client/" +
"webconsole/test/test_bug_770099_violation.html";
const CSP_VIOLATION_MSG = "Content Security Policy: The page's settings " +
const CSP_VIOLATION_MSG = "Content Security Policy: The page\u2019s settings " +
"blocked the loading of a resource at " +
"http://some.example.com/test.png (\"default-src " +
"https://example.com\").";
"http://some.example.com/test.png (\u201cdefault-src " +
"https://example.com\u201d).";
add_task(function* () {
let { browser } = yield loadTab(TEST_URI);

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

@ -27,12 +27,12 @@ function testViewSource() {
waitForMessages({
webconsole: hud,
messages: [{
text: "'font-weight'",
text: "\u2018font-weight\u2019",
category: CATEGORY_CSS,
severity: SEVERITY_WARNING,
},
{
text: "'color'",
text: "\u2018color\u2019",
category: CATEGORY_CSS,
severity: SEVERITY_WARNING,
}],

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

@ -23,7 +23,7 @@ add_task(function* () {
messages: [
{
name: "Logged blocking mixed active content",
text: "Blocked loading mixed active content \"http://example.com/\"",
text: "Blocked loading mixed active content \u201chttp://example.com/\u201d",
category: CATEGORY_SECURITY,
severity: SEVERITY_ERROR
},

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

@ -37,42 +37,42 @@ add_task(function* () {
url: SJS_URL + "?noMaxAge",
name: "No max-age error displayed successfully",
text: "Public-Key-Pins: The site specified a header that did not include " +
"a 'max-age' directive."
"a \u2018max-age\u2019 directive."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?invalidIncludeSubDomains",
name: "Invalid includeSubDomains error displayed successfully",
text: "Public-Key-Pins: The site specified a header that included an " +
"invalid 'includeSubDomains' directive."
"invalid \u2018includeSubDomains\u2019 directive."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?invalidMaxAge",
name: "Invalid max-age error displayed successfully",
text: "Public-Key-Pins: The site specified a header that included an " +
"invalid 'max-age' directive."
"invalid \u2018max-age\u2019 directive."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?multipleIncludeSubDomains",
name: "Multiple includeSubDomains error displayed successfully",
text: "Public-Key-Pins: The site specified a header that included " +
"multiple 'includeSubDomains' directives."
"multiple \u2018includeSubDomains\u2019 directives."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?multipleMaxAge",
name: "Multiple max-age error displayed successfully",
text: "Public-Key-Pins: The site specified a header that included " +
"multiple 'max-age' directives."
"multiple \u2018max-age\u2019 directives."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?multipleReportURIs",
name: "Multiple report-uri error displayed successfully",
text: "Public-Key-Pins: The site specified a header that included " +
"multiple 'report-uri' directives."
"multiple \u2018report-uri\u2019 directives."
}, hud);
// The root used for mochitests is not built-in, so set the relevant pref to

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

@ -31,35 +31,35 @@ add_task(function* () {
url: SJS_URL + "?noMaxAge",
name: "No max-age error displayed successfully",
text: "Strict-Transport-Security: The site specified a header that did " +
"not include a 'max-age' directive."
"not include a \u2018max-age\u2019 directive."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?invalidIncludeSubDomains",
name: "Invalid includeSubDomains error displayed successfully",
text: "Strict-Transport-Security: The site specified a header that " +
"included an invalid 'includeSubDomains' directive."
"included an invalid \u2018includeSubDomains\u2019 directive."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?invalidMaxAge",
name: "Invalid max-age error displayed successfully",
text: "Strict-Transport-Security: The site specified a header that " +
"included an invalid 'max-age' directive."
"included an invalid \u2018max-age\u2019 directive."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?multipleIncludeSubDomains",
name: "Multiple includeSubDomains error displayed successfully",
text: "Strict-Transport-Security: The site specified a header that " +
"included multiple 'includeSubDomains' directives."
"included multiple \u2018includeSubDomains\u2019 directives."
}, hud);
yield* checkForMessage({
url: SJS_URL + "?multipleMaxAge",
name: "Multiple max-age error displayed successfully",
text: "Strict-Transport-Security: The site specified a header that " +
"included multiple 'max-age' directives."
"included multiple \u2018max-age\u2019 directives."
}, hud);
});

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

@ -31,7 +31,7 @@ add_task(function* testMessagesAppear() {
messages: [
{
name: "Was blocked because tracking protection is enabled",
text: "The resource at \"http://tracking.example.com/\" was blocked because tracking protection is enabled",
text: "The resource at \u201chttp://tracking.example.com/\u201d was blocked because tracking protection is enabled",
category: CATEGORY_SECURITY,
severity: SEVERITY_WARNING,
objects: true,

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

@ -2,9 +2,9 @@
<html>
<head>
<meta charset="UTF-8">
<title>Bug 1045902 - CSP: Log console message for 'reflected-xss'</title>
<title>Bug 1045902 - CSP: Log console message for reflected-xss</title>
</head>
<body>
Bug 1045902 - CSP: Log console message for 'reflected-xss'
Bug 1045902 - CSP: Log console message for reflected-xss
</body>
</html>

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

@ -9,7 +9,7 @@ KillScriptLocation=Script: %S
StopScriptButton=Stop script
DebugScriptButton=Debug script
WaitForScriptButton=Continue
DontAskAgain=&Don't ask me again
DontAskAgain=&Dont ask me again
JSURLLoadBlockedWarning=Attempt to load a javascript: URL from one host\nin a window displaying content from another host\nwas blocked by the security manager.
WindowCloseBlockedWarning=Scripts may not close windows that were not opened by script.
OnBeforeUnloadTitle=Are you sure?
@ -57,8 +57,8 @@ SetAttributeNodeNSWarning=Use of setAttributeNodeNS() is deprecated. Use setAttr
RemoveAttributeNodeWarning=Use of removeAttributeNode() is deprecated. Use removeAttribute() instead.
CreateAttributeWarning=Use of document.createAttribute() is deprecated. Use element.setAttribute() instead.
CreateAttributeNSWarning=Use of document.createAttributeNS() is deprecated. Use element.setAttributeNS() instead.
NodeValueWarning=Use of attributes' nodeValue attribute is deprecated. Use value instead.
TextContentWarning=Use of attributes' textContent attribute is deprecated. Use value instead.
NodeValueWarning=Use of attributes nodeValue attribute is deprecated. Use value instead.
TextContentWarning=Use of attributes textContent attribute is deprecated. Use value instead.
EnablePrivilegeWarning=Use of enablePrivilege is deprecated. Please use code that runs with the system principal (e.g. an extension) instead.
nsIJSONDecodeDeprecatedWarning=nsIJSON.decode is deprecated. Please use JSON.parse instead.
nsIJSONEncodeDeprecatedWarning=nsIJSON.encode is deprecated. Please use JSON.stringify instead.
@ -66,7 +66,7 @@ nsIDOMWindowInternalWarning=Use of nsIDOMWindowInternal is deprecated. Use nsIDO
FullscreenDeniedDisabled=Request for fullscreen was denied because Fullscreen API is disabled by user preference.
FullscreenDeniedFocusedPlugin=Request for fullscreen was denied because a windowed plugin is focused.
FullscreenDeniedHidden=Request for fullscreen was denied because the document is no longer visible.
FullscreenDeniedContainerNotAllowed=Request for fullscreen was denied because at least one of the document's containing elements is not an iframe or does not have an "allowfullscreen" attribute.
FullscreenDeniedContainerNotAllowed=Request for fullscreen was denied because at least one of the documents containing elements is not an iframe or does not have an “allowfullscreen” attribute.
FullscreenDeniedNotInputDriven=Request for fullscreen was denied because Element.requestFullscreen() was not called from inside a short running user-generated event handler.
FullscreenDeniedNotInDocument=Request for fullscreen was denied because requesting element is no longer in its document.
FullscreenDeniedMovedDocument=Request for fullscreen was denied because requesting element has moved document.
@ -77,10 +77,10 @@ FullscreenDeniedNotFocusedTab=Request for fullscreen was denied because requesti
RemovedFullscreenElement=Exited fullscreen because fullscreen element was removed from document.
FocusedWindowedPluginWhileFullscreen=Exited fullscreen because windowed plugin was focused.
HTMLSyncXHRWarning=HTML parsing in XMLHttpRequest is not supported in the synchronous mode.
InvalidRedirectChannelWarning=Unable to redirect to %S because the channel doesn't implement nsIWritablePropertyBag2.
ResponseTypeSyncXHRWarning=Use of XMLHttpRequest's responseType attribute is no longer supported in the synchronous mode in window context.
WithCredentialsSyncXHRWarning=Use of XMLHttpRequest's withCredentials attribute is no longer supported in the synchronous mode in window context.
TimeoutSyncXHRWarning=Use of XMLHttpRequest's timeout attribute is not supported in the synchronous mode in window context.
InvalidRedirectChannelWarning=Unable to redirect to %S because the channel doesnt implement nsIWritablePropertyBag2.
ResponseTypeSyncXHRWarning=Use of XMLHttpRequests responseType attribute is no longer supported in the synchronous mode in window context.
WithCredentialsSyncXHRWarning=Use of XMLHttpRequests withCredentials attribute is no longer supported in the synchronous mode in window context.
TimeoutSyncXHRWarning=Use of XMLHttpRequests timeout attribute is not supported in the synchronous mode in window context.
JSONCharsetWarning=An attempt was made to declare a non-UTF-8 encoding for JSON retrieved using XMLHttpRequest. Only UTF-8 is supported for decoding JSON.
# LOCALIZATION NOTE: Do not translate AudioBufferSourceNode
MediaBufferSourceNodeResampleOutOfMemory=Insufficient memory to resample the AudioBufferSourceNode for playback.
@ -97,24 +97,24 @@ MediaElementAudioSourceNodeCrossOrigin=The HTMLMediaElement passed to createMedi
# LOCALIZATION NOTE: Do not translate MediaStream and createMediaStreamSource.
MediaStreamAudioSourceNodeCrossOrigin=The MediaStream passed to createMediaStreamSource has a cross-origin resource, the node it will output silence.
MediaLoadExhaustedCandidates=All candidate resources failed to load. Media load paused.
MediaLoadSourceMissingSrc=<source> element has no "src" attribute. Media resource load failed.
MediaLoadSourceMissingSrc=<source> element has no “src” attribute. Media resource load failed.
# LOCALIZATION NOTE: %1$S is the Http error code the server returned (e.g. 404, 500, etc), %2$S is the URL of the media resource which failed to load.
MediaLoadHttpError=HTTP load failed with status %1$S. Load of media resource %2$S failed.
# LOCALIZATION NOTE: %S is the URL of the media resource which failed to load.
MediaLoadInvalidURI=Invalid URI. Load of media resource %S failed.
# LOCALIZATION NOTE: %1$S is the media resource's format/codec type (basically equivalent to the file type, e.g. MP4,AVI,WMV,MOV etc), %2$S is the URL of the media resource which failed to load.
MediaLoadUnsupportedTypeAttribute=Specified "type" attribute of "%1$S" is not supported. Load of media resource %2$S failed.
MediaLoadUnsupportedTypeAttribute=Specified “type” attribute of “%1$S” is not supported. Load of media resource %2$S failed.
# LOCALIZATION NOTE: %1$S is the "media" attribute value of the <source> element. It is a media query. %2$S is the URL of the media resource which failed to load.
MediaLoadSourceMediaNotMatched=Specified "media" attribute of "%1$S" does not match the environment. Load of media resource %2$S failed.
MediaLoadSourceMediaNotMatched=Specified “media” attribute of “%1$S” does not match the environment. Load of media resource %2$S failed.
# LOCALIZATION NOTE: %1$S is the MIME type HTTP header being sent by the web server, %2$S is the URL of the media resource which failed to load.
MediaLoadUnsupportedMimeType=HTTP "Content-Type" of "%1$S" is not supported. Load of media resource %2$S failed.
MediaLoadUnsupportedMimeType=HTTP “Content-Type” of “%1$S” is not supported. Load of media resource %2$S failed.
# LOCALIZATION NOTE: %S is the URL of the media resource which failed to load because of error in decoding.
MediaLoadDecodeError=Media resource %S could not be decoded.
MediaWidevineNoWMFNoSilverlight=Trying to play Widevine with no Windows Media Foundation (nor Silverlight fallback), see https://support.mozilla.org/kb/fix-video-audio-problems-firefox-windows
# LOCALIZATION NOTE: %S is a comma-separated list of codecs (e.g. 'video/mp4, video/webm')
MediaWMFNeeded=To play video formats %S, you need to install extra Microsoft software, see https://support.mozilla.org/kb/fix-video-audio-problems-firefox-windows
# LOCALIZATION NOTE: %S is a comma-separated list of codecs (e.g. 'video/mp4, video/webm')
MediaPlatformDecoderNotFound=The video on this page can't be played. Your system may not have the required video codecs for: %S
MediaPlatformDecoderNotFound=The video on this page cant be played. Your system may not have the required video codecs for: %S
# LOCALIZATION NOTE: %S is a comma-separated list of codecs (e.g. 'video/mp4, video/webm')
MediaCannotPlayNoDecoders=Cannot play media. No decoders for requested formats: %S
# LOCALIZATION NOTE: %S is a comma-separated list of codecs (e.g. 'video/mp4, video/webm')
@ -126,7 +126,7 @@ MediaStreamAddTrackDifferentAudioChannel=MediaStreamTrack %S could not be added
# LOCALIZATION NOTE: Do not translate "MediaStream", "stop()" and "MediaStreamTrack"
MediaStreamStopDeprecatedWarning=MediaStream.stop() is deprecated and will soon be removed. Use MediaStreamTrack.stop() instead.
# LOCALIZATION NOTE: Do not translate "DOMException", "code" and "name"
DOMExceptionCodeWarning=Use of DOMException's code attribute is deprecated. Use name instead.
DOMExceptionCodeWarning=Use of DOMExceptions code attribute is deprecated. Use name instead.
# LOCALIZATION NOTE: Do not translate "__exposedProps__"
NoExposedPropsWarning=Exposing chrome JS objects to content without __exposedProps__ is insecure and deprecated. See https://developer.mozilla.org/en/XPConnect_wrappers for more information.
# LOCALIZATION NOTE: Do not translate "Mutation Event" and "MutationObserver"
@ -139,11 +139,11 @@ PluginHangUIWaitButton=Continue
PluginHangUIStopButton=Stop plugin
PrefixedFullscreenAPIWarning=Prefixed Fullscreen API is deprecated. Please use unprefixed API for fullscreen. For more help https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API
# LOCALIZATION NOTE: Do not translate "mozHidden", "mozVisibilityState", "hidden", or "visibilityState"
PrefixedVisibilityAPIWarning='mozHidden' and 'mozVisibilityState' are deprecated. Please use the unprefixed 'hidden' and 'visibilityState' instead.
PrefixedVisibilityAPIWarning=mozHidden and mozVisibilityState are deprecated. Please use the unprefixed hidden and visibilityState instead.
# LOCALIZATION NOTE: Do not translate "NodeIterator" or "detach()".
NodeIteratorDetachWarning=Calling detach() on a NodeIterator no longer has an effect.
# LOCALIZATION NOTE: Do not translate "LenientThis" and "this"
LenientThisWarning=Ignoring get or set of property that has [LenientThis] because the "this" object is incorrect.
LenientThisWarning=Ignoring get or set of property that has [LenientThis] because the “this” object is incorrect.
# LOCALIZATION NOTE: Do not translate "nsIDOMWindowUtils", "getWindowWithOuterId", or "nsIWindowMediator"
GetWindowWithOuterIdWarning=Use of nsIDOMWindowUtils.getOuterWindowWithId() is deprecated. Instead, use the nsIWindowMediator method of the same name.
# LOCALIZATION NOTE: Do not translate "getPreventDefault" or "defaultPrevented".
@ -163,7 +163,7 @@ ShowModalDialogWarning=Use of window.showModalDialog() is deprecated. Use window
# LOCALIZATION NOTE: Do not translate "window._content" or "window.content"
Window_ContentWarning=window._content is deprecated. Please use window.content instead.
# LOCALIZATION NOTE: Do not translate "XMLHttpRequest"
SyncXMLHttpRequestWarning=Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help http://xhr.spec.whatwg.org/
SyncXMLHttpRequestWarning=Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end users experience. For more help http://xhr.spec.whatwg.org/
ImplicitMetaViewportTagFallback=No meta-viewport tag found. Please explicitly specify one to prevent unexpected behavioural changes in future versions. For more help https://developer.mozilla.org/en/docs/Mozilla/Mobile/Viewport_meta_tag
# LOCALIZATION NOTE: Do not translate "DataContainerEvent" or "CustomEvent"
DataContainerEventWarning=Use of DataContainerEvent is deprecated. Use CustomEvent instead.
@ -183,27 +183,27 @@ PannerNodeDopplerWarning=Use of setVelocity on the PannerNode and AudioListener,
AppCacheWarning=The Application Cache API (AppCache) is deprecated and will be removed at a future date. Please consider using ServiceWorker for offline support.
# LOCALIZATION NOTE: Do not translate "Worker".
EmptyWorkerSourceWarning=Attempting to create a Worker from an empty source. This is probably unintentional.
WebrtcDeprecatedPrefixWarning=WebRTC interfaces with the "moz" prefix (mozRTCPeerConnection, mozRTCSessionDescription, mozRTCIceCandidate) have been deprecated.
WebrtcDeprecatedPrefixWarning=WebRTC interfaces with the “moz” prefix (mozRTCPeerConnection, mozRTCSessionDescription, mozRTCIceCandidate) have been deprecated.
NavigatorGetUserMediaWarning=navigator.mozGetUserMedia has been replaced by navigator.mediaDevices.getUserMedia
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %S is a URL.
InterceptionFailedWithURL=Failed to load '%S'. A ServiceWorker intercepted the request and encountered an unexpected error.
InterceptionFailedWithURL=Failed to load %S. A ServiceWorker intercepted the request and encountered an unexpected error.
# LOCALIZATION NOTE: Do not translate "ServiceWorker", "FetchEvent.respondWith()", "FetchEvent", "no-cors", "opaque", "Response", or "RequestMode". %1$S is a URL. %2$S is a RequestMode value.
BadOpaqueInterceptionRequestModeWithURL=Failed to load '%1$S'. A ServiceWorker passed an opaque Response to FetchEvent.respondWith() while handling a '%2$S' FetchEvent. Opaque Response objects are only valid when the RequestMode is 'no-cors'.
BadOpaqueInterceptionRequestModeWithURL=Failed to load %1$S. A ServiceWorker passed an opaque Response to FetchEvent.respondWith() while handling a %2$S FetchEvent. Opaque Response objects are only valid when the RequestMode is no-cors.
# LOCALIZATION NOTE: Do not translate "ServiceWorker", "Error", "Response", "FetchEvent.respondWith()", or "fetch()". %S is a URL.
InterceptedErrorResponseWithURL=Failed to load '%S'. A ServiceWorker passed an Error Response to FetchEvent.respondWith(). This typically means the ServiceWorker performed an invalid fetch() call.
InterceptedErrorResponseWithURL=Failed to load %S. A ServiceWorker passed an Error Response to FetchEvent.respondWith(). This typically means the ServiceWorker performed an invalid fetch() call.
# LOCALIZATION NOTE: Do not translate "ServiceWorker", "Response", "FetchEvent.respondWith()", or "Response.clone()". %S is a URL.
InterceptedUsedResponseWithURL=Failed to load '%S'. A ServiceWorker passed a used Response to FetchEvent.respondWith(). The body of a Response may only be read once. Use Response.clone() to access the body multiple times.
InterceptedUsedResponseWithURL=Failed to load %S. A ServiceWorker passed a used Response to FetchEvent.respondWith(). The body of a Response may only be read once. Use Response.clone() to access the body multiple times.
# LOCALIZATION NOTE: Do not translate "ServiceWorker", "opaqueredirect", "Response", "FetchEvent.respondWith()", or "FetchEvent". %s is a URL.
BadOpaqueRedirectInterceptionWithURL=Failed to load '%S'. A ServiceWorker passed an opaqueredirect Response to FetchEvent.respondWith() while handling a non-navigation FetchEvent.
BadOpaqueRedirectInterceptionWithURL=Failed to load %S. A ServiceWorker passed an opaqueredirect Response to FetchEvent.respondWith() while handling a non-navigation FetchEvent.
# LOCALIZATION NOTE: Do not translate "ServiceWorker" or "FetchEvent.preventDefault()". %S is a URL.
InterceptionCanceledWithURL=Failed to load '%S'. A ServiceWorker canceled the load by calling FetchEvent.preventDefault().
InterceptionCanceledWithURL=Failed to load %S. A ServiceWorker canceled the load by calling FetchEvent.preventDefault().
# LOCALIZATION NOTE: Do not translate "ServiceWorker", "promise", or "FetchEvent.respondWith()". %1$S is a URL. %2$S is an error string.
InterceptionRejectedResponseWithURL=Failed to load '%1$S'. A ServiceWorker passed a promise to FetchEvent.respondWith() that rejected with '%2$S'.
InterceptionRejectedResponseWithURL=Failed to load %1$S. A ServiceWorker passed a promise to FetchEvent.respondWith() that rejected with %2$S.
# LOCALIZATION NOTE: Do not translate "ServiceWorker", "promise", "FetchEvent.respondWith()", or "Response". %1$S is a URL. %2$S is an error string.
InterceptedNonResponseWithURL=Failed to load '%1$S'. A ServiceWorker passed a promise to FetchEvent.respondWith() that resolved with non-Response value '%2$S'.
InterceptedNonResponseWithURL=Failed to load %1$S. A ServiceWorker passed a promise to FetchEvent.respondWith() that resolved with non-Response value %2$S.
# LOCALIZATION NOTE: Do not translate "ServiceWorker", "Service-Worker-Allowed" or "HTTP". %1$S and %2$S are URLs.
ServiceWorkerScopePathMismatch=Failed to register a ServiceWorker: The path of the provided scope '%1$S' is not under the max scope allowed '%2$S'. Adjust the scope, move the Service Worker script, or use the Service-Worker-Allowed HTTP header to allow the scope.
ExecCommandCutCopyDeniedNotInputDriven=document.execCommand('cut'/'copy') was denied because it was not called from inside a short running user-generated event handler.
ServiceWorkerScopePathMismatch=Failed to register a ServiceWorker: The path of the provided scope %1$S is not under the max scope allowed %2$S. Adjust the scope, move the Service Worker script, or use the Service-Worker-Allowed HTTP header to allow the scope.
ExecCommandCutCopyDeniedNotInputDriven=document.execCommand(cut/copy) was denied because it was not called from inside a short running user-generated event handler.
ManifestShouldBeObject=Manifest should be an object.
ManifestScopeURLInvalid=The scope URL is invalid.
ManifestScopeNotSameOrigin=The scope URL must be same origin as document.
@ -211,15 +211,15 @@ ManifestStartURLOutsideScope=The start URL is outside the scope, so the scope is
ManifestStartURLInvalid=The start URL is invalid.
ManifestStartURLShouldBeSameOrigin=The start URL must be same origin as document.
# LOCALIZATION NOTE: %1$S is the name of the object whose property is invalid. %2$S is the name of the invalid property. %3$S is the expected type of the property value. E.g. "Expected the manifest's start_url member to be a string."
ManifestInvalidType=Expected the %1$S's %2$S member to be a %3$S.
ManifestInvalidType=Expected the %1$Ss %2$S member to be a %3$S.
# LOCALIZATION NOTE: %1$S is the name of the property whose value is invalid. %2$S is the (invalid) value of the property. E.g. "theme_color: 42 is not a valid CSS color."
ManifestInvalidCSSColor=%1$S: %2$S is not a valid CSS color.
PatternAttributeCompileFailure=Unable to check <input pattern='%S'> because the pattern is not a valid regexp: %S
# LOCALIZATION NOTE: Do not translate "postMessage" or DOMWindow. %S values are origins, like https://domain.com:port
TargetPrincipalDoesNotMatch=Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('%S') does not match the recipient window's origin ('%S').
TargetPrincipalDoesNotMatch=Failed to execute postMessage on DOMWindow: The target origin provided (%S) does not match the recipient windows origin (%S).
# LOCALIZATION NOTE: Do not translate 'youtube'. %S values are origins, like https://domain.com:port
RewriteYoutubeEmbed=Rewriting old-style Youtube Flash embed (%S) to iframe embed (%S). Please update page to use iframe instead of embed/object, if possible.
# LOCALIZATION NOTE: Do not translate 'youtube'. %S values are origins, like https://domain.com:port
RewriteYoutubeEmbedInvalidQuery=Rewriting old-style Youtube Flash embed (%S) to iframe embed (%S). Query was invalid and removed from URL. Please update page to use iframe instead of embed/object, if possible.
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %1$S is the ServiceWorker scope URL. %2$S is an error string.
PushMessageDecryptionFailure=The ServiceWorker for scope '%1$S' encountered an error decrypting a push message: '%2$S'. For help with encryption, please see https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Using_the_Push_API#Encryption
PushMessageDecryptionFailure=The ServiceWorker for scope %1$S encountered an error decrypting a push message: %2$S. For help with encryption, please see https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Using_the_Push_API#Encryption

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

@ -2,39 +2,39 @@
# 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/.
MimeNotCss=The stylesheet %1$S was not loaded because its MIME type, "%2$S", is not "text/css".
MimeNotCssWarn=The stylesheet %1$S was loaded as CSS even though its MIME type, "%2$S", is not "text/css".
MimeNotCss=The stylesheet %1$S was not loaded because its MIME type, “%2$S”, is not “text/css”.
MimeNotCssWarn=The stylesheet %1$S was loaded as CSS even though its MIME type, “%2$S”, is not “text/css”.
PEUnexpEOF2=Unexpected end of file while searching for %1$S.
PEParseRuleWSOnly=Whitespace-only string given to be parsed as rule.
PEDeclDropped=Declaration dropped.
PEDeclSkipped=Skipped to next declaration.
PEUnknownProperty=Unknown property '%1$S'.
PEValueParsingError=Error in parsing value for '%1$S'.
PEExpectEndValue=Expected end of value but found '%1$S'.
PERuleTrailing=Expected end of rule but found '%1$S'.
PEUnknownProperty=Unknown property %1$S.
PEValueParsingError=Error in parsing value for %1$S.
PEExpectEndValue=Expected end of value but found %1$S.
PERuleTrailing=Expected end of rule but found %1$S.
PESkipAtRuleEOF2=end of at-rule
PEUnknownAtRule=Unrecognized at-rule or error parsing at-rule '%1$S'.
PEUnknownAtRule=Unrecognized at-rule or error parsing at-rule %1$S.
PECharsetRuleEOF=charset string in @charset rule
PECharsetRuleNotString=Expected charset string but found '%1$S'.
PECharsetRuleNotString=Expected charset string but found %1$S.
PEGatherMediaEOF=end of media list in @import or @media rule
PEGatherMediaNotComma=Expected ',' in media list but found '%1$S'.
PEGatherMediaNotIdent=Expected identifier in media list but found '%1$S'.
PEGatherMediaReservedMediaType=Found reserved keyword '%1$S' when looking for media type.
PEGatherMediaNotComma=Expected , in media list but found %1$S.
PEGatherMediaNotIdent=Expected identifier in media list but found %1$S.
PEGatherMediaReservedMediaType=Found reserved keyword %1$S when looking for media type.
PEParseSourceSizeListEOF=length value for matched media condition
PEParseSourceSizeListNotComma=Expected ',' after value but found '%1$S'
PEImportNotURI=Expected URI in @import rule but found '%1$S'.
PEImportBadURI=Invalid URI in @import rule: '%1$S'.
PEImportUnexpected=Found unexpected '%1$S' within @import.
PEParseSourceSizeListNotComma=Expected , after value but found %1$S
PEImportNotURI=Expected URI in @import rule but found %1$S.
PEImportBadURI=Invalid URI in @import rule: %1$S.
PEImportUnexpected=Found unexpected %1$S within @import.
PEGroupRuleEOF2=end of @media, @supports or @-moz-document rule
PEGroupRuleNestedAtRule=%1$S rule not allowed within @media or @-moz-document rule.
PEMozDocRuleBadFunc2=Expected url(), url-prefix(), domain() or regexp() in @-moz-document rule but found '%1$S'.
PEMozDocRuleNotURI=Expected URI in @-moz-document rule but found '%1$S'.
PEMozDocRuleNotString=Expected string in @-moz-document rule regexp() function but found '%1$S'.
PEMozDocRuleBadFunc2=Expected url(), url-prefix(), domain() or regexp() in @-moz-document rule but found %1$S.
PEMozDocRuleNotURI=Expected URI in @-moz-document rule but found %1$S.
PEMozDocRuleNotString=Expected string in @-moz-document rule regexp() function but found %1$S.
PEMozDocRuleEOF=next URI in @-moz-document rule
PEAtNSPrefixEOF=namespace prefix in @namespace rule
PEAtNSURIEOF=namespace URI in @namespace rule
PEAtNSUnexpected=Unexpected token within @namespace: '%1$S'.
PEAtNSUnexpected=Unexpected token within @namespace: %1$S.
PEKeyframeNameEOF=name of @keyframes rule.
PEKeyframeBadName=Expected identifier for name of @keyframes rule.
PEKeyframeBrace=Expected opening { of @keyframes rule.
@ -42,136 +42,136 @@ PESkipDeclBraceEOF=closing } of declaration block
PESkipRSBraceEOF=closing } of invalid rule set
PEBadSelectorRSIgnored=Ruleset ignored due to bad selector.
PEBadSelectorKeyframeRuleIgnored=Keyframe rule ignored due to bad selector.
PESelectorListExtraEOF=',' or '{'
PESelectorListExtra=Expected ',' or '{' but found '%1$S'.
PESelectorListExtraEOF=, or {
PESelectorListExtra=Expected , or { but found %1$S.
PESelectorGroupNoSelector=Selector expected.
PESelectorGroupExtraCombinator=Dangling combinator.
PECounterStyleNotIdent=Expected identifier for name of @counter-style rule.
PECounterStyleBadName=Name of @counter-style rule can't be '%1$S'.
PECounterStyleBadBlockStart=Expected '{' to begin @counter-style rule but found '%1$S'.
PECounterStyleEOF=closing '}' of @counter-style block
PECounterDescExpected=Expected counter descriptor but found '%1$S'.
PEUnknownCounterDesc=Unknown descriptor '%1$S' in @counter-style rule.
PECounterExtendsNotIdent=Expected identifier for extends system but found '%1$S'.
PECounterStyleBadName=Name of @counter-style rule cant be %1$S.
PECounterStyleBadBlockStart=Expected { to begin @counter-style rule but found %1$S.
PECounterStyleEOF=closing } of @counter-style block
PECounterDescExpected=Expected counter descriptor but found %1$S.
PEUnknownCounterDesc=Unknown descriptor %1$S in @counter-style rule.
PECounterExtendsNotIdent=Expected identifier for extends system but found %1$S.
PECounterASWeight=Each weight in the additive-symbols descriptor must be smaller than the previous weight.
PEClassSelEOF=class name
PEClassSelNotIdent=Expected identifier for class selector but found '%1$S'.
PECoordinatePair=Expected coordinate pair but found '%1$S'.
PEClassSelNotIdent=Expected identifier for class selector but found %1$S.
PECoordinatePair=Expected coordinate pair but found %1$S.
PETypeSelEOF=element type
PETypeSelNotType=Expected element name or '*' but found '%1$S'.
PEUnknownNamespacePrefix=Unknown namespace prefix '%1$S'.
PETypeSelNotType=Expected element name or * but found %1$S.
PEUnknownNamespacePrefix=Unknown namespace prefix %1$S.
PEAttributeNameEOF=attribute name
PEAttributeNameExpected=Expected identifier for attribute name but found '%1$S'.
PEAttributeNameOrNamespaceExpected=Expected attribute name or namespace but found '%1$S'.
PEAttSelNoBar=Expected '|' but found '%1$S'.
PEAttributeNameExpected=Expected identifier for attribute name but found %1$S.
PEAttributeNameOrNamespaceExpected=Expected attribute name or namespace but found %1$S.
PEAttSelNoBar=Expected | but found %1$S.
PEAttSelInnerEOF=part of attribute selector
PEAttSelUnexpected=Unexpected token in attribute selector: '%1$S'.
PEAttSelUnexpected=Unexpected token in attribute selector: %1$S.
PEAttSelValueEOF=attribute value
PEAttSelCloseEOF=']' to end attribute selector
PEAttSelNoClose=Expected ']' to terminate attribute selector but found '%1$S'.
PEAttSelBadValue=Expected identifier or string for value in attribute selector but found '%1$S'.
PEAttSelCloseEOF=] to end attribute selector
PEAttSelNoClose=Expected ] to terminate attribute selector but found %1$S.
PEAttSelBadValue=Expected identifier or string for value in attribute selector but found %1$S.
PEPseudoSelEOF=name of pseudo-class or pseudo-element
PEPseudoSelBadName=Expected identifier for pseudo-class or pseudo-element but found '%1$S'.
PEPseudoSelNonFunc=Function token for non-function pseudo-class or pseudo-element, or the other way around, when reading '%1$S'.
PEPseudoSelNotPE=Expected pseudo-element but found '%1$S'.
PEPseudoSelDoubleNot=Negation pseudo-class can't be negated '%1$S'.
PEPseudoSelPEInNot=Pseudo-elements can't be negated '%1$S'.
PEPseudoSelNewStyleOnly=This pseudo-element must use the "::" form: '%1$S'.
PEPseudoSelEndOrUserActionPC=Expected end of selector or a user action pseudo-class after pseudo-element but found '%1$S'.
PEPseudoSelNoUserActionPC=Expected end of selector after pseudo-element that does not support user action pseudo-classes but found '%1$S'.
PEPseudoSelMultiplePE=Extra pseudo-element '%1$S'.
PEPseudoSelUnknown=Unknown pseudo-class or pseudo-element '%1$S'.
PEPseudoSelBadName=Expected identifier for pseudo-class or pseudo-element but found %1$S.
PEPseudoSelNonFunc=Function token for non-function pseudo-class or pseudo-element, or the other way around, when reading %1$S.
PEPseudoSelNotPE=Expected pseudo-element but found %1$S.
PEPseudoSelDoubleNot=Negation pseudo-class cant be negated %1$S.
PEPseudoSelPEInNot=Pseudo-elements cant be negated %1$S.
PEPseudoSelNewStyleOnly=This pseudo-element must use the “::” form: %1$S.
PEPseudoSelEndOrUserActionPC=Expected end of selector or a user action pseudo-class after pseudo-element but found %1$S.
PEPseudoSelNoUserActionPC=Expected end of selector after pseudo-element that does not support user action pseudo-classes but found %1$S.
PEPseudoSelMultiplePE=Extra pseudo-element %1$S.
PEPseudoSelUnknown=Unknown pseudo-class or pseudo-element %1$S.
PENegationEOF=selector within negation
PENegationBadInner=Malformed simple selector as negation pseudo-class argument '%1$S'.
PENegationNoClose=Missing closing ')' in negation pseudo-class '%1$S'.
PENegationBadArg=Missing argument in negation pseudo-class '%1$S'.
PENegationBadInner=Malformed simple selector as negation pseudo-class argument %1$S.
PENegationNoClose=Missing closing ) in negation pseudo-class %1$S.
PENegationBadArg=Missing argument in negation pseudo-class %1$S.
PEPseudoClassArgEOF=argument to pseudo-class selector
PEPseudoClassArgNotIdent=Expected identifier for pseudo-class parameter but found '%1$S'.
PEPseudoClassArgNotNth=Expected part of argument to pseudo-class but found '%1$S'.
PEPseudoClassNoClose=Missing closing ')' in pseudo-class, found '%1$S' instead.
PEPseudoClassNoArg=Missing argument in pseudo-class '%1$S'.
PEPseudoClassNotUserAction=Expected end of selector or a user action pseudo-class after pseudo-element but found pseudo-class '%1$S'.
PEPseudoClassArgNotIdent=Expected identifier for pseudo-class parameter but found %1$S.
PEPseudoClassArgNotNth=Expected part of argument to pseudo-class but found %1$S.
PEPseudoClassNoClose=Missing closing ) in pseudo-class, found %1$S instead.
PEPseudoClassNoArg=Missing argument in pseudo-class %1$S.
PEPseudoClassNotUserAction=Expected end of selector or a user action pseudo-class after pseudo-element but found pseudo-class %1$S.
PESelectorEOF=selector
PEBadDeclBlockStart=Expected '{' to begin declaration block but found '%1$S'.
PEBadDeclBlockStart=Expected { to begin declaration block but found %1$S.
PEColorEOF=color
PEColorNotColor=Expected color but found '%1$S'.
PEColorNotColor=Expected color but found %1$S.
PEColorComponentEOF=color component
PEExpectedPercent=Expected a percentage but found '%1$S'.
PEExpectedInt=Expected an integer but found '%1$S'.
PEColorBadRGBContents=Expected number or percentage in rgb() but found '%1$S'.
PEColorComponentBadTerm=Expected '%2$S' but found '%1$S'.
PEExpectedPercent=Expected a percentage but found %1$S.
PEExpectedInt=Expected an integer but found %1$S.
PEColorBadRGBContents=Expected number or percentage in rgb() but found %1$S.
PEColorComponentBadTerm=Expected %2$S but found %1$S.
PEColorHueEOF=hue
PEExpectedComma=Expected ',' but found '%1$S'.
PEExpectedComma=Expected , but found %1$S.
PEColorSaturationEOF=saturation
PEColorLightnessEOF=lightness
PEColorOpacityEOF=opacity in color value
PEExpectedNumber=Expected a number but found '%1$S'.
PEExpectedNumber=Expected a number but found %1$S.
PEPositionEOF=<position>
PEExpectedPosition=Expected <position> but found '%1$S'.
PEExpectedRadius=Expected radius but found '%1$S'.
PEExpectedCloseParen=Expected ')' but found '%1$S'.
PEDeclEndEOF=';' or '}' to end declaration
PEParseDeclarationNoColon=Expected ':' but found '%1$S'.
PEParseDeclarationDeclExpected=Expected declaration but found '%1$S'.
PEExpectedPosition=Expected <position> but found %1$S.
PEExpectedRadius=Expected radius but found %1$S.
PEExpectedCloseParen=Expected ) but found %1$S.
PEDeclEndEOF=; or } to end declaration
PEParseDeclarationNoColon=Expected : but found %1$S.
PEParseDeclarationDeclExpected=Expected declaration but found %1$S.
PEEndOfDeclEOF=end of declaration
PEImportantEOF=important
PEExpectedImportant=Expected 'important' but found '%1$S'.
PEBadDeclEnd=Expected ';' to terminate declaration but found '%1$S'.
PEBadDeclOrRuleEnd2=Expected ';' or '}' to terminate declaration but found '%1$S'.
PEExpectedImportant=Expected important but found %1$S.
PEBadDeclEnd=Expected ; to terminate declaration but found %1$S.
PEBadDeclOrRuleEnd2=Expected ; or } to terminate declaration but found %1$S.
PEInaccessibleProperty2=Cannot specify value for internal property.
PECommentEOF=end of comment
SEUnterminatedString=Found unclosed string '%1$S'.
PEFontDescExpected=Expected font descriptor but found '%1$S'.
PEUnknownFontDesc=Unknown descriptor '%1$S' in @font-face rule.
PEMQExpectedExpressionStart=Expected '(' to start media query expression but found '%1$S'.
SEUnterminatedString=Found unclosed string %1$S.
PEFontDescExpected=Expected font descriptor but found %1$S.
PEUnknownFontDesc=Unknown descriptor %1$S in @font-face rule.
PEMQExpectedExpressionStart=Expected ( to start media query expression but found %1$S.
PEMQExpressionEOF=contents of media query expression
PEMQExpectedFeatureName=Expected media feature name but found '%1$S'.
PEMQExpectedFeatureNameEnd=Expected ':' or ')' after media feature name but found '%1$S'.
PEMQExpectedFeatureName=Expected media feature name but found %1$S.
PEMQExpectedFeatureNameEnd=Expected : or ) after media feature name but found %1$S.
PEMQNoMinMaxWithoutValue=Media features with min- or max- must have a value.
PEMQExpectedFeatureValue=Found invalid value for media feature.
PEBadFontBlockStart=Expected '{' to begin @font-face rule but found '%1$S'.
PEBadFontBlockEnd=Expected '}' to end @font-face rule but found '%1$S'.
PEBadFontBlockStart=Expected { to begin @font-face rule but found %1$S.
PEBadFontBlockEnd=Expected } to end @font-face rule but found %1$S.
PEAnonBoxNotAlone=Did not expect anonymous box.
PEFFVUnexpectedEOF=Unexpected end of @font-feature-values rule.
PEFFVBlockStart=Expected opening { of @font-feature-values rule but found '%1$S'.
PEFFVValueSetStart=Expected opening { of feature value set but found '%1$S'.
PEFFVNoFamily=Expected font family list for @font-feature-values rule but found '%1$S'.
PEFFVUnexpectedBlockEnd=Expected '}' to end @font-feature-values rule but found '%1$S'.
PEFFVUnknownFontVariantPropValue=Unknown font-variant property value '%1$S'.
PEFFVExpectedIdent=Expected identifier but found '%1$S'.
PEFFVExpectedValue=Expected non-negative integer value but found '%1$S'.
PEFFVTooManyValues=Too many values for feature type '%1$S'.
PEFFVBlockStart=Expected opening { of @font-feature-values rule but found %1$S.
PEFFVValueSetStart=Expected opening { of feature value set but found %1$S.
PEFFVNoFamily=Expected font family list for @font-feature-values rule but found %1$S.
PEFFVUnexpectedBlockEnd=Expected } to end @font-feature-values rule but found %1$S.
PEFFVUnknownFontVariantPropValue=Unknown font-variant property value %1$S.
PEFFVExpectedIdent=Expected identifier but found %1$S.
PEFFVExpectedValue=Expected non-negative integer value but found %1$S.
PEFFVTooManyValues=Too many values for feature type %1$S.
PEFFVGenericInFamilyList=Family list cannot contain generic font family name.
PEFFVValueDefinitionTrailing=Expected end of value definition but found '%1$S'.
PEBadDirValue=Expected 'ltr' or 'rtl' in direction selector but found '%1$S'.
PESupportsConditionStartEOF2='not', '(', or function
PESupportsConditionInParensEOF=')'
PESupportsConditionNotEOF='not'
PESupportsWhitespaceRequired=Expected whitespace after 'not', 'and', or 'or'.
PESupportsConditionExpectedOpenParenOrFunction=Expected '(' or function while parsing supports condition but found '%1$S'.
PESupportsConditionExpectedCloseParen=Expected ')' while parsing supports condition but found '%1$S'.
PESupportsConditionExpectedStart2=Expected 'not', '(', or function while parsing supports condition but found '%1$S'.
PESupportsConditionExpectedNot=Expected 'not' while parsing supports condition but found '%1$S'.
PESupportsGroupRuleStart=Expected '{' to begin @supports rule but found '%1$S'.
PEFFVValueDefinitionTrailing=Expected end of value definition but found %1$S.
PEBadDirValue=Expected ltr or rtl in direction selector but found %1$S.
PESupportsConditionStartEOF2=not, (, or function
PESupportsConditionInParensEOF=)
PESupportsConditionNotEOF=not
PESupportsWhitespaceRequired=Expected whitespace after not, and, or or.
PESupportsConditionExpectedOpenParenOrFunction=Expected ( or function while parsing supports condition but found %1$S.
PESupportsConditionExpectedCloseParen=Expected ) while parsing supports condition but found %1$S.
PESupportsConditionExpectedStart2=Expected not, (, or function while parsing supports condition but found %1$S.
PESupportsConditionExpectedNot=Expected not while parsing supports condition but found %1$S.
PESupportsGroupRuleStart=Expected { to begin @supports rule but found %1$S.
PEFilterEOF=filter
PEExpectedNoneOrURL=Expected 'none' or URL but found '%1$S'.
PEExpectedNoneOrURLOrFilterFunction=Expected 'none', URL, or filter function but found '%1$S'.
PEExpectedNoneOrURL=Expected none or URL but found %1$S.
PEExpectedNoneOrURLOrFilterFunction=Expected none, URL, or filter function but found %1$S.
PEExpectedNonnegativeNP=Expected non-negative number or percentage.
PEFilterFunctionArgumentsParsingError=Error in parsing arguments for filter function.
PEVariableEOF=variable
PEVariableEmpty=Expected variable value but found '%1$S'.
PEVariableEmpty=Expected variable value but found %1$S.
# LOCALIZATION NOTE(PEValueWithVariablesParsingErrorInValue): %1$S is replaced
# with the property name and %2$S is replaced with the property value.
PEValueWithVariablesParsingErrorInValue=Error in parsing value for '%1$S' after substituting variables. Generated value was '%2$S'.
PEValueWithVariablesFallbackInherit=Falling back to 'inherit'.
PEValueWithVariablesFallbackInitial=Falling back to 'initial'.
PEValueWithVariablesParsingErrorInValue=Error in parsing value for %1$S after substituting variables. Generated value was %2$S.
PEValueWithVariablesFallbackInherit=Falling back to inherit.
PEValueWithVariablesFallbackInitial=Falling back to initial.
PEInvalidVariableReference=Property contained reference to invalid variable.
PEInvalidVariableTokenFallback=Found invalid token '%1$S' at top level of variable reference fallback.
PEInvalidVariableTokenFallback=Found invalid token %1$S at top level of variable reference fallback.
PEExpectedVariableNameEOF=identifier for variable name
PEExpectedVariableName=Expected identifier for variable name but found '%1$S'.
PEExpectedVariableFallback=Expected variable reference fallback after ','.
PEExpectedVariableCommaOrCloseParen=Expected ',' or ')' after variable name in variable reference but found '%1$S'.
PESubgridNotSupported=Support for the 'subgrid' keyword of CSS Grid is not enabled.
PEExpectedVariableName=Expected identifier for variable name but found %1$S.
PEExpectedVariableFallback=Expected variable reference fallback after ,.
PEExpectedVariableCommaOrCloseParen=Expected , or ) after variable name in variable reference but found %1$S.
PESubgridNotSupported=Support for the subgrid keyword of CSS Grid is not enabled.
PEMoreThanOneGridRepeatAutoFillInNameList=Only one repeat(auto-fill, …) is allowed in a name list for a subgrid.
PEMoreThanOneGridRepeatAutoFillFitInTrackList=Only one repeat(auto-fill, …) or repeat(auto-fit, …) is allowed in a track list.
PEMoreThanOneGridRepeatTrackSize=Only one track size is allowed inside repeat(auto-fit/auto-fill, …).

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

@ -2,11 +2,11 @@
# 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/.
ImageMapRectBoundsError=The "coords" attribute of the <area shape="rect"> tag is not in the "left,top,right,bottom" format.
ImageMapCircleWrongNumberOfCoords=The "coords" attribute of the <area shape="circle"> tag is not in the "center-x,center-y,radius" format.
ImageMapCircleNegativeRadius=The "coords" attribute of the <area shape="circle"> tag has a negative radius.
ImageMapPolyWrongNumberOfCoords=The "coords" attribute of the <area shape="poly"> tag is not in the "x1,y1,x2,y2 …" format.
ImageMapPolyOddNumberOfCoords=The "coords" attribute of the <area shape="poly"> tag is missing the last "y" coordinate (the correct format is "x1,y1,x2,y2 …").
ImageMapRectBoundsError=The “coords” attribute of the <area shape="rect"> tag is not in the “left,top,right,bottom” format.
ImageMapCircleWrongNumberOfCoords=The “coords” attribute of the <area shape="circle"> tag is not in the “center-x,center-y,radius” format.
ImageMapCircleNegativeRadius=The “coords” attribute of the <area shape="circle"> tag has a negative radius.
ImageMapPolyWrongNumberOfCoords=The “coords” attribute of the <area shape="poly"> tag is not in the “x1,y1,x2,y2 …” format.
ImageMapPolyOddNumberOfCoords=The “coords” attribute of the <area shape="poly"> tag is missing the last “y” coordinate (the correct format is “x1,y1,x2,y2 …”).
TablePartRelPosWarning=Relative positioning of table rows and row groups is now supported. This site may need to be updated because it may depend on this feature having no effect.
ScrollLinkedEffectFound2=This site appears to use a scroll-linked positioning effect. This may not work well with asynchronous panning; see https://developer.mozilla.org/docs/Mozilla/Performance/ScrollLinkedEffects for further details and to join the discussion on related tools and features!
@ -19,16 +19,16 @@ ScrollLinkedEffectFound2=This site appears to use a scroll-linked positioning ef
AnimationWarningContentTooLarge=Animation cannot be run on the compositor because the frame size (%1$S, %2$S) is bigger than the viewport (%3$S, %4$S) or the visual rectangle (%5$S, %6$S) is larger than the maximum allowed value (%7$S)
## LOCALIZATION NOTE(AnimationWarningTransformBackfaceVisibilityHidde):
## 'backface-visibility: hidden' is a CSS property, don't translate it.
AnimationWarningTransformBackfaceVisibilityHidden=Animations of 'backface-visibility: hidden' transforms cannot be run on the compositor
AnimationWarningTransformBackfaceVisibilityHidden=Animations of backface-visibility: hidden transforms cannot be run on the compositor
## LOCALIZATION NOTE(AnimationWarningTransformPreserve3D):
## 'transform-style: preserve-3d' is a CSS property, don't translate it.
AnimationWarningTransformPreserve3D=Animations of 'transform-style: preserve-3d' transforms cannot be run on the compositor
AnimationWarningTransformPreserve3D=Animations of transform-style: preserve-3d transforms cannot be run on the compositor
## LOCALIZATION NOTE(AnimationWarningTransformSVG,
## AnimationWarningTransformWithGeometricProperties,
## AnimationWarningTransformFrameInactive,
## AnimationWarningOpacityFrameInactive):
## 'transform' and 'opacity' mean CSS property names, don't translate it.
AnimationWarningTransformSVG=Animations of 'transform' on elements with SVG transforms cannot be run on the compositor
AnimationWarningTransformWithGeometricProperties=Animations of 'transform' cannot be run on the compositor when geometric properties are animated on the same element at the same time
AnimationWarningTransformFrameInactive=Animation cannot be run on the compositor because the frame was not marked active for 'transform' animation
AnimationWarningOpacityFrameInactive=Animation cannot be run on the compositor because the frame was not marked active for 'opacity' animation
AnimationWarningTransformSVG=Animations of transform on elements with SVG transforms cannot be run on the compositor
AnimationWarningTransformWithGeometricProperties=Animations of transform cannot be run on the compositor when geometric properties are animated on the same element at the same time
AnimationWarningTransformFrameInactive=Animation cannot be run on the compositor because the frame was not marked active for transform animation
AnimationWarningOpacityFrameInactive=Animation cannot be run on the compositor because the frame was not marked active for opacity animation

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

@ -21,7 +21,7 @@ pageofpages=%1$d of %2$d
noprinter=No printers available.
PrintToFile=Print To File
noPrintFilename.title=Filename is missing
noPrintFilename.alert=You have selected "Print To File", and the filename is empty!
noPrintFilename.alert=You have selected “Print To File”, and the filename is empty!
fileConfirm.exists=%S already exists.\nDo you want to replace it?
print_error_dialog_title=Printer Error
printpreview_error_dialog_title=Print Preview Error

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

@ -3,13 +3,13 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
UnexpectedElement=Unexpected <%1$S> element.
# LOCALIZATION NOTE: do not localize key="%S" modifiers="%S"
GTK2Conflict=Key event not available on GTK2: key="%S" modifiers="%S"
WinConflict=Key event not available on some keyboard layouts: key="%S" modifiers="%S"
TooDeepBindingRecursion=The XBL binding "%S" is already used by too many ancestor elements; not applying it to prevent infinite recursion.
CircularExtendsBinding=Extending the XBL binding "%S" with "%S" would lead to it extending itself
# LOCALIZATION NOTE: do not localize key=“%S” modifiers=“%S”
GTK2Conflict=Key event not available on GTK2: key=“%S” modifiers=“%S”
WinConflict=Key event not available on some keyboard layouts: key=“%S” modifiers=“%S”
TooDeepBindingRecursion=The XBL binding “%S” is already used by too many ancestor elements; not applying it to prevent infinite recursion.
CircularExtendsBinding=Extending the XBL binding “%S” with “%S” would lead to it extending itself
# LOCALIZATION NOTE: do not localize <handler command="…">
CommandNotInChrome=Use of <handler command="…"> not allowed outside chrome.
MalformedXBL = An XBL file is malformed. Did you forget the XBL namespace on the bindings tag?
InvalidExtendsBinding=Extending "%S" is invalid. In general, do not extend tag names.
MissingIdAttr = An "id" attribute missing on the binding tag.
InvalidExtendsBinding=Extending “%S” is invalid. In general, do not extend tag names.
MissingIdAttr = An “id” attribute missing on the binding tag.

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

@ -5,4 +5,4 @@
MissingOverlay=Failed to load overlay from %1$S.
PINotInProlog=<?%1$S?> processing instruction does not have any effect outside the prolog anymore (see bug 360119).
NeededToWrapXUL=XUL box for %1$S element contained an inline %2$S child, forcing all its children to be wrapped in a block.
NeededToWrapXULInlineBox=XUL box for %1$S element contained an inline %2$S child, forcing all its children to be wrapped in a block. This can often be fixed by replacing "display: -moz-inline-box" with "display: -moz-inline-box; display: inline-block".
NeededToWrapXULInlineBox=XUL box for %1$S element contained an inline %2$S child, forcing all its children to be wrapped in a block. This can often be fixed by replacing “display: -moz-inline-box” with “display: -moz-inline-box; display: inline-block”.

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

@ -10,8 +10,8 @@ NoBase=Invalid markup: Expected exactly one Base element in <mmultiscripts/>. F
SubSupMismatch=Invalid markup: Incomplete subscript/superscript pair in <mmultiscripts/>.
# LOCALIZATION NOTE: When localizing the single quotes ('), follow the conventions in css.properties for your target locale.
AttributeParsingError=Error in parsing the value '%1$S' for '%2$S' attribute of <%3$S/>. Attribute ignored.
AttributeParsingErrorNoTag=Error in parsing the value '%1$S' for '%2$S' attribute. Attribute ignored.
LengthParsingError=Error in parsing MathML attribute value '%1$S' as length. Attribute ignored.
DeprecatedSupersededBy='%1$S' is deprecated in MathML 3, superseded by '%2$S'.
AttributeParsingError=Error in parsing the value %1$S for %2$S attribute of <%3$S/>. Attribute ignored.
AttributeParsingErrorNoTag=Error in parsing the value %1$S for %2$S attribute. Attribute ignored.
LengthParsingError=Error in parsing MathML attribute value %1$S as length. Attribute ignored.
DeprecatedSupersededBy=%1$S is deprecated in MathML 3, superseded by %2$S.
UnitlessValuesAreDeprecated=Unitless values are deprecated in MathML 3.

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

@ -8,7 +8,7 @@
<!-- Specific error messages -->
<!ENTITY connectionFailure.title "Failed to Connect">
<!ENTITY connectionFailure.longDesc "<p>Though the site seems valid, the browser was unable to establish a connection.</p><ul><li>Could the site be temporarily unavailable? Try again later.</li><li>Are you unable to browse other sites? Check the computer's network connection.</li><li>Is your computer or network protected by a firewall or proxy? Incorrect settings can interfere with Web browsing.</li></ul>">
<!ENTITY connectionFailure.longDesc "<p>Though the site seems valid, the browser was unable to establish a connection.</p><ul><li>Could the site be temporarily unavailable? Try again later.</li><li>Are you unable to browse other sites? Check the computers network connection.</li><li>Is your computer or network protected by a firewall or proxy? Incorrect settings can interfere with Web browsing.</li></ul>">
<!ENTITY deniedPortAccess.title "Port Restricted for Security Reasons">
<!ENTITY deniedPortAccess.longDesc "<p>The requested address specified a port (e.g. <q>mozilla.org:80</q> for port 80 on mozilla.org) normally used for purposes <em>other</em> than Web browsing. The browser has canceled the request for your protection and security.</p>">
@ -29,10 +29,10 @@
<!ENTITY malformedURI.longDesc "<p>The provided address is not in a recognized format. Please check the location bar for mistakes and try again.</p>">
<!ENTITY netInterrupt.title "Data Transfer Interrupted">
<!ENTITY netInterrupt.longDesc "<p>The browser connected successfully, but the connection was interrupted while transferring information. Please try again.</p><ul><li>Are you unable to browse other sites? Check the computer's network connection.</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY netInterrupt.longDesc "<p>The browser connected successfully, but the connection was interrupted while transferring information. Please try again.</p><ul><li>Are you unable to browse other sites? Check the computers network connection.</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY notCached.title "Document Expired">
<!ENTITY notCached.longDesc "<p>The requested document is not available in the browser's cache.</p><ul><li>As a security precaution, the browser does not automatically re-request sensitive documents.</li><li>Click Try Again to re-request the document from the website.</li></ul>">
<!ENTITY notCached.longDesc "<p>The requested document is not available in the browsers cache.</p><ul><li>As a security precaution, the browser does not automatically re-request sensitive documents.</li><li>Click Try Again to re-request the document from the website.</li></ul>">
<!ENTITY netOffline.title "Offline Mode">
<!ENTITY netOffline.longDesc2 "<p>The browser is operating in its offline mode and cannot connect to the requested item.</p><ul><li>Is the computer connected to an active network?</li><li>Press &quot;Try Again&quot; to switch to online mode and reload the page.</li></ul>">
@ -51,19 +51,19 @@
<!ENTITY netReset.longDesc "<p>The network link was interrupted while negotiating a connection. Please try again.</p>">
<!ENTITY netTimeout.title "Network Timeout">
<!ENTITY netTimeout.longDesc "<p>The requested site did not respond to a connection request and the browser has stopped waiting for a reply.</p><ul><li>Could the server be experiencing high demand or a temporary outage? Try again later.</li><li>Are you unable to browse other sites? Check the computer's network connection.</li><li>Is your computer or network protected by a firewall or proxy? Incorrect settings can interfere with Web browsing.</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY netTimeout.longDesc "<p>The requested site did not respond to a connection request and the browser has stopped waiting for a reply.</p><ul><li>Could the server be experiencing high demand or a temporary outage? Try again later.</li><li>Are you unable to browse other sites? Check the computers network connection.</li><li>Is your computer or network protected by a firewall or proxy? Incorrect settings can interfere with Web browsing.</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY unknownProtocolFound.title "Unknown Protocol">
<!ENTITY unknownProtocolFound.longDesc "<p>The address specifies a protocol (e.g. <q>wxyz://</q>) the browser does not recognize, so the browser cannot properly connect to the site.</p><ul><li>Are you trying to access multimedia or other non-text services? Check the site for extra requirements.</li><li>Some protocols may require third-party software or plugins before the browser can recognize them.</li></ul>">
<!ENTITY proxyConnectFailure.title "Proxy Server Refused Connection">
<!ENTITY proxyConnectFailure.longDesc "<p>The browser is configured to use a proxy server, but the proxy refused a connection.</p><ul><li>Is the browser's proxy configuration correct? Check the settings and try again.</li><li>Does the proxy service allow connections from this network?</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY proxyConnectFailure.longDesc "<p>The browser is configured to use a proxy server, but the proxy refused a connection.</p><ul><li>Is the browsers proxy configuration correct? Check the settings and try again.</li><li>Does the proxy service allow connections from this network?</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY proxyResolveFailure.title "Proxy Server Not Found">
<!ENTITY proxyResolveFailure.longDesc "<p>The browser is configured to use a proxy server, but the proxy could not be found.</p><ul><li>Is the browser's proxy configuration correct? Check the settings and try again.</li><li>Is the computer connected to an active network?</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY proxyResolveFailure.longDesc "<p>The browser is configured to use a proxy server, but the proxy could not be found.</p><ul><li>Is the browsers proxy configuration correct? Check the settings and try again.</li><li>Is the computer connected to an active network?</li><li>Still having trouble? Consult your network administrator or Internet provider for assistance.</li></ul>">
<!ENTITY redirectLoop.title "Redirect Loop">
<!ENTITY redirectLoop.longDesc "<p>The browser has stopped trying to retrieve the requested item. The site is redirecting the request in a way that will never complete.</p><ul><li>Have you disabled or blocked cookies required by this site?</li><li><em>NOTE</em>: If accepting the site's cookies does not resolve the problem, it is likely a server configuration issue and not your computer.</li></ul>">
<!ENTITY redirectLoop.longDesc "<p>The browser has stopped trying to retrieve the requested item. The site is redirecting the request in a way that will never complete.</p><ul><li>Have you disabled or blocked cookies required by this site?</li><li><em>NOTE</em>: If accepting the sites cookies does not resolve the problem, it is likely a server configuration issue and not your computer.</li></ul>">
<!ENTITY unknownSocketType.title "Incorrect Response">
<!ENTITY unknownSocketType.longDesc "<p>The site responded to the network request in an unexpected way and the browser cannot continue.</p>">
@ -73,7 +73,7 @@
<!ENTITY nssBadCert.title "Secure Connection Failed">
<!ENTITY nssBadCert.longDesc2 "<ul>
<li>This could be a problem with the server's configuration, or it could be someone trying to impersonate the server.</li>
<li>This could be a problem with the servers configuration, or it could be someone trying to impersonate the server.</li>
<li>If you have connected to this server successfully in the past, the error may be temporary, and you can try again later.</li>
</ul>
">

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

@ -13,5 +13,5 @@ SDAccessErrorCardMissing=Cannot download file because the SD card is missing.
helperAppNotFound=%S could not be opened, because the associated helper application does not exist. Change the association in your preferences.
noMemory=There is not sufficient memory to complete the action you requested.\n\nQuit some applications and try again.
title=Downloading %S
fileAlreadyExistsError=%S could not be saved, because a file already exists with the same name as the '_files' directory.\n\nTry saving to a different location.
fileAlreadyExistsError=%S could not be saved, because a file already exists with the same name as the _files directory.\n\nTry saving to a different location.
fileNameTooLongError=%S could not be saved, because the file name was too long.\n\nTry saving with a shorter file name.

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

@ -110,4 +110,4 @@ SetPropertyDeniedOriginsOnlySubject = Permission denied for <%S> to set property
CallMethodDeniedOriginsOnlySubject = Permission denied for <%S> to call method %S.%S
CreateWrapperDenied = Permission denied to create wrapper for object of class %S
CreateWrapperDeniedForOrigin = Permission denied for <%2$S> to create wrapper for object of class %1$S
ProtocolFlagError = Warning: Protocol handler for '%S' doesn't advertise a security policy. While loading of such protocols is allowed for now, this is deprecated. Please see the documentation in nsIProtocolHandler.idl.
ProtocolFlagError = Warning: Protocol handler for %S doesnt advertise a security policy. While loading of such protocols is allowed for now, this is deprecated. Please see the documentation in nsIProtocolHandler.idl.

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

@ -5,27 +5,27 @@
# CSP Warnings:
# LOCALIZATION NOTE (CSPViolation):
# %1$S is the reason why the resource has not been loaded.
CSPViolation = The page's settings blocked the loading of a resource: %1$S
CSPViolation = The pages settings blocked the loading of a resource: %1$S
# LOCALIZATION NOTE (CSPViolationWithURI):
# %1$S is the directive that has been violated.
# %2$S is the URI of the resource which violated the directive.
CSPViolationWithURI = The page's settings blocked the loading of a resource at %2$S ("%1$S").
CSPViolationWithURI = The pages settings blocked the loading of a resource at %2$S (“%1$S”).
# LOCALIZATION NOTE (CSPROViolation):
# %1$S is the reason why the resource has not been loaded.
CSPROViolation = A violation occurred for a report-only CSP policy ("%1$S"). The behavior was allowed, and a CSP report was sent.
CSPROViolation = A violation occurred for a report-only CSP policy (“%1$S”). The behavior was allowed, and a CSP report was sent.
# LOCALIZATION NOTE (CSPROViolationWithURI):
# %1$S is the directive that has been violated.
# %2$S is the URI of the resource which violated the directive.
CSPROViolationWithURI = The page's settings observed the loading of a resource at %2$S ("%1$S"). A CSP report is being sent.
CSPROViolationWithURI = The pages settings observed the loading of a resource at %2$S (“%1$S”). A CSP report is being sent.
# LOCALIZATION NOTE (triedToSendReport):
# %1$S is the URI we attempted to send a report to.
triedToSendReport = Tried to send report to invalid URI: "%1$S"
triedToSendReport = Tried to send report to invalid URI: “%1$S”
# LOCALIZATION NOTE (couldNotParseReportURI):
# %1$S is the report URI that could not be parsed
couldNotParseReportURI = couldn't parse report URI: %1$S
couldNotParseReportURI = couldnt parse report URI: %1$S
# LOCALIZATION NOTE (couldNotProcessUnknownDirective):
# %1$S is the unknown directive
couldNotProcessUnknownDirective = Couldn't process unknown directive '%1$S'
couldNotProcessUnknownDirective = Couldnt process unknown directive %1$S
# LOCALIZATION NOTE (ignoringUnknownOption):
# %1$S is the option that could not be understood
ignoringUnknownOption = Ignoring unknown option %1$S
@ -34,11 +34,11 @@ ignoringUnknownOption = Ignoring unknown option %1$S
ignoringDuplicateSrc = Ignoring duplicate source %1$S
# LOCALIZATION NOTE (ignoringSrcFromMetaCSP):
# %1$S defines the ignored src
ignoringSrcFromMetaCSP = Ignoring source '%1$S' (Not supported when delivered via meta element).
ignoringSrcFromMetaCSP = Ignoring source %1$S (Not supported when delivered via meta element).
# LOCALIZATION NOTE (ignoringSrcWithinScriptStyleSrc):
# %1$S is the ignored src
# script-src and style-src are directive names and should not be localized
ignoringSrcWithinScriptStyleSrc = Ignoring "%1$S" within script-src or style-src: nonce-source or hash-source specified
ignoringSrcWithinScriptStyleSrc = Ignoring “%1$S” within script-src or style-src: nonce-source or hash-source specified
# LOCALIZATION NOTE (reportURInotHttpsOrHttp2):
# %1$S is the ETLD of the report URI that is not HTTP or HTTPS
reportURInotHttpsOrHttp2 = The report URI (%1$S) should be an HTTP or HTTPS URI.
@ -59,35 +59,35 @@ inlineStyleBlocked = An attempt to apply inline style sheets has been blocked
scriptFromStringBlocked = An attempt to call JavaScript from a string (by calling a function like eval) has been blocked
# LOCALIZATION NOTE (upgradeInsecureRequest):
# %1$S is the URL of the upgraded request; %2$S is the upgraded scheme.
upgradeInsecureRequest = Upgrading insecure request '%1$S' to use '%2$S'
upgradeInsecureRequest = Upgrading insecure request %1$S to use %2$S
# LOCALIZATION NOTE (ignoreSrcForDirective):
ignoreSrcForDirective = Ignoring srcs for directive '%1$S'
ignoreSrcForDirective = Ignoring srcs for directive %1$S
# LOCALIZATION NOTE (hostNameMightBeKeyword):
# %1$S is the hostname in question and %2$S is the keyword
hostNameMightBeKeyword = Interpreting %1$S as a hostname, not a keyword. If you intended this to be a keyword, use '%2$S' (wrapped in single quotes).
hostNameMightBeKeyword = Interpreting %1$S as a hostname, not a keyword. If you intended this to be a keyword, use %2$S (wrapped in single quotes).
# LOCALIZATION NOTE (notSupportingDirective):
# directive is not supported (e.g. 'reflected-xss')
notSupportingDirective = Not supporting directive '%1$S'. Directive and values will be ignored.
notSupportingDirective = Not supporting directive %1$S. Directive and values will be ignored.
# LOCALIZATION NOTE (blockAllMixedContent):
# %1$S is the URL of the blocked resource load.
blockAllMixedContent = Blocking insecure request '%1$S'.
blockAllMixedContent = Blocking insecure request %1$S.
# CSP Errors:
# LOCALIZATION NOTE (couldntParseInvalidSource):
# %1$S is the source that could not be parsed
couldntParseInvalidSource = Couldn't parse invalid source %1$S
couldntParseInvalidSource = Couldnt parse invalid source %1$S
# LOCALIZATION NOTE (couldntParseInvalidHost):
# %1$S is the host that's invalid
couldntParseInvalidHost = Couldn't parse invalid host %1$S
couldntParseInvalidHost = Couldnt parse invalid host %1$S
# LOCALIZATION NOTE (couldntParseScheme):
# %1$S is the string source
couldntParseScheme = Couldn't parse scheme in %1$S
couldntParseScheme = Couldnt parse scheme in %1$S
# LOCALIZATION NOTE (couldntParsePort):
# %1$S is the string source
couldntParsePort = Couldn't parse port in %1$S
couldntParsePort = Couldnt parse port in %1$S
# LOCALIZATION NOTE (duplicateDirective):
# %1$S is the name of the duplicate directive
duplicateDirective = Duplicate %1$S directives detected. All but the first instance will be ignored.
# LOCALIZATION NOTE (deprecatedDirective):
# %1$S is the name of the deprecated directive, %2$S is the name of the replacement.
deprecatedDirective = Directive '%1$S' has been deprecated. Please use directive '%2$S' instead.
deprecatedDirective = Directive %1$S has been deprecated. Please use directive %2$S instead.

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

@ -1,72 +1,72 @@
# Mixed Content Blocker
# LOCALIZATION NOTE: "%1$S" is the URI of the blocked mixed content resource
BlockMixedDisplayContent = Blocked loading mixed display content "%1$S"
BlockMixedActiveContent = Blocked loading mixed active content "%1$S"
BlockMixedDisplayContent = Blocked loading mixed display content “%1$S”
BlockMixedActiveContent = Blocked loading mixed active content “%1$S”
# CORS
# LOCALIZATION NOTE: Do not translate "Access-Control-Allow-Origin", Access-Control-Allow-Credentials, Access-Control-Allow-Methods, Access-Control-Allow-Headers
CORSDisabled=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS disabled).
CORSRequestNotHttp=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS request not http).
CORSMissingAllowOrigin=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
CORSAllowOriginNotMatchingOrigin=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS header 'Access-Control-Allow-Origin' does not match '%2$S').
CORSMethodNotFound=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: Did not find method in CORS header 'Access-Control-Allow-Methods').
CORSMissingAllowCredentials=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: expected 'true' in CORS header 'Access-Control-Allow-Credentials').
CORSMissingAllowOrigin=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS header Access-Control-Allow-Origin missing).
CORSAllowOriginNotMatchingOrigin=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS header Access-Control-Allow-Origin does not match %2$S).
CORSMethodNotFound=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: Did not find method in CORS header Access-Control-Allow-Methods).
CORSMissingAllowCredentials=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: expected true in CORS header Access-Control-Allow-Credentials).
CORSPreflightDidNotSucceed=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: CORS preflight channel did not succeed).
CORSInvalidAllowMethod=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: invalid token '%2$S' in CORS header 'Access-Control-Allow-Methods').
CORSInvalidAllowHeader=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: invalid token '%2$S' in CORS header 'Access-Control-Allow-Headers').
CORSMissingAllowHeaderFromPreflight=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: missing token '%2$S' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel).
CORSInvalidAllowMethod=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: invalid token %2$S in CORS header Access-Control-Allow-Methods).
CORSInvalidAllowHeader=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: invalid token %2$S in CORS header Access-Control-Allow-Headers).
CORSMissingAllowHeaderFromPreflight=Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at %1$S. (Reason: missing token %2$S in CORS header Access-Control-Allow-Headers from CORS preflight channel).
# LOCALIZATION NOTE: Do not translate "Strict-Transport-Security", "HSTS", "max-age" or "includeSubDomains"
STSUnknownError=Strict-Transport-Security: An unknown error occurred processing the header specified by the site.
STSUntrustworthyConnection=Strict-Transport-Security: The connection to the site is untrustworthy, so the specified header was ignored.
STSCouldNotParseHeader=Strict-Transport-Security: The site specified a header that could not be parsed successfully.
STSNoMaxAge=Strict-Transport-Security: The site specified a header that did not include a 'max-age' directive.
STSMultipleMaxAges=Strict-Transport-Security: The site specified a header that included multiple 'max-age' directives.
STSInvalidMaxAge=Strict-Transport-Security: The site specified a header that included an invalid 'max-age' directive.
STSMultipleIncludeSubdomains=Strict-Transport-Security: The site specified a header that included multiple 'includeSubDomains' directives.
STSInvalidIncludeSubdomains=Strict-Transport-Security: The site specified a header that included an invalid 'includeSubDomains' directive.
STSNoMaxAge=Strict-Transport-Security: The site specified a header that did not include a max-age directive.
STSMultipleMaxAges=Strict-Transport-Security: The site specified a header that included multiple max-age directives.
STSInvalidMaxAge=Strict-Transport-Security: The site specified a header that included an invalid max-age directive.
STSMultipleIncludeSubdomains=Strict-Transport-Security: The site specified a header that included multiple includeSubDomains directives.
STSInvalidIncludeSubdomains=Strict-Transport-Security: The site specified a header that included an invalid includeSubDomains directive.
STSCouldNotSaveState=Strict-Transport-Security: An error occurred noting the site as a Strict-Transport-Security host.
# LOCALIZATION NOTE: Do not translate "Public-Key-Pins", "HPKP", "max-age", "report-uri" or "includeSubDomains"
PKPUnknownError=Public-Key-Pins: An unknown error occurred processing the header specified by the site.
PKPUntrustworthyConnection=Public-Key-Pins: The connection to the site is untrustworthy, so the specified header was ignored.
PKPCouldNotParseHeader=Public-Key-Pins: The site specified a header that could not be parsed successfully.
PKPNoMaxAge=Public-Key-Pins: The site specified a header that did not include a 'max-age' directive.
PKPMultipleMaxAges=Public-Key-Pins: The site specified a header that included multiple 'max-age' directives.
PKPInvalidMaxAge=Public-Key-Pins: The site specified a header that included an invalid 'max-age' directive.
PKPMultipleIncludeSubdomains=Public-Key-Pins: The site specified a header that included multiple 'includeSubDomains' directives.
PKPInvalidIncludeSubdomains=Public-Key-Pins: The site specified a header that included an invalid 'includeSubDomains' directive.
PKPNoMaxAge=Public-Key-Pins: The site specified a header that did not include a max-age directive.
PKPMultipleMaxAges=Public-Key-Pins: The site specified a header that included multiple max-age directives.
PKPInvalidMaxAge=Public-Key-Pins: The site specified a header that included an invalid max-age directive.
PKPMultipleIncludeSubdomains=Public-Key-Pins: The site specified a header that included multiple includeSubDomains directives.
PKPInvalidIncludeSubdomains=Public-Key-Pins: The site specified a header that included an invalid includeSubDomains directive.
PKPInvalidPin=Public-Key-Pins: The site specified a header that included an invalid pin.
PKPMultipleReportURIs=Public-Key-Pins: The site specified a header that included multiple 'report-uri' directives.
PKPMultipleReportURIs=Public-Key-Pins: The site specified a header that included multiple report-uri directives.
PKPPinsetDoesNotMatch=Public-Key-Pins: The site specified a header that did not include a matching pin.
PKPNoBackupPin=Public-Key-Pins: The site specified a header that did not include a backup pin.
PKPCouldNotSaveState=Public-Key-Pins: An error occurred noting the site as a Public-Key-Pins host.
PKPRootNotBuiltIn=Public-Key-Pins: The certificate used by the site was not issued by a certificate in the default root certificate store. To prevent accidental breakage, the specified header was ignored.
# LOCALIZATION NOTE: Do not translate "SHA-1"
SHA1Sig=This site makes use of a SHA-1 Certificate; it's recommended you use certificates with signature algorithms that use hash functions stronger than SHA-1.
SHA1Sig=This site makes use of a SHA-1 Certificate; its recommended you use certificates with signature algorithms that use hash functions stronger than SHA-1.
InsecurePasswordsPresentOnPage=Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen.
InsecureFormActionPasswordsPresent=Password fields present in a form with an insecure (http://) form action. This is a security risk that allows user login credentials to be stolen.
InsecurePasswordsPresentOnIframe=Password fields present on an insecure (http://) iframe. This is a security risk that allows user login credentials to be stolen.
# LOCALIZATION NOTE: "%1$S" is the URI of the insecure mixed content resource
LoadingMixedActiveContent2=Loading mixed (insecure) active content "%1$S" on a secure page
LoadingMixedDisplayContent2=Loading mixed (insecure) display content "%1$S" on a secure page
LoadingMixedActiveContent2=Loading mixed (insecure) active content “%1$S” on a secure page
LoadingMixedDisplayContent2=Loading mixed (insecure) display content “%1$S” on a secure page
# LOCALIZATION NOTE: Do not translate "allow-scripts", "allow-same-origin", "sandbox" or "iframe"
BothAllowScriptsAndSameOriginPresent=An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can remove its sandboxing.
# Sub-Resource Integrity
# LOCALIZATION NOTE: Do not translate "script" or "integrity". "%1$S" is the invalid token found in the attribute.
MalformedIntegrityHash=The script element has a malformed hash in its integrity attribute: "%1$S". The correct format is "<hash algorithm>-<hash value>".
MalformedIntegrityHash=The script element has a malformed hash in its integrity attribute: “%1$S”. The correct format is “<hash algorithm>-<hash value>”.
# LOCALIZATION NOTE: Do not translate "integrity"
InvalidIntegrityLength=The hash contained in the integrity attribute has the wrong length.
# LOCALIZATION NOTE: Do not translate "integrity"
InvalidIntegrityBase64=The hash contained in the integrity attribute could not be decoded.
# LOCALIZATION NOTE: Do not translate "integrity". "%1$S" is the type of hash algorigthm in use (e.g. "sha256").
IntegrityMismatch=None of the "%1$S" hashes in the integrity attribute match the content of the subresource.
IntegrityMismatch=None of the “%1$S” hashes in the integrity attribute match the content of the subresource.
# LOCALIZATION NOTE: "%1$S" is the URI of the sub-resource that cannot be protected using SRI.
IneligibleResource="%1$S" is not eligible for integrity checks since it's neither CORS-enabled nor same-origin.
IneligibleResource=“%1$S” is not eligible for integrity checks since its neither CORS-enabled nor same-origin.
# LOCALIZATION NOTE: Do not translate "integrity". "%1$S" is the invalid hash algorithm found in the attribute.
UnsupportedHashAlg=Unsupported hash algorithm in the integrity attribute: "%1$S"
UnsupportedHashAlg=Unsupported hash algorithm in the integrity attribute: “%1$S”
# LOCALIZATION NOTE: Do not translate "integrity"
NoValidMetadata=The integrity attribute does not contain any valid metadata.

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

@ -16,16 +16,16 @@
12 = An XSLT stylesheet directly or indirectly imports or includes itself:
13 = An XPath function was called with the wrong number of arguments.
14 = An unknown XPath extension function was called.
15 = XPath parse failure: ')' expected:
15 = XPath parse failure: ) expected:
16 = XPath parse failure: invalid axis:
17 = XPath parse failure: Name or Nodetype test expected:
18 = XPath parse failure: ']' expected:
18 = XPath parse failure: ] expected:
19 = XPath parse failure: invalid variable name:
20 = XPath parse failure: unexpected end of expression:
21 = XPath parse failure: operator expected:
22 = XPath parse failure: unclosed literal:
23 = XPath parse failure: ':' unexpected:
24 = XPath parse failure: '!' unexpected, negation is not():
23 = XPath parse failure: : unexpected:
24 = XPath parse failure: ! unexpected, negation is not():
25 = XPath parse failure: illegal character found:
26 = XPath parse failure: binary operator expected:
27 = An XSLT stylesheet load was blocked for security reasons.

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

@ -59,7 +59,7 @@ ConsoleAPI.prototype.warn = function(aWarning) {
func: () => data.jsonText = JSON.stringify({
start_url: 42,
}),
warning: 'Expected the manifest\'s start_url member to be a string.',
warning: 'Expected the manifest\u2019s start_url member to be a string.',
},
{
func: () => data.jsonText = JSON.stringify({

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

@ -40,19 +40,19 @@ var tests = [
},
];
var results = [
[ { errorMessage: /Unknown property 'nosuchprop'/,
[ { errorMessage: /Unknown property \u2018nosuchprop\u2019/,
lineNumber: 1, columnNumber: 14,
sourceLine: "#s1{nosuchprop:auto; color:black}" },
{ errorMessage: /Unknown property 'nosuchprop'/,
{ errorMessage: /Unknown property \u2018nosuchprop\u2019/,
lineNumber: 2, columnNumber: 14, sourceLine:
"#s2{nosuchprop:auto; color:black}invalid?sel{}#s3{color:black}" },
{ errorMessage: /Ruleset ignored due to bad selector/,
lineNumber: 2, columnNumber: 40, sourceLine:
"#s2{nosuchprop:auto; color:black}invalid?sel{}#s3{color:black}" } ],
[ { errorMessage: /parsing value for 'width'/,
[ { errorMessage: /parsing value for \u2018width\u2019/,
lineNumber: 0, columnNumber: 6,
sourceLine: "width:200;color:black" } ],
[ { errorMessage: /parsing value for 'width'/,
[ { errorMessage: /parsing value for \u2018width\u2019/,
lineNumber: 0, columnNumber: 0,
sourceLine: "200" } ],
];

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

@ -26,26 +26,26 @@
const patterns = [
// REPORT_UNEXPECTED_P (only ever used in contexts where identifier-like
// escaping is appropriate)
{ i: "<t>|x{}", o: "prefix '<i>'" },
{ i: "<t>|x{}", o: "prefix \u2018<i>\u2019" },
// REPORT_UNEXPECTED_TOKEN with:
// _Ident
{ i: "@namespace fnord <t>;", o: "within @namespace: '<i>'" },
{ i: "@namespace fnord <t>;", o: "within @namespace: \u2018<i>\u2019" },
// _Ref
{ i: "@namespace fnord #<t>;", o: "within @namespace: '#<i>'" },
{ i: "@namespace fnord #<t>;", o: "within @namespace: \u2018#<i>\u2019" },
// _Function
{ i: "@namespace fnord <t>();", o: "within @namespace: '<i>('" },
{ i: "@namespace fnord <t>();", o: "within @namespace: \u2018<i>(\u2019" },
// _Dimension
{ i: "@namespace fnord 14<t>;", o: "within @namespace: '14<i>'" },
{ i: "@namespace fnord 14<t>;", o: "within @namespace: \u201814<i>\u2019" },
// _AtKeyword
{ i: "x{@<t>: }", o: "declaration but found '@<i>'." },
{ i: "x{@<t>: }", o: "declaration but found \u2018@<i>\u2019." },
// _String
{ i: "x{ '<t>'}" , o: "declaration but found ''<s>''." },
{ i: "x{ '<t>'}" , o: "declaration but found \u2018'<s>'\u2019." },
// _Bad_String
{ i: "x{ '<t>\n}", o: "declaration but found ''<s>'." },
{ i: "x{ '<t>\n}", o: "declaration but found \u2018'<s>\u2019." },
// _URL
{ i: "x{ url('<t>')}", o: "declaration but found 'url('<s>')'." },
{ i: "x{ url('<t>')}", o: "declaration but found \u2018url('<s>')\u2019." },
// _Bad_URL
{ i: "x{ url('<t>'.)}" , o: "declaration but found 'url('<s>''." }
{ i: "x{ url('<t>'.)}" , o: "declaration but found \u2018url('<s>'\u2019." }
];
// Blocks of characters to test, and how they should be escaped when

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

@ -341,7 +341,12 @@ public class BrowserApp extends GeckoApp
switch (msg) {
case SELECTED:
if (Tabs.getInstance().isSelectedTab(tab) && mDynamicToolbar.isEnabled()) {
mDynamicToolbar.setVisible(true, VisibilityTransition.ANIMATE);
final VisibilityTransition transition = (tab.getShouldShowToolbarWithoutAnimationOnFirstSelection()) ?
VisibilityTransition.IMMEDIATE : VisibilityTransition.ANIMATE;
mDynamicToolbar.setVisible(true, transition);
// The first selection has happened - reset the state.
tab.setShouldShowToolbarWithoutAnimationOnFirstSelection(false);
}
// fall through
case LOCATION_CHANGE:

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

@ -208,6 +208,8 @@ public abstract class GeckoApp
private Intent mRestartIntent;
private boolean mWasFirstTabShownAfterActivityUnhidden;
abstract public int getLayout();
protected void processTabQueue() {};
@ -1343,6 +1345,12 @@ public abstract class GeckoApp
IntentHelper.init(this);
}
@Override
public void onStart() {
super.onStart();
mWasFirstTabShownAfterActivityUnhidden = false; // onStart indicates we were hidden.
}
/**
* At this point, the resource system and the rest of the browser are
* aware of the locale.
@ -1434,6 +1442,9 @@ public abstract class GeckoApp
private void initialize() {
mInitialized = true;
final boolean isFirstTab = !mWasFirstTabShownAfterActivityUnhidden;
mWasFirstTabShownAfterActivityUnhidden = true; // Reset since we'll be loading a tab.
final SafeIntent intent = new SafeIntent(getIntent());
final String action = intent.getAction();
@ -1491,6 +1502,9 @@ public abstract class GeckoApp
if (ACTION_HOMESCREEN_SHORTCUT.equals(action)) {
flags |= Tabs.LOADURL_PINNED;
}
if (isFirstTab) {
flags |= Tabs.LOADURL_FIRST_AFTER_ACTIVITY_UNHIDDEN;
}
loadStartupTab(passedUri, intent, flags);
}
});
@ -1886,6 +1900,9 @@ public abstract class GeckoApp
protected void onNewIntent(Intent externalIntent) {
final SafeIntent intent = new SafeIntent(externalIntent);
final boolean isFirstTab = !mWasFirstTabShownAfterActivityUnhidden;
mWasFirstTabShownAfterActivityUnhidden = true; // Reset since we'll be loading a tab.
// if we were previously OOM killed, we can end up here when launching
// from external shortcuts, so set this as the intent for initialization
if (!mInitialized) {
@ -1910,9 +1927,11 @@ public abstract class GeckoApp
@Override
public void run() {
final String url = intent.getDataString();
Tabs.getInstance().loadUrlWithIntentExtras(url, intent, Tabs.LOADURL_NEW_TAB |
Tabs.LOADURL_USER_ENTERED |
Tabs.LOADURL_EXTERNAL);
int flags = Tabs.LOADURL_NEW_TAB | Tabs.LOADURL_USER_ENTERED | Tabs.LOADURL_EXTERNAL;
if (isFirstTab) {
flags |= Tabs.LOADURL_FIRST_AFTER_ACTIVITY_UNHIDDEN;
}
Tabs.getInstance().loadUrlWithIntentExtras(url, intent, flags);
}
});
} else if (ACTION_HOMESCREEN_SHORTCUT.equals(action)) {

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

@ -64,6 +64,8 @@ public class Tab {
private SiteLogins mSiteLogins;
private BitmapDrawable mThumbnail;
private final int mParentId;
// Indicates the url was loaded from a source external to the app. This will be cleared
// when the user explicitly loads a new url (e.g. clicking a link is not explicit).
private final boolean mExternal;
private boolean mBookmark;
private int mFaviconLoadId;
@ -84,6 +86,7 @@ public class Tab {
private volatile int mRecordingCount;
private volatile boolean mIsAudioPlaying;
private String mMostRecentHomePanel;
private boolean mShouldShowToolbarWithoutAnimationOnFirstSelection;
private int mHistoryIndex;
private int mHistorySize;
@ -897,4 +900,12 @@ public class Tab {
public TabEditingState getEditingState() {
return mEditingState;
}
public void setShouldShowToolbarWithoutAnimationOnFirstSelection(final boolean shouldShowWithoutAnimation) {
mShouldShowToolbarWithoutAnimationOnFirstSelection = shouldShowWithoutAnimation;
}
public boolean getShouldShowToolbarWithoutAnimationOnFirstSelection() {
return mShouldShowToolbarWithoutAnimationOnFirstSelection;
}
}

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

@ -63,7 +63,10 @@ public class Tabs implements GeckoEventListener {
public static final int LOADURL_DELAY_LOAD = 1 << 4;
public static final int LOADURL_DESKTOP = 1 << 5;
public static final int LOADURL_BACKGROUND = 1 << 6;
/** Indicates the url has been specified by a source external to the app. */
public static final int LOADURL_EXTERNAL = 1 << 7;
/** Indicates the tab is the first shown after Firefox is hidden and restored. */
public static final int LOADURL_FIRST_AFTER_ACTIVITY_UNHIDDEN = 1 << 8;
private static final long PERSIST_TABS_AFTER_MILLISECONDS = 1000 * 2;
@ -833,6 +836,7 @@ public class Tabs implements GeckoEventListener {
boolean userEntered = (flags & LOADURL_USER_ENTERED) != 0;
boolean desktopMode = (flags & LOADURL_DESKTOP) != 0;
boolean external = (flags & LOADURL_EXTERNAL) != 0;
final boolean isFirstShownAfterActivityUnhidden = (flags & LOADURL_FIRST_AFTER_ACTIVITY_UNHIDDEN) != 0;
args.put("url", url);
args.put("engine", searchEngine);
@ -893,6 +897,11 @@ public class Tabs implements GeckoEventListener {
tabToSelect = addTab(tabId, tabUrl, external, parentId, url, isPrivate, tabIndex);
tabToSelect.setDesktopMode(desktopMode);
tabToSelect.setApplicationId(applicationId);
if (isFirstShownAfterActivityUnhidden) {
// We just opened Firefox so we want to show
// the toolbar but not animate it to avoid jank.
tabToSelect.setShouldShowToolbarWithoutAnimationOnFirstSelection(true);
}
}
} catch (Exception e) {
Log.w(LOGTAG, "Error building JSON arguments for loadUrl.", e);

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 598 B

После

Ширина:  |  Высота:  |  Размер: 445 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 688 B

После

Ширина:  |  Высота:  |  Размер: 531 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 994 B

После

Ширина:  |  Высота:  |  Размер: 712 B

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

@ -33,16 +33,16 @@ DirColSize=Size
DirColMTime=Last Modified
DirFileLabel=File:
PhishingAuth=You are about to visit "%1$S". This site may be attempting to trick you into thinking you are visiting a different site. Use extreme caution.
PhishingAuth=You are about to visit “%1$S”. This site may be attempting to trick you into thinking you are visiting a different site. Use extreme caution.
PhishingAuthAccept=I understand and will be very careful
SuperfluousAuth=You are about to log in to the site "%1$S" with the username "%2$S", but the website does not require authentication. This may be an attempt to trick you.\n\nIs "%1$S" the site you want to visit?
AutomaticAuth=You are about to log in to the site "%1$S" with the username "%2$S".
SuperfluousAuth=You are about to log in to the site “%1$S” with the username “%2$S”, but the website does not require authentication. This may be an attempt to trick you.\n\nIs “%1$S” the site you want to visit?
AutomaticAuth=You are about to log in to the site “%1$S” with the username “%2$S”.
TrackingUriBlocked=The resource at "%1$S" was blocked because tracking protection is enabled.
TrackingUriBlocked=The resource at “%1$S” was blocked because tracking protection is enabled.
# LOCALIZATION NOTE (APIDeprecationWarning):
# %1$S is the deprected API; %2$S is the API function that should be used.
APIDeprecationWarning=Warning: '%1$S' deprecated, please use '%2$S'
APIDeprecationWarning=Warning: %1$S deprecated, please use %2$S
# LOCALIZATION NOTE (nsICookieManagerRemoveDeprecated): don't localize nsICookieManager.remove() and originAttributes.
nsICookieManagerRemoveDeprecated=“nsICookieManager.remove()” is changed. Update your code and pass the correct originAttributes. Read more on MDN: https://developer.mozilla.org/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsICookieManager

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

@ -6,13 +6,13 @@ SSL_ERROR_EXPORT_ONLY_SERVER=Unable to communicate securely. Peer does not suppo
SSL_ERROR_US_ONLY_SERVER=Unable to communicate securely. Peer requires high-grade encryption which is not supported.
SSL_ERROR_NO_CYPHER_OVERLAP=Cannot communicate securely with peer: no common encryption algorithm(s).
SSL_ERROR_NO_CERTIFICATE=Unable to find the certificate or key necessary for authentication.
SSL_ERROR_BAD_CERTIFICATE=Unable to communicate securely with peer: peers's certificate was rejected.
SSL_ERROR_BAD_CERTIFICATE=Unable to communicate securely with peer: peerss certificate was rejected.
SSL_ERROR_BAD_CLIENT=The server has encountered bad data from the client.
SSL_ERROR_BAD_SERVER=The client has encountered bad data from the server.
SSL_ERROR_UNSUPPORTED_CERTIFICATE_TYPE=Unsupported certificate type.
SSL_ERROR_UNSUPPORTED_VERSION=Peer using unsupported version of security protocol.
SSL_ERROR_WRONG_CERTIFICATE=Client authentication failed: private key in key database does not match public key in certificate database.
SSL_ERROR_BAD_CERT_DOMAIN=Unable to communicate securely with peer: requested domain name does not match the server's certificate.
SSL_ERROR_BAD_CERT_DOMAIN=Unable to communicate securely with peer: requested domain name does not match the servers certificate.
SSL_ERROR_POST_WARNING=Unrecognized SSL error code.
SSL_ERROR_SSL2_DISABLED=Peer only supports SSL version 2, which is locally disabled.
SSL_ERROR_BAD_MAC_READ=SSL received a record with an incorrect Message Authentication Code.
@ -67,7 +67,7 @@ SSL_ERROR_UNSUPPORTED_CERT_ALERT=SSL peer does not support certificates of the t
SSL_ERROR_CERTIFICATE_UNKNOWN_ALERT=SSL peer had some unspecified issue with the certificate it received.
SSL_ERROR_GENERATE_RANDOM_FAILURE=SSL experienced a failure of its random number generator.
SSL_ERROR_SIGN_HASHES_FAILURE=Unable to digitally sign data required to verify your certificate.
SSL_ERROR_EXTRACT_PUBLIC_KEY_FAILURE=SSL was unable to extract the public key from the peer's certificate.
SSL_ERROR_EXTRACT_PUBLIC_KEY_FAILURE=SSL was unable to extract the public key from the peers certificate.
SSL_ERROR_SERVER_KEY_EXCHANGE_FAILURE=Unspecified failure while processing SSL Server Key Exchange handshake.
SSL_ERROR_CLIENT_KEY_EXCHANGE_FAILURE=Unspecified failure while processing SSL Client Key Exchange handshake.
SSL_ERROR_ENCRYPTION_FAILURE=Bulk data encryption algorithm failed in selected cipher suite.
@ -90,7 +90,7 @@ SSL_ERROR_HANDSHAKE_NOT_COMPLETED=Cannot initiate another SSL handshake until cu
SSL_ERROR_BAD_HANDSHAKE_HASH_VALUE=Received incorrect handshakes hash values from peer.
SSL_ERROR_CERT_KEA_MISMATCH=The certificate provided cannot be used with the selected key exchange algorithm.
SSL_ERROR_NO_TRUSTED_SSL_CLIENT_CA=No certificate authority is trusted for SSL client authentication.
SSL_ERROR_SESSION_NOT_FOUND=Client's SSL session ID not found in server's session cache.
SSL_ERROR_SESSION_NOT_FOUND=Clients SSL session ID not found in servers session cache.
SSL_ERROR_DECRYPTION_FAILED_ALERT=Peer was unable to decrypt an SSL record it received.
SSL_ERROR_RECORD_OVERFLOW_ALERT=Peer received an SSL record that was longer than is permitted.
SSL_ERROR_UNKNOWN_CA_ALERT=Peer does not recognize and trust the CA that issued your certificate.
@ -148,29 +148,29 @@ SEC_ERROR_INVALID_ALGORITHM=security library: invalid algorithm.
SEC_ERROR_INVALID_AVA=security library: invalid AVA.
SEC_ERROR_INVALID_TIME=Improperly formatted time string.
SEC_ERROR_BAD_DER=security library: improperly formatted DER-encoded message.
SEC_ERROR_BAD_SIGNATURE=Peer's certificate has an invalid signature.
SEC_ERROR_EXPIRED_CERTIFICATE=Peer's Certificate has expired.
SEC_ERROR_REVOKED_CERTIFICATE=Peer's Certificate has been revoked.
SEC_ERROR_UNKNOWN_ISSUER=Peer's Certificate issuer is not recognized.
SEC_ERROR_BAD_KEY=Peer's public key is invalid.
SEC_ERROR_BAD_SIGNATURE=Peers certificate has an invalid signature.
SEC_ERROR_EXPIRED_CERTIFICATE=Peers Certificate has expired.
SEC_ERROR_REVOKED_CERTIFICATE=Peers Certificate has been revoked.
SEC_ERROR_UNKNOWN_ISSUER=Peers Certificate issuer is not recognized.
SEC_ERROR_BAD_KEY=Peers public key is invalid.
SEC_ERROR_BAD_PASSWORD=The security password entered is incorrect.
SEC_ERROR_RETRY_PASSWORD=New password entered incorrectly. Please try again.
SEC_ERROR_NO_NODELOCK=security library: no nodelock.
SEC_ERROR_BAD_DATABASE=security library: bad database.
SEC_ERROR_NO_MEMORY=security library: memory allocation failure.
SEC_ERROR_UNTRUSTED_ISSUER=Peer's certificate issuer has been marked as not trusted by the user.
SEC_ERROR_UNTRUSTED_CERT=Peer's certificate has been marked as not trusted by the user.
SEC_ERROR_UNTRUSTED_ISSUER=Peers certificate issuer has been marked as not trusted by the user.
SEC_ERROR_UNTRUSTED_CERT=Peers certificate has been marked as not trusted by the user.
SEC_ERROR_DUPLICATE_CERT=Certificate already exists in your database.
SEC_ERROR_DUPLICATE_CERT_NAME=Downloaded certificate's name duplicates one already in your database.
SEC_ERROR_DUPLICATE_CERT_NAME=Downloaded certificates name duplicates one already in your database.
SEC_ERROR_ADDING_CERT=Error adding certificate to database.
SEC_ERROR_FILING_KEY=Error refiling the key for this certificate.
SEC_ERROR_NO_KEY=The private key for this certificate cannot be found in key database
SEC_ERROR_CERT_VALID=This certificate is valid.
SEC_ERROR_CERT_NOT_VALID=This certificate is not valid.
SEC_ERROR_CERT_NO_RESPONSE=Cert Library: No Response
SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE=The certificate issuer's certificate has expired. Check your system date and time.
SEC_ERROR_CRL_EXPIRED=The CRL for the certificate's issuer has expired. Update it or check your system date and time.
SEC_ERROR_CRL_BAD_SIGNATURE=The CRL for the certificate's issuer has an invalid signature.
SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE=The certificate issuers certificate has expired. Check your system date and time.
SEC_ERROR_CRL_EXPIRED=The CRL for the certificates issuer has expired. Update it or check your system date and time.
SEC_ERROR_CRL_BAD_SIGNATURE=The CRL for the certificates issuer has an invalid signature.
SEC_ERROR_CRL_INVALID=New CRL has an invalid format.
SEC_ERROR_EXTENSION_VALUE_INVALID=Certificate extension value is invalid.
SEC_ERROR_EXTENSION_NOT_FOUND=Certificate extension not found.
@ -195,11 +195,11 @@ XP_SEC_FORTEZZA_MORE_INFO=Please select a personality to get more info on
XP_SEC_FORTEZZA_PERSON_NOT_FOUND=Personality not found
XP_SEC_FORTEZZA_NO_MORE_INFO=No more information on that Personality
XP_SEC_FORTEZZA_BAD_PIN=Invalid Pin
XP_SEC_FORTEZZA_PERSON_ERROR=Couldn't initialize Fortezza personalities.
SEC_ERROR_NO_KRL=No KRL for this site's certificate has been found.
SEC_ERROR_KRL_EXPIRED=The KRL for this site's certificate has expired.
SEC_ERROR_KRL_BAD_SIGNATURE=The KRL for this site's certificate has an invalid signature.
SEC_ERROR_REVOKED_KEY=The key for this site's certificate has been revoked.
XP_SEC_FORTEZZA_PERSON_ERROR=Couldnt initialize Fortezza personalities.
SEC_ERROR_NO_KRL=No KRL for this sites certificate has been found.
SEC_ERROR_KRL_EXPIRED=The KRL for this sites certificate has expired.
SEC_ERROR_KRL_BAD_SIGNATURE=The KRL for this sites certificate has an invalid signature.
SEC_ERROR_REVOKED_KEY=The key for this sites certificate has been revoked.
SEC_ERROR_KRL_INVALID=New KRL has an invalid format.
SEC_ERROR_NEED_RANDOM=security library: need random data.
SEC_ERROR_NO_MODULE=security library: no security module can perform the requested operation.
@ -210,9 +210,9 @@ SEC_ERROR_CERT_NICKNAME_COLLISION=A certificate with the same nickname already e
SEC_ERROR_KEY_NICKNAME_COLLISION=A key with the same nickname already exists.
SEC_ERROR_SAFE_NOT_CREATED=error while creating safe object
SEC_ERROR_BAGGAGE_NOT_CREATED=error while creating baggage object
XP_JAVA_REMOVE_PRINCIPAL_ERROR=Couldn't remove the principal
XP_JAVA_DELETE_PRIVILEGE_ERROR=Couldn't delete the privilege
XP_JAVA_CERT_NOT_EXISTS_ERROR=This principal doesn't have a certificate
XP_JAVA_REMOVE_PRINCIPAL_ERROR=Couldnt remove the principal
XP_JAVA_DELETE_PRIVILEGE_ERROR=Couldnt delete the privilege
XP_JAVA_CERT_NOT_EXISTS_ERROR=This principal doesnt have a certificate
SEC_ERROR_BAD_EXPORT_ALGORITHM=Required algorithm is not allowed.
SEC_ERROR_EXPORTING_CERTIFICATES=Error attempting to export certificates.
SEC_ERROR_IMPORTING_CERTIFICATES=Error attempting to import certificates.
@ -254,7 +254,7 @@ SEC_ERROR_CERT_NOT_IN_NAME_SPACE=The Certifying Authority for this certificate i
SEC_ERROR_KRL_NOT_YET_VALID=The key revocation list for this certificate is not yet valid.
SEC_ERROR_CRL_NOT_YET_VALID=The certificate revocation list for this certificate is not yet valid.
SEC_ERROR_UNKNOWN_CERT=The requested certificate could not be found.
SEC_ERROR_UNKNOWN_SIGNER=The signer's certificate could not be found.
SEC_ERROR_UNKNOWN_SIGNER=The signers certificate could not be found.
SEC_ERROR_CERT_BAD_ACCESS_LOCATION=The location for the certificate status server has invalid format.
SEC_ERROR_OCSP_UNKNOWN_RESPONSE_TYPE=The OCSP response cannot be fully decoded; it is of an unknown type.
SEC_ERROR_OCSP_BAD_HTTP_RESPONSE=The OCSP server returned unexpected/invalid HTTP data.
@ -283,18 +283,18 @@ SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE=Unsupported elliptic curve.
SEC_ERROR_UNSUPPORTED_EC_POINT_FORM=Unsupported elliptic curve point form.
SEC_ERROR_UNRECOGNIZED_OID=Unrecognized Object Identifier.
SEC_ERROR_OCSP_INVALID_SIGNING_CERT=Invalid OCSP signing certificate in OCSP response.
SEC_ERROR_REVOKED_CERTIFICATE_CRL=Certificate is revoked in issuer's certificate revocation list.
SEC_ERROR_REVOKED_CERTIFICATE_OCSP=Issuer's OCSP responder reports certificate is revoked.
SEC_ERROR_CRL_INVALID_VERSION=Issuer's Certificate Revocation List has an unknown version number.
SEC_ERROR_CRL_V1_CRITICAL_EXTENSION=Issuer's V1 Certificate Revocation List has a critical extension.
SEC_ERROR_CRL_UNKNOWN_CRITICAL_EXTENSION=Issuer's V2 Certificate Revocation List has an unknown critical extension.
SEC_ERROR_REVOKED_CERTIFICATE_CRL=Certificate is revoked in issuers certificate revocation list.
SEC_ERROR_REVOKED_CERTIFICATE_OCSP=Issuers OCSP responder reports certificate is revoked.
SEC_ERROR_CRL_INVALID_VERSION=Issuers Certificate Revocation List has an unknown version number.
SEC_ERROR_CRL_V1_CRITICAL_EXTENSION=Issuers V1 Certificate Revocation List has a critical extension.
SEC_ERROR_CRL_UNKNOWN_CRITICAL_EXTENSION=Issuers V2 Certificate Revocation List has an unknown critical extension.
SEC_ERROR_UNKNOWN_OBJECT_TYPE=Unknown object type specified.
SEC_ERROR_INCOMPATIBLE_PKCS11=PKCS #11 driver violates the spec in an incompatible way.
SEC_ERROR_NO_EVENT=No new slot event is available at this time.
SEC_ERROR_CRL_ALREADY_EXISTS=CRL already exists.
SEC_ERROR_NOT_INITIALIZED=NSS is not initialized.
SEC_ERROR_TOKEN_NOT_LOGGED_IN=The operation failed because the PKCS#11 token is not logged in.
SEC_ERROR_OCSP_RESPONDER_CERT_INVALID=Configured OCSP responder's certificate is invalid.
SEC_ERROR_OCSP_RESPONDER_CERT_INVALID=Configured OCSP responders certificate is invalid.
SEC_ERROR_OCSP_BAD_SIGNATURE=OCSP response has an invalid signature.
SEC_ERROR_OUT_OF_SEARCH_LIMITS=Cert validation search is out of search limits
SEC_ERROR_INVALID_POLICY_MAPPING=Policy mapping contains anypolicy
@ -318,9 +318,9 @@ SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED=The certificate was signed using a s
MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE=The server uses key pinning (HPKP) but no trusted certificate chain could be constructed that matches the pinset. Key pinning violations cannot be overridden.
MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY=The server uses a certificate with a basic constraints extension identifying it as a certificate authority. For a properly-issued certificate, this should not be the case.
MOZILLA_PKIX_ERROR_INADEQUATE_KEY_SIZE=The server presented a certificate with a key size that is too small to establish a secure connection.
MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA=An X.509 version 1 certificate that is not a trust anchor was used to issue the server's certificate. X.509 version 1 certificates are deprecated and should not be used to sign other certificates.
MOZILLA_PKIX_ERROR_V1_CERT_USED_AS_CA=An X.509 version 1 certificate that is not a trust anchor was used to issue the servers certificate. X.509 version 1 certificates are deprecated and should not be used to sign other certificates.
MOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE=The server presented a certificate that is not yet valid.
MOZILLA_PKIX_ERROR_NOT_YET_VALID_ISSUER_CERTIFICATE=A certificate that is not yet valid was used to issue the server's certificate.
MOZILLA_PKIX_ERROR_NOT_YET_VALID_ISSUER_CERTIFICATE=A certificate that is not yet valid was used to issue the servers certificate.
MOZILLA_PKIX_ERROR_SIGNATURE_ALGORITHM_MISMATCH=The signature algorithm in the signature field of the certificate does not match the algorithm in its signatureAlgorithm field.
MOZILLA_PKIX_ERROR_OCSP_RESPONSE_FOR_CERT_MISSING=The OCSP response does not include a status for the certificate being verified.
MOZILLA_PKIX_ERROR_VALIDITY_TOO_LONG=The server presented a certificate that is valid for too long.

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

@ -49,7 +49,7 @@ VerifyStatusResponder=Status Responder Certificate
HighGrade=High Grade
MediumGrade=Medium Grade
# LOCALIZATION NOTE (nick_template): $1s is the common name from a cert (e.g. "Mozilla"), $2s is the CA name (e.g. VeriSign)
nick_template=%1$s's %2$s ID
nick_template=%1$ss %2$s ID
#These are the strings set for the ASN1 objects in a certificate.
CertDumpCertificate=Certificate
CertDumpVersion=Version
@ -89,7 +89,7 @@ CertDumpRSAPSSSignature=PKCS #1 RSASSA-PSS Signature
CertDumpRSATemplate=Modulus (%S bits):\n%S\nExponent (%S bits):\n%S
CertDumpECTemplate=Key size: %S bits\nBase point order length: %S bits\nPublic value:\n%S
CertDumpIssuerUniqueID=Issuer Unique ID
CertDumpSubjPubKey=Subject's Public Key
CertDumpSubjPubKey=Subjects Public Key
CertDumpSubjectUniqueID=Subject Unique ID
CertDumpExtensions=Extensions
CertDumpSubjectDirectoryAttr=Certificate Subject Directory Attributes
@ -261,8 +261,8 @@ DelModuleWarning=Are you sure you want to delete this security module?
DelModuleError=Unable to delete module
AVATemplate=%S = %S
PSMERR_SSL_Disabled=Can't connect securely because the SSL protocol has been disabled.
PSMERR_SSL2_Disabled=Can't connect securely because the site uses an older, insecure version of the SSL protocol.
PSMERR_SSL_Disabled=Cant connect securely because the SSL protocol has been disabled.
PSMERR_SSL2_Disabled=Cant connect securely because the site uses an older, insecure version of the SSL protocol.
PSMERR_HostReusedIssuerSerial=You have received an invalid certificate. Please contact the server administrator or email correspondent and give them the following information:\n\nYour certificate contains the same serial number as another certificate issued by the certificate authority. Please get a new certificate containing a unique serial number.
SSLConnectionErrorPrefix=An error occurred during a connection to %S.
@ -320,9 +320,9 @@ CertNoEmailAddress=(no email address)
NicknameExpired=(expired)
NicknameNotYetValid=(not yet valid)
CaCertExists=This certificate is already installed as a certificate authority.
NotACACert=This is not a certificate authority certificate, so it can't be imported into the certificate authority list.
NotImportingUnverifiedCert=This certificate can't be verified and will not be imported. The certificate issuer might be unknown or untrusted, the certificate might have expired or been revoked, or the certificate might not have been approved.
UserCertIgnoredNoPrivateKey=This personal certificate can't be installed because you do not own the corresponding private key which was created when the certificate was requested.
NotACACert=This is not a certificate authority certificate, so it cant be imported into the certificate authority list.
NotImportingUnverifiedCert=This certificate cant be verified and will not be imported. The certificate issuer might be unknown or untrusted, the certificate might have expired or been revoked, or the certificate might not have been approved.
UserCertIgnoredNoPrivateKey=This personal certificate cant be installed because you do not own the corresponding private key which was created when the certificate was requested.
UserCertImported=Your personal certificate has been installed. You should keep a backup copy of this certificate.
CertOrgUnknown=(Unknown)
CertNotStored=(Not Stored)

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

@ -7,11 +7,11 @@ CertPassPrompt=Please enter the Personal Security Password for the PSM Private K
#These are for dialogs
#Download Cert dialog
newCAMessage1=Do you want to trust "%S" for the following purposes?
newCAMessage1=Do you want to trust “%S” for the following purposes?
unnamedCA=Certificate Authority (unnamed)
#For editing cert trust
editTrustCA=The certificate "%S" represents a Certificate Authority.
editTrustCA=The certificate “%S” represents a Certificate Authority.
#For Deleting Certificates
deleteSslCertConfirm3=Are you sure you want to delete these server exceptions?
@ -26,8 +26,8 @@ deleteCaCertConfirm2=You have requested to delete these CA certificates. For bui
deleteCaCertImpactX2=If you delete or distrust a certificate authority (CA) certificate, this application will no longer trust any certificates issued by that CA.
deleteCaCertTitle2=Delete or Distrust CA Certificates
deleteEmailCertConfirm=Are you sure you want to delete these people's e-mail certificates?
deleteEmailCertImpactDesc=If you delete a person's e-mail certificate, you will no longer be able to send encrypted e-mail to that person.
deleteEmailCertConfirm=Are you sure you want to delete these peoples e-mail certificates?
deleteEmailCertImpactDesc=If you delete a persons e-mail certificate, you will no longer be able to send encrypted e-mail to that person.
deleteEmailCertTitle=Delete E-Mail Certificates
deleteOrphanCertConfirm=Are you sure you want to delete these certificates?
@ -52,8 +52,8 @@ certNotVerified_AlgorithmDisabled=Could not verify this certificate because it w
certNotVerified_Unknown=Could not verify this certificate for unknown reasons.
#Client auth
clientAuthMessage1=Organization: "%S"
clientAuthMessage2=Issued Under: "%S"
clientAuthMessage1=Organization: “%S”
clientAuthMessage2=Issued Under: “%S”
#Page Info
pageInfo_NoEncryption=Connection Not Encrypted
@ -70,7 +70,7 @@ pageInfo_Privacy_Encrypted1=The page you are viewing was encrypted before being
pageInfo_Privacy_Encrypted2=Encryption makes it difficult for unauthorized people to view information traveling between computers. It is therefore unlikely that anyone read this page as it traveled across the network.
pageInfo_MixedContent=Connection Partially Encrypted
pageInfo_MixedContent2=Parts of the page you are viewing were not encrypted before being transmitted over the Internet.
pageInfo_WeakCipher=Your connection to this website uses weak encryption and is not private. Other people can view your information or modify the website's behavior.
pageInfo_WeakCipher=Your connection to this website uses weak encryption and is not private. Other people can view your information or modify the websites behavior.
#Cert Viewer
certDetails=Certificate Viewer:
@ -111,7 +111,7 @@ resetPasswordConfirmationTitle=Reset Master Password
resetPasswordConfirmationMessage=Your password has been reset.
# Import certificate(s) file dialog
importEmailCertPrompt=Select File containing somebody's Email certificate to import
importEmailCertPrompt=Select File containing somebodys Email certificate to import
importCACertsPrompt=Select File containing CA certificate(s) to import
file_browse_Certificate_spec=Certificate Files
@ -123,7 +123,7 @@ CertFormatDER=X.509 Certificate (DER)
CertFormatPKCS7=X.509 Certificate (PKCS#7)
CertFormatPKCS7Chain=X.509 Certificate with chain (PKCS#7)
writeFileFailure=File Error
writeFileFailed=Can't write to file %S:\n%S.
writeFileFailed=Cant write to file %S:\n%S.
writeFileAccessDenied=Access denied
writeFileIsLocked=File is locked
writeFileNoDeviceSpace=No space left on device
@ -137,7 +137,7 @@ addExceptionDomainMismatchLong2=The certificate belongs to a different site, whi
addExceptionExpiredShort=Outdated Information
addExceptionExpiredLong2=The certificate is not currently valid. It may have been stolen or lost, and could be used by someone to impersonate this site.
addExceptionUnverifiedOrBadSignatureShort=Unknown Identity
addExceptionUnverifiedOrBadSignatureLong2=The certificate is not trusted because it hasn't been verified as issued by a trusted authority using a secure signature.
addExceptionUnverifiedOrBadSignatureLong2=The certificate is not trusted because it hasnt been verified as issued by a trusted authority using a secure signature.
addExceptionValidShort=Valid Certificate
addExceptionValidLong=This site provides valid, verified identification. There is no need to add an exception.
addExceptionCheckingShort=Checking Information

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

@ -1115,4 +1115,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1469879431521000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1470483951024000);

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -20,8 +20,8 @@ weak-password = Use a stronger password
# this is the fallback, if we hit an error we didn't bother to localize
error.reason.unknown = Unknown error
change.password.pwSameAsPassword = Password can't match current password
change.password.pwSameAsUsername = Password can't match your user name
change.password.pwSameAsEmail = Password can't match your email address
change.password.pwSameAsPassword = Password cant match current password
change.password.pwSameAsUsername = Password cant match your user name
change.password.pwSameAsEmail = Password cant match your email address
change.password.mismatch = The passwords entered do not match
change.password.tooShort = The password entered is too short

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

@ -22,10 +22,10 @@ add_task(function* test_csp_validator() {
null);
checkPolicy("",
"Policy is missing a required 'script-src' directive");
"Policy is missing a required \u2018script-src\u2019 directive");
checkPolicy("object-src 'none';",
"Policy is missing a required 'script-src' directive");
"Policy is missing a required \u2018script-src\u2019 directive");
checkPolicy("default-src 'self'", null,
@ -39,25 +39,25 @@ add_task(function* test_csp_validator() {
checkPolicy("default-src 'self'; script-src http://example.com",
"'script-src' directive contains a forbidden http: protocol source",
"\u2018script-src\u2019 directive contains a forbidden http: protocol source",
"A valid default-src should not allow an invalid script-src directive");
checkPolicy("default-src 'self'; object-src http://example.com",
"'object-src' directive contains a forbidden http: protocol source",
"\u2018object-src\u2019 directive contains a forbidden http: protocol source",
"A valid default-src should not allow an invalid object-src directive");
checkPolicy("script-src 'self';",
"Policy is missing a required 'object-src' directive");
"Policy is missing a required \u2018object-src\u2019 directive");
checkPolicy("script-src 'none'; object-src 'none'",
"'script-src' must include the source 'self'");
"\u2018script-src\u2019 must include the source 'self'");
checkPolicy("script-src 'self'; object-src 'none';",
null);
checkPolicy("script-src 'self' 'unsafe-inline'; object-src 'self';",
"'script-src' directive contains a forbidden 'unsafe-inline' keyword");
"\u2018script-src\u2019 directive contains a forbidden 'unsafe-inline' keyword");
let directives = ["script-src", "object-src"];
@ -65,21 +65,21 @@ add_task(function* test_csp_validator() {
for (let [directive, other] of [directives, directives.slice().reverse()]) {
for (let src of ["https://*", "https://*.blogspot.com", "https://*"]) {
checkPolicy(`${directive} 'self' ${src}; ${other} 'self';`,
`https: wildcard sources in '${directive}' directives must include at least one non-generic sub-domain (e.g., *.example.com rather than *.com)`);
`https: wildcard sources in \u2018${directive}\u2019 directives must include at least one non-generic sub-domain (e.g., *.example.com rather than *.com)`);
}
checkPolicy(`${directive} 'self' https:; ${other} 'self';`,
`https: protocol requires a host in '${directive}' directives`);
`https: protocol requires a host in \u2018${directive}\u2019 directives`);
checkPolicy(`${directive} 'self' http://example.com; ${other} 'self';`,
`'${directive}' directive contains a forbidden http: protocol source`);
`\u2018${directive}\u2019 directive contains a forbidden http: protocol source`);
for (let protocol of ["http", "ftp", "meh"]) {
checkPolicy(`${directive} 'self' ${protocol}:; ${other} 'self';`,
`'${directive}' directive contains a forbidden ${protocol}: protocol source`);
`\u2018${directive}\u2019 directive contains a forbidden ${protocol}: protocol source`);
}
checkPolicy(`${directive} 'self' 'nonce-01234'; ${other} 'self';`,
`'${directive}' directive contains a forbidden 'nonce-*' keyword`);
`\u2018${directive}\u2019 directive contains a forbidden 'nonce-*' keyword`);
}
});

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

@ -22,7 +22,7 @@ add_task(function* test_manifest_csp() {
equal(normalized.error, undefined, "Should not have an error");
Assert.deepEqual(normalized.errors,
["Error processing content_security_policy: SyntaxError: Policy is missing a required 'script-src' directive"],
["Error processing content_security_policy: SyntaxError: Policy is missing a required \u2018script-src\u2019 directive"],
"Should have the expected warning");
equal(normalized.value.content_security_policy, null,

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

@ -33,6 +33,16 @@ function withTestTabUntilStorageChange(aPageFile, aTaskFn) {
});
}
function* checkDoorhangerUsernamePassword(username, password) {
yield BrowserTestUtils.waitForCondition(() => {
return document.getElementById("password-notification-username").value == username;
}, "Wait for nsLoginManagerPrompter writeDataToUI()");
is(document.getElementById("password-notification-username").value, username,
"Check doorhanger username");
is(document.getElementById("password-notification-password").value, password,
"Check doorhanger password");
}
add_task(function* setup() {
yield SimpleTest.promiseFocus(window);
@ -49,6 +59,7 @@ add_task(function* test_saveChromeHiddenAutoClose() {
// the popup closes and the doorhanger should appear in the opener
let popup = getCaptureDoorhanger("password-save");
ok(popup, "got notification popup");
yield* checkDoorhangerUsernamePassword("notifyu1", "notifyp1");
// Sanity check, no logins should exist yet.
let logins = Services.logins.getAllLogins();
is(logins.length, 0, "Should not have any logins yet");
@ -72,6 +83,7 @@ add_task(function* test_changeChromeHiddenAutoClose() {
yield notifShownPromise;
let popup = getCaptureDoorhanger("password-change");
ok(popup, "got notification popup");
yield* checkDoorhangerUsernamePassword("notifyu1", "pass2");
clickDoorhangerButton(popup, CHANGE_BUTTON);
});
@ -99,6 +111,7 @@ add_task(function* test_saveChromeVisibleSameWindow() {
yield notifShownPromise;
let popup = getCaptureDoorhanger("password-save");
ok(popup, "got notification popup");
yield* checkDoorhangerUsernamePassword("notifyu2", "notifyp2");
clickDoorhangerButton(popup, REMEMBER_BUTTON);
yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
@ -119,6 +132,7 @@ add_task(function* test_changeChromeVisibleSameWindow() {
yield notifShownPromise;
let popup = getCaptureDoorhanger("password-change");
ok(popup, "got notification popup");
yield* checkDoorhangerUsernamePassword("notifyu2", "pass2");
clickDoorhangerButton(popup, CHANGE_BUTTON);
yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

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

@ -1,8 +1,6 @@
[DEFAULT]
skip-if = buildapp == 'b2g' || os == 'android'
[test_formless_submit.html]
support-files = ../pwmgr_common.js
[test_privbrowsing_perwindowpb.html]
skip-if = true # Bug 1173337
support-files =

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

@ -12,10 +12,6 @@ support-files =
[test_master_password.html]
skip-if = toolkit == 'android' # Tests desktop prompts
[test_master_password_cleanup.html]
skip-if = toolkit == 'android' # Tests desktop prompts
[test_prompt.html]
skip-if = os == "linux" || toolkit == 'android' # Tests desktop prompts
[test_prompt_async.html]
skip-if = toolkit == 'android' # Tests desktop prompts
[test_xhr.html]

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

@ -5,7 +5,10 @@ support-files =
../../../satchel/test/satchel_common.js
../authenticate.sjs
../pwmgr_common.js
../notification_common.js
auth2/authenticate.sjs
../../../prompts/test/prompt_common.js
../../../prompts/test/chromeScript.js
[test_autofill_password-only.html]
[test_basic_form.html]
@ -30,9 +33,13 @@ skip-if = toolkit == 'android' # autocomplete
[test_form_action_javascript.html]
[test_formless_autofill.html]
skip-if = toolkit == 'android' # Bug 1259768
[test_formless_submit.html]
skip-if = toolkit == 'android' # Bug 1259768
[test_input_events.html]
[test_input_events_for_identical_values.html]
[test_maxlength.html]
[test_passwords_in_type_password.html]
[test_prompt.html]
skip-if = e10s || os == "linux" || toolkit == 'android' # Tests desktop prompts
[test_recipe_login_fields.html]
[test_xhr_2.html]

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

@ -10,18 +10,27 @@
</head>
<body>
<script type="application/javascript;version=1.8">
let mm = runInParent(SimpleTest.getTestFileURL("pwmgr_common.js"));
let chromeScript = runInParent(SimpleTest.getTestFileURL("pwmgr_common.js"));
document.addEventListener("DOMContentLoaded", () => {
document.getElementById("loginFrame").addEventListener("load", (evt) => {
// Tell the parent to setup test logins.
mm.sendAsyncMessage("setupParent", { selfFilling: true });
chromeScript.sendAsyncMessage("setupParent", { selfFilling: true });
});
});
// When the setup is done, load a recipe for this test.
mm.addMessageListener("doneSetup", function doneSetup() {
mm.sendAsyncMessage("loadRecipes", {
let doneSetupPromise = new Promise(resolve => {
// When the setup is done, load a recipe for this test.
chromeScript.addMessageListener("doneSetup", function doneSetup() {
resolve();
});
});
add_task(function* setup() {
info("Waiting for loads and setup");
yield doneSetupPromise;
yield loadRecipes({
siteRecipes: [{
hosts: ["mochi.test:8888"],
usernameSelector: "input[name='recipeuname']",
@ -30,14 +39,6 @@ mm.addMessageListener("doneSetup", function doneSetup() {
});
});
let loadedRecipesPromise = new Promise(resolve => {
mm.addMessageListener("loadedRecipes", resolve);
});
add_task(function* setup() {
yield loadedRecipesPromise;
});
const DEFAULT_ORIGIN = "http://mochi.test:8888";
const TESTCASES = [

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

@ -3,43 +3,40 @@
<head>
<meta charset="utf-8">
<title>Test capturing of fields outside of a form</title>
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/SpawnTask.js"></script>
<script src="pwmgr_common.js"></script>
<link rel="stylesheet" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
<link rel="stylesheet" href="/tests/SimpleTest/test.css" />
</head>
<body>
<script type="application/javascript;version=1.8">
SimpleTest.waitForExplicitFinish();
const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
Cu.import("resource://gre/modules/Task.jsm");
const LMCBackstagePass = Cu.import("resource://gre/modules/LoginManagerContent.jsm");
const LMCBackstagePass = SpecialPowers.Cu.import("resource://gre/modules/LoginManagerContent.jsm");
const { LoginManagerContent, FormLikeFactory } = LMCBackstagePass;
let parentScriptURL = SimpleTest.getTestFileURL("pwmgr_common.js");
let mm = SpecialPowers.loadChromeScript(parentScriptURL);
let chromeScript = runInParent(SimpleTest.getTestFileURL("pwmgr_common.js"));
document.addEventListener("DOMContentLoaded", () => {
document.getElementById("loginFrame").addEventListener("load", (evt) => {
// Tell the parent to setup test logins.
mm.sendAsyncMessage("setupParent", { selfFilling: true });
let loadPromise = new Promise(resolve => {
document.addEventListener("DOMContentLoaded", () => {
document.getElementById("loginFrame").addEventListener("load", (evt) => {
resolve();
});
});
});
// When the setup is done, load a recipe for this test.
mm.addMessageListener("doneSetup", function doneSetup() {
mm.sendAsyncMessage("loadRecipes", {
add_task(function* setup() {
info("Waiting for page and frame loads");
yield loadPromise;
yield loadRecipes({
siteRecipes: [{
hosts: ["test1.mochi.test:8888"],
hosts: ["mochi.test:8888"],
usernameSelector: "input[name='recipeuname']",
passwordSelector: "input[name='recipepword']",
}],
});
});
mm.addMessageListener("loadedRecipes", () => runTest());
const DEFAULT_ORIGIN = "http://test1.mochi.test:8888";
const DEFAULT_ORIGIN = "http://mochi.test:8888";
const TESTCASES = [
{
// Inputs
@ -129,15 +126,15 @@ const TESTCASES = [
function getSubmitMessage() {
info("getSubmitMessage");
return new Promise((resolve, reject) => {
mm.addMessageListener("formSubmissionProcessed", function processed(...args) {
chromeScript.addMessageListener("formSubmissionProcessed", function processed(...args) {
info("got formSubmissionProcessed");
mm.removeMessageListener("formSubmissionProcessed", processed);
chromeScript.removeMessageListener("formSubmissionProcessed", processed);
resolve(...args);
});
});
}
let runTest = Task.async(function*() {
add_task(function* test() {
let loginFrame = document.getElementById("loginFrame");
let frameDoc = loginFrame.contentWindow.document;
@ -172,8 +169,6 @@ let runTest = Task.async(function*() {
is(submittedResult.oldPasswordField.value, tc.oldPasswordFieldValue, "Check oldPasswordFieldValue");
}
}
SimpleTest.finish();
});
</script>
@ -181,7 +176,7 @@ let runTest = Task.async(function*() {
<p id="display"></p>
<div id="content">
<iframe id="loginFrame" src="http://test1.mochi.test:8888/tests/toolkit/components/passwordmgr/test/blank.html"></iframe>
<iframe id="loginFrame" src="http://mochi.test:8888/tests/toolkit/components/passwordmgr/test/blank.html"></iframe>
</div>
<pre id="test"></pre>
</body>

Разница между файлами не показана из-за своего большого размера Загрузить разницу

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

@ -220,7 +220,7 @@ function setMasterPassword(enable) {
var pk11db = Cc["@mozilla.org/security/pk11tokendb;1"].getService(Ci.nsIPK11TokenDB);
var token = pk11db.findTokenByName("");
ok(true, "change from " + oldPW + " to " + newPW);
info("MP change from " + oldPW + " to " + newPW);
token.changePassword(oldPW, newPW);
}
@ -283,6 +283,7 @@ function promiseFormsProcessed(expectedCount = 1) {
}
function loadRecipes(recipes) {
info("Loading recipes");
return new Promise(resolve => {
chromeScript.addMessageListener("loadedRecipes", function loaded() {
chromeScript.removeMessageListener("loadedRecipes", loaded);
@ -293,6 +294,7 @@ function loadRecipes(recipes) {
}
function resetRecipes() {
info("Resetting recipes");
return new Promise(resolve => {
chromeScript.addMessageListener("recipesReset", function reset() {
chromeScript.removeMessageListener("recipesReset", reset);

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

@ -281,19 +281,17 @@ function checkTest4C() {
is(u.value, "user1", "checking expected user to have been filled in");
is(p.value, "pass1", "checking expected pass to have been filled in");
finishTest();
SimpleTest.finish();
}
// XXX do a test5ABC with clicking cancel?
function finishTest() {
SimpleTest.registerCleanupFunction(function finishTest() {
disableMasterPassword();
ok(pwcrypt.isLoggedIn, "should be logged in");
pwmgr.removeLogin(login1);
pwmgr.removeLogin(login2);
SimpleTest.finish();
}
});
window.addEventListener("runTests", startTest1);
</script>

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

@ -1,51 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Test master password cleanup</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="pwmgr_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
Login Manager test: master password cleanup
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
/*
* The entire purpose of this test is to make sure that, if the previous master
* password test did not complete successfully, we don't screw up other pwmgr
* tests by having a master password unexpectedly set.
*/
function cleanup() {
ok(true, "ensuring MP is cleared");
var pk11db = Cc["@mozilla.org/security/pk11tokendb;1"].
getService(Ci.nsIPK11TokenDB);
var token = pk11db.getInternalKeyToken();
if (!token.checkPassword("")) {
ok(true, "Oops! MP still set, clearing it...");
disableMasterPassword();
} else {
ok(true, "Master password already cleared.");
}
ok(true, "done.");
}
const Cc = SpecialPowers.Cc;
const Ci = SpecialPowers.Ci;
cleanup();
</script>
</pre>
</body>
</html>

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

@ -18,6 +18,10 @@
#include "mozilla/Likely.h"
#include "nsVariant.h"
// Maximum number of chars to search through.
// MatchAutoCompleteFunction won't look for matches over this threshold.
#define MAX_CHARS_TO_SEARCH_THROUGH 255
using namespace mozilla::storage;
// Keep the GUID-related parts of this file in sync with toolkit/downloads/SQLFunctions.cpp!
@ -388,11 +392,17 @@ namespace places {
searchFunctionPtr searchFunction = getSearchFunction(matchBehavior);
// Clean up our URI spec and prepare it for searching.
nsCString fixedURI;
fixupURISpec(url, matchBehavior, fixedURI);
nsCString fixedUrl;
fixupURISpec(url, matchBehavior, fixedUrl);
// Limit the number of chars we search through.
const nsDependentCSubstring& trimmedUrl =
Substring(fixedUrl, 0, MAX_CHARS_TO_SEARCH_THROUGH);
nsAutoCString title;
(void)aArguments->GetUTF8String(kArgIndexTitle, title);
// Limit the number of chars we search through.
const nsDependentCSubstring& trimmedTitle =
Substring(title, 0, MAX_CHARS_TO_SEARCH_THROUGH);
// Determine if every token matches either the bookmark title, tags, page
// title, or page URL.
@ -401,19 +411,21 @@ namespace places {
const nsDependentCSubstring &token = tokenizer.nextToken();
if (HAS_BEHAVIOR(TITLE) && HAS_BEHAVIOR(URL)) {
matches = (searchFunction(token, title) || searchFunction(token, tags)) &&
searchFunction(token, fixedURI);
matches = (searchFunction(token, trimmedTitle) ||
searchFunction(token, tags)) &&
searchFunction(token, trimmedUrl);
}
else if (HAS_BEHAVIOR(TITLE)) {
matches = searchFunction(token, title) || searchFunction(token, tags);
matches = searchFunction(token, trimmedTitle) ||
searchFunction(token, tags);
}
else if (HAS_BEHAVIOR(URL)) {
matches = searchFunction(token, fixedURI);
matches = searchFunction(token, trimmedUrl);
}
else {
matches = searchFunction(token, title) ||
matches = searchFunction(token, trimmedTitle) ||
searchFunction(token, tags) ||
searchFunction(token, fixedURI);
searchFunction(token, trimmedUrl);
}
}

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

@ -155,11 +155,11 @@ function dismissPrompt(ui, action) {
ui.checkbox.doCommand();
}
if (action.textField) {
if ("textField" in action) {
ui.loginTextbox.setAttribute("value", action.textField);
}
if (action.passField) {
if ("passField" in action) {
ui.password1Textbox.setAttribute("value", action.passField);
}

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

@ -29,7 +29,7 @@ function onloadPromiseFor(id) {
});
}
function handlePrompt() {
function handlePrompt(state, action) {
return new Promise(resolve => {
gChromeScript.addMessageListener("promptHandled", function handled(msg) {
gChromeScript.removeMessageListener("promptHandled", handled);

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

@ -39,7 +39,7 @@ function runtest(e) {
window.removeEventListener("message", runtest, false);
window.addEventListener("message", checktest, false);
state = {
let state = {
msg : "Message",
iconClass : "question-icon",
titleHidden : true,
@ -53,11 +53,11 @@ function runtest(e) {
focused : "button0",
defButton : "button0",
};
action = {
let action = {
buttonClick: "ESC",
};
promptDone = handlePrompt(action);
promptDone = handlePrompt(state, action);
}
function checktest(e) {

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше