This commit is contained in:
Phil Ringnalda 2017-02-12 15:33:29 -08:00
Родитель 1057c1089e 8e6a41afa1
Коммит ea85356f95
36 изменённых файлов: 15644 добавлений и 15503 удалений

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

@ -42,7 +42,7 @@
</header>
<section>
<div class="graphic graphic-sync-intro"> </div>
<img class="graphic graphic-sync-intro" src="chrome://browser/skin/fxa/sync-illustration.svg#blueFill"/>
<div class="button-row">
<button id="buttonOpenPrefs" class="button" href="#" tabindex="0">&aboutAccountsConfig.syncPreferences.label;</button>
@ -56,8 +56,7 @@
</header>
<section>
<div class="graphic graphic-sync-intro"> </div>
<img class="graphic graphic-sync-intro" src="chrome://browser/skin/fxa/sync-illustration.svg#blueFill"/>
<div class="description">&aboutAccountsConfig.description;</div>
<div class="button-row">
@ -72,8 +71,7 @@
</header>
<section>
<div class="graphic graphic-sync-intro"> </div>
<img class="graphic graphic-sync-intro" src="chrome://browser/skin/fxa/sync-illustration.svg#blueFill"/>
<div class="description">&aboutAccounts.noConnection.description;</div>
<div class="button-row">
@ -88,8 +86,7 @@
</header>
<section>
<div class="graphic graphic-sync-intro"> </div>
<img class="graphic graphic-sync-intro" src="chrome://browser/skin/fxa/sync-illustration.svg#blueFill"/>
<div class="description">&aboutAccounts.badConfig.description;</div>
</section>

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

@ -110,7 +110,6 @@ header h1
.graphic-sync-intro {
background-image: url(chrome://browser/skin/fxa/sync-illustration.png);
background-repeat: no-repeat;
background-size: contain;
height: 231px;
@ -154,13 +153,3 @@ header h1
}
}
/* Retina */
@media
only screen and (min-device-pixel-ratio: 2),
only screen and ( min-resolution: 192dpi),
only screen and ( min-resolution: 2dppx) {
.graphic-sync-intro {
background-image: url(chrome://browser/skin/fxa/sync-illustration@2x.png);
}
}

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

@ -132,7 +132,7 @@
<hbox id="PanelUI-remotetabs-tabsdisabledpane" pack="center" flex="1">
<vbox class="PanelUI-remotetabs-instruction-box">
<hbox pack="center">
<image class="fxaSyncIllustration" alt=""/>
<html:img class="fxaSyncIllustration" src="chrome://browser/skin/fxa/sync-illustration.svg"/>
</hbox>
<label class="PanelUI-remotetabs-instruction-label">&appMenuRemoteTabs.tabsnotsyncing.label;</label>
<hbox pack="center">
@ -150,7 +150,7 @@
<hbox id="PanelUI-remotetabs-nodevicespane" pack="center" flex="1">
<vbox class="PanelUI-remotetabs-instruction-box">
<hbox pack="center">
<image class="fxaSyncIllustration" alt=""/>
<html:img class="fxaSyncIllustration" src="chrome://browser/skin/fxa/sync-illustration.svg"/>
</hbox>
<label class="PanelUI-remotetabs-instruction-title">&appMenuRemoteTabs.noclients.title;</label>
<label class="PanelUI-remotetabs-instruction-label">&appMenuRemoteTabs.noclients.subtitle;</label>
@ -168,7 +168,7 @@
align="center"
class="PanelUI-remotetabs-instruction-box"
observes="sync-setup-state">
<image class="fxaSyncIllustration" alt=""/>
<html:img class="fxaSyncIllustration" src="chrome://browser/skin/fxa/sync-illustration.svg"/>
<label class="PanelUI-remotetabs-instruction-label">&appMenuRemoteTabs.notsignedin.label;</label>
<toolbarbutton class="PanelUI-remotetabs-prefs-button"
label="&appMenuRemoteTabs.signin.label;"
@ -182,7 +182,7 @@
align="center"
class="PanelUI-remotetabs-instruction-box"
observes="sync-reauth-state">
<image class="fxaSyncIllustration" alt=""/>
<html:img class="fxaSyncIllustration" src="chrome://browser/skin/fxa/sync-illustration.svg"/>
<label class="PanelUI-remotetabs-instruction-label">&appMenuRemoteTabs.notsignedin.label;</label>
<toolbarbutton class="PanelUI-remotetabs-prefs-button"
label="&appMenuRemoteTabs.signin.label;"

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

@ -12,6 +12,7 @@ const kAutoMigrateEnabledPref = "browser.migrate.automigrate.enabled";
const kUndoUIEnabledPref = "browser.migrate.automigrate.ui.enabled";
const kAutoMigrateBrowserPref = "browser.migrate.automigrate.browser";
const kAutoMigrateImportedItemIds = "browser.migrate.automigrate.imported-items";
const kAutoMigrateLastUndoPromptDateMsPref = "browser.migrate.automigrate.lastUndoPromptDateMs";
const kAutoMigrateDaysToOfferUndoPref = "browser.migrate.automigrate.daysToOfferUndo";
@ -39,6 +40,11 @@ XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch",
"resource://gre/modules/TelemetryStopwatch.jsm");
XPCOMUtils.defineLazyGetter(this, "gBrandBundle", function() {
const kBrandBundle = "chrome://branding/locale/brand.properties";
return Services.strings.createBundle(kBrandBundle);
});
Cu.importGlobalProperties(["URL"]);
/* globals kUndoStateFullPath */
@ -309,6 +315,12 @@ const AutoMigrate = {
return null;
},
/**
* Show the user a notification bar indicating we automatically imported
* their data and offering them the possibility of removing it.
* @param target (xul:browser)
* The browser in which we should show the notification.
*/
maybeShowUndoNotification: Task.async(function* (target) {
if (!(yield this.canUndo())) {
return;
@ -337,26 +349,27 @@ const AutoMigrate = {
}
let browserName = this.getBrowserUsedForMigration();
let message;
if (browserName) {
message = MigrationUtils.getLocalizedString("automigration.undo.message",
[browserName]);
} else {
message = MigrationUtils.getLocalizedString("automigration.undo.unknownBrowserMessage");
if (!browserName) {
browserName = MigrationUtils.getLocalizedString("automigration.undo.unknownbrowser");
}
const kMessageId = "automigration.undo.message." +
Preferences.get(kAutoMigrateImportedItemIds, "all");
const kBrandShortName = gBrandBundle.GetStringFromName("brandShortName");
let message = MigrationUtils.getLocalizedString(kMessageId,
[browserName, kBrandShortName]);
let buttons = [
{
label: MigrationUtils.getLocalizedString("automigration.undo.keep.label"),
accessKey: MigrationUtils.getLocalizedString("automigration.undo.keep.accesskey"),
label: MigrationUtils.getLocalizedString("automigration.undo.keep2.label"),
accessKey: MigrationUtils.getLocalizedString("automigration.undo.keep2.accesskey"),
callback: () => {
this._purgeUndoState(this.UNDO_REMOVED_REASON_OFFER_REJECTED);
this._removeNotificationBars();
},
},
{
label: MigrationUtils.getLocalizedString("automigration.undo.dontkeep.label"),
accessKey: MigrationUtils.getLocalizedString("automigration.undo.dontkeep.accesskey"),
label: MigrationUtils.getLocalizedString("automigration.undo.dontkeep2.label"),
accessKey: MigrationUtils.getLocalizedString("automigration.undo.dontkeep2.accesskey"),
callback: () => {
this._maybeOpenUndoSurveyTab(win);
this.undo();
@ -417,6 +430,9 @@ const AutoMigrate = {
_dejsonifyUndoState(state) {
state = JSON.parse(state);
if (!state) {
return new Map();
}
for (let bm of state.bookmarks) {
bm.lastModified = new Date(bm.lastModified);
}
@ -427,12 +443,55 @@ const AutoMigrate = {
]);
},
/**
* Store the items we've saved into a pref. We use this to be able to show
* a detailed message to the user indicating what we've imported.
* @param state (Map)
* The 'undo' state for the import, which contains info about
* how many items of each kind we've (tried to) import.
*/
_setImportedItemPrefFromState(state) {
let itemsWithData = [];
if (state) {
for (let itemType of state.keys()) {
if (state.get(itemType).length) {
itemsWithData.push(itemType);
}
}
}
if (itemsWithData.length == 3) {
itemsWithData = "all";
} else {
itemsWithData = itemsWithData.sort().join(".");
}
if (itemsWithData) {
Preferences.set(kAutoMigrateImportedItemIds, itemsWithData);
}
},
/**
* Used for the shutdown blocker's information field.
*/
_saveUndoStateTrackerForShutdown: "not running",
/**
* Store the information required for using 'undo' of the automatic
* migration in the user's profile.
*/
saveUndoState: Task.async(function* () {
let resolveSavingPromise;
this._saveUndoStateTrackerForShutdown = "processing undo history";
this._savingPromise = new Promise(resolve => { resolveSavingPromise = resolve });
let state = yield MigrationUtils.stopAndRetrieveUndoData();
if (!state || ![...state.values()].some(ary => ary.length > 0)) {
// If we didn't import anything, abort now.
resolveSavingPromise();
return Promise.resolve();
}
this._saveUndoStateTrackerForShutdown = "saving imported item list";
this._setImportedItemPrefFromState(state);
this._saveUndoStateTrackerForShutdown = "writing undo history";
this._undoSavePromise = OS.File.writeAtomic(
kUndoStateFullPath, this._jsonifyUndoState(state), {

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

@ -249,16 +249,16 @@ this.MigratorPrototype = {
}
return null;
};
let maybeStartTelemetryStopwatch = (resourceType, resource) => {
let maybeStartTelemetryStopwatch = (resourceType) => {
let histogram = getHistogramForResourceType(resourceType);
if (histogram) {
TelemetryStopwatch.startKeyed(histogram, this.getKey(), resource);
TelemetryStopwatch.startKeyed(histogram, this.getKey());
}
};
let maybeStopTelemetryStopwatch = (resourceType, resource) => {
let maybeStopTelemetryStopwatch = (resourceType) => {
let histogram = getHistogramForResourceType(resourceType);
if (histogram) {
TelemetryStopwatch.finishKeyed(histogram, this.getKey(), resource);
TelemetryStopwatch.finishKeyed(histogram, this.getKey());
}
};
@ -297,12 +297,12 @@ this.MigratorPrototype = {
for (let [migrationType, itemResources] of resourcesGroupedByItems) {
notify("Migration:ItemBeforeMigrate", migrationType);
maybeStartTelemetryStopwatch(migrationType);
let itemSuccess = false;
for (let res of itemResources) {
maybeStartTelemetryStopwatch(migrationType, res);
let completeDeferred = PromiseUtils.defer();
let resourceDone = function(aSuccess) {
maybeStopTelemetryStopwatch(migrationType, res);
itemResources.delete(res);
itemSuccess |= aSuccess;
if (itemResources.size == 0) {
@ -310,6 +310,9 @@ this.MigratorPrototype = {
"Migration:ItemAfterMigrate" : "Migration:ItemError",
migrationType);
resourcesGroupedByItems.delete(migrationType);
maybeStopTelemetryStopwatch(migrationType);
if (resourcesGroupedByItems.size == 0) {
collectQuantityTelemetry();
notify("Migration:Ended");

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

@ -1,2 +1,3 @@
[browser_undo_notification.js]
[browser_undo_notification_wording.js]
[browser_undo_notification_multiple_dismissal.js]

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

@ -0,0 +1,67 @@
"use strict";
let scope = {};
Cu.import("resource:///modules/AutoMigrate.jsm", scope);
let oldCanUndo = scope.AutoMigrate.canUndo;
registerCleanupFunction(function() {
scope.AutoMigrate.canUndo = oldCanUndo;
});
const kExpectedNotificationId = "automigration-undo";
add_task(function* autoMigrationUndoNotificationShows() {
let getNotification = browser =>
gBrowser.getNotificationBox(browser).getNotificationWithValue(kExpectedNotificationId);
let localizedVersionOf = str => {
if (str == "logins") {
return "passwords";
}
if (str == "visits") {
return "history";
}
return str;
};
scope.AutoMigrate.canUndo = () => true;
let url = "about:newtab";
Services.prefs.setCharPref("browser.migrate.automigrate.browser", "someunknownbrowser");
const kSubsets = [
["bookmarks", "logins", "visits"],
["bookmarks", "logins"],
["bookmarks", "visits"],
["logins", "visits"],
["bookmarks"],
["logins"],
["visits"],
];
const kAllItems = ["bookmarks", "logins", "visits"];
for (let subset of kSubsets) {
let state = new Map(subset.map(item => [item, [{}]]));
scope.AutoMigrate._setImportedItemPrefFromState(state);
let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, url, false);
let browser = tab.linkedBrowser;
if (!getNotification(browser)) {
info(`Notification for ${url} not immediately present, waiting for it.`);
yield BrowserTestUtils.waitForNotificationBar(gBrowser, browser, kExpectedNotificationId);
}
ok(true, `Got notification for ${url}`);
let notification = getNotification(browser);
let notificationText = document.getAnonymousElementByAttribute(notification, "class", "messageText");
notificationText = notificationText.textContent;
for (let potentiallyImported of kAllItems) {
let localizedImportItem = localizedVersionOf(potentiallyImported);
if (subset.includes(potentiallyImported)) {
ok(notificationText.includes(localizedImportItem),
"Expected notification to contain " + localizedImportItem);
} else {
ok(!notificationText.includes(localizedImportItem),
"Expected notification not to contain " + localizedImportItem);
}
}
yield BrowserTestUtils.removeTab(tab);
}
});

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

@ -144,6 +144,7 @@ add_task(function* checkIntegration() {
* Test the undo preconditions and a no-op undo in the automigrator.
*/
add_task(function* checkUndoPreconditions() {
let shouldAddData = false;
gShimmedMigrator = {
get sourceProfiles() {
do_print("Read sourceProfiles");
@ -155,6 +156,15 @@ add_task(function* checkUndoPreconditions() {
},
migrate(types, startup, profileToMigrate) {
this._migrateArgs = [types, startup, profileToMigrate];
if (shouldAddData) {
// Insert a login and check that that worked.
MigrationUtils.insertLoginWrapper({
hostname: "www.mozilla.org",
formSubmitURL: "http://www.mozilla.org",
username: "user",
password: "pass",
});
}
TestUtils.executeSoon(function() {
Services.obs.notifyObservers(null, "Migration:Ended", undefined);
});
@ -177,10 +187,35 @@ add_task(function* checkUndoPreconditions() {
yield migrationFinishedPromise;
Assert.ok(Preferences.has("browser.migrate.automigrate.browser"),
"Should have set browser pref");
Assert.ok((yield AutoMigrate.canUndo()), "Should be able to undo migration");
Assert.ok(!(yield AutoMigrate.canUndo()), "Should not be able to undo migration, as there's no data");
gShimmedMigrator._migrateArgs = null;
gShimmedMigrator._getMigrateDataArgs = null;
Preferences.reset("browser.migrate.automigrate.browser");
shouldAddData = true;
AutoMigrate.migrate("startup");
migrationFinishedPromise = TestUtils.topicObserved("Migration:Ended");
Assert.strictEqual(gShimmedMigrator._getMigrateDataArgs, null,
"getMigrateData called with 'null' as a profile");
Assert.deepEqual(gShimmedMigrator._migrateArgs, [expectedTypes, "startup", null],
"migrate called with 'null' as a profile");
yield migrationFinishedPromise;
let storedLogins = Services.logins.findLogins({}, "www.mozilla.org",
"http://www.mozilla.org", null);
Assert.equal(storedLogins.length, 1, "Should have 1 login");
Assert.ok(Preferences.has("browser.migrate.automigrate.browser"),
"Should have set browser pref");
Assert.ok((yield AutoMigrate.canUndo()), "Should be able to undo migration, as now there's data");
yield AutoMigrate.undo();
Assert.ok(true, "Should be able to finish an undo cycle.");
// Check that the undo removed the passwords:
storedLogins = Services.logins.findLogins({}, "www.mozilla.org",
"http://www.mozilla.org", null);
Assert.equal(storedLogins.length, 0, "Should have no logins");
});
/**

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

@ -60,7 +60,7 @@
</groupbox>
</vbox>
<vbox>
<image class="fxaSyncIllustration"/>
<html:img class="fxaSyncIllustration" src="chrome://browser/skin/fxa/sync-illustration.svg#blueFill"/>
</vbox>
</hbox>
<label class="fxaMobilePromo">
@ -178,7 +178,7 @@
</groupbox>
</vbox>
<vbox>
<image class="fxaSyncIllustration"/>
<html:img class="fxaSyncIllustration" src="chrome://browser/skin/fxa/sync-illustration.svg#blueFill"/>
</vbox>
</hbox>
<groupbox>

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

@ -72,9 +72,16 @@ importedEdgeReadingList=Reading List (From Edge)
128_firefox=Windows and Tabs
# Automigration undo notification.
automigration.undo.message = We automatically imported your data from %S. Would you like to keep it?
automigration.undo.unknownBrowserMessage = We automatically imported your data from another browser. Would you like to keep it?
automigration.undo.keep.label = Keep
automigration.undo.keep.accesskey = K
automigration.undo.dontkeep.label = Dont Keep
automigration.undo.dontkeep.accesskey = D
# %1$S will be replaced with the name of the browser we imported from, %2$S will be replaced with brandShortName
automigration.undo.message.all = Pick up where you left off. Weve imported these sites and your bookmarks, history and passwords from %1$S into %2$S.
automigration.undo.message.bookmarks = Pick up where you left off. Weve imported these sites and your bookmarks from %1$S into %2$S.
automigration.undo.message.bookmarks.logins = Pick up where you left off. Weve imported these sites and your bookmarks and passwords from %1$S into %2$S.
automigration.undo.message.bookmarks.visits = Pick up where you left off. Weve imported these sites and your bookmarks and history from %1$S into %2$S.
automigration.undo.message.logins = Pick up where you left off. Weve imported your passwords from %1$S into %2$S.
automigration.undo.message.logins.visits = Pick up where you left off. Weve imported these sites and your history and passwords from %1$S into %2$S.
automigration.undo.message.visits = Pick up where you left off. Weve imported these sites and your history from %1$S into %2$S.
automigration.undo.keep2.label = OK, Got it
automigration.undo.keep2.accesskey = O
automigration.undo.dontkeep2.label = No Thanks
automigration.undo.dontkeep2.accesskey = N
automigration.undo.unknownbrowser = Unknown Browser

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

@ -803,7 +803,6 @@ toolbarpaletteitem[place="palette"] > toolbaritem > toolbarbutton {
.fxaSyncIllustration {
height: var(--panel-ui-sync-illustration-height);
list-style-image: url(chrome://browser/skin/fxa/sync-illustration.svg);
}
.PanelUI-remotetabs-prefs-button > .toolbarbutton-text {

Двоичные данные
browser/themes/shared/fxa/sync-illustration.png

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

До

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

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

@ -2,15 +2,29 @@
<!-- 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/. -->
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" width="320" height="280" viewBox="0 0 320 280">
<g fill="#cdcdcd">
<path d="M46.352,148.919 L46.352,148.919 L44.938,150.333 L43.523,148.919 L43.523,148.919 L37.866,143.262 L39.281,141.848 L44.938,147.505 L50.594,141.848 L52.009,143.262 L46.352,148.919 ZM43.937,134.000 L45.938,134.000 L45.938,142.000 L43.937,142.000 L43.937,134.000 ZM43.937,122.000 L45.938,122.000 L45.938,130.000 L43.937,130.000 L43.937,122.000 Z"/>
<path d="M306.641,132.110 L300.984,126.453 L295.328,132.110 L293.913,130.696 L300.984,123.625 L308.055,130.696 L306.641,132.110 ZM302.000,223.969 L300.000,223.969 L300.000,215.969 L302.000,215.969 L302.000,223.969 ZM302.000,211.969 L300.000,211.969 L300.000,203.969 L302.000,203.969 L302.000,211.969 ZM302.000,199.969 L300.000,199.969 L300.000,191.969 L302.000,191.969 L302.000,199.969 ZM302.000,187.969 L300.000,187.969 L300.000,179.969 L302.000,179.969 L302.000,187.969 ZM302.000,175.969 L300.000,175.969 L300.000,167.969 L302.000,167.969 L302.000,175.969 ZM302.000,163.969 L300.000,163.969 L300.000,155.969 L302.000,155.969 L302.000,163.969 ZM300.000,131.969 L302.000,131.969 L302.000,139.969 L300.000,139.969 L300.000,131.969 ZM302.000,151.969 L300.000,151.969 L300.000,143.969 L302.000,143.969 L302.000,151.969 ZM300.000,227.969 L302.000,227.969 L302.000,232.000 L302.000,234.000 L300.000,234.000 L292.000,234.000 L292.000,232.000 L300.000,232.000 L300.000,227.969 Z"/>
<path d="M101.335,236.009 L99.921,234.594 L105.578,228.938 L99.921,223.281 L101.335,221.866 L108.406,228.938 L101.335,236.009 ZM100.000,229.938 L92.000,229.938 L92.000,227.937 L100.000,227.937 L100.000,229.938 ZM80.000,227.937 L88.000,227.937 L88.000,229.938 L80.000,229.938 L80.000,227.937 Z"/>
<path d="M182.000,54.000 L182.000,52.000 L190.000,52.000 L190.000,54.000 L182.000,54.000 ZM170.000,52.000 L178.000,52.000 L178.000,54.000 L170.000,54.000 L170.000,52.000 ZM168.488,60.071 L161.417,53.000 L168.488,45.929 L169.902,47.343 L164.245,53.000 L169.902,58.657 L168.488,60.071 Z"/>
<path d="M297.688,276.000 L102.312,276.000 C97.721,276.000 94.000,272.279 94.000,267.688 L94.000,260.000 L306.000,260.000 L306.000,267.688 C306.000,272.279 302.279,276.000 297.688,276.000 ZM117.906,150.312 C117.906,145.721 121.628,142.000 126.218,142.000 L273.688,142.000 C278.279,142.000 282.000,145.721 282.000,150.312 L282.000,256.000 L117.906,256.000 L117.906,150.312 ZM132.000,242.000 L270.000,242.000 L270.000,156.000 L132.000,156.000 L132.000,242.000 Z"/>
<path d="M307.074,115.969 L206.926,115.969 C203.101,115.969 200.000,112.868 200.000,109.042 L200.000,38.926 C200.000,35.101 203.101,32.000 206.926,32.000 L307.074,32.000 C310.899,32.000 314.000,35.101 314.000,38.926 L314.000,109.042 C314.000,112.868 310.899,115.969 307.074,115.969 ZM210.000,65.875 C210.000,64.770 209.105,63.875 208.000,63.875 C206.895,63.875 206.000,64.770 206.000,65.875 L206.000,82.000 C206.000,83.105 206.895,84.000 208.000,84.000 C209.105,84.000 210.000,83.105 210.000,82.000 L210.000,65.875 ZM302.000,42.000 L216.000,42.000 L216.000,106.000 L302.000,106.000 L302.000,42.000 Z"/>
<path d="M65.844,240.000 L26.156,240.000 C23.861,240.000 22.000,238.139 22.000,235.844 L22.000,162.156 C22.000,159.861 23.861,158.000 26.156,158.000 L65.844,158.000 C68.139,158.000 70.000,159.861 70.000,162.156 L70.000,235.844 C70.000,238.139 68.139,240.000 65.844,240.000 ZM46.000,236.000 C48.287,236.000 50.141,234.195 50.141,231.969 C50.141,229.742 48.287,227.938 46.000,227.938 C43.713,227.938 41.859,229.742 41.859,231.969 C41.859,234.195 43.713,236.000 46.000,236.000 ZM66.000,168.000 L26.000,168.000 L26.000,224.000 L66.000,224.000 L66.000,168.000 Z"/>
<path d="M171.906,86.156 C171.906,102.329 159.026,115.469 143.017,115.797 L143.039,115.955 L28.850,115.955 L28.869,115.797 C12.872,115.475 -0.000,102.333 -0.000,86.156 C-0.000,71.661 10.336,59.603 23.994,57.019 C23.620,55.457 23.401,53.834 23.401,52.156 C23.401,40.714 32.606,31.438 43.962,31.438 C47.561,31.438 50.941,32.375 53.884,34.012 C53.883,33.930 53.878,33.848 53.878,33.766 C53.878,17.137 67.301,3.656 83.858,3.656 C97.763,3.656 109.453,13.164 112.843,26.059 C116.677,23.334 121.343,21.719 126.393,21.719 C139.394,21.719 149.933,32.331 149.933,45.422 C149.933,49.572 148.868,53.468 147.007,56.861 C161.114,59.082 171.906,71.351 171.906,86.156 Z"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" width="320" height="280" viewBox="0 0 320 280" xmlns:xlink="http://www.w3.org/1999/xlink" >
<style>
#blueFill:target ~ use,
#blueFill:target ~ g {
fill: #bfcbd3;
}
svg {
fill:#cdcdcd;
}
</style>
<defs>
<g id="logo">
<path d="M46.352,148.919 L46.352,148.919 L44.938,150.333 L43.523,148.919 L43.523,148.919 L37.866,143.262 L39.281,141.848 L44.938,147.505 L50.594,141.848 L52.009,143.262 L46.352,148.919 ZM43.937,134.000 L45.938,134.000 L45.938,142.000 L43.937,142.000 L43.937,134.000 ZM43.937,122.000 L45.938,122.000 L45.938,130.000 L43.937,130.000 L43.937,122.000 Z"/>
<path d="M306.641,132.110 L300.984,126.453 L295.328,132.110 L293.913,130.696 L300.984,123.625 L308.055,130.696 L306.641,132.110 ZM302.000,223.969 L300.000,223.969 L300.000,215.969 L302.000,215.969 L302.000,223.969 ZM302.000,211.969 L300.000,211.969 L300.000,203.969 L302.000,203.969 L302.000,211.969 ZM302.000,199.969 L300.000,199.969 L300.000,191.969 L302.000,191.969 L302.000,199.969 ZM302.000,187.969 L300.000,187.969 L300.000,179.969 L302.000,179.969 L302.000,187.969 ZM302.000,175.969 L300.000,175.969 L300.000,167.969 L302.000,167.969 L302.000,175.969 ZM302.000,163.969 L300.000,163.969 L300.000,155.969 L302.000,155.969 L302.000,163.969 ZM300.000,131.969 L302.000,131.969 L302.000,139.969 L300.000,139.969 L300.000,131.969 ZM302.000,151.969 L300.000,151.969 L300.000,143.969 L302.000,143.969 L302.000,151.969 ZM300.000,227.969 L302.000,227.969 L302.000,232.000 L302.000,234.000 L300.000,234.000 L292.000,234.000 L292.000,232.000 L300.000,232.000 L300.000,227.969 Z"/>
<path d="M101.335,236.009 L99.921,234.594 L105.578,228.938 L99.921,223.281 L101.335,221.866 L108.406,228.938 L101.335,236.009 ZM100.000,229.938 L92.000,229.938 L92.000,227.937 L100.000,227.937 L100.000,229.938 ZM80.000,227.937 L88.000,227.937 L88.000,229.938 L80.000,229.938 L80.000,227.937 Z"/>
<path d="M182.000,54.000 L182.000,52.000 L190.000,52.000 L190.000,54.000 L182.000,54.000 ZM170.000,52.000 L178.000,52.000 L178.000,54.000 L170.000,54.000 L170.000,52.000 ZM168.488,60.071 L161.417,53.000 L168.488,45.929 L169.902,47.343 L164.245,53.000 L169.902,58.657 L168.488,60.071 Z"/>
<path d="M297.688,276.000 L102.312,276.000 C97.721,276.000 94.000,272.279 94.000,267.688 L94.000,260.000 L306.000,260.000 L306.000,267.688 C306.000,272.279 302.279,276.000 297.688,276.000 ZM117.906,150.312 C117.906,145.721 121.628,142.000 126.218,142.000 L273.688,142.000 C278.279,142.000 282.000,145.721 282.000,150.312 L282.000,256.000 L117.906,256.000 L117.906,150.312 ZM132.000,242.000 L270.000,242.000 L270.000,156.000 L132.000,156.000 L132.000,242.000 Z"/>
<path d="M307.074,115.969 L206.926,115.969 C203.101,115.969 200.000,112.868 200.000,109.042 L200.000,38.926 C200.000,35.101 203.101,32.000 206.926,32.000 L307.074,32.000 C310.899,32.000 314.000,35.101 314.000,38.926 L314.000,109.042 C314.000,112.868 310.899,115.969 307.074,115.969 ZM210.000,65.875 C210.000,64.770 209.105,63.875 208.000,63.875 C206.895,63.875 206.000,64.770 206.000,65.875 L206.000,82.000 C206.000,83.105 206.895,84.000 208.000,84.000 C209.105,84.000 210.000,83.105 210.000,82.000 L210.000,65.875 ZM302.000,42.000 L216.000,42.000 L216.000,106.000 L302.000,106.000 L302.000,42.000 Z"/>
<path d="M65.844,240.000 L26.156,240.000 C23.861,240.000 22.000,238.139 22.000,235.844 L22.000,162.156 C22.000,159.861 23.861,158.000 26.156,158.000 L65.844,158.000 C68.139,158.000 70.000,159.861 70.000,162.156 L70.000,235.844 C70.000,238.139 68.139,240.000 65.844,240.000 ZM46.000,236.000 C48.287,236.000 50.141,234.195 50.141,231.969 C50.141,229.742 48.287,227.938 46.000,227.938 C43.713,227.938 41.859,229.742 41.859,231.969 C41.859,234.195 43.713,236.000 46.000,236.000 ZM66.000,168.000 L26.000,168.000 L26.000,224.000 L66.000,224.000 L66.000,168.000 Z"/>
<path d="M171.906,86.156 C171.906,102.329 159.026,115.469 143.017,115.797 L143.039,115.955 L28.850,115.955 L28.869,115.797 C12.872,115.475 -0.000,102.333 -0.000,86.156 C-0.000,71.661 10.336,59.603 23.994,57.019 C23.620,55.457 23.401,53.834 23.401,52.156 C23.401,40.714 32.606,31.438 43.962,31.438 C47.561,31.438 50.941,32.375 53.884,34.012 C53.883,33.930 53.878,33.848 53.878,33.766 C53.878,17.137 67.301,3.656 83.858,3.656 C97.763,3.656 109.453,13.164 112.843,26.059 C116.677,23.334 121.343,21.719 126.393,21.719 C139.394,21.719 149.933,32.331 149.933,45.422 C149.933,49.572 148.868,53.468 147.007,56.861 C161.114,59.082 171.906,71.351 171.906,86.156 Z"/>
</g>
</defs>
<g id="blueFill"></g>
<use xlink:href="#logo" />
</svg>

До

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

После

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

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

До

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

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

@ -493,7 +493,6 @@ description > html|a {
.fxaSyncIllustration {
width: 231px;
list-style-image: url(chrome://browser/skin/fxa/sync-illustration.png)
}
#fxaLoginStatus[hasName] #fxaEmailAddress1 {
@ -557,9 +556,6 @@ description > html|a {
.iOSLink {
background-image: url("chrome://browser/skin/fxa/ios@2x.png");
}
.fxaSyncIllustration {
list-style-image: url(chrome://browser/skin/fxa/sync-illustration@2x.png)
}
.fxaFirefoxLogo {
list-style-image: url(chrome://browser/skin/fxa/logo@2x.png);
}

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

@ -80,8 +80,6 @@
skin/classic/browser/fxa/default-avatar.svg (../shared/fxa/default-avatar.svg)
skin/classic/browser/fxa/logo.png (../shared/fxa/logo.png)
skin/classic/browser/fxa/logo@2x.png (../shared/fxa/logo@2x.png)
skin/classic/browser/fxa/sync-illustration.png (../shared/fxa/sync-illustration.png)
skin/classic/browser/fxa/sync-illustration@2x.png (../shared/fxa/sync-illustration@2x.png)
skin/classic/browser/fxa/sync-illustration.svg (../shared/fxa/sync-illustration.svg)
skin/classic/browser/fxa/android.png (../shared/fxa/android.png)
skin/classic/browser/fxa/android@2x.png (../shared/fxa/android@2x.png)

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

@ -8899,7 +8899,7 @@ var Debugger =
* => state === "insecure"
*
* - request is HTTPS but it uses a weak cipher or old protocol, see
* http://hg.mozilla.org/mozilla-central/annotate/def6ed9d1c1a/
* https://hg.mozilla.org/mozilla-central/annotate/def6ed9d1c1a/
* security/manager/ssl/nsNSSCallbacks.cpp#l1233
* - request is mixed content (which makes no sense whatsoever)
* => .securityState has STATE_IS_BROKEN flag
@ -9072,7 +9072,7 @@ var Debugger =
const wpl = Ci.nsIWebProgressListener;
// If there's non-fatal security issues the request has STATE_IS_BROKEN
// flag set. See http://hg.mozilla.org/mozilla-central/file/44344099d119
// flag set. See https://hg.mozilla.org/mozilla-central/file/44344099d119
// /security/manager/ssl/nsNSSCallbacks.cpp#l1233
let reasons = [];
@ -37590,7 +37590,7 @@ var Debugger =
* => state === "insecure"
*
* - request is HTTPS but it uses a weak cipher or old protocol, see
* http://hg.mozilla.org/mozilla-central/annotate/def6ed9d1c1a/
* https://hg.mozilla.org/mozilla-central/annotate/def6ed9d1c1a/
* security/manager/ssl/nsNSSCallbacks.cpp#l1233
* - request is mixed content (which makes no sense whatsoever)
* => .securityState has STATE_IS_BROKEN flag
@ -37763,7 +37763,7 @@ var Debugger =
const wpl = Ci.nsIWebProgressListener;
// If there's non-fatal security issues the request has STATE_IS_BROKEN
// flag set. See http://hg.mozilla.org/mozilla-central/file/44344099d119
// flag set. See https://hg.mozilla.org/mozilla-central/file/44344099d119
// /security/manager/ssl/nsNSSCallbacks.cpp#l1233
let reasons = [];

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

@ -653,7 +653,7 @@ a.learn-more-link.webconsole-learn-more-link {
/*
* This hardcoded width likely due to a toolkit Windows specific bug.
* See http://hg.mozilla.org/mozilla-central/annotate/f38d6df93cad/toolkit/themes/winstripe/global/textbox-aero.css#l7
* See https://hg.mozilla.org/mozilla-central/annotate/f38d6df93cad/toolkit/themes/winstripe/global/textbox-aero.css#l7
*/
:root[platform="win"] .hud-filter-box {

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

@ -17,7 +17,7 @@ this information is documented on the
A very quick version:
```
$ hg clone http://hg.mozilla.org/integration/fx-team
$ hg clone https://hg.mozilla.org/integration/mozilla-inbound
$ ./mach build
$ ./mach run -P development
```

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

@ -676,10 +676,10 @@ TabActor.prototype = {
// (chrome-)webnavigation-create is fired very early during docshell
// construction. In new root docshells within child processes, involving
// TabChild, this event is from within this call:
// http://hg.mozilla.org/mozilla-central/annotate/74d7fb43bb44/dom/ipc/TabChild.cpp#l912
// https://hg.mozilla.org/mozilla-central/annotate/74d7fb43bb44/dom/ipc/TabChild.cpp#l912
// whereas the chromeEventHandler (and most likely other stuff) is set
// later:
// http://hg.mozilla.org/mozilla-central/annotate/74d7fb43bb44/dom/ipc/TabChild.cpp#l944
// https://hg.mozilla.org/mozilla-central/annotate/74d7fb43bb44/dom/ipc/TabChild.cpp#l944
// So wait a tick before watching it:
DevToolsUtils.executeSoon(() => {
// Bug 1142752: sometimes, the docshell appears to be immediately

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

@ -570,7 +570,7 @@ var NetworkHelper = {
* => state === "insecure"
*
* - request is HTTPS but it uses a weak cipher or old protocol, see
* http://hg.mozilla.org/mozilla-central/annotate/def6ed9d1c1a/
* https://hg.mozilla.org/mozilla-central/annotate/def6ed9d1c1a/
* security/manager/ssl/nsNSSCallbacks.cpp#l1233
* - request is mixed content (which makes no sense whatsoever)
* => .securityState has STATE_IS_BROKEN flag
@ -745,7 +745,7 @@ var NetworkHelper = {
const wpl = Ci.nsIWebProgressListener;
// If there's non-fatal security issues the request has STATE_IS_BROKEN
// flag set. See http://hg.mozilla.org/mozilla-central/file/44344099d119
// flag set. See https://hg.mozilla.org/mozilla-central/file/44344099d119
// /security/manager/ssl/nsNSSCallbacks.cpp#l1233
let reasons = [];

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

@ -93,9 +93,6 @@ OggCodecState::Reset()
void
OggCodecState::ClearUnstamped()
{
for (uint32_t i = 0; i < mUnstamped.Length(); ++i) {
OggCodecState::ReleasePacket(mUnstamped[i]);
}
mUnstamped.Clear();
}
@ -191,29 +188,20 @@ VorbisState::AssertHasRecordedPacketSamples(ogg_packet* aPacket)
#endif
}
static ogg_packet*
static OggPacketPtr
Clone(ogg_packet* aPacket)
{
ogg_packet* p = new ogg_packet();
memcpy(p, aPacket, sizeof(ogg_packet));
p->packet = new unsigned char[p->bytes];
memcpy(p->packet, aPacket->packet, p->bytes);
return p;
return OggPacketPtr(p);
}
void
OggCodecState::ReleasePacket(ogg_packet* aPacket)
OggPacketQueue::Append(OggPacketPtr aPacket)
{
if (aPacket) {
delete [] aPacket->packet;
}
delete aPacket;
}
void
OggPacketQueue::Append(ogg_packet* aPacket)
{
nsDeque::Push(aPacket);
nsDeque::Push(aPacket.release());
}
bool
@ -222,7 +210,7 @@ OggCodecState::IsPacketReady()
return !mPackets.IsEmpty();
}
ogg_packet*
OggPacketPtr
OggCodecState::PacketOut()
{
if (mPackets.IsEmpty()) {
@ -251,35 +239,32 @@ OggCodecState::PushFront(OggPacketQueue&& aOther)
already_AddRefed<MediaRawData>
OggCodecState::PacketOutAsMediaRawData()
{
ogg_packet* packet = PacketOut();
OggPacketPtr packet = PacketOut();
if (!packet) {
return nullptr;
}
NS_ASSERTION(
!IsHeader(packet),
!IsHeader(packet.get()),
"PacketOutAsMediaRawData can only be called on non-header packets");
RefPtr<MediaRawData> sample = new MediaRawData(packet->packet, packet->bytes);
if (!sample->Data()) {
// OOM.
ReleasePacket(packet);
return nullptr;
}
int64_t end_tstamp = Time(packet->granulepos);
NS_ASSERTION(end_tstamp >= 0, "timestamp invalid");
int64_t duration = PacketDuration(packet);
int64_t duration = PacketDuration(packet.get());
NS_ASSERTION(duration >= 0, "duration invalid");
sample->mTimecode = packet->granulepos;
sample->mTime = end_tstamp - duration;
sample->mDuration = duration;
sample->mKeyframe = IsKeyframe(packet);
sample->mKeyframe = IsKeyframe(packet.get());
sample->mEOS = packet->e_o_s;
ReleasePacket(packet);
return sample.forget();
}
@ -320,15 +305,15 @@ OggCodecState::PacketOutUntilGranulepos(bool& aFoundGranulepos)
ogg_packet packet;
r = ogg_stream_packetout(&mState, &packet);
if (r == 1) {
ogg_packet* clone = Clone(&packet);
OggPacketPtr clone = Clone(&packet);
if (IsHeader(&packet)) {
// Header packets go straight into the packet queue.
mPackets.Append(clone);
mPackets.Append(Move(clone));
} else {
// We buffer data packets until we encounter a granulepos. We'll
// then use the granulepos to figure out the granulepos of the
// preceeding packets.
mUnstamped.AppendElement(clone);
mUnstamped.AppendElement(Move(clone));
aFoundGranulepos = packet.granulepos > 0;
}
}
@ -406,14 +391,15 @@ TheoraState::Reset()
}
bool
TheoraState::DecodeHeader(ogg_packet* aPacket)
TheoraState::DecodeHeader(OggPacketPtr aPacket)
{
mHeaders.Append(aPacket);
ogg_packet* packet = aPacket.get(); // Will be owned by mHeaders.
mHeaders.Append(Move(aPacket));
mPacketCount++;
int ret = th_decode_headerin(&mTheoraInfo,
&mComment,
&mSetup,
aPacket);
packet);
// We must determine when we've read the last header packet.
// th_decode_headerin() does not tell us when it's read the last header, so
@ -429,7 +415,7 @@ TheoraState::DecodeHeader(ogg_packet* aPacket)
// 0x82 -> Setup header
// See http://www.theora.org/doc/Theora.pdf Chapter 6, "Bitstream Headers",
// for more details of the Ogg/Theora containment scheme.
bool isSetupHeader = aPacket->bytes > 0 && aPacket->packet[0] == 0x82;
bool isSetupHeader = packet->bytes > 0 && packet->packet[0] == 0x82;
if (ret < 0 || mPacketCount > 3) {
// We've received an error, or the first three packets weren't valid
// header packets. Assume bad input.
@ -555,12 +541,12 @@ TheoraState::PageIn(ogg_page* aPage)
// and initialized our decoder. Determine granulepos of buffered packets.
ReconstructTheoraGranulepos();
for (uint32_t i = 0; i < mUnstamped.Length(); ++i) {
ogg_packet* packet = mUnstamped[i];
OggPacketPtr packet = Move(mUnstamped[i]);
#ifdef DEBUG
NS_ASSERTION(!IsHeader(packet), "Don't try to recover header packet gp");
NS_ASSERTION(!IsHeader(packet.get()), "Don't try to recover header packet gp");
NS_ASSERTION(packet->granulepos != -1, "Packet must have gp by now");
#endif
mPackets.Append(packet);
mPackets.Append(Move(packet));
}
mUnstamped.Clear();
}
@ -617,8 +603,8 @@ TheoraState::ReconstructTheoraGranulepos()
for (uint32_t i = 0; i < mUnstamped.Length() - 1; ++i) {
ogg_int64_t frame = firstFrame + i;
ogg_int64_t granulepos;
ogg_packet* packet = mUnstamped[i];
bool isKeyframe = th_packet_iskeyframe(packet) == 1;
auto& packet = mUnstamped[i];
bool isKeyframe = th_packet_iskeyframe(packet.get()) == 1;
if (isKeyframe) {
granulepos = frame << shift;
@ -707,13 +693,14 @@ VorbisState::~VorbisState()
}
bool
VorbisState::DecodeHeader(ogg_packet* aPacket)
VorbisState::DecodeHeader(OggPacketPtr aPacket)
{
mHeaders.Append(aPacket);
ogg_packet* packet = aPacket.get(); // Will be owned by mHeaders.
mHeaders.Append(Move(aPacket));
mPacketCount++;
int ret = vorbis_synthesis_headerin(&mVorbisInfo,
&mComment,
aPacket);
packet);
// We must determine when we've read the last header packet.
// vorbis_synthesis_headerin() does not tell us when it's read the last
// header, so we must keep track of the headers externally.
@ -730,7 +717,7 @@ VorbisState::DecodeHeader(ogg_packet* aPacket)
// Specification, Chapter 4, Codec Setup and Packet Decode:
// http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-580004
bool isSetupHeader = aPacket->bytes > 0 && aPacket->packet[0] == 0x5;
bool isSetupHeader = packet->bytes > 0 && packet->packet[0] == 0x5;
if (ret < 0 || mPacketCount > 3) {
// We've received an error, or the first three packets weren't valid
@ -871,11 +858,11 @@ VorbisState::PageIn(ogg_page* aPage)
// and initialized our decoder. Determine granulepos of buffered packets.
ReconstructVorbisGranulepos();
for (uint32_t i = 0; i < mUnstamped.Length(); ++i) {
ogg_packet* packet = mUnstamped[i];
AssertHasRecordedPacketSamples(packet);
NS_ASSERTION(!IsHeader(packet), "Don't try to recover header packet gp");
OggPacketPtr packet = Move(mUnstamped[i]);
AssertHasRecordedPacketSamples(packet.get());
NS_ASSERTION(!IsHeader(packet.get()), "Don't try to recover header packet gp");
NS_ASSERTION(packet->granulepos != -1, "Packet must have gp by now");
mPackets.Append(packet);
mPackets.Append(Move(packet));
}
mUnstamped.Clear();
}
@ -900,12 +887,12 @@ VorbisState::ReconstructVorbisGranulepos()
// each packet.
NS_ASSERTION(mUnstamped.Length() > 0, "Length must be > 0");
ogg_packet* last = mUnstamped.LastElement();
auto& last = mUnstamped.LastElement();
NS_ASSERTION(last->e_o_s || last->granulepos >= 0,
"Must know last granulepos!");
if (mUnstamped.Length() == 1) {
ogg_packet* packet = mUnstamped[0];
long blockSize = vorbis_packet_blocksize(&mVorbisInfo, packet);
auto& packet = mUnstamped[0];
long blockSize = vorbis_packet_blocksize(&mVorbisInfo, packet.get());
if (blockSize < 0) {
// On failure vorbis_packet_blocksize returns < 0. If we've got
// a bad packet, we just assume that decode will have to skip this
@ -925,19 +912,19 @@ VorbisState::ReconstructVorbisGranulepos()
}
mGranulepos = packet->granulepos;
RecordVorbisPacketSamples(packet, samples);
RecordVorbisPacketSamples(packet.get(), samples);
return NS_OK;
}
bool unknownGranulepos = last->granulepos == -1;
int totalSamples = 0;
for (int32_t i = mUnstamped.Length() - 1; i > 0; i--) {
ogg_packet* packet = mUnstamped[i];
ogg_packet* prev = mUnstamped[i-1];
auto& packet = mUnstamped[i];
auto& prev = mUnstamped[i-1];
ogg_int64_t granulepos = packet->granulepos;
NS_ASSERTION(granulepos != -1, "Must know granulepos!");
long prevBlockSize = vorbis_packet_blocksize(&mVorbisInfo, prev);
long blockSize = vorbis_packet_blocksize(&mVorbisInfo, packet);
long prevBlockSize = vorbis_packet_blocksize(&mVorbisInfo, prev.get());
long blockSize = vorbis_packet_blocksize(&mVorbisInfo, packet.get());
if (blockSize < 0 || prevBlockSize < 0) {
// On failure vorbis_packet_blocksize returns < 0. If we've got
@ -950,18 +937,17 @@ VorbisState::ReconstructVorbisGranulepos()
long samples = prevBlockSize / 4 + blockSize / 4;
totalSamples += samples;
prev->granulepos = granulepos - samples;
RecordVorbisPacketSamples(packet, samples);
RecordVorbisPacketSamples(packet.get(), samples);
}
if (unknownGranulepos) {
for (uint32_t i = 0; i < mUnstamped.Length(); i++) {
ogg_packet* packet = mUnstamped[i];
packet->granulepos += mGranulepos + totalSamples + 1;
mUnstamped[i]->granulepos += mGranulepos + totalSamples + 1;
}
}
ogg_packet* first = mUnstamped[0];
long blockSize = vorbis_packet_blocksize(&mVorbisInfo, first);
auto& first = mUnstamped[0];
long blockSize = vorbis_packet_blocksize(&mVorbisInfo, first.get());
if (blockSize < 0) {
mPrevVorbisBlockSize = 0;
blockSize = 0;
@ -971,7 +957,7 @@ VorbisState::ReconstructVorbisGranulepos()
? 0
: mPrevVorbisBlockSize / 4 + blockSize / 4;
int64_t start = first->granulepos - samples;
RecordVorbisPacketSamples(first, samples);
RecordVorbisPacketSamples(first.get(), samples);
if (last->e_o_s && start < mGranulepos) {
// We've calculated that there are more samples in this page than its
@ -984,11 +970,11 @@ VorbisState::ReconstructVorbisGranulepos()
mUnstamped[i]->granulepos += pruned;
}
#ifdef VALIDATE_VORBIS_SAMPLE_CALCULATION
mVorbisPacketSamples[last] -= pruned;
mVorbisPacketSamples[last.get()] -= pruned;
#endif
}
mPrevVorbisBlockSize = vorbis_packet_blocksize(&mVorbisInfo, last);
mPrevVorbisBlockSize = vorbis_packet_blocksize(&mVorbisInfo, last.get());
mPrevVorbisBlockSize = std::max(static_cast<long>(0), mPrevVorbisBlockSize);
mGranulepos = last->granulepos;
@ -1083,9 +1069,8 @@ OpusState::Init(void)
}
bool
OpusState::DecodeHeader(ogg_packet* aPacket)
OpusState::DecodeHeader(OggPacketPtr aPacket)
{
nsAutoRef<ogg_packet> autoRelease(aPacket);
switch(mPacketCount++) {
// Parse the id header.
case 0:
@ -1093,7 +1078,7 @@ OpusState::DecodeHeader(ogg_packet* aPacket)
if (!mParser->DecodeHeader(aPacket->packet, aPacket->bytes)) {
return false;
}
mHeaders.Append(autoRelease.disown());
mHeaders.Append(Move(aPacket));
break;
// Parse the metadata header.
@ -1108,7 +1093,7 @@ OpusState::DecodeHeader(ogg_packet* aPacket)
default:
mDoneReadingHeaders = true;
// Put it back on the queue so we can decode it.
mPackets.PushFront(autoRelease.disown());
mPackets.PushFront(Move(aPacket));
break;
}
return true;
@ -1180,10 +1165,10 @@ OpusState::PageIn(ogg_page* aPage)
return NS_ERROR_FAILURE;
}
for (uint32_t i = 0; i < mUnstamped.Length(); i++) {
ogg_packet* packet = mUnstamped[i];
NS_ASSERTION(!IsHeader(packet), "Don't try to play a header packet");
OggPacketPtr packet = Move(mUnstamped[i]);
NS_ASSERTION(!IsHeader(packet.get()), "Don't try to play a header packet");
NS_ASSERTION(packet->granulepos != -1, "Packet should have a granulepos");
mPackets.Append(packet);
mPackets.Append(Move(packet));
}
mUnstamped.Clear();
return NS_OK;
@ -1217,13 +1202,14 @@ bool
OpusState::ReconstructOpusGranulepos(void)
{
NS_ASSERTION(mUnstamped.Length() > 0, "Must have unstamped packets");
ogg_packet* last = mUnstamped.LastElement();
NS_ASSERTION(last->e_o_s || last->granulepos > 0,
"Must know last granulepos!");
NS_ASSERTION(mUnstamped.LastElement()->e_o_s
|| mUnstamped.LastElement()->granulepos > 0,
"Must know last granulepos!");
int64_t gp;
// If this is the last page, and we've seen at least one previous page (or
// this is the first page)...
if (last->e_o_s) {
if (mUnstamped.LastElement()->e_o_s) {
auto& last = mUnstamped.LastElement();
if (mPrevPageGranulepos != -1) {
// If this file only has one page and the final granule position is
// smaller than the pre-skip amount, we MUST reject the stream.
@ -1235,8 +1221,8 @@ OpusState::ReconstructOpusGranulepos(void)
// duration to the previous granulepos to get the value for the
// current packet.
for (uint32_t i = 0; i < mUnstamped.Length() - 1; ++i) {
ogg_packet* packet = mUnstamped[i];
int offset = GetOpusDeltaGP(packet);
auto& packet = mUnstamped[i];
int offset = GetOpusDeltaGP(packet.get());
// Check for error (negative offset) and overflow.
if (offset >= 0 && gp <= INT64_MAX - offset) {
gp += offset;
@ -1246,12 +1232,8 @@ OpusState::ReconstructOpusGranulepos(void)
// Encoders SHOULD NOT produce streams like this, but we'll handle
// it for them anyway.
gp = last_gp;
for (uint32_t j = i+1; j < mUnstamped.Length(); ++j) {
OggCodecState::ReleasePacket(mUnstamped[j]);
}
mUnstamped.RemoveElementsAt(i+1, mUnstamped.Length() - (i+1));
last = packet;
last->e_o_s = 1;
packet->e_o_s = 1;
}
}
packet->granulepos = gp;
@ -1266,12 +1248,13 @@ OpusState::ReconstructOpusGranulepos(void)
}
}
auto& last = mUnstamped.LastElement();
gp = last->granulepos;
// Loop through the packets backwards, subtracting the next
// packet's duration from its granulepos to get the value
// for the current packet.
for (uint32_t i = mUnstamped.Length() - 1; i > 0; i--) {
int offset = GetOpusDeltaGP(mUnstamped[i]);
int offset = GetOpusDeltaGP(mUnstamped[i].get());
// Check for error (negative offset) and overflow.
if (offset >= 0) {
if (offset <= gp) {
@ -1296,7 +1279,7 @@ OpusState::ReconstructOpusGranulepos(void)
// total number of samples decodable from the first page with completed
// packets. This requires looking at the duration of the first packet, too.
// We MUST reject such streams.
if (!mDoneReadingHeaders && GetOpusDeltaGP(mUnstamped[0]) > gp) {
if (!mDoneReadingHeaders && GetOpusDeltaGP(mUnstamped[0].get()) > gp) {
return false;
}
mPrevPageGranulepos = last->granulepos;
@ -1344,10 +1327,8 @@ FlacState::FlacState(ogg_page* aBosPage)
}
bool
FlacState::DecodeHeader(ogg_packet* aPacket)
FlacState::DecodeHeader(OggPacketPtr aPacket)
{
nsAutoRef<ogg_packet> autoRelease(aPacket);
if (!mParser.DecodeHeaderBlock(aPacket->packet, aPacket->bytes)) {
return false;
}
@ -1403,10 +1384,10 @@ FlacState::PageIn(ogg_page* aPage)
// and initialized our decoder. Determine granulepos of buffered packets.
ReconstructFlacGranulepos();
for (uint32_t i = 0; i < mUnstamped.Length(); ++i) {
ogg_packet* packet = mUnstamped[i];
NS_ASSERTION(!IsHeader(packet), "Don't try to recover header packet gp");
OggPacketPtr packet = Move(mUnstamped[i]);
NS_ASSERTION(!IsHeader(packet.get()), "Don't try to recover header packet gp");
NS_ASSERTION(packet->granulepos != -1, "Packet must have gp by now");
mPackets.Append(packet);
mPackets.Append(Move(packet));
}
mUnstamped.Clear();
}
@ -1430,7 +1411,7 @@ bool
FlacState::ReconstructFlacGranulepos(void)
{
NS_ASSERTION(mUnstamped.Length() > 0, "Must have unstamped packets");
ogg_packet* last = mUnstamped.LastElement();
auto& last = mUnstamped.LastElement();
NS_ASSERTION(last->e_o_s || last->granulepos > 0,
"Must know last granulepos!");
int64_t gp;
@ -1863,10 +1844,9 @@ SkeletonState::DecodeFisbone(ogg_packet* aPacket)
}
bool
SkeletonState::DecodeHeader(ogg_packet* aPacket)
SkeletonState::DecodeHeader(OggPacketPtr aPacket)
{
nsAutoRef<ogg_packet> autoRelease(aPacket);
if (IsSkeletonBOS(aPacket)) {
if (IsSkeletonBOS(aPacket.get())) {
uint16_t verMajor =
LittleEndian::readUint16(aPacket->packet + SKELETON_VERSION_MAJOR_OFFSET);
uint16_t verMinor =
@ -1898,10 +1878,10 @@ SkeletonState::DecodeHeader(ogg_packet* aPacket)
// Initialize the serialno-to-index map.
return true;
} else if (IsSkeletonIndex(aPacket) && mVersion >= SKELETON_VERSION(4,0)) {
return DecodeIndex(aPacket);
} else if (IsSkeletonFisbone(aPacket)) {
return DecodeFisbone(aPacket);
} else if (IsSkeletonIndex(aPacket.get()) && mVersion >= SKELETON_VERSION(4,0)) {
return DecodeIndex(aPacket.get());
} else if (IsSkeletonFisbone(aPacket.get())) {
return DecodeFisbone(aPacket.get());
} else if (aPacket->e_o_s) {
mDoneReadingHeaders = true;
return true;

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

@ -10,8 +10,6 @@
// For MOZ_SAMPLE_TYPE_*
#include "FlacFrameParser.h"
#include "VideoUtils.h"
#include <nsAutoPtr.h>
#include <nsAutoRef.h>
#include <nsDeque.h>
#include <nsTArray.h>
#include <nsClassHashtable.h>
@ -36,14 +34,23 @@ namespace mozilla {
class OpusParser;
struct OggPacketDeletePolicy
{
void operator()(ogg_packet* aPacket) const
{
delete [] aPacket->packet;
delete aPacket;
}
};
using OggPacketPtr = UniquePtr<ogg_packet, OggPacketDeletePolicy>;
// Deallocates a packet, used in OggPacketQueue below.
class OggPacketDeallocator : public nsDequeFunctor
{
virtual void* operator() (void* aPacket)
virtual void* operator()(void* aPacket)
{
ogg_packet* p = static_cast<ogg_packet*>(aPacket);
delete [] p->packet;
delete p;
OggPacketDeletePolicy()(static_cast<ogg_packet*>(aPacket));
return nullptr;
}
};
@ -64,22 +71,28 @@ public:
OggPacketQueue() : nsDeque(new OggPacketDeallocator()) { }
~OggPacketQueue() { Erase(); }
bool IsEmpty() { return nsDeque::GetSize() == 0; }
void Append(ogg_packet* aPacket);
ogg_packet* PopFront()
void Append(OggPacketPtr aPacket);
OggPacketPtr PopFront()
{
return static_cast<ogg_packet*>(nsDeque::PopFront());
return OggPacketPtr(static_cast<ogg_packet*>(nsDeque::PopFront()));
}
ogg_packet* PeekFront()
{
return static_cast<ogg_packet*>(nsDeque::PeekFront());
}
ogg_packet* Pop() { return static_cast<ogg_packet*>(nsDeque::Pop()); }
OggPacketPtr Pop()
{
return OggPacketPtr(static_cast<ogg_packet*>(nsDeque::Pop()));
}
ogg_packet* operator[](size_t aIndex) const
{
return static_cast<ogg_packet*>(nsDeque::ObjectAt(aIndex));
}
size_t Length() const { return nsDeque::GetSize(); }
void PushFront(ogg_packet* aPacket) { nsDeque::PushFront(aPacket); }
void PushFront(OggPacketPtr aPacket)
{
nsDeque::PushFront(aPacket.release());
}
void Erase() { nsDeque::Erase(); }
};
@ -113,7 +126,7 @@ public:
// to determine if the last header has been read.
// This function takes ownership of the packet and is responsible for
// releasing it or queuing it for later processing.
virtual bool DecodeHeader(ogg_packet* aPacket)
virtual bool DecodeHeader(OggPacketPtr aPacket)
{
return (mDoneReadingHeaders = true);
}
@ -185,10 +198,9 @@ public:
// Returns the next raw packet in the stream, or nullptr if there are no more
// packets buffered in the packet queue. More packets can be buffered by
// inserting one or more pages into the stream by calling PageIn(). The
// caller is responsible for deleting returned packet's using
// OggCodecState::ReleasePacket(). The packet will have a valid granulepos.
ogg_packet* PacketOut();
// inserting one or more pages into the stream by calling PageIn().
// The packet will have a valid granulepos.
OggPacketPtr PacketOut();
// Returns the next raw packet in the stream, or nullptr if there are no more
// packets buffered in the packet queue, without consuming it.
@ -198,10 +210,6 @@ public:
// Moves all raw packets from aOther to the front of the current packet queue.
void PushFront(OggPacketQueue&& aOther);
// Releases the memory used by a cloned packet. Every packet returned by
// PacketOut() must be free'd using this function.
static void ReleasePacket(ogg_packet* aPacket);
// Returns the next packet in the stream as a MediaRawData, or nullptr
// if there are no more packets buffered in the packet queue. More packets
// can be buffered by inserting one or more pages into the stream by calling
@ -277,7 +285,7 @@ protected:
// Temporary buffer in which to store packets while we're reading packets
// in order to capture granulepos.
nsTArray<ogg_packet*> mUnstamped;
nsTArray<OggPacketPtr> mUnstamped;
bool SetCodecSpecificConfig(MediaByteBuffer* aBuffer,
OggPacketQueue& aHeaders);
@ -293,7 +301,7 @@ public:
virtual ~VorbisState();
CodecType GetType() override { return TYPE_VORBIS; }
bool DecodeHeader(ogg_packet* aPacket) override;
bool DecodeHeader(OggPacketPtr aPacket) override;
int64_t Time(int64_t granulepos) override;
int64_t PacketDuration(ogg_packet* aPacket) override;
bool Init() override;
@ -370,7 +378,7 @@ public:
virtual ~TheoraState();
CodecType GetType() override { return TYPE_THEORA; }
bool DecodeHeader(ogg_packet* aPacket) override;
bool DecodeHeader(OggPacketPtr aPacket) override;
int64_t Time(int64_t granulepos) override;
int64_t StartTime(int64_t granulepos) override;
int64_t PacketDuration(ogg_packet* aPacket) override;
@ -413,7 +421,7 @@ public:
virtual ~OpusState();
CodecType GetType() override { return TYPE_OPUS; }
bool DecodeHeader(ogg_packet* aPacket) override;
bool DecodeHeader(OggPacketPtr aPacket) override;
int64_t Time(int64_t aGranulepos) override;
int64_t PacketDuration(ogg_packet* aPacket) override;
bool Init() override;
@ -491,7 +499,7 @@ public:
nsClassHashtable<nsUint32HashKey, MessageField> mMsgFieldStore;
CodecType GetType() override { return TYPE_SKELETON; }
bool DecodeHeader(ogg_packet* aPacket) override;
bool DecodeHeader(OggPacketPtr aPacket) override;
int64_t Time(int64_t granulepos) override { return -1; }
bool IsHeader(ogg_packet* aPacket) override { return true; }
@ -631,7 +639,7 @@ public:
explicit FlacState(ogg_page* aBosPage);
CodecType GetType() override { return TYPE_FLAC; }
bool DecodeHeader(ogg_packet* aPacket) override;
bool DecodeHeader(OggPacketPtr aPacket) override;
int64_t Time(int64_t granulepos) override;
int64_t PacketDuration(ogg_packet* aPacket) override;
bool IsHeader(ogg_packet* aPacket) override;
@ -650,17 +658,4 @@ private:
} // namespace mozilla
// This allows the use of nsAutoRefs for an ogg_packet that properly free the
// contents of the packet.
template <>
class nsAutoRefTraits<ogg_packet> : public nsPointerRefTraits<ogg_packet>
{
public:
static void Release(ogg_packet* aPacket)
{
mozilla::OggCodecState::ReleasePacket(aPacket);
}
};
#endif

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

@ -305,7 +305,7 @@ OggDemuxer::ReadHeaders(TrackInfo::TrackType aType,
{
while (!aState->DoneReadingHeaders()) {
DemuxUntilPacketAvailable(aType, aState);
ogg_packet* packet = aState->PacketOut();
OggPacketPtr packet = aState->PacketOut();
if (!packet) {
OGG_DEBUG("Ran out of header packets early; deactivating stream %ld", aState->mSerial);
aState->Deactivate();
@ -314,7 +314,7 @@ OggDemuxer::ReadHeaders(TrackInfo::TrackType aType,
// Local OggCodecState needs to decode headers in order to process
// packet granulepos -> time mappings, etc.
if (!aState->DecodeHeader(packet)) {
if (!aState->DecodeHeader(Move(packet))) {
OGG_DEBUG("Failed to decode ogg header packet; deactivating stream %ld", aState->mSerial);
aState->Deactivate();
return false;
@ -837,7 +837,7 @@ OggDemuxer::GetNextPacket(TrackInfo::TrackType aType)
while (true) {
if (packet) {
OggCodecState::ReleasePacket(state->PacketOut());
Unused << state->PacketOut();
}
DemuxUntilPacketAvailable(aType, state);
@ -1119,12 +1119,11 @@ OggDemuxer::SeekInternal(TrackInfo::TrackType aType, const TimeUnit& aTarget)
if (foundKeyframe && startTstamp == adjustedTarget) {
break;
}
ogg_packet* releaseMe = state->PacketOut();
if (foundKeyframe) {
tempPackets.Append(releaseMe);
tempPackets.Append(state->PacketOut());
} else {
// Discard video packets before the first keyframe.
OggCodecState::ReleasePacket(releaseMe);
Unused << state->PacketOut();
}
}
// Re-add all packet into the codec state in order.

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

@ -720,6 +720,10 @@ SessionStore.prototype = {
// As _collectTabData() doesn't save any form data, we need to manually
// capture it to bridge the time until the next input event arrives.
this.onTabInput(aWindow, aBrowser);
// A similar thing applies for the scroll position, otherwise a stray
// DOMTitleChanged event can clobber the scroll position if the user
// doesn't scroll again afterwards.
this.onTabScroll(aWindow, aBrowser);
}
log("onTabLoad() ran for tab " + aWindow.BrowserApp.getTabForBrowser(aBrowser).id);

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

@ -472,12 +472,6 @@ nsUDPSocket::OnSocketReady(PRFileDesc *fd, int16_t outFlags)
// support the maximum size of jumbo frames
char buff[9216];
count = PR_RecvFrom(mFD, buff, sizeof(buff), 0, &prClientAddr, PR_INTERVAL_NO_WAIT);
if (count < 1) {
NS_WARNING("error of recvfrom on UDP socket");
mCondition = NS_ERROR_UNEXPECTED;
return;
}
mByteReadCount += count;
FallibleTArray<uint8_t> data;
@ -1194,8 +1188,11 @@ nsUDPSocket::Send(const nsACString &aHost, uint16_t aPort,
const uint8_t *aData, uint32_t aDataLength,
uint32_t *_retval)
{
NS_ENSURE_ARG(aData);
NS_ENSURE_ARG_POINTER(_retval);
if (!((aData && aDataLength > 0) ||
(!aData && !aDataLength))) {
return NS_ERROR_INVALID_ARG;
}
*_retval = 0;

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

@ -7,6 +7,7 @@
Cu.import("resource://gre/modules/Services.jsm");
const HELLO_WORLD = "Hello World";
const EMPTY_MESSAGE = "";
add_test(function test_udp_message_raw_data() {
do_print("test for nsIUDPMessage.rawData");
@ -57,6 +58,30 @@ add_test(function test_udp_send_stream() {
socket.sendBinaryStream("127.0.0.1", socket.port, stream);
});
add_test(function test_udp_message_zero_length() {
do_print("test for nsIUDPMessage with zero length");
let socket = Cc["@mozilla.org/network/udp-socket;1"].createInstance(Ci.nsIUDPSocket);
socket.init(-1, true, Services.scriptSecurityManager.getSystemPrincipal());
do_print("Port assigned : " + socket.port);
socket.asyncListen({
QueryInterface : XPCOMUtils.generateQI([Ci.nsIUDPSocketListener]),
onPacketReceived : function(aSocket, aMessage){
let recv_data = String.fromCharCode.apply(null, aMessage.rawData);
do_check_eq(recv_data, EMPTY_MESSAGE);
do_check_eq(recv_data, aMessage.data);
socket.close();
run_next_test();
},
onStopListening: function(aSocket, aStatus){}
});
let rawData = new Uint8Array(EMPTY_MESSAGE.length);
let written = socket.send("127.0.0.1", socket.port, rawData, rawData.length);
do_check_eq(written, EMPTY_MESSAGE.length);
});
function run_test(){
run_next_test();
}

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

@ -1155,4 +1155,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1495295335769000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1495379956043000);

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

@ -2,7 +2,6 @@
00f.net: did not receive HSTS header
020wifi.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
0p.no: did not receive HSTS header
0x.sk: could not connect to host
0x1337.eu: could not connect to host
0x44.net: did not receive HSTS header
0xa.in: could not connect to host
@ -171,7 +170,6 @@ alexandre.sh: did not receive HSTS header
alexisabarca.com: did not receive HSTS header
alexsergeyev.com: could not connect to host
alfa24.pro: could not connect to host
alinode.com: could not connect to host
alittlebitcheeky.com: did not receive HSTS header
alkami.com: did not receive HSTS header
all-subtitles.com: did not receive HSTS header
@ -181,6 +179,7 @@ allforyou.at: could not connect to host
allinnote.com: could not connect to host
allmbw.com: could not connect to host
allstarswithus.com: could not connect to host
alltheducks.com: could not connect to host
alpha.irccloud.com: could not connect to host
alphabit-secure.com: could not connect to host
alphabuild.io: did not receive HSTS header
@ -205,11 +204,11 @@ amri.nl: could not connect to host
amunoz.org: did not receive HSTS header
anagra.ms: could not connect to host
analytic-s.ml: could not connect to host
anarchistischegroepnijmegen.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
anassiriphotography.com: could not connect to host
ancientkarma.com: could not connect to host
andere-gedanken.net: max-age too low: 10
andiplusben.com: could not connect to host
andisadhdspot.com: did not receive HSTS header
andreasbreitenlohner.de: did not receive HSTS header
andreasolsson.se: could not connect to host
andreastoneman.com: could not connect to host
@ -238,7 +237,6 @@ anonboards.com: did not receive HSTS header
anonymousstatecollegelulzsec.com: could not connect to host
anook.com: max-age too low: 0
another.ch: could not connect to host
anshuman-chatterjee.com: could not connect to host
ant.land: could not connect to host
anthenor.co.uk: could not connect to host
antimine.kr: could not connect to host
@ -246,7 +244,6 @@ antocom.com: did not receive HSTS header
antoniomarques.eu: did not receive HSTS header
antoniorequena.com.ve: could not connect to host
antscript.com: did not receive HSTS header
any.pm: could not connect to host
anycoin.me: could not connect to host
apachelounge.com: did not receive HSTS header
aparaatti.org: could not connect to host
@ -328,6 +325,10 @@ atolm.net: could not connect to host
atomik.pro: could not connect to host
atop.io: could not connect to host
attimidesigns.com: did not receive HSTS header
atypicom.es: did not receive HSTS header
atypicom.fr: did not receive HSTS header
atypicom.it: did not receive HSTS header
atypicom.pt: did not receive HSTS header
au.search.yahoo.com: max-age too low: 172800
aubiosales.com: did not receive HSTS header
aucubin.moe: could not connect to host
@ -378,6 +379,7 @@ badcronjob.com: could not connect to host
badkamergigant.com: could not connect to host
baff.lu: did not receive HSTS header
baiduaccount.com: could not connect to host
baiyangliu.com: could not connect to host
bakingstone.com: could not connect to host
bakkerdesignandbuild.com: did not receive HSTS header
balcan-underground.net: could not connect to host
@ -440,7 +442,6 @@ betcafearena.ro: did not receive HSTS header
betnet.fr: could not connect to host
betplanning.it: did not receive HSTS header
bets.de: did not receive HSTS header
betterlifemakers.com: could not connect to host
bettween.com: could not connect to host
betz.ro: did not receive HSTS header
bevapehappy.com: did not receive HSTS header
@ -469,7 +470,6 @@ binderapp.net: could not connect to host
biofam.ru: did not receive HSTS header
bionicspirit.com: could not connect to host
biophysik-ssl.de: did not receive HSTS header
bip.gov.sa: could not connect to host
birkman.com: did not receive HSTS header
bitchan.it: could not connect to host
bitcoinworld.me: could not connect to host
@ -515,6 +515,7 @@ bluescloud.xyz: could not connect to host
bluetenmeer.com: did not receive HSTS header
blupig.net: did not receive HSTS header
bm-trading.nl: did not receive HSTS header
bmros.com.ar: could not connect to host
bngsecure.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
bnhlibrary.com: could not connect to host
bobiji.com: did not receive HSTS header
@ -562,7 +563,6 @@ brettabel.com: did not receive HSTS header
brianmwaters.net: did not receive HSTS header
brickoo.com: could not connect to host
brid.gy: did not receive HSTS header
brigidaarie.com: could not connect to host
britzer-toner.de: did not receive HSTS header
brks.xyz: could not connect to host
broken-oak.com: could not connect to host
@ -658,9 +658,11 @@ cashmojo.com: max-age too low: 0
casinostest.com: did not receive HSTS header
casioshop.eu: could not connect to host
casovi.cf: could not connect to host
castagnonavocats.com: did not receive HSTS header
catarsisvr.com: did not receive HSTS header
catinmay.com: did not receive HSTS header
catnapstudios.com: could not connect to host
cattivo.nl: did not receive HSTS header
caveclan.org: did not receive HSTS header
cavedroid.xyz: could not connect to host
cbhq.net: could not connect to host
@ -690,6 +692,7 @@ cfetengineering.com: could not connect to host
cg.search.yahoo.com: did not receive HSTS header
chainmonitor.com: could not connect to host
chamathellawala.com: could not connect to host
chamilo.org: could not connect to host
championsofregnum.com: did not receive HSTS header
chandlerredding.com: did not receive HSTS header
changelab.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
@ -723,6 +726,7 @@ chinawhale.com: did not receive HSTS header
chirgui.eu: could not connect to host
chloe.re: could not connect to host
chm.vn: did not receive HSTS header
chokladfantasi.net: could not connect to host
chontalpa.pw: could not connect to host
chotu.net: could not connect to host
chris-web.info: could not connect to host
@ -778,6 +782,7 @@ cloudcy.net: could not connect to host
clouddesktop.co.nz: could not connect to host
cloudey.net: did not receive HSTS header
cloudflare.com: did not receive HSTS header
cloudily.com: could not connect to host
cloudimag.es: could not connect to host
cloudlink.club: could not connect to host
cloudns.com.au: could not connect to host
@ -800,18 +805,20 @@ cmsbattle.com: could not connect to host
cmscafe.ru: did not receive HSTS header
cn.search.yahoo.com: did not receive HSTS header
cni-certing.it: max-age too low: 0
cnwage.com: could not connect to host
cnwarn.com: could not connect to host
co50.com: did not receive HSTS header
cocaine-import.agency: could not connect to host
cocktailfuture.fr: could not connect to host
codabix.com: did not receive HSTS header
codabix.de: could not connect to host
codabix.net: could not connect to host
code-poets.co.uk: could not connect to host
code.google.com: did not receive HSTS header (error ignored - included regardless)
codeco.pw: could not connect to host
codeforce.io: could not connect to host
codelayer.ca: could not connect to host
codepoet.de: could not connect to host
codepult.com: could not connect to host
codepx.com: did not receive HSTS header
codereview.appspot.com: did not receive HSTS header (error ignored - included regardless)
codereview.chromium.org: did not receive HSTS header (error ignored - included regardless)
@ -838,7 +845,6 @@ comparejewelleryprices.co.uk: could not connect to host
completeid.com: max-age too low: 86400
completionist.audio: could not connect to host
compucorner.com.mx: could not connect to host
comssa.org.au: could not connect to host
concord-group.co.jp: did not receive HSTS header
condesaelectronics.com: max-age too low: 0
confirm365.com: could not connect to host
@ -847,13 +853,14 @@ connect.ua: did not receive HSTS header
consciousandglamorous.com: could not connect to host
console.python.org: did not receive HSTS header
constructionjobs.com: did not receive HSTS header
consumeractionlawgroup.com: could not connect to host
contactbig.com: did not receive HSTS header
contarkos.xyz: could not connect to host
content-api-dev.azurewebsites.net: could not connect to host
continuumgaming.com: could not connect to host
controlcenter.gigahost.dk: did not receive HSTS header
convert.zone: could not connect to host
coolchevy.org.ua: could not connect to host
coolchevy.org.ua: did not receive HSTS header
cor-ser.es: could not connect to host
coralproject.net: did not receive HSTS header
coralrosado.com.br: did not receive HSTS header
@ -891,7 +898,9 @@ crendontech.com: could not connect to host
crestoncottage.com: could not connect to host
criticalaim.com: could not connect to host
crizk.com: could not connect to host
croome.no-ip.org: could not connect to host
crosssec.com: did not receive HSTS header
crow.tw: could not connect to host
crowd.supply: could not connect to host
crowdcurity.com: did not receive HSTS header
crowdjuris.com: could not connect to host
@ -1068,7 +1077,7 @@ disowned.net: max-age too low: 0
dissimulo.me: could not connect to host
dittvertshus.no: could not connect to host
diva-ey.com: could not connect to host
dizihocasi.com: did not receive HSTS header
dizihocasi.com: could not connect to host
dizorg.net: could not connect to host
dj4et.de: could not connect to host
djz4music.com: did not receive HSTS header
@ -1184,11 +1193,11 @@ egg-ortho.ch: did not receive HSTS header
egit.co: could not connect to host
eglek.com: did not receive HSTS header
ego-world.org: could not connect to host
ehito.ovh: could not connect to host
ehrenamt-skpfcw.de: could not connect to host
eicfood.com: could not connect to host
eidolonhost.com: did not receive HSTS header
ekbanden.nl: could not connect to host
ekedc.com: could not connect to host
elaintehtaat.fi: did not receive HSTS header
elan-organics.com: did not receive HSTS header
elanguest.pl: could not connect to host
@ -1231,8 +1240,8 @@ endlessdark.net: max-age too low: 600
endlessdiy.ca: could not connect to host
endlesstone.com: did not receive HSTS header
enersec.co.uk: could not connect to host
enfoqueseguro.com: did not receive HSTS header
engelwerbung.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
engineeryourmarketing.com: could not connect to host
enigmacpt.com: did not receive HSTS header
enigmail.net: did not receive HSTS header
enjoy-nepal.de: max-age too low: 0
@ -1302,6 +1311,8 @@ everybooks.com: max-age too low: 60
everything.place: could not connect to host
evin.ml: could not connect to host
evites.me: could not connect to host
evoludis.net: did not receive HSTS header
evolutionlending.co.uk: could not connect to host
evomon.com: could not connect to host
evossd.tk: could not connect to host
ewuchuan.com: could not connect to host
@ -1348,6 +1359,7 @@ farhadexchange.com: did not receive HSTS header
farhood.org: could not connect to host
fashioncare.cz: did not receive HSTS header
fasset.jp: could not connect to host
fastconfirm.com: could not connect to host
fastograph.com: could not connect to host
fastopen.ml: could not connect to host
fatgeekflix.net: could not connect to host
@ -1365,7 +1377,7 @@ felisslovakia.sk: [Exception... "Component returned failure code: 0x80004005 (NS
feliwyn.fr: did not receive HSTS header
feminists.co: could not connect to host
fenteo.com: could not connect to host
feragon.net: max-age too low: 84600
feragon.net: could not connect to host
ferrolatino.com: could not connect to host
festember.com: did not receive HSTS header
festrip.com: could not connect to host
@ -1423,7 +1435,6 @@ flowersandclouds.com: could not connect to host
flowlo.me: could not connect to host
flushstudios.com: did not receive HSTS header
flyaces.com: did not receive HSTS header
flyss.net: could not connect to host
fm83.nl: could not connect to host
fndout.com: did not receive HSTS header
fnvsecurity.com: could not connect to host
@ -1459,6 +1470,7 @@ frangor.info: did not receive HSTS header
franta.biz: did not receive HSTS header
franta.email: did not receive HSTS header
franzt.de: could not connect to host
franzt.ovh: could not connect to host
frasys.io: max-age too low: 7776000
fredvoyage.fr: did not receive HSTS header
freeflow.tv: could not connect to host
@ -1500,6 +1512,7 @@ futurenda.com: could not connect to host
futuretechnologi.es: could not connect to host
futureyouhealth.com: did not receive HSTS header
fx-rk.com: did not receive HSTS header
fxtalk.cn: could not connect to host
fysiohaenraets.nl: did not receive HSTS header
fzn.io: could not connect to host
fzslm.me: did not receive HSTS header
@ -1515,6 +1528,7 @@ galardi.org: did not receive HSTS header
galenskap.eu: could not connect to host
gallery44.org: did not receive HSTS header
galoisvpn.xyz: could not connect to host
game-files.net: did not receive HSTS header
game.yt: could not connect to host
gamecave.de: could not connect to host
gamechasm.com: could not connect to host
@ -1528,7 +1542,7 @@ gamepiece.com: could not connect to host
gamerslair.org: did not receive HSTS header
gamesdepartment.co.uk: did not receive HSTS header
gameserver-sponsor.de: could not connect to host
gamingmedia.eu: could not connect to host
gamingmedia.eu: did not receive HSTS header
gampenhof.de: did not receive HSTS header
gaptek.id: did not receive HSTS header
garbage-juice.com: could not connect to host
@ -1635,6 +1649,7 @@ gogold-g.com: could not connect to host
gold24.in: did not receive HSTS header
goldendata.io: could not connect to host
golocal-media.de: did not receive HSTS header
gonkar.com: did not receive HSTS header
gonzalosanchez.mx: could not connect to host
goodenough.nz: did not receive HSTS header
goodwin43.ru: could not connect to host
@ -1681,6 +1696,7 @@ grunex.com: did not receive HSTS header
gryffin.ga: could not connect to host
gryffin.ml: could not connect to host
gryffin.tk: could not connect to host
gsi-network.com: did not receive HSTS header
gsm-map.com: could not connect to host
gsnort.com: did not receive HSTS header
gtamodshop.org: could not connect to host
@ -1696,8 +1712,10 @@ gurom.lv: could not connect to host
gurusupe.com: could not connect to host
guso.gq: could not connect to host
guso.ml: could not connect to host
guso.site: could not connect to host
guso.tech: could not connect to host
gussi.is: did not receive HSTS header
gvatas.in: could not connect to host
gvt2.com: could not connect to host (error ignored - included regardless)
gvt3.com: could not connect to host (error ignored - included regardless)
gw2reload.eu: could not connect to host
@ -1729,8 +1747,6 @@ haitschi.com: could not connect to host
haitschi.de: could not connect to host
haitschi.net: could not connect to host
haitschi.org: could not connect to host
hake.me: could not connect to host
haktec.de: could not connect to host
haku.moe: could not connect to host
hakugin.org: could not connect to host
halo.red: could not connect to host
@ -1746,6 +1762,7 @@ happygastro.com: could not connect to host
harabuhouse.com: did not receive HSTS header
harbor-light.net: could not connect to host
hardline.xyz: could not connect to host
hardtfrieden.de: could not connect to host
haribosupermix.com: could not connect to host
harmonycosmetic.com: max-age too low: 300
harristony.com: could not connect to host
@ -1785,7 +1802,6 @@ helpmebuild.com: did not receive HSTS header
hemdal.se: could not connect to host
hencagon.com: could not connect to host
henriknoerr.com: could not connect to host
hepteract.us: did not receive HSTS header
hermes-net.de: could not connect to host
herpaderp.net: could not connect to host
herrenfahrt.com: did not receive HSTS header
@ -1818,11 +1834,11 @@ holifestival-freyung.de: could not connect to host
holymoly.lu: could not connect to host
homa.website: could not connect to host
homophoni.com: could not connect to host
honeycome.net: could not connect to host
honeytracks.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
hongzhaxiaofendui.com: could not connect to host
honoo.com: could not connect to host
hookandloom.com: did not receive HSTS header
hooowl.com: could not connect to host
hooray.beer: could not connect to host
horosho.in: could not connect to host
horseboners.xxx: did not receive HSTS header
@ -1868,6 +1884,7 @@ hydronium.ga: could not connect to host
hydronium.me: could not connect to host
hydronium.tk: could not connect to host
hyper69.com: did not receive HSTS header
hyperreal.info: could not connect to host
i-jp.net: could not connect to host
i-partners.sk: did not receive HSTS header
iamokay.nl: did not receive HSTS header
@ -1886,6 +1903,7 @@ id-co.in: could not connect to host
id-conf.com: could not connect to host
idacmedia.com: max-age too low: 5184000
idcrane.com: could not connect to host
ideadozz.hu: could not connect to host
ideal-envelopes.co.uk: did not receive HSTS header
ideasmeetingpoint.com: could not connect to host
ideation-inc.co.jp: did not receive HSTS header
@ -1906,6 +1924,7 @@ igule.net: could not connect to host
ihrlotto.de: could not connect to host
ihrnationalrat.ch: could not connect to host
ihsbsd.me: could not connect to host
ihsbsd.tk: could not connect to host
ihuanmeng.com: did not receive HSTS header
iklive.org: did not receive HSTS header
ikujii.com: max-age too low: 0
@ -1921,6 +1940,7 @@ imakepoems.net: could not connect to host
ime.moe: could not connect to host
imguoguo.com: did not receive HSTS header
imim.pw: did not receive HSTS header
immersionwealth.com: could not connect to host
immoprotect.ca: did not receive HSTS header
immortals-co.com: did not receive HSTS header
immoverkauf24.at: did not receive HSTS header
@ -1947,6 +1967,7 @@ infinitusgaming.eu: could not connect to host
inflation.ml: could not connect to host
infogrfx.com: did not receive HSTS header
infotics.es: did not receive HSTS header
ingesol.fr: did not receive HSTS header
injigo.com: did not receive HSTS header
inkable.com.au: did not receive HSTS header
inkedguy.de: could not connect to host
@ -2010,6 +2031,7 @@ ishillaryclintoninprisonyet.com: could not connect to host
isitamor.pm: could not connect to host
iskaz.rs: did not receive HSTS header
israkurort.com: did not receive HSTS header
isslshop.com: could not connect to host
istaspirtslietas.lv: did not receive HSTS header
it-go.net: did not receive HSTS header
itechgeek.com: max-age too low: 0
@ -2019,10 +2041,10 @@ itriskltd.com: could not connect to host
itsadog.co.uk: did not receive HSTS header
itsagadget.com: did not receive HSTS header
itsamurai.ru: max-age too low: 2592000
itsatrap.nl: could not connect to host
itsecurityassurance.pw: could not connect to host
itsg-faq.de: could not connect to host
itshost.ru: could not connect to host
itspawned.com: could not connect to host
ivi-fertility.com: max-age too low: 0
ivi.es: max-age too low: 0
ivk.website: could not connect to host
@ -2077,6 +2099,7 @@ jazzinutrecht.info: [Exception... "Component returned failure code: 0x80004005 (
jazzncheese.com: could not connect to host
jbn.mx: could not connect to host
jcch.de: could not connect to host
jcf-office.com: did not receive HSTS header
jcor.me: did not receive HSTS header
jcoscia.com: could not connect to host
jctf.io: could not connect to host
@ -2165,7 +2188,6 @@ kaneo-gmbh.de: did not receive HSTS header
kaplatz.is: could not connect to host
kapucini.si: max-age too low: 0
karaoketonight.com: could not connect to host
karsofsystems.com: could not connect to host
kasilag.me: could not connect to host
katiaetdavid.fr: could not connect to host
katproxy.online: could not connect to host
@ -2186,7 +2208,7 @@ keeley.gq: could not connect to host
keeley.ml: could not connect to host
keeleysam.me: could not connect to host
keepclean.me: could not connect to host
ken.fm: could not connect to host
ken.fm: did not receive HSTS header
kenderbeton-magyarorszag.hu: did not receive HSTS header
kenderbetonmagyarorszag.hu: did not receive HSTS header
kenderhaz-magyarorszag.hu: did not receive HSTS header
@ -2263,9 +2285,10 @@ krayx.com: could not connect to host
kreavis.com: did not receive HSTS header
kredite.sale: could not connect to host
kriegt.es: could not connect to host
kristikala.nl: could not connect to host
kristjanrang.eu: did not receive HSTS header
krmela.com: could not connect to host
kroetenfuchs.de: could not connect to host
kroon.email: could not connect to host
kropkait.pl: could not connect to host
krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
krunut.com: did not receive HSTS header
@ -2291,6 +2314,7 @@ kylinj.com: could not connect to host
kyochon.fr: could not connect to host
kz.search.yahoo.com: did not receive HSTS header
kzjnet.com: could not connect to host
kzsdabas.hu: could not connect to host
l2guru.ru: could not connect to host
labaia.info: could not connect to host
labina.com.tr: did not receive HSTS header
@ -2317,6 +2341,7 @@ lashstuff.com: did not receive HSTS header
lask.in: did not receive HSTS header
latour-managedcare.ch: did not receive HSTS header
latus.xyz: could not connect to host
laufseminare-laufreisen.com: did not receive HSTS header
lausitzer-widerstand.de: could not connect to host
lavine.ch: did not receive HSTS header
lavval.com: could not connect to host
@ -2331,6 +2356,7 @@ learnedovo.com: could not connect to host
learnfrenchfluently.com: did not receive HSTS header
learningorder.com: could not connect to host
lechiennoir.net: did not receive HSTS header
lecourtier.fr: did not receive HSTS header
ledgerscope.net: could not connect to host
leermotorrijden.nl: max-age too low: 300
legarage.org: did not receive HSTS header
@ -2343,8 +2369,9 @@ lemp.io: did not receive HSTS header
lenovogaming.com: did not receive HSTS header
lentri.com: did not receive HSTS header
leob.in: did not receive HSTS header
leolana.com: did not receive HSTS header
leolana.com: could not connect to host
leon-jaekel.com: could not connect to host
leonhooijer.nl: could not connect to host
leopold.email: could not connect to host
leopotamgroup.com: could not connect to host
leovanna.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
@ -2356,6 +2383,7 @@ lesperlesdunet.fr: could not connect to host
letras.mus.br: did not receive HSTS header
letsmultiplayerplay.com: did not receive HSTS header
letustravel.tk: could not connect to host
levelum.com: did not receive HSTS header
lfullerdesign.com: did not receive HSTS header
lgiswa.com.au: did not receive HSTS header
lgrs.com.au: did not receive HSTS header
@ -2414,6 +2442,7 @@ listafirmelor.com: could not connect to host
litespeed.io: could not connect to host
livedemo.io: could not connect to host
livej.am: could not connect to host
liverewrite.com: could not connect to host
livi.co: did not receive HSTS header
loadingdeck.com: did not receive HSTS header
loadso.me: could not connect to host
@ -2498,12 +2527,12 @@ maddin.ga: could not connect to host
madebymagnitude.com: did not receive HSTS header
maderwin.com: could not connect to host
mae-berlinistanbul.com: could not connect to host
maelstrom.ninja: could not connect to host
mafamane.com: could not connect to host
mafiaforum.de: did not receive HSTS header
mafiareturns.com: max-age too low: 2592000
magenx.com: did not receive HSTS header
mahamed91.pw: could not connect to host
maidofhonorcleaning.net: could not connect to host
mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
mail.google.com: did not receive HSTS header (error ignored - included regardless)
maildragon.com: could not connect to host
@ -2511,7 +2540,6 @@ mailhost.it: could not connect to host
makeitdynamic.com: could not connect to host
makerstuff.net: did not receive HSTS header
makeuplove.nl: could not connect to host
makeyourank.com: could not connect to host
malerversand.de: did not receive HSTS header
malfait.nl: could not connect to host
malkaso.com.ua: could not connect to host
@ -2536,7 +2564,6 @@ marcuskoh.com: could not connect to host
mariannematthew.com: could not connect to host
marie-curie.fr: could not connect to host
marie-elisabeth.dk: did not receive HSTS header
marie.club: could not connect to host
mario.party: did not receive HSTS header
markaconnor.com: could not connect to host
markayapilandirma.com: could not connect to host
@ -2553,6 +2580,7 @@ martineve.com: did not receive HSTS header
martinsfamilyappliance.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
marumagic.com: did not receive HSTS header
masjidtawheed.net: did not receive HSTS header
massot.eu: did not receive HSTS header
masterapi.ninja: did not receive HSTS header
masteringtheterminal.com: did not receive HSTS header
matatall.com: did not receive HSTS header
@ -2567,7 +2595,7 @@ mattcoles.io: did not receive HSTS header
mattfin.ch: could not connect to host
matthewprenger.com: could not connect to host
matthiassteen.be: max-age too low: 0
mattsvensson.com: could not connect to host
mattsvensson.com: did not receive HSTS header
mattwb65.com: could not connect to host
matty.digital: max-age too low: 3600
maultrom.ml: could not connect to host
@ -2738,6 +2766,7 @@ motoryz.com: max-age too low: 300
mottvd.com: could not connect to host
moula.com.au: did not receive HSTS header
mountainmusicpromotions.com: did not receive HSTS header
movepin.com: did not receive HSTS header
moviesabout.net: could not connect to host
moy-gorod.od.ua: did not receive HSTS header
moy.cat: did not receive HSTS header
@ -2867,6 +2896,7 @@ netzpolitik.org: did not receive HSTS header
netztest.at: did not receive HSTS header
neueonlinecasino2016.com: could not connect to host
neuralgic.net: could not connect to host
neurogroove.info: could not connect to host
neutralox.com: did not receive HSTS header
never-afk.de: did not receive HSTS header
neveta.com: could not connect to host
@ -2905,6 +2935,7 @@ nippler.org: did not receive HSTS header
nippombashi.net: did not receive HSTS header
nipponcareers.com: did not receive HSTS header
nixien.fr: could not connect to host
nkadvertising.online: did not receive HSTS header
nkinka.de: did not receive HSTS header
nlegall.fr: did not receive HSTS header
nmctest.net: could not connect to host
@ -2938,6 +2969,7 @@ novacoast.com: did not receive HSTS header
novatrucking.de: could not connect to host
nowak.ninja: did not receive HSTS header
noworrywp.com: could not connect to host
noxlogic.nl: could not connect to host
nozoe.jp: did not receive HSTS header
np.search.yahoo.com: did not receive HSTS header
npol.de: did not receive HSTS header
@ -3026,7 +3058,6 @@ onlinespielothek.com: did not receive HSTS header
onlinewetten.de: could not connect to host
onlyshopstation.com: did not receive HSTS header
ononpay.com: did not receive HSTS header
onovlena.dn.ua: could not connect to host
onpatient.com: did not receive HSTS header
ontras.com: could not connect to host
onyxwall.com: could not connect to host
@ -3081,7 +3112,6 @@ otichi.com: did not receive HSTS header
ottospora.nl: could not connect to host
ourbank.com: did not receive HSTS header
outdoorproducts.com: did not receive HSTS header
outerlimitsdigital.com: did not receive HSTS header
outetc.com: could not connect to host
outreachbuddy.com: could not connect to host
outsider.im: could not connect to host
@ -3110,7 +3140,6 @@ pahae.de: did not receive HSTS header
paintingat.com: could not connect to host
paisaone.com: did not receive HSTS header
paku.me: could not connect to host
palmer.im: could not connect to host
pamplona.tv: could not connect to host
pamsoft.pl: max-age too low: 0
panaceallc.net: could not connect to host
@ -3191,6 +3220,7 @@ petrolplus.ru: did not receive HSTS header
petsittersservices.com: could not connect to host
pettsy.com: could not connect to host
pewboards.com: could not connect to host
pfudor.tk: could not connect to host
pgpm.io: could not connect to host
pharmgkb.org: could not connect to host
phil.tw: could not connect to host
@ -3267,7 +3297,6 @@ polycoise.com: could not connect to host
polymathematician.com: could not connect to host
polypho.nyc: could not connect to host
pompompoes.com: could not connect to host
pontokay.com.br: did not receive HSTS header
pontualcomp.com: max-age too low: 2592000
poolsandstuff.com: did not receive HSTS header
poon.tech: could not connect to host
@ -3294,6 +3323,7 @@ preworkout.me: could not connect to host
prezola.com: did not receive HSTS header
prgslab.net: could not connect to host
prielwurmjaeger.de: did not receive HSTS header
printeknologies.com: did not receive HSTS header
printexpress.cloud: did not receive HSTS header
printfn.com: could not connect to host
priolkar.com: did not receive HSTS header
@ -3376,6 +3406,7 @@ qwilink.me: did not receive HSTS header
r10n.com: did not receive HSTS header
r15.me: could not connect to host
r3bl.me: did not receive HSTS header
ra-schaal.de: could not connect to host
raajheshkannaa.com: could not connect to host
radicaleducation.net: could not connect to host
rafaelcz.de: could not connect to host
@ -3386,7 +3417,6 @@ randomcage.com: did not receive HSTS header
randomcloud.net: could not connect to host
rankthespot.com: could not connect to host
rannseier.org: did not receive HSTS header
rapido.nu: did not receive HSTS header
rapidresearch.me: could not connect to host
rapidthunder.io: could not connect to host
rasing.me: did not receive HSTS header
@ -3493,7 +3523,7 @@ robteix.com: did not receive HSTS header
robtex.net: did not receive HSTS header
robtex.org: did not receive HSTS header
rochman.id: could not connect to host
rocksberg.net: did not receive HSTS header
rocksberg.net: could not connect to host
rockstarloan.com: max-age too low: 0
roddis.net: did not receive HSTS header
rodney.id.au: did not receive HSTS header
@ -3525,6 +3555,7 @@ rsmaps.org: could not connect to host
rubbereggs.ca: could not connect to host
rubberfurs.org: max-age too low: 86400
rubecodeberg.com: could not connect to host
rubendv.be: could not connect to host
rubenschulz.nl: did not receive HSTS header
ruborr.se: did not receive HSTS header
rubyshop.nl: max-age too low: 604800
@ -3638,6 +3669,7 @@ securityinet.biz: did not receive HSTS header
securityinet.net: did not receive HSTS header
securityinet.org.il: did not receive HSTS header
securiviera.ch: did not receive HSTS header
sedrubal.de: could not connect to host
seedbox.fr: did not receive HSTS header
seedboxers.net: did not receive HSTS header
seele.ca: could not connect to host
@ -3689,7 +3721,7 @@ shanesage.com: could not connect to host
shanewadleigh.com: could not connect to host
shareimg.xyz: could not connect to host
sharepass.pw: could not connect to host
sharevari.com: could not connect to host
sharevari.com: did not receive HSTS header
shauncrowley.co.uk: could not connect to host
shaunwheelhou.se: could not connect to host
shawnh.net: could not connect to host
@ -3709,7 +3741,6 @@ shoprose.ru: could not connect to host
shops.neonisi.com: could not connect to host
shortr.li: could not connect to host
showkeeper.tv: did not receive HSTS header
shrike.me: could not connect to host
shukatsu-note.com: could not connect to host
shv25.se: could not connect to host
shwongacc.com: could not connect to host
@ -3735,6 +3766,7 @@ simplefraud.com: [Exception... "Component returned failure code: 0x80004005 (NS_
simplelearner.com: could not connect to host
simplepractice.com: did not receive HSTS header
simply-premium.com: max-age too low: 0
simplycloud.de: could not connect to host
sin30.net: could not connect to host
sincron.org: could not connect to host
sinful.pw: could not connect to host
@ -3746,6 +3778,7 @@ sites.google.com: did not receive HSTS header (error ignored - included regardle
sitesten.com: did not receive HSTS header
sitsy.ru: did not receive HSTS header
sixtwentyten.com: did not receive HSTS header
skhosting.eu: did not receive HSTS header
skidstresser.com: could not connect to host
skile.ru: could not connect to host
skk.io: could not connect to host
@ -3755,7 +3788,6 @@ skullhouse.nyc: did not receive HSTS header
skyflix.me: did not receive HSTS header
skyoy.com: could not connect to host
slash-dev.de: did not receive HSTS header
slashand.co: could not connect to host
slashem.me: did not receive HSTS header
slattery.co: could not connect to host
sleep10.com: could not connect to host
@ -3817,6 +3849,7 @@ solsystems.ru: could not connect to host
someshit.xyz: could not connect to host
somethingnew.xyz: did not receive HSTS header
sonicrainboom.rocks: could not connect to host
sortaweird.net: could not connect to host
sotiran.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
sotor.de: did not receive HSTS header
soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
@ -3864,6 +3897,7 @@ spreadsheets.google.com: did not receive HSTS header (error ignored - included r
spreed.me: did not receive HSTS header
sproutconnections.com: did not receive HSTS header
sprybear.com: did not receive HSTS header
spuffin.com: could not connect to host
square.gs: could not connect to host
squatldf.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
sqzryang.com: did not receive HSTS header
@ -3873,7 +3907,6 @@ srrr.ca: could not connect to host
ss.wtf: could not connect to host
ssl.panoramio.com: did not receive HSTS header
ssl.rip: could not connect to host
sslpoint.com: did not receive HSTS header
ssmato.me: could not connect to host
ssnc.org: max-age too low: 300
sss3s.com: did not receive HSTS header
@ -3953,6 +3986,7 @@ suksit.com: could not connect to host
sumoatm.com: did not receive HSTS header
sumoscout.de: did not receive HSTS header
suncountrymarine.com: did not receive HSTS header
sunflyer.cn: did not receive HSTS header
sunnyfruit.ru: did not receive HSTS header
sunshinepress.org: could not connect to host
supcro.com: could not connect to host
@ -4095,8 +4129,10 @@ theclementinebutchers.com: could not connect to host
theclubjersey.com: did not receive HSTS header
thecoffeehouse.xyz: could not connect to host
thediaryofadam.com: did not receive HSTS header
thedisc.nl: could not connect to host
theendofzion.com: did not receive HSTS header
theescapistswiki.com: could not connect to host
theeyeopener.com: did not receive HSTS header
theflowerbasketonline.com: could not connect to host
thefootballanalyst.com: could not connect to host
thefrozenfire.com: did not receive HSTS header
@ -4134,6 +4170,7 @@ thirty5.net: did not receive HSTS header
thisisacompletetest.ga: could not connect to host
thisisforager.com: did not receive HSTS header
thiswebhost.com: did not receive HSTS header
thomas-gibertie.fr: did not receive HSTS header
thomaskliszowski.fr: did not receive HSTS header
thomaswoo.com: could not connect to host
thorncreek.net: did not receive HSTS header
@ -4197,13 +4234,10 @@ tomharling.co.uk: max-age too low: 86400
tomharling.uk: max-age too low: 86400
tomharris.tech: did not receive HSTS header
tomlankhorst.nl: did not receive HSTS header
tomli.me: could not connect to host
tommsy.com: did not receive HSTS header
tommyads.com: could not connect to host
tomudding.nl: did not receive HSTS header
tonabor.ru: could not connect to host
tonburi.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no]
tonsit.org: did not receive HSTS header
tonyfantjr.com: could not connect to host
toomanypillows.com: could not connect to host
topbargains.com.au: did not receive HSTS header
@ -4217,7 +4251,6 @@ toshnix.com: could not connect to host
totem-eshop.cz: could not connect to host
toucedo.de: could not connect to host
tourpeer.com: did not receive HSTS header
townhousedevelopments.com.au: could not connect to host
toxme.se: could not connect to host
tpbcdn.com: could not connect to host
tpe-edu.com: could not connect to host
@ -4239,7 +4272,6 @@ tripdelta.com: did not receive HSTS header
trixies-wish.nz: could not connect to host
trollme.me: could not connect to host
trunkjunk.co: did not receive HSTS header
trusitio.com: did not receive HSTS header
trusteecar.com: did not receive HSTS header
trustmeimfancy.com: could not connect to host
truthmessages.pw: could not connect to host
@ -4281,6 +4313,7 @@ txclimbers.com: could not connect to host
txf.pw: could not connect to host
ty2u.com: did not receive HSTS header
tylian.net: max-age too low: 0
typingrevolution.com: did not receive HSTS header
tyrelius.com: did not receive HSTS header
tyroproducts.eu: did not receive HSTS header
tzappa.net: could not connect to host
@ -4292,6 +4325,7 @@ ubicv.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_
ublox.com: did not receive HSTS header
ubtce.com: could not connect to host
ubuntuhot.com: did not receive HSTS header
udomain.net: could not connect to host
uega.net: did not receive HSTS header
ufgaming.com: did not receive HSTS header
ufotable.uk: did not receive HSTS header
@ -4329,7 +4363,6 @@ unmanaged.space: could not connect to host
uno-pizza.ru: could not connect to host
unplugg3r.dk: could not connect to host
unravel.ie: could not connect to host
unsupervised.ca: could not connect to host
unsystem.net: did not receive HSTS header
unterschicht.tv: could not connect to host
unwiredbrain.com: could not connect to host
@ -4350,7 +4383,6 @@ uscitizenship.info: did not receive HSTS header
uscurrency.gov: did not receive HSTS header
used-in.jp: did not receive HSTS header
usercare.com: did not receive HSTS header
usleep.net: could not connect to host
ustr.gov: max-age too low: 86400
utleieplassen.no: could not connect to host
utopiagalaxy.space: could not connect to host
@ -4380,19 +4412,18 @@ vanitas.xyz: could not connect to host
vanitynailworkz.com: could not connect to host
vanlaanen.com: did not receive HSTS header
vansieleghem.com: could not connect to host
vante.me: could not connect to host
vapordepot.jp: did not receive HSTS header
vasanth.org: did not receive HSTS header
vbulletin-russia.com: could not connect to host
vbulletinrussia.com: could not connect to host
vcdove.com: did not receive HSTS header
vcr.re: could not connect to host
vdrpro.com: could not connect to host
veblen.com: could not connect to host
vechkasov.ru: did not receive HSTS header
vehent.org: did not receive HSTS header
vemokin.net: did not receive HSTS header
venixplays-stream.ml: could not connect to host
venturepro.com: could not connect to host
verifikatorindonesia.com: could not connect to host
vermontcareergateway.org: could not connect to host
versia.ru: did not receive HSTS header
@ -4450,6 +4481,8 @@ w-spotlight.appspot.com: did not receive HSTS header (error ignored - included r
w4a.fr: did not receive HSTS header
w4xzr.top: could not connect to host
w4xzr.xyz: could not connect to host
wachtwoordencheck.nl: did not receive HSTS header
waixingrenfuli.vip: could not connect to host
waixingrenfuli7.vip: could not connect to host
wakapp.de: could not connect to host
walkeryoung.ca: could not connect to host
@ -4687,6 +4720,7 @@ xtream-hosting.de: could not connect to host
xtream-hosting.eu: could not connect to host
xtreamhosting.eu: could not connect to host
xuri.me: max-age too low: 2592000
xuwei.de: could not connect to host
xuyh0120.win: could not connect to host
xxbase.com: could not connect to host
xyndrac.net: did not receive HSTS header
@ -4766,6 +4800,8 @@ zeytin.pro: could not connect to host
zh.search.yahoo.com: did not receive HSTS header
zhaojin97.cn: did not receive HSTS header
zhendingresources.com: could not connect to host
zippy-download.com: did not receive HSTS header
zippy-download.de: did not receive HSTS header
zirtue.io: could not connect to host
ziyuanabc.xyz: could not connect to host
zkillboard.com: did not receive HSTS header

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

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

@ -580,23 +580,3 @@ pub unsafe fn is_array_like(cx: *mut JSContext, value: HandleValue) -> bool {
assert!(JS_IsArrayObject(cx, value, &mut result));
result
}
/// Creates a typed JS array from a Rust slice
pub unsafe fn slice_to_array_buffer_view<T>(cx: *mut JSContext, data: &[T]) -> *mut JSObject
where T: ArrayBufferViewContents
{
let js_object = T::new(cx, data.len() as u32);
assert!(!js_object.is_null());
update_array_buffer_view(js_object, data);
js_object
}
/// Updates a typed JS array from a Rust slice
pub unsafe fn update_array_buffer_view<T>(obj: *mut JSObject, data: &[T])
where T: ArrayBufferViewContents
{
let mut buffer = array_buffer_view_data(obj);
if let Some(ref mut buffer) = buffer {
ptr::copy_nonoverlapping(&data[0], &mut buffer[0], data.len())
}
}

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

@ -6,12 +6,12 @@ use core::nonzero::NonZero;
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::VREyeParametersBinding;
use dom::bindings::codegen::Bindings::VREyeParametersBinding::VREyeParametersMethods;
use dom::bindings::conversions::slice_to_array_buffer_view;
use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
use dom::vrfieldofview::VRFieldOfView;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::Float32Array;
use std::default::Default;
use webvr_traits::WebVREyeParameters;
@ -39,7 +39,10 @@ impl VREyeParameters {
};
unsafe {
result.offset.set(slice_to_array_buffer_view(global.get_cx(), &result.parameters.borrow().offset));
let _ = Float32Array::create(global.get_cx(),
result.parameters.borrow().offset.len() as u32,
Some(&result.parameters.borrow().offset),
result.offset.handle_mut());
}
result
}

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

@ -5,7 +5,6 @@
use core::nonzero::NonZero;
use dom::bindings::codegen::Bindings::VRFrameDataBinding;
use dom::bindings::codegen::Bindings::VRFrameDataBinding::VRFrameDataMethods;
use dom::bindings::conversions::{slice_to_array_buffer_view, update_array_buffer_view};
use dom::bindings::error::Fallible;
use dom::bindings::js::{JS, Root};
use dom::bindings::num::Finite;
@ -14,6 +13,7 @@ use dom::globalscope::GlobalScope;
use dom::vrpose::VRPose;
use dom::window::Window;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::Float32Array;
use std::cell::Cell;
use webvr_traits::WebVRFrameData;
@ -50,16 +50,23 @@ impl VRFrameData {
first_timestamp: Cell::new(0.0)
};
let root = reflect_dom_object(box framedata,
global,
VRFrameDataBinding::Wrap);
unsafe {
framedata.left_proj.set(slice_to_array_buffer_view(global.get_cx(), &matrix));
framedata.left_view.set(slice_to_array_buffer_view(global.get_cx(), &matrix));
framedata.right_proj.set(slice_to_array_buffer_view(global.get_cx(), &matrix));
framedata.right_view.set(slice_to_array_buffer_view(global.get_cx(), &matrix));
let ref framedata = *root;
let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix),
framedata.left_proj.handle_mut());
let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix),
framedata.left_view.handle_mut());
let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix),
framedata.right_proj.handle_mut());
let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix),
framedata.right_view.handle_mut());
}
reflect_dom_object(box framedata,
global,
VRFrameDataBinding::Wrap)
root
}
pub fn Constructor(window: &Window) -> Fallible<Root<VRFrameData>> {
@ -72,10 +79,23 @@ impl VRFrameData {
#[allow(unsafe_code)]
pub fn update(&self, data: &WebVRFrameData) {
unsafe {
update_array_buffer_view(self.left_proj.get(), &data.left_projection_matrix);
update_array_buffer_view(self.left_view.get(), &data.left_view_matrix);
update_array_buffer_view(self.right_proj.get(), &data.right_projection_matrix);
update_array_buffer_view(self.right_view.get(), &data.right_view_matrix);
let cx = self.global().get_cx();
typedarray!(in(cx) let left_proj_array: Float32Array = self.left_proj.get());
if let Ok(mut array) = left_proj_array {
array.update(&data.left_projection_matrix);
}
typedarray!(in(cx) let left_view_array: Float32Array = self.left_view.get());
if let Ok(mut array) = left_view_array {
array.update(&data.left_view_matrix);
}
typedarray!(in(cx) let right_proj_array: Float32Array = self.right_proj.get());
if let Ok(mut array) = right_proj_array {
array.update(&data.right_projection_matrix);
}
typedarray!(in(cx) let right_view_array: Float32Array = self.right_view.get());
if let Ok(mut array) = right_view_array {
array.update(&data.right_view_matrix);
}
}
self.pose.update(&data.pose);
self.timestamp.set(data.timestamp);

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

@ -6,11 +6,11 @@ use core::nonzero::NonZero;
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::VRPoseBinding;
use dom::bindings::codegen::Bindings::VRPoseBinding::VRPoseMethods;
use dom::bindings::conversions::{slice_to_array_buffer_view, update_array_buffer_view};
use dom::bindings::js::Root;
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::Float32Array;
use std::ptr;
use webvr_traits::webvr;
@ -33,9 +33,12 @@ unsafe fn update_or_create_typed_array(cx: *mut JSContext,
match src {
Some(ref data) => {
if dst.get().is_null() {
dst.set(slice_to_array_buffer_view(cx, &data));
let _ = Float32Array::create(cx, data.len() as u32, src, dst.handle_mut());
} else {
update_array_buffer_view(dst.get(), &data);
typedarray!(in(cx) let array: Float32Array = dst.get());
if let Ok(mut array) = array {
array.update(data);
}
}
},
None => {

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

@ -6,12 +6,12 @@ use core::nonzero::NonZero;
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::VRStageParametersBinding;
use dom::bindings::codegen::Bindings::VRStageParametersBinding::VRStageParametersMethods;
use dom::bindings::conversions::{slice_to_array_buffer_view, update_array_buffer_view};
use dom::bindings::js::Root;
use dom::bindings::num::Finite;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::Float32Array;
use webvr_traits::WebVRStageParameters;
#[dom_struct]
@ -34,8 +34,10 @@ impl VRStageParameters {
transform: Heap::default()
};
unsafe {
stage.transform.set(slice_to_array_buffer_view(global.get_cx(),
&stage.parameters.borrow().sitting_to_standing_transform));
let _ = Float32Array::create(global.get_cx(),
stage.parameters.borrow().sitting_to_standing_transform.len() as u32,
Some(&stage.parameters.borrow().sitting_to_standing_transform),
stage.transform.handle_mut());
}
stage
@ -50,7 +52,11 @@ impl VRStageParameters {
#[allow(unsafe_code)]
pub fn update(&self, parameters: &WebVRStageParameters) {
unsafe {
update_array_buffer_view(self.transform.get(), &parameters.sitting_to_standing_transform);
let cx = self.global().get_cx();
typedarray!(in(cx) let array: Float32Array = self.transform.get());
if let Ok(mut array) = array {
array.update(&parameters.sitting_to_standing_transform);
}
}
*self.parameters.borrow_mut() = parameters.clone();
}

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

@ -177,7 +177,7 @@ Use `RUST_BACKTRACE=1` to dump the backtrace when Servo panics.
### println!()
You will want to add your own logs. Luckily, many structures [implement the `fmt::Debug` trait](https://doc.rust-lang.org/std/fmt/#fmt::display-vs-fmt::debug), so adding:
You will want to add your own logs. Luckily, many structures [implement the `fmt::Debug` trait](https://doc.rust-lang.org/std/fmt/#fmtdisplay-vs-fmtdebug), so adding:
``` rust
println!("foobar: {:?}", foobar)