зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to m-i
This commit is contained in:
Коммит
ea85356f95
|
@ -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 = Don’t 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. We’ve 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. We’ve imported these sites and your bookmarks from %1$S into %2$S.
|
||||
automigration.undo.message.bookmarks.logins = Pick up where you left off. We’ve 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. We’ve imported these sites and your bookmarks and history from %1$S into %2$S.
|
||||
automigration.undo.message.logins = Pick up where you left off. We’ve imported your passwords from %1$S into %2$S.
|
||||
automigration.undo.message.logins.visits = Pick up where you left off. We’ve imported these sites and your history and passwords from %1$S into %2$S.
|
||||
automigration.undo.message.visits = Pick up where you left off. We’ve 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
Двоичные данные
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 |
Двоичные данные
browser/themes/shared/fxa/sync-illustration@2x.png
Двоичные данные
browser/themes/shared/fxa/sync-illustration@2x.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 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(), ¶meters.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(¶meters.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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче