зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to inbound. a=merge on a CLOSED TREE
This commit is contained in:
Коммит
6edc2e0f3b
|
@ -5780,6 +5780,7 @@ const nodeToTooltipMap = {
|
|||
"appMenu-zoomEnlarge-button": "zoomEnlarge-button.tooltip",
|
||||
"appMenu-zoomReset-button": "zoomReset-button.tooltip",
|
||||
"appMenu-zoomReduce-button": "zoomReduce-button.tooltip",
|
||||
"reader-mode-button": "reader-mode-button.tooltip",
|
||||
};
|
||||
const nodeToShortcutMap = {
|
||||
"bookmarks-menu-button": "manBookmarkKb",
|
||||
|
@ -5800,6 +5801,7 @@ const nodeToShortcutMap = {
|
|||
"appMenu-zoomEnlarge-button": "key_fullZoomEnlarge",
|
||||
"appMenu-zoomReset-button": "key_fullZoomReset",
|
||||
"appMenu-zoomReduce-button": "key_fullZoomReduce",
|
||||
"reader-mode-button": "key_toggleReaderMode",
|
||||
};
|
||||
|
||||
if (AppConstants.platform == "macosx") {
|
||||
|
|
|
@ -882,6 +882,7 @@
|
|||
</hbox>
|
||||
<image id="reader-mode-button"
|
||||
class="urlbar-icon urlbar-page-action"
|
||||
tooltip="dynamic-shortcut-tooltip"
|
||||
role="button"
|
||||
hidden="true"
|
||||
onclick="ReaderParent.buttonClick(event);"/>
|
||||
|
|
|
@ -126,7 +126,7 @@ add_task(async function test_devtools_inspectedWindow_eval_bindings() {
|
|||
if (jsterm.hud.NEW_CONSOLE_OUTPUT_ENABLED === true) {
|
||||
// Wait for the message to appear on the console.
|
||||
const messageNode = await new Promise(resolve => {
|
||||
jsterm.hud.on("new-messages", function onThisMessage(e, messages) {
|
||||
jsterm.hud.on("new-messages", function onThisMessage(messages) {
|
||||
for (let m of messages) {
|
||||
resolve(m.node);
|
||||
jsterm.hud.off("new-messages", onThisMessage);
|
||||
|
@ -166,7 +166,7 @@ add_task(async function test_devtools_inspectedWindow_eval_bindings() {
|
|||
is(nodes.length, 3, "The object preview has the expected number of nodes");
|
||||
} else {
|
||||
const options = await new Promise(resolve => {
|
||||
jsterm.once("variablesview-open", (evt, view, options) => resolve(options));
|
||||
jsterm.once("variablesview-open", (view, options) => resolve(options));
|
||||
});
|
||||
|
||||
const objectType = options.objectActor.type;
|
||||
|
|
|
@ -440,6 +440,9 @@ stopButton.tooltip=Stop loading this page (%S)
|
|||
# LOCALIZATION NOTE (urlbar-zoom-button.tooltip):
|
||||
# %S is the keyboard shortcut for resetting the zoom level to 100%
|
||||
urlbar-zoom-button.tooltip=Reset zoom level (%S)
|
||||
# LOCALIZATION NOTE (reader-mode-button.tooltip):
|
||||
# %S is the keyboard shortcut for entering/exiting reader view
|
||||
reader-mode-button.tooltip=Toggle reader view (%S)
|
||||
|
||||
# LOCALIZATION NOTE(zoom-button.label): %S is the current page zoom level,
|
||||
# %% will be displayed as a single % character (% is commonly used to define
|
||||
|
|
|
@ -64,7 +64,6 @@ var ReaderParent = {
|
|||
button.setAttribute("readeractive", true);
|
||||
button.hidden = false;
|
||||
let closeText = gStringBundle.GetStringFromName("readerView.close");
|
||||
button.setAttribute("tooltiptext", closeText);
|
||||
command.setAttribute("label", closeText);
|
||||
command.setAttribute("hidden", false);
|
||||
command.setAttribute("accesskey", gStringBundle.GetStringFromName("readerView.close.accesskey"));
|
||||
|
@ -74,7 +73,6 @@ var ReaderParent = {
|
|||
button.removeAttribute("readeractive");
|
||||
button.hidden = !browser.isArticle;
|
||||
let enterText = gStringBundle.GetStringFromName("readerView.enter");
|
||||
button.setAttribute("tooltiptext", enterText);
|
||||
command.setAttribute("label", enterText);
|
||||
command.setAttribute("hidden", !browser.isArticle);
|
||||
command.setAttribute("accesskey", gStringBundle.GetStringFromName("readerView.enter.accesskey"));
|
||||
|
|
|
@ -401,9 +401,12 @@ notification[value="translation"] menulist > .menulist-dropmarker {
|
|||
|
||||
/* Bookmarking panel */
|
||||
#editBookmarkPanelStarIcon {
|
||||
list-style-image: url("chrome://browser/skin/places/starred48.png");
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
-moz-context-properties: fill;
|
||||
fill: var(--toolbarbutton-icon-fill-attention);
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
#editBookmarkPanelTitle {
|
||||
|
|
|
@ -37,7 +37,6 @@ browser.jar:
|
|||
skin/classic/browser/places/bookmarks-menu-arrow.png (places/bookmarks-menu-arrow.png)
|
||||
* skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css)
|
||||
skin/classic/browser/places/livemark-item.png (places/livemark-item.png)
|
||||
skin/classic/browser/places/starred48.png (places/starred48.png)
|
||||
* skin/classic/browser/places/places.css (places/places.css)
|
||||
skin/classic/browser/places/organizer.css (places/organizer.css)
|
||||
skin/classic/browser/places/organizer.xml (places/organizer.xml)
|
||||
|
|
Двоичные данные
browser/themes/linux/places/starred48.png
Двоичные данные
browser/themes/linux/places/starred48.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 1.8 KiB |
|
@ -378,16 +378,12 @@ html|input.urlbar-input {
|
|||
|
||||
/* BOOKMARKING PANEL */
|
||||
#editBookmarkPanelStarIcon {
|
||||
list-style-image: url("chrome://browser/skin/places/starred48.png");
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
@media (min-resolution: 2dppx) {
|
||||
#editBookmarkPanelStarIcon {
|
||||
list-style-image: url("chrome://browser/skin/places/starred48@2x.png");
|
||||
-moz-image-region: rect(0px 96px 96px 0px);
|
||||
}
|
||||
list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
-moz-context-properties: fill;
|
||||
fill: var(--toolbarbutton-icon-fill-attention);
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
#editBookmarkPanelTitle {
|
||||
|
|
|
@ -45,8 +45,6 @@ browser.jar:
|
|||
skin/classic/browser/places/toolbar.png (places/toolbar.png)
|
||||
skin/classic/browser/places/toolbarDropMarker.png (places/toolbarDropMarker.png)
|
||||
skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css)
|
||||
skin/classic/browser/places/starred48.png (places/starred48.png)
|
||||
skin/classic/browser/places/starred48@2x.png (places/starred48@2x.png)
|
||||
skin/classic/browser/places/unfiledBookmarks.png (places/unfiledBookmarks.png)
|
||||
skin/classic/browser/places/unfiledBookmarks@2x.png (places/unfiledBookmarks@2x.png)
|
||||
skin/classic/browser/places/tag.png (places/tag.png)
|
||||
|
|
Двоичные данные
browser/themes/osx/places/starred48.png
Двоичные данные
browser/themes/osx/places/starred48.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 1.8 KiB |
Двоичные данные
browser/themes/osx/places/starred48@2x.png
Двоичные данные
browser/themes/osx/places/starred48@2x.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 4.8 KiB |
|
@ -8,7 +8,6 @@
|
|||
|
||||
:root:-moz-lwtheme {
|
||||
--toolbar-bgcolor: var(--chrome-secondary-background-color);
|
||||
--toolbar-gbimage: none;
|
||||
--toolbar-non-lwt-bgcolor: var(--toolbar-bgcolor);
|
||||
--toolbar-non-lwt-textcolor: var(--chrome-color);
|
||||
--toolbar-non-lwt-bgimage: none;
|
||||
|
|
|
@ -644,9 +644,12 @@ html|*.urlbar-input:-moz-lwtheme::placeholder,
|
|||
/* bookmarking panel */
|
||||
|
||||
#editBookmarkPanelStarIcon {
|
||||
list-style-image: url("chrome://browser/skin/places/starred48.png");
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
-moz-context-properties: fill;
|
||||
fill: var(--toolbarbutton-icon-fill-attention);
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin: 4px;
|
||||
}
|
||||
|
||||
#editBookmarkPanelTitle {
|
||||
|
|
|
@ -39,7 +39,6 @@ browser.jar:
|
|||
skin/classic/browser/places/toolbarDropMarker.png (places/toolbarDropMarker.png)
|
||||
skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css)
|
||||
skin/classic/browser/places/libraryToolbar.png (places/libraryToolbar.png)
|
||||
skin/classic/browser/places/starred48.png (places/starred48.png)
|
||||
skin/classic/browser/places/tag.png (places/tag.png)
|
||||
skin/classic/browser/places/allBookmarks.png (places/allBookmarks.png)
|
||||
skin/classic/browser/places/unsortedBookmarks.png (places/unsortedBookmarks.png)
|
||||
|
|
Двоичные данные
browser/themes/windows/places/starred48.png
Двоичные данные
browser/themes/windows/places/starred48.png
Двоичный файл не отображается.
До Ширина: | Высота: | Размер: 1.8 KiB |
|
@ -38,11 +38,6 @@ class FontInspector {
|
|||
this.init();
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.store.dispatch(updatePreviewText(""));
|
||||
this.update(false, "");
|
||||
}
|
||||
|
||||
init() {
|
||||
if (!this.inspector) {
|
||||
return;
|
||||
|
@ -67,6 +62,9 @@ class FontInspector {
|
|||
|
||||
// Listen for theme changes as the color of the previews depend on the theme
|
||||
gDevTools.on("theme-switched", this.onThemeChanged);
|
||||
|
||||
this.store.dispatch(updatePreviewText(""));
|
||||
this.update(false, "");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -49,7 +49,7 @@ function test()
|
|||
function testFocus(sw, hud) {
|
||||
let sp = sw.Scratchpad;
|
||||
|
||||
function onMessage(event, messages) {
|
||||
function onMessage(messages) {
|
||||
let msg = [...messages][0];
|
||||
let node = msg.node;
|
||||
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"use strict";
|
||||
|
||||
const { Task } = require("devtools/shared/task");
|
||||
const { executeSoon, isGenerator, reportException } = require("devtools/shared/DevToolsUtils");
|
||||
const { executeSoon, isGenerator, isAsyncFunction, reportException } =
|
||||
require("devtools/shared/DevToolsUtils");
|
||||
const ERROR_TYPE = exports.ERROR_TYPE = "@@redux/middleware/task#error";
|
||||
|
||||
/**
|
||||
|
@ -21,6 +22,10 @@ function task({ dispatch, getState }) {
|
|||
return Task.spawn(action.bind(null, dispatch, getState))
|
||||
.catch(handleError.bind(null, dispatch));
|
||||
}
|
||||
if (isAsyncFunction(action)) {
|
||||
return action(dispatch, getState)
|
||||
.catch(handleError.bind(null, dispatch));
|
||||
}
|
||||
|
||||
/*
|
||||
if (isPromise(action)) {
|
||||
|
|
|
@ -16,7 +16,7 @@ const {KeyCodes} = require("devtools/client/shared/keycodes");
|
|||
loader.lazyServiceGetter(this, "clipboardHelper",
|
||||
"@mozilla.org/widget/clipboardhelper;1",
|
||||
"nsIClipboardHelper");
|
||||
loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/old-event-emitter");
|
||||
loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter");
|
||||
loader.lazyRequireGetter(this, "AutocompletePopup", "devtools/client/shared/autocomplete-popup");
|
||||
loader.lazyRequireGetter(this, "ToolSidebar", "devtools/client/framework/sidebar", true);
|
||||
loader.lazyRequireGetter(this, "Messages", "devtools/client/webconsole/console-output", true);
|
||||
|
@ -639,7 +639,7 @@ JSTerm.prototype = {
|
|||
window.focus();
|
||||
}
|
||||
|
||||
this.emit("variablesview-open", view, options);
|
||||
this.emit("variablesview-open", {view, options});
|
||||
return view;
|
||||
};
|
||||
|
||||
|
|
|
@ -212,7 +212,8 @@ class Message extends Component {
|
|||
let onFrameClick;
|
||||
if (serviceContainer && frame) {
|
||||
if (source === MESSAGE_SOURCE.CSS) {
|
||||
onFrameClick = serviceContainer.onViewSourceInStyleEditor;
|
||||
onFrameClick = serviceContainer.onViewSourceInStyleEditor
|
||||
|| serviceContainer.onViewSource;
|
||||
} else if (/^Scratchpad\/\d+$/.test(frame.source)) {
|
||||
onFrameClick = serviceContainer.onViewSourceInScratchpad
|
||||
|| serviceContainer.onViewSource;
|
||||
|
|
|
@ -12,7 +12,7 @@ const actions = require("devtools/client/webconsole/new-console-output/actions/i
|
|||
const { createContextMenu } = require("devtools/client/webconsole/new-console-output/utils/context-menu");
|
||||
const { configureStore } = require("devtools/client/webconsole/new-console-output/store");
|
||||
|
||||
const EventEmitter = require("devtools/shared/old-event-emitter");
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
const ConsoleOutput = createFactory(require("devtools/client/webconsole/new-console-output/components/ConsoleOutput"));
|
||||
const FilterBar = createFactory(require("devtools/client/webconsole/new-console-output/components/FilterBar"));
|
||||
const SideBar = createFactory(require("devtools/client/webconsole/new-console-output/components/SideBar"));
|
||||
|
@ -241,7 +241,7 @@ NewConsoleOutputWrapper.prototype = {
|
|||
|
||||
promise = new Promise(resolve => {
|
||||
let jsterm = this.jsterm;
|
||||
jsterm.hud.on("new-messages", function onThisMessage(e, messages) {
|
||||
jsterm.hud.on("new-messages", function onThisMessage(messages) {
|
||||
for (let m of messages) {
|
||||
if (m.timeStamp === timeStampToMatch) {
|
||||
resolve(m.node);
|
||||
|
|
|
@ -28,7 +28,7 @@ const NewConsoleOutputWrapper = browserRequire(
|
|||
"devtools/client/webconsole/new-console-output/new-console-output-wrapper");
|
||||
const actions =
|
||||
browserRequire("devtools/client/webconsole/new-console-output/actions/index");
|
||||
const EventEmitter = browserRequire("devtools/shared/old-event-emitter");
|
||||
const EventEmitter = browserRequire("devtools/shared/event-emitter");
|
||||
const testPackets = Array.from({length: NUM_MESSAGES}).map((el, id) => ({
|
||||
"from": "server1.conn4.child1/consoleActor2",
|
||||
"type": "consoleAPICall",
|
||||
|
|
|
@ -437,7 +437,7 @@ function* generateNetworkEventStubs() {
|
|||
|
||||
let onNetworkUpdate = new Promise(resolve => {
|
||||
let i = 0;
|
||||
ui.jsterm.hud.on("network-message-updated", function onNetworkUpdated(event, res) {
|
||||
ui.jsterm.hud.on("network-message-updated", function onNetworkUpdated(res) {
|
||||
let updateKey = `${keys[i++]} update`;
|
||||
// We cannot ensure the form of the network update packet, some properties
|
||||
// might be in another order than in the original packet.
|
||||
|
|
|
@ -178,7 +178,6 @@ skip-if = true # Bug 1437845
|
|||
[browser_console_error_source_click.js]
|
||||
skip-if = true # Bug 1437847
|
||||
[browser_console_filters.js]
|
||||
skip-if = true # Bug 1437848
|
||||
[browser_console_nsiconsolemessage.js]
|
||||
[browser_console_open_or_focus.js]
|
||||
[browser_console_restore.js]
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
function onNewMessage(aEvent, aNewMessages) {
|
||||
function onNewMessage(aNewMessages) {
|
||||
for (let msg of aNewMessages) {
|
||||
// Messages that shouldn't be output contain the substring FAIL_TEST
|
||||
if (msg.node.textContent.includes("FAIL_TEST")) {
|
||||
|
@ -119,7 +119,7 @@ add_task(function* () {
|
|||
|
||||
let deferred = defer();
|
||||
|
||||
let onFetch = (aEvent, aVar) => {
|
||||
let onFetch = (aVar) => {
|
||||
// Skip the notification from console.dir variablesview-fetched.
|
||||
if (aVar._variablesView != hud.jsterm._variablesView) {
|
||||
return;
|
||||
|
|
|
@ -3,58 +3,49 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/* import-globals-from head.js */
|
||||
|
||||
// Check that the Browser Console does not use the same filter prefs as the Web
|
||||
// Console. See bug 878186.
|
||||
// Console.
|
||||
|
||||
"use strict";
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf8,<p>browser console filters";
|
||||
const WEB_CONSOLE_PREFIX = "devtools.webconsole.filter.";
|
||||
const BROWSER_CONSOLE_PREFIX = "devtools.browserconsole.filter.";
|
||||
|
||||
add_task(function* () {
|
||||
yield loadTab(TEST_URI);
|
||||
|
||||
info("open the web console");
|
||||
let hud = yield openConsole();
|
||||
add_task(async function () {
|
||||
let hud = await openNewTabAndConsole(TEST_URI);
|
||||
ok(hud, "web console opened");
|
||||
|
||||
is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), true,
|
||||
"'exception' filter is enabled (browser console)");
|
||||
is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), true,
|
||||
"'exception' filter is enabled (web console)");
|
||||
let filterState = await getFilterState(hud);
|
||||
ok(filterState.error, "The web console error filter is enabled");
|
||||
|
||||
info("toggle 'exception' filter");
|
||||
hud.setFilterState("exception", false);
|
||||
info(`toggle "error" filter`);
|
||||
await setFilterState(hud, {
|
||||
error: false
|
||||
});
|
||||
|
||||
is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), true,
|
||||
"'exception' filter is enabled (browser console)");
|
||||
is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), false,
|
||||
"'exception' filter is disabled (web console)");
|
||||
|
||||
hud.setFilterState("exception", true);
|
||||
|
||||
// We need to let the console opening event loop to finish.
|
||||
let deferred = defer();
|
||||
executeSoon(() => closeConsole().then(() => deferred.resolve(null)));
|
||||
yield deferred.promise;
|
||||
filterState = await getFilterState(hud);
|
||||
ok(!filterState.error, "The web console error filter is disabled");
|
||||
|
||||
await resetFilters(hud);
|
||||
await setFilterBarVisible(hud, false);
|
||||
await closeConsole();
|
||||
info("web console closed");
|
||||
hud = yield HUDService.toggleBrowserConsole();
|
||||
|
||||
hud = await HUDService.toggleBrowserConsole();
|
||||
ok(hud, "browser console opened");
|
||||
|
||||
is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), true,
|
||||
"'exception' filter is enabled (browser console)");
|
||||
is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), true,
|
||||
"'exception' filter is enabled (web console)");
|
||||
filterState = await getFilterState(hud);
|
||||
ok(filterState.error, "The browser console error filter is enabled");
|
||||
|
||||
info("toggle 'exception' filter");
|
||||
hud.setFilterState("exception", false);
|
||||
info(`toggle "error" filter in browser console`);
|
||||
await setFilterState(hud, {
|
||||
error: false
|
||||
});
|
||||
|
||||
is(Services.prefs.getBoolPref(BROWSER_CONSOLE_PREFIX + "exception"), false,
|
||||
"'exception' filter is disabled (browser console)");
|
||||
is(Services.prefs.getBoolPref(WEB_CONSOLE_PREFIX + "exception"), true,
|
||||
"'exception' filter is enabled (web console)");
|
||||
filterState = await getFilterState(hud);
|
||||
ok(!filterState.error, "The browser console error filter is disabled");
|
||||
|
||||
hud.setFilterState("exception", true);
|
||||
await resetFilters(hud);
|
||||
await setFilterBarVisible(hud, false);
|
||||
});
|
||||
|
|
|
@ -62,28 +62,16 @@ add_task(async function () {
|
|||
let msg = await waitFor(() => findMessage(hud, "liveBrowserConsoleMessage"));
|
||||
ok(msg, "message element for liveBrowserConsoleMessage (nsIConsoleMessage)");
|
||||
|
||||
const outputNode = hud.ui.outputNode;
|
||||
const toolbar = outputNode.querySelector(".webconsole-filterbar-primary");
|
||||
|
||||
// Test that filtering is working by hiding log messages...
|
||||
// show the filter bar.
|
||||
toolbar.querySelector(".devtools-filter-icon").click();
|
||||
const filterBar = await waitFor(() => {
|
||||
return outputNode.querySelector(".webconsole-filterbar-secondary");
|
||||
// Disable the log filter.
|
||||
await setFilterState(hud, {
|
||||
log: false
|
||||
});
|
||||
ok(filterBar, "Filter bar is shown when filter icon is clicked.");
|
||||
|
||||
// Check that messages are not shown when their filter is turned off.
|
||||
filterBar.querySelector(".log").click();
|
||||
|
||||
// And then checking that log messages are hidden.
|
||||
// And then checking that the log messages are hidden.
|
||||
await waitFor(() => findMessages(hud, "cachedBrowserConsoleMessage").length === 0);
|
||||
await waitFor(() => findMessages(hud, "liveBrowserConsoleMessage").length === 0);
|
||||
await waitFor(() => findMessages(hud, "liveBrowserConsoleMessage2").length === 0);
|
||||
|
||||
// Turn the log filter off.
|
||||
filterBar.querySelector(".log").click();
|
||||
|
||||
// Hide the filter bar.
|
||||
toolbar.querySelector(".devtools-filter-icon").click();
|
||||
resetFilters(hud);
|
||||
await setFilterBarVisible(hud, false);
|
||||
});
|
||||
|
|
|
@ -81,7 +81,7 @@ function onExecuteGetName(results) {
|
|||
});
|
||||
}
|
||||
|
||||
function onGetNameFetch(evt, view) {
|
||||
function onGetNameFetch(view) {
|
||||
gVariablesView = view._variablesView;
|
||||
ok(gVariablesView, "variables view object");
|
||||
|
||||
|
|
|
@ -3,34 +3,30 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/* import-globals-from head.js */
|
||||
|
||||
// Tests filters.
|
||||
|
||||
"use strict";
|
||||
const { MESSAGE_LEVEL } = require("devtools/client/webconsole/new-console-output/constants");
|
||||
|
||||
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/test-console-filters.html";
|
||||
|
||||
add_task(async function () {
|
||||
let hud = await openNewTabAndConsole(TEST_URI);
|
||||
const outputNode = hud.ui.outputNode;
|
||||
const toolbar = await waitFor(() => {
|
||||
return outputNode.querySelector(".webconsole-filterbar-primary");
|
||||
});
|
||||
ok(toolbar, "Toolbar found");
|
||||
// Show the filter bar
|
||||
toolbar.querySelector(".devtools-filter-icon").click();
|
||||
const filterBar = await waitFor(() => {
|
||||
return outputNode.querySelector(".webconsole-filterbar-secondary");
|
||||
});
|
||||
ok(filterBar, "Filter bar is shown when filter icon is clicked.");
|
||||
const hud = await openNewTabAndConsole(TEST_URI);
|
||||
await setFilterBarVisible(hud, true);
|
||||
|
||||
let filterState = await getFilterState(hud);
|
||||
|
||||
// Check defaults.
|
||||
Object.values(MESSAGE_LEVEL).forEach(level => {
|
||||
ok(filterIsEnabled(filterBar.querySelector(`.${level}`)),
|
||||
`Filter button for ${level} is on by default`);
|
||||
});
|
||||
["net", "netxhr"].forEach(category => {
|
||||
ok(!filterIsEnabled(filterBar.querySelector(`.${category}`)),
|
||||
`Filter button for ${category} is off by default`);
|
||||
});
|
||||
|
||||
for (let category of ["error", "warn", "log", "info", "debug"]) {
|
||||
let state = filterState[category];
|
||||
ok(state, `Filter button for ${category} is on by default`);
|
||||
}
|
||||
for (let category of ["css", "net", "netxhr"]) {
|
||||
let state = filterState[category];
|
||||
ok(!state, `Filter button for ${category} is off by default`);
|
||||
}
|
||||
|
||||
// Check that messages are shown as expected. This depends on cached messages being
|
||||
// shown.
|
||||
|
@ -38,7 +34,9 @@ add_task(async function () {
|
|||
"Messages of all levels shown when filters are on.");
|
||||
|
||||
// Check that messages are not shown when their filter is turned off.
|
||||
filterBar.querySelector(".error").click();
|
||||
await setFilterState(hud, {
|
||||
error: false
|
||||
});
|
||||
await waitFor(() => findMessages(hud, "").length == 4);
|
||||
ok(true, "When a filter is turned off, its messages are not shown.");
|
||||
|
||||
|
@ -62,5 +60,8 @@ async function testFilterPersistence() {
|
|||
ok(!filterIsEnabled(filterBar.querySelector(".error")),
|
||||
"Filter button setting is persisted");
|
||||
ok(findMessages(hud, "").length == 4,
|
||||
"Messages of all levels shown when filters are on.");
|
||||
"testFilterPersistence: Messages of all levels shown when filters are on.");
|
||||
|
||||
await resetFilters(hud);
|
||||
await setFilterBarVisible(hud, false);
|
||||
}
|
||||
|
|
|
@ -31,6 +31,8 @@ const STATUS_CODES_GA_PARAMS = `?${new URLSearchParams({
|
|||
"utm_campaign": "default"
|
||||
})}`;
|
||||
|
||||
const wcActions = require("devtools/client/webconsole/new-console-output/actions/index");
|
||||
|
||||
Services.prefs.setBoolPref("devtools.browserconsole.new-frontend-enabled", true);
|
||||
registerCleanupFunction(async function () {
|
||||
Services.prefs.clearUserPref("devtools.browserconsole.new-frontend-enabled");
|
||||
|
@ -108,7 +110,7 @@ function waitForMessages({ hud, messages }) {
|
|||
return new Promise(resolve => {
|
||||
const matchedMessages = [];
|
||||
hud.ui.on("new-messages",
|
||||
function messagesReceived(e, newMessages) {
|
||||
function messagesReceived(newMessages) {
|
||||
for (let message of messages) {
|
||||
if (message.matched) {
|
||||
continue;
|
||||
|
@ -475,10 +477,12 @@ async function closeConsole(tab = gBrowser.selectedTab) {
|
|||
* @param Object clickEventProps
|
||||
* The custom properties which would be used to dispatch a click event
|
||||
* @returns Promise
|
||||
* A Promise that is resolved when the link click simulation occured or when the click is not dispatched.
|
||||
* A Promise that is resolved when the link click simulation occured or
|
||||
* when the click is not dispatched.
|
||||
* The promise resolves with an object that holds the following properties
|
||||
* - link: url of the link or null(if event not fired)
|
||||
* - where: "tab" if tab is active or "tabshifted" if tab is inactive or null(if event not fired)
|
||||
* - where: "tab" if tab is active or "tabshifted" if tab is inactive
|
||||
* or null(if event not fired)
|
||||
*/
|
||||
function simulateLinkClick(element, clickEventProps) {
|
||||
// Override openUILinkIn to prevent navigating.
|
||||
|
@ -501,7 +505,7 @@ function simulateLinkClick(element, clickEventProps) {
|
|||
|
||||
// Declare a timeout Promise that we can use to make sure openUILinkIn was not called.
|
||||
let timeoutId;
|
||||
const onTimeout = new Promise(function(resolve, reject) {
|
||||
const onTimeout = new Promise(function (resolve) {
|
||||
timeoutId = setTimeout(() => {
|
||||
window.openUILinkIn = oldOpenUILinkIn;
|
||||
timeoutId = null;
|
||||
|
@ -565,11 +569,11 @@ async function openMessageInNetmonitor(toolbox, hud, url, urlInConsole) {
|
|||
ok(true, "The netmonitor panel is selected when clicking on the network message");
|
||||
|
||||
let { store, windowRequire } = panelWin;
|
||||
let actions = windowRequire("devtools/client/netmonitor/src/actions/index");
|
||||
let nmActions = windowRequire("devtools/client/netmonitor/src/actions/index");
|
||||
let { getSelectedRequest } =
|
||||
windowRequire("devtools/client/netmonitor/src/selectors/index");
|
||||
|
||||
store.dispatch(actions.batchEnable(false));
|
||||
store.dispatch(nmActions.batchEnable(false));
|
||||
|
||||
await waitUntil(() => {
|
||||
const selected = getSelectedRequest(store.getState());
|
||||
|
@ -608,3 +612,135 @@ async function waitForBrowserConsole() {
|
|||
}, "web-console-created");
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the state of a console filter.
|
||||
*
|
||||
* @param {Object} hud
|
||||
*/
|
||||
async function getFilterState(hud) {
|
||||
const filterBar = await setFilterBarVisible(hud, true);
|
||||
const buttons = filterBar.querySelectorAll("button");
|
||||
const result = { };
|
||||
|
||||
for (let button of buttons) {
|
||||
let classes = new Set(button.classList.values());
|
||||
let checked = classes.has("checked");
|
||||
|
||||
classes.delete("devtools-button");
|
||||
classes.delete("checked");
|
||||
|
||||
let category = classes.values().next().value;
|
||||
|
||||
result[category] = checked;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the state of a console filter.
|
||||
*
|
||||
* @param {Object} hud
|
||||
* @param {Object} settings
|
||||
* Category settings in the following format:
|
||||
* {
|
||||
* error: true,
|
||||
* warn: true,
|
||||
* log: true,
|
||||
* info: true,
|
||||
* debug: true,
|
||||
* css: false,
|
||||
* netxhr: false,
|
||||
* net: false
|
||||
* }
|
||||
*/
|
||||
async function setFilterState(hud, settings) {
|
||||
const filterBar = await setFilterBarVisible(hud, true);
|
||||
|
||||
for (let category in settings) {
|
||||
let check = settings[category];
|
||||
let button = filterBar.querySelector(`.${category}`);
|
||||
|
||||
if (!button) {
|
||||
ok(false, `setFilterState() called with a category of ${category}, ` +
|
||||
`which doesn't exist.`);
|
||||
}
|
||||
|
||||
info(`Setting the ${category} category to ${check ? "checked" : "disabled"}`);
|
||||
|
||||
let checked = button.classList.contains("checked");
|
||||
if (check) {
|
||||
// Enable filter.
|
||||
if (checked) {
|
||||
return;
|
||||
}
|
||||
button.click();
|
||||
await waitFor(() => {
|
||||
return button.classList.contains("checked");
|
||||
});
|
||||
} else if (checked) {
|
||||
// Disable filter.
|
||||
button.click();
|
||||
await waitFor(() => {
|
||||
return !button.classList.contains("checked");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the visibility of the filter bar.
|
||||
*
|
||||
* @param {Object} hud
|
||||
* @param {Boolean} state
|
||||
* Set filter bar visibility
|
||||
*/
|
||||
async function setFilterBarVisible(hud, state) {
|
||||
info(`Setting the filter bar visibility to ${state}`);
|
||||
|
||||
const outputNode = hud.ui.outputNode;
|
||||
const toolbar = await waitFor(() => {
|
||||
return outputNode.querySelector(".webconsole-filterbar-primary");
|
||||
});
|
||||
let filterBar = outputNode.querySelector(".webconsole-filterbar-secondary");
|
||||
|
||||
// Show filter bar if state is true
|
||||
if (state) {
|
||||
if (!filterBar) {
|
||||
// Click the filter icon to show the filter bar.
|
||||
toolbar.querySelector(".devtools-filter-icon").click();
|
||||
filterBar = await waitFor(() => {
|
||||
return outputNode.querySelector(".webconsole-filterbar-secondary");
|
||||
});
|
||||
}
|
||||
return filterBar;
|
||||
}
|
||||
|
||||
// Hide filter bar if it is visible.
|
||||
if (filterBar) {
|
||||
// Click the filter icon to hide the filter bar.
|
||||
toolbar.querySelector(".devtools-filter-icon").click();
|
||||
await waitFor(() => {
|
||||
return !outputNode.querySelector(".webconsole-filterbar-secondary");
|
||||
});
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the filters at the end of a test that has changed them. This is
|
||||
* important when using the `--verify` test option as when it is used you need
|
||||
* to manually reset the filters.
|
||||
*
|
||||
* The css, netxhr and net filters are disabled by default.
|
||||
*
|
||||
* @param {Object} hud
|
||||
*/
|
||||
async function resetFilters(hud) {
|
||||
info("Resetting filters to their default state");
|
||||
|
||||
const store = hud.ui.newConsoleOutput.getStore();
|
||||
store.dispatch(wcActions.filtersClear());
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"use strict";
|
||||
|
||||
const {Utils: WebConsoleUtils} = require("devtools/client/webconsole/utils");
|
||||
const EventEmitter = require("devtools/shared/old-event-emitter");
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
const promise = require("promise");
|
||||
const defer = require("devtools/shared/defer");
|
||||
const Services = require("Services");
|
||||
|
|
|
@ -10,7 +10,7 @@ const promise = require("promise");
|
|||
const defer = require("devtools/shared/defer");
|
||||
|
||||
loader.lazyRequireGetter(this, "HUDService", "devtools/client/webconsole/hudservice", true);
|
||||
loader.lazyGetter(this, "EventEmitter", () => require("devtools/shared/old-event-emitter"));
|
||||
loader.lazyGetter(this, "EventEmitter", () => require("devtools/shared/event-emitter"));
|
||||
|
||||
/**
|
||||
* A DevToolPanel that controls the Web Console.
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
function onNewMessage(aEvent, aNewMessages) {
|
||||
function onNewMessage(aNewMessages) {
|
||||
for (let msg of aNewMessages) {
|
||||
// Messages that shouldn't be output contain the substring FAIL_TEST
|
||||
if (msg.node.textContent.includes("FAIL_TEST")) {
|
||||
|
@ -119,7 +119,7 @@ add_task(function* () {
|
|||
|
||||
let deferred = defer();
|
||||
|
||||
let onFetch = (aEvent, aVar) => {
|
||||
let onFetch = (aVar) => {
|
||||
// Skip the notification from console.dir variablesview-fetched.
|
||||
if (aVar._variablesView != hud.jsterm._variablesView) {
|
||||
return;
|
||||
|
|
|
@ -28,7 +28,7 @@ function testObjectInspectorPropertiesAreNotSet(variablesView) {
|
|||
}
|
||||
|
||||
function* getVariablesView(hud) {
|
||||
function openVariablesView(event, vview) {
|
||||
function openVariablesView(vview) {
|
||||
deferred.resolve(vview._variablesView);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ function test() {
|
|||
const jsterm = hud.jsterm;
|
||||
|
||||
let deferred = defer();
|
||||
jsterm.once("variablesview-fetched", (_, val) => deferred.resolve(val));
|
||||
jsterm.once("variablesview-fetched", (val) => deferred.resolve(val));
|
||||
jsterm.execute("inspect(document.querySelectorAll('div'))");
|
||||
|
||||
let variableScope = yield deferred.promise;
|
||||
|
|
|
@ -84,7 +84,7 @@ function test() {
|
|||
function* testNotSorted(aObject) {
|
||||
info("Testing " + aObject);
|
||||
let deferred = defer();
|
||||
jsterm.once("variablesview-fetched", (_, aVar) => deferred.resolve(aVar));
|
||||
jsterm.once("variablesview-fetched", (aVar) => deferred.resolve(aVar));
|
||||
jsterm.execute("inspect(" + aObject + ")");
|
||||
|
||||
let variableScope = yield deferred.promise;
|
||||
|
@ -110,7 +110,7 @@ function test() {
|
|||
function* testSorted(aObject) {
|
||||
info("Testing " + aObject);
|
||||
let deferred = defer();
|
||||
jsterm.once("variablesview-fetched", (_, aVar) => deferred.resolve(aVar));
|
||||
jsterm.once("variablesview-fetched", (aVar) => deferred.resolve(aVar));
|
||||
jsterm.execute("inspect(" + aObject + ")");
|
||||
|
||||
let variableScope = yield deferred.promise;
|
||||
|
|
|
@ -40,7 +40,7 @@ function onQSAexecuted(msg) {
|
|||
);
|
||||
}
|
||||
|
||||
function onNodeListViewFetched(event, variable) {
|
||||
function onNodeListViewFetched(variable) {
|
||||
gVariablesView = variable._variablesView;
|
||||
ok(gVariablesView, "variables view object");
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ function* testVariablesView(hud) {
|
|||
|
||||
info("Waiting for variable view to appear");
|
||||
let variable = yield new Promise(resolve => {
|
||||
jsterm.once("variablesview-fetched", (e, variable) => {
|
||||
jsterm.once("variablesview-fetched", (variable) => {
|
||||
resolve(variable);
|
||||
});
|
||||
executeSoon(() => EventUtils.synthesizeMouse(anchor, 2, 2, {},
|
||||
|
|
|
@ -57,7 +57,7 @@ function* testVariablesView(hud) {
|
|||
|
||||
info("Waiting for variable view to appear");
|
||||
let variable = yield new Promise(resolve => {
|
||||
jsterm.once("variablesview-fetched", (e, variable) => {
|
||||
jsterm.once("variablesview-fetched", (variable) => {
|
||||
resolve(variable);
|
||||
});
|
||||
executeSoon(() => EventUtils.synthesizeMouse(anchor, 2, 2, {},
|
||||
|
|
|
@ -25,7 +25,7 @@ function consoleOpened(hud) {
|
|||
hud.jsterm.once("variablesview-fetched", onOpen);
|
||||
}
|
||||
|
||||
function onViewOpened(hud, event, view) {
|
||||
function onViewOpened(hud, view) {
|
||||
let doc = gBrowser.contentWindowAsCPOW.wrappedJSObject.document;
|
||||
|
||||
findVariableViewProperties(view, [
|
||||
|
|
|
@ -57,7 +57,7 @@ function consoleOpened(HUD) {
|
|||
});
|
||||
}
|
||||
|
||||
function testVariablesView(aWebconsole, aEvent, aView) {
|
||||
function testVariablesView(aWebconsole, aView) {
|
||||
findVariableViewProperties(aView, [
|
||||
{ name: "gen1", isGenerator: true },
|
||||
{ name: "gen2", isGenerator: true },
|
||||
|
|
|
@ -85,7 +85,7 @@ function testPropertyPanel() {
|
|||
let jsterm = gHUD.jsterm;
|
||||
jsterm.clearOutput();
|
||||
jsterm.execute("document", (msg) => {
|
||||
jsterm.once("variablesview-fetched", (evt, view) => {
|
||||
jsterm.once("variablesview-fetched", (view) => {
|
||||
deferred.resolve(view);
|
||||
});
|
||||
let anchor = msg.querySelector(".message-body a");
|
||||
|
|
|
@ -81,7 +81,7 @@ function onExecuteGetName(results) {
|
|||
});
|
||||
}
|
||||
|
||||
function onGetNameFetch(evt, view) {
|
||||
function onGetNameFetch(view) {
|
||||
gVariablesView = view._variablesView;
|
||||
ok(gVariablesView, "variables view object");
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
}
|
||||
|
||||
function clickMessageAndShowVariablesView() {
|
||||
let result = jsterm.once("variablesview-fetched", (event, vview) => {
|
||||
let result = jsterm.once("variablesview-fetched", (vview) => {
|
||||
variablesView = vview;
|
||||
});
|
||||
|
||||
|
|
|
@ -1249,7 +1249,7 @@ function waitForMessages(options) {
|
|||
return rule.matched.size == count;
|
||||
}
|
||||
|
||||
function onMessagesAdded(event, newMessages) {
|
||||
function onMessagesAdded(newMessages) {
|
||||
for (let msg of newMessages) {
|
||||
let elem = msg.node;
|
||||
let location = getRenderedSource(elem);
|
||||
|
@ -1332,7 +1332,7 @@ function waitForMessages(options) {
|
|||
});
|
||||
}
|
||||
|
||||
onMessagesAdded("new-messages", messages);
|
||||
onMessagesAdded(messages);
|
||||
|
||||
if (!allRulesMatched()) {
|
||||
listenerAdded = true;
|
||||
|
@ -1529,7 +1529,7 @@ function checkOutputForInputs(hud, inputTests) {
|
|||
yield promise.resolve(null);
|
||||
}
|
||||
|
||||
function onVariablesViewOpen(entry, {resolve, reject}, event, view, options) {
|
||||
function onVariablesViewOpen(entry, {resolve, reject}, {view, options}) {
|
||||
info("Variables view opened");
|
||||
let label = entry.variablesViewLabel || entry.output;
|
||||
if (typeof label == "string" && options.label != label) {
|
||||
|
|
|
@ -25,7 +25,7 @@ const {PrefObserver} = require("devtools/client/shared/prefs");
|
|||
loader.lazyServiceGetter(this, "clipboardHelper",
|
||||
"@mozilla.org/widget/clipboardhelper;1",
|
||||
"nsIClipboardHelper");
|
||||
loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/old-event-emitter");
|
||||
loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/event-emitter");
|
||||
loader.lazyRequireGetter(this, "ConsoleOutput", "devtools/client/webconsole/console-output", true);
|
||||
loader.lazyRequireGetter(this, "Messages", "devtools/client/webconsole/console-output", true);
|
||||
loader.lazyRequireGetter(this, "EnvironmentClient", "devtools/shared/client/environment-client");
|
||||
|
|
|
@ -97,6 +97,7 @@ webpackConfig.resolve = {
|
|||
|
||||
"devtools/shared/fronts/timeline": path.join(__dirname, "../../client/shared/webpack/shims/fronts-timeline-shim"),
|
||||
"devtools/shared/old-event-emitter": "devtools-modules/src/utils/event-emitter",
|
||||
"devtools/shared/event-emitter": "devtools-modules/src/utils/event-emitter",
|
||||
"devtools/shared/client/debugger-client": path.join(__dirname, "new-console-output/test/fixtures/DebuggerClient"),
|
||||
"devtools/shared/platform/clipboard": path.join(__dirname, "../../client/shared/webpack/shims/platform-clipboard-stub"),
|
||||
"devtools/shared/platform/stack": path.join(__dirname, "../../client/shared/webpack/shims/platform-stack-stub"),
|
||||
|
|
|
@ -242,6 +242,24 @@ exports.isGenerator = function (fn) {
|
|||
return ctor.name == "GeneratorFunction";
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if `thing` is an async function, false otherwise.
|
||||
*/
|
||||
exports.isAsyncFunction = function (fn) {
|
||||
if (typeof fn !== "function") {
|
||||
return false;
|
||||
}
|
||||
let proto = Object.getPrototypeOf(fn);
|
||||
if (!proto) {
|
||||
return false;
|
||||
}
|
||||
let ctor = proto.constructor;
|
||||
if (!ctor) {
|
||||
return false;
|
||||
}
|
||||
return ctor.name == "AsyncFunction";
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if `thing` is a Promise or then-able, false otherwise.
|
||||
*/
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
/* eslint-env browser */
|
||||
|
||||
const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
|
||||
const { CustomizableUI } = ChromeUtils.import("resource:///modules/CustomizableUI.jsm", {});
|
||||
const { AppConstants } = require("resource://gre/modules/AppConstants.jsm");
|
||||
const { gDevTools } = require("devtools/client/framework/devtools");
|
||||
|
||||
/**
|
||||
|
@ -14,11 +16,19 @@ const { gDevTools } = require("devtools/client/framework/devtools");
|
|||
*/
|
||||
add_task(async function () {
|
||||
info("Disable DevTools entry points (does not apply to the already created window");
|
||||
new Promise(resolve => {
|
||||
await new Promise(resolve => {
|
||||
let options = {"set": [["devtools.policy.disabled", true]]};
|
||||
SpecialPowers.pushPrefEnv(options, resolve);
|
||||
});
|
||||
|
||||
// In DEV_EDITION the browser starts with the developer-button in the toolbar. This
|
||||
// applies to all new windows and forces creating keyboard shortcuts. The preference
|
||||
// tested should not change without restart, but for the needs of the test, remove the
|
||||
// developer-button from the UI before opening a new window.
|
||||
if (AppConstants.MOZ_DEV_EDITION) {
|
||||
CustomizableUI.removeWidgetFromArea("developer-button");
|
||||
}
|
||||
|
||||
info("Open a new window, all window-specific hooks for DevTools will be disabled.");
|
||||
let win = OpenBrowserWindow({private: false});
|
||||
await waitForDelayedStartupFinished(win);
|
||||
|
|
|
@ -1087,7 +1087,7 @@ nsTreeSanitizer::SanitizeStyleSheet(const nsAString& aOriginal,
|
|||
nsIDocument* aDocument,
|
||||
nsIURI* aBaseURI)
|
||||
{
|
||||
nsresult rv;
|
||||
nsresult rv = NS_OK;
|
||||
aSanitized.Truncate();
|
||||
// aSanitized will hold the permitted CSS text.
|
||||
// -moz-binding is blacklisted.
|
||||
|
@ -1109,16 +1109,17 @@ nsTreeSanitizer::SanitizeStyleSheet(const nsAString& aOriginal,
|
|||
sheet->SetURIs(aDocument->GetDocumentURI(), nullptr, aBaseURI);
|
||||
sheet->SetPrincipal(aDocument->NodePrincipal());
|
||||
if (aDocument->IsStyledByServo()) {
|
||||
rv = sheet->AsServo()->ParseSheet(
|
||||
aDocument->CSSLoader(), NS_ConvertUTF16toUTF8(aOriginal),
|
||||
aDocument->GetDocumentURI(), aBaseURI, aDocument->NodePrincipal(),
|
||||
0, aDocument->GetCompatibilityMode());
|
||||
sheet->AsServo()->ParseSheetSync(
|
||||
aDocument->CSSLoader(), NS_ConvertUTF16toUTF8(aOriginal),
|
||||
aDocument->GetDocumentURI(), aBaseURI, aDocument->NodePrincipal(),
|
||||
/* aLoadData = */ nullptr, 0, aDocument->GetCompatibilityMode());
|
||||
} else {
|
||||
#ifdef MOZ_OLD_STYLE
|
||||
// Create the CSS parser, and parse the CSS text.
|
||||
nsCSSParser parser(nullptr, sheet->AsGecko());
|
||||
rv = parser.ParseSheet(aOriginal, aDocument->GetDocumentURI(), aBaseURI,
|
||||
aDocument->NodePrincipal(), 0);
|
||||
rv = parser.ParseSheet(aOriginal, aDocument->GetDocumentURI(),
|
||||
aBaseURI, aDocument->NodePrincipal(),
|
||||
/* aLoadData = */ nullptr, 0);
|
||||
#else
|
||||
MOZ_CRASH("old style system disabled");
|
||||
#endif
|
||||
|
|
|
@ -2921,6 +2921,12 @@ GetFontStyleForServo(Element* aElement, const nsAString& aFont,
|
|||
// values (2em, bolder, etc.)
|
||||
if (aElement && aElement->IsInComposedDoc()) {
|
||||
parentStyle = nsComputedDOMStyle::GetStyleContext(aElement, nullptr);
|
||||
if (!parentStyle) {
|
||||
// The flush killed the shell, so we couldn't get any meaningful style
|
||||
// back.
|
||||
aError.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
} else {
|
||||
RefPtr<RawServoDeclarationBlock> declarations =
|
||||
CreateFontDeclarationForServo(NS_LITERAL_STRING("10px sans-serif"),
|
||||
|
@ -2934,7 +2940,8 @@ GetFontStyleForServo(Element* aElement, const nsAString& aFont,
|
|||
MOZ_RELEASE_ASSERT(parentStyle, "Should have a valid parent style");
|
||||
|
||||
MOZ_ASSERT(!aPresShell->IsDestroying(),
|
||||
"GetFontParentStyleContext should have returned an error if the presshell is being destroyed.");
|
||||
"We should have returned an error above if the presshell is "
|
||||
"being destroyed.");
|
||||
|
||||
RefPtr<ServoStyleContext> sc =
|
||||
styleSet->ResolveForDeclarations(parentStyle->AsServo(), declarations);
|
||||
|
@ -3090,7 +3097,7 @@ CanvasRenderingContext2D::ParseFilter(const nsAString& aString,
|
|||
presShell,
|
||||
aError);
|
||||
if (!computedValues) {
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
const nsStyleEffects* effects = computedValues->ComputedData()->GetStyleEffects();
|
||||
|
|
|
@ -426,7 +426,7 @@ enum ShutdownMode {
|
|||
};
|
||||
|
||||
static ShutdownMode sShutdownMode = ShutdownNormal;
|
||||
static string sShutdownToken = "";
|
||||
static string sShutdownToken;
|
||||
|
||||
void
|
||||
FakeDecryptor::UpdateSession(uint32_t aPromiseId,
|
||||
|
|
|
@ -169,15 +169,10 @@ void
|
|||
DelayBuffer::Read(double aDelayTicks, AudioBlock* aOutputChunk,
|
||||
ChannelInterpretation aChannelInterpretation)
|
||||
{
|
||||
const bool firstTime = mCurrentDelay < 0.0;
|
||||
double currentDelay = firstTime ? aDelayTicks : mCurrentDelay;
|
||||
|
||||
double computedDelay[WEBAUDIO_BLOCK_SIZE];
|
||||
|
||||
for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE; ++i) {
|
||||
// If the value has changed, smoothly approach it
|
||||
currentDelay += (aDelayTicks - currentDelay) * mSmoothingRate;
|
||||
computedDelay[i] = currentDelay;
|
||||
computedDelay[i] = aDelayTicks;
|
||||
}
|
||||
|
||||
Read(computedDelay, aOutputChunk, aChannelInterpretation);
|
||||
|
|
|
@ -19,11 +19,8 @@ class DelayBuffer final
|
|||
typedef dom::ChannelInterpretation ChannelInterpretation;
|
||||
|
||||
public:
|
||||
// See WebAudioUtils::ComputeSmoothingRate() for frame to frame exponential
|
||||
// |smoothingRate| multiplier.
|
||||
DelayBuffer(double aMaxDelayTicks, double aSmoothingRate)
|
||||
: mSmoothingRate(aSmoothingRate)
|
||||
, mCurrentDelay(-1.0)
|
||||
explicit DelayBuffer(double aMaxDelayTicks)
|
||||
: mCurrentDelay(-1.0)
|
||||
// Round the maximum delay up to the next tick.
|
||||
, mMaxDelayTicks(ceil(aMaxDelayTicks))
|
||||
, mCurrentChunk(0)
|
||||
|
@ -47,8 +44,8 @@ public:
|
|||
void Read(const double aPerFrameDelays[WEBAUDIO_BLOCK_SIZE],
|
||||
AudioBlock* aOutputChunk,
|
||||
ChannelInterpretation aChannelInterpretation);
|
||||
// Read a block with a constant delay, which will be smoothed with the
|
||||
// previous delay. The delay should be >= 0 and <= MaxDelayTicks().
|
||||
// Read a block with a constant delay. The delay should be >= 0 and
|
||||
// <= MaxDelayTicks().
|
||||
void Read(double aDelayTicks, AudioBlock* aOutputChunk,
|
||||
ChannelInterpretation aChannelInterpretation);
|
||||
|
||||
|
@ -96,7 +93,6 @@ private:
|
|||
FallibleTArray<AudioChunk> mChunks;
|
||||
// Cache upmixed channel arrays.
|
||||
AutoTArray<const float*,GUESS_AUDIO_CHANNELS> mUpmixChannels;
|
||||
double mSmoothingRate;
|
||||
// Current delay, in fractional ticks
|
||||
double mCurrentDelay;
|
||||
// Maximum delay, in ticks
|
||||
|
|
|
@ -37,9 +37,7 @@ public:
|
|||
, mDelay(0.f)
|
||||
// Use a smoothing range of 20ms
|
||||
, mBuffer(std::max(aMaxDelayTicks,
|
||||
static_cast<double>(WEBAUDIO_BLOCK_SIZE)),
|
||||
WebAudioUtils::ComputeSmoothingRate(0.02,
|
||||
mDestination->SampleRate()))
|
||||
static_cast<double>(WEBAUDIO_BLOCK_SIZE)))
|
||||
, mMaxDelay(aMaxDelayTicks)
|
||||
, mHaveProducedBeforeInput(false)
|
||||
, mLeftOverData(INT32_MIN)
|
||||
|
|
|
@ -49,15 +49,6 @@ namespace WebAudioUtils {
|
|||
return fabs(v1 - v2) < 1e-7;
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes an exponential smoothing rate for a time based variable
|
||||
* over aDuration seconds.
|
||||
*/
|
||||
inline double ComputeSmoothingRate(double aDuration, double aSampleRate)
|
||||
{
|
||||
return 1.0 - std::exp(-1.0 / (aDuration * aSampleRate));
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an AudioTimelineEvent's floating point time values to tick values
|
||||
* with respect to a destination AudioNodeStream.
|
||||
|
|
|
@ -55,7 +55,7 @@ HRTFPanner::HRTFPanner(float sampleRate, already_AddRefed<HRTFDatabaseLoader> da
|
|||
, m_convolverR1(m_convolverL1.fftSize())
|
||||
, m_convolverL2(m_convolverL1.fftSize())
|
||||
, m_convolverR2(m_convolverL1.fftSize())
|
||||
, m_delayLine(MaxDelayTimeSeconds * sampleRate, 1.0)
|
||||
, m_delayLine(MaxDelayTimeSeconds * sampleRate)
|
||||
{
|
||||
MOZ_ASSERT(m_databaseLoader);
|
||||
MOZ_COUNT_CTOR(HRTFPanner);
|
||||
|
|
|
@ -16,7 +16,7 @@ var webconsole = null;
|
|||
var messages_seen = 0;
|
||||
var expected_messages = 50;
|
||||
|
||||
function on_new_message(event, new_messages) {
|
||||
function on_new_message(new_messages) {
|
||||
for (let message of new_messages) {
|
||||
let elem = message.node;
|
||||
let text = elem.textContent;
|
||||
|
|
|
@ -226,6 +226,7 @@ nsXBLResourceLoader::AddResourceListener(nsIContent* aBoundElement)
|
|||
{
|
||||
if (aBoundElement) {
|
||||
mBoundElements.AppendObject(aBoundElement);
|
||||
aBoundElement->OwnerDoc()->BlockOnload();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -242,6 +243,7 @@ nsXBLResourceLoader::NotifyBoundElements()
|
|||
for (uint32_t j = 0; j < eltCount; j++) {
|
||||
nsCOMPtr<nsIContent> content = mBoundElements.ObjectAt(j);
|
||||
MOZ_ASSERT(content->IsElement());
|
||||
content->OwnerDoc()->UnblockOnload(/* aFireSync = */ false);
|
||||
|
||||
bool ready = false;
|
||||
xblService->BindingReady(content, bindingURI, &ready);
|
||||
|
|
|
@ -3534,24 +3534,6 @@ EditorBase::GetChildOffset(nsINode* aChild,
|
|||
}
|
||||
|
||||
// static
|
||||
already_AddRefed<nsIDOMNode>
|
||||
EditorBase::GetNodeLocation(nsIDOMNode* aChild,
|
||||
int32_t* outOffset)
|
||||
{
|
||||
MOZ_ASSERT(aChild && outOffset);
|
||||
NS_ENSURE_TRUE(aChild && outOffset, nullptr);
|
||||
*outOffset = -1;
|
||||
|
||||
nsCOMPtr<nsINode> child = do_QueryInterface(aChild);
|
||||
nsCOMPtr<nsIDOMNode> parent = do_QueryInterface(child->GetParentNode());
|
||||
|
||||
if (parent) {
|
||||
*outOffset = GetChildOffset(aChild, parent);
|
||||
}
|
||||
|
||||
return parent.forget();
|
||||
}
|
||||
|
||||
nsINode*
|
||||
EditorBase::GetNodeLocation(nsINode* aChild,
|
||||
int32_t* aOffset)
|
||||
|
@ -4078,28 +4060,6 @@ EditorBase::GetNodeAtRangeOffsetPoint(const RawRangeBoundary& aPoint)
|
|||
* GetStartNodeAndOffset() returns whatever the start parent & offset is of
|
||||
* the first range in the selection.
|
||||
*/
|
||||
nsresult
|
||||
EditorBase::GetStartNodeAndOffset(Selection* aSelection,
|
||||
nsIDOMNode** outStartNode,
|
||||
int32_t* outStartOffset)
|
||||
{
|
||||
NS_ENSURE_TRUE(outStartNode && outStartOffset && aSelection, NS_ERROR_NULL_POINTER);
|
||||
|
||||
nsCOMPtr<nsINode> startNode;
|
||||
nsresult rv = GetStartNodeAndOffset(aSelection, getter_AddRefs(startNode),
|
||||
outStartOffset);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
if (startNode) {
|
||||
NS_ADDREF(*outStartNode = startNode->AsDOMNode());
|
||||
} else {
|
||||
*outStartNode = nullptr;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
EditorBase::GetStartNodeAndOffset(Selection* aSelection,
|
||||
nsINode** aStartContainer,
|
||||
|
@ -4145,26 +4105,6 @@ EditorBase::GetStartPoint(Selection* aSelection)
|
|||
* GetEndNodeAndOffset() returns whatever the end parent & offset is of
|
||||
* the first range in the selection.
|
||||
*/
|
||||
nsresult
|
||||
EditorBase::GetEndNodeAndOffset(Selection* aSelection,
|
||||
nsIDOMNode** outEndNode,
|
||||
int32_t* outEndOffset)
|
||||
{
|
||||
NS_ENSURE_TRUE(outEndNode && outEndOffset && aSelection, NS_ERROR_NULL_POINTER);
|
||||
|
||||
nsCOMPtr<nsINode> endNode;
|
||||
nsresult rv = GetEndNodeAndOffset(aSelection, getter_AddRefs(endNode),
|
||||
outEndOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (endNode) {
|
||||
NS_ADDREF(*outEndNode = endNode->AsDOMNode());
|
||||
} else {
|
||||
*outEndNode = nullptr;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
EditorBase::GetEndNodeAndOffset(Selection* aSelection,
|
||||
nsINode** aEndContainer,
|
||||
|
|
|
@ -807,8 +807,6 @@ public:
|
|||
* Set outOffset to the offset of aChild in the parent.
|
||||
* Returns the parent of aChild.
|
||||
*/
|
||||
static already_AddRefed<nsIDOMNode> GetNodeLocation(nsIDOMNode* aChild,
|
||||
int32_t* outOffset);
|
||||
static nsINode* GetNodeLocation(nsINode* aChild, int32_t* aOffset);
|
||||
|
||||
/**
|
||||
|
@ -1106,16 +1104,10 @@ public:
|
|||
}
|
||||
static nsIContent* GetNodeAtRangeOffsetPoint(const RawRangeBoundary& aPoint);
|
||||
|
||||
static nsresult GetStartNodeAndOffset(Selection* aSelection,
|
||||
nsIDOMNode** outStartNode,
|
||||
int32_t* outStartOffset);
|
||||
static nsresult GetStartNodeAndOffset(Selection* aSelection,
|
||||
nsINode** aStartContainer,
|
||||
int32_t* aStartOffset);
|
||||
static EditorRawDOMPoint GetStartPoint(Selection* aSelection);
|
||||
static nsresult GetEndNodeAndOffset(Selection* aSelection,
|
||||
nsIDOMNode** outEndNode,
|
||||
int32_t* outEndOffset);
|
||||
static nsresult GetEndNodeAndOffset(Selection* aSelection,
|
||||
nsINode** aEndContainer,
|
||||
int32_t* aEndOffset);
|
||||
|
|
|
@ -2203,7 +2203,7 @@ HTMLEditRules::WillDeleteSelection(Selection* aSelection,
|
|||
}
|
||||
|
||||
// Test for distance between caret and text that will be deleted
|
||||
rv = CheckBidiLevelForDeletion(aSelection, GetAsDOMNode(startNode),
|
||||
rv = CheckBidiLevelForDeletion(aSelection, startNode,
|
||||
startOffset, aAction, aCancel);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (*aCancel) {
|
||||
|
@ -7993,7 +7993,7 @@ nsresult
|
|||
HTMLEditRules::AdjustWhitespace(Selection* aSelection)
|
||||
{
|
||||
// get selection point
|
||||
nsCOMPtr<nsIDOMNode> selNode;
|
||||
nsCOMPtr<nsINode> selNode;
|
||||
int32_t selOffset;
|
||||
nsresult rv =
|
||||
EditorBase::GetStartNodeAndOffset(aSelection,
|
||||
|
@ -8018,18 +8018,21 @@ HTMLEditRules::PinSelectionToNewBlock(Selection* aSelection)
|
|||
}
|
||||
|
||||
// get the (collapsed) selection location
|
||||
nsCOMPtr<nsIDOMNode> selNode;
|
||||
nsCOMPtr<nsINode> selNode;
|
||||
int32_t selOffset;
|
||||
nsresult rv =
|
||||
EditorBase::GetStartNodeAndOffset(aSelection,
|
||||
getter_AddRefs(selNode), &selOffset);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
if (NS_WARN_IF(!selNode)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// use ranges and sRangeHelper to compare sel point to new block
|
||||
nsCOMPtr<nsINode> node = do_QueryInterface(selNode);
|
||||
NS_ENSURE_STATE(node);
|
||||
RefPtr<nsRange> range = new nsRange(node);
|
||||
rv = range->CollapseTo(node, selOffset);
|
||||
RefPtr<nsRange> range = new nsRange(selNode);
|
||||
rv = range->CollapseTo(selNode, selOffset);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -227,7 +227,7 @@ HTMLEditor::DoInsertHTMLWithContext(const nsAString& aInputString,
|
|||
aTrustedInput);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIDOMNode> targetNode;
|
||||
nsCOMPtr<nsINode> targetNode;
|
||||
int32_t targetOffset=0;
|
||||
|
||||
if (!aDestNode) {
|
||||
|
@ -239,7 +239,7 @@ HTMLEditor::DoInsertHTMLWithContext(const nsAString& aInputString,
|
|||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
} else {
|
||||
targetNode = aDestNode;
|
||||
targetNode = do_QueryInterface(aDestNode);
|
||||
targetOffset = aDestOffset;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#include "nsIContent.h"
|
||||
#include "nsIDocumentEncoder.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsNameSpaceManager.h"
|
||||
#include "nsINode.h"
|
||||
#include "nsIPlaintextEditor.h"
|
||||
|
@ -1033,7 +1032,7 @@ TextEditRules::WillDeleteSelection(Selection* aSelection,
|
|||
mPasswordText.Cut(start, end-start);
|
||||
}
|
||||
} else {
|
||||
nsCOMPtr<nsIDOMNode> startNode;
|
||||
nsCOMPtr<nsINode> startNode;
|
||||
int32_t startOffset;
|
||||
nsresult rv =
|
||||
EditorBase::GetStartNodeAndOffset(aSelection, getter_AddRefs(startNode),
|
||||
|
|
|
@ -262,7 +262,7 @@ protected:
|
|||
void UndefineCaretBidiLevel(Selection* aSelection);
|
||||
|
||||
nsresult CheckBidiLevelForDeletion(Selection* aSelection,
|
||||
nsIDOMNode* aSelNode,
|
||||
nsINode* aSelNode,
|
||||
int32_t aSelOffset,
|
||||
nsIEditor::EDirection aAction,
|
||||
bool* aCancel);
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "nsError.h"
|
||||
#include "nsFrameSelection.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsIEditor.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsISupportsImpl.h"
|
||||
|
@ -26,7 +25,7 @@ using namespace dom;
|
|||
// Test for distance between caret and text that will be deleted
|
||||
nsresult
|
||||
TextEditRules::CheckBidiLevelForDeletion(Selection* aSelection,
|
||||
nsIDOMNode* aSelNode,
|
||||
nsINode* aSelNode,
|
||||
int32_t aSelOffset,
|
||||
nsIEditor::EDirection aAction,
|
||||
bool* aCancel)
|
||||
|
@ -44,8 +43,10 @@ TextEditRules::CheckBidiLevelForDeletion(Selection* aSelection,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(aSelNode);
|
||||
NS_ENSURE_TRUE(content, NS_ERROR_NULL_POINTER);
|
||||
if (!aSelNode || !aSelNode->IsContent()) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
nsCOMPtr<nsIContent> content = aSelNode->AsContent();
|
||||
|
||||
nsBidiLevel levelBefore;
|
||||
nsBidiLevel levelAfter;
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include "nsAString.h"
|
||||
#include "nsDebug.h"
|
||||
#include "nsGkAtoms.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsINode.h"
|
||||
#include "nsISupportsBase.h"
|
||||
#include "nsISupportsImpl.h"
|
||||
#include "nsReadableUtils.h"
|
||||
|
@ -91,9 +91,8 @@ TypeInState::OnSelectionChange(Selection& aSelection)
|
|||
// XXX: This code temporarily fixes the problem where clicking the mouse in
|
||||
// XXX: the same location clears the type-in-state.
|
||||
|
||||
// TODO: We can make this use nsINode instead of nsIDOMNode.
|
||||
if (aSelection.IsCollapsed() && aSelection.RangeCount()) {
|
||||
nsCOMPtr<nsIDOMNode> selNode;
|
||||
nsCOMPtr<nsINode> selNode;
|
||||
int32_t selOffset = 0;
|
||||
|
||||
nsresult rv =
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#endif
|
||||
|
||||
class nsAtom;
|
||||
class nsIDOMNode;
|
||||
class nsINode;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
|
@ -97,7 +97,7 @@ protected:
|
|||
nsTArray<PropItem*> mSetArray;
|
||||
nsTArray<PropItem*> mClearedArray;
|
||||
int32_t mRelativeFontSize;
|
||||
nsCOMPtr<nsIDOMNode> mLastSelectionContainer;
|
||||
nsCOMPtr<nsINode> mLastSelectionContainer;
|
||||
int32_t mLastSelectionOffset;
|
||||
|
||||
friend class HTMLEditRules;
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include "nsError.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsISupportsImpl.h"
|
||||
#include "nsRange.h"
|
||||
#include "nsString.h"
|
||||
|
@ -53,24 +52,6 @@ WSRunObject::WSRunObject(HTMLEditor* aHTMLEditor,
|
|||
GetRuns();
|
||||
}
|
||||
|
||||
WSRunObject::WSRunObject(HTMLEditor* aHTMLEditor,
|
||||
nsIDOMNode* aNode,
|
||||
int32_t aOffset)
|
||||
: mNode(do_QueryInterface(aNode))
|
||||
, mOffset(aOffset)
|
||||
, mPRE(false)
|
||||
, mStartOffset(0)
|
||||
, mEndOffset(0)
|
||||
, mFirstNBSPOffset(0)
|
||||
, mLastNBSPOffset(0)
|
||||
, mStartRun(nullptr)
|
||||
, mEndRun(nullptr)
|
||||
, mHTMLEditor(aHTMLEditor)
|
||||
{
|
||||
GetWSNodes();
|
||||
GetRuns();
|
||||
}
|
||||
|
||||
WSRunObject::~WSRunObject()
|
||||
{
|
||||
ClearRuns();
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
#include "mozilla/dom/Text.h"
|
||||
#include "mozilla/EditorDOMPoint.h" // for EditorDOMPoint
|
||||
|
||||
class nsIDOMNode;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class HTMLEditor;
|
||||
|
@ -166,7 +164,6 @@ public:
|
|||
enum {eBoth = eBefore | eAfter};
|
||||
|
||||
WSRunObject(HTMLEditor* aHTMLEditor, nsINode* aNode, int32_t aOffset);
|
||||
WSRunObject(HTMLEditor* aHTMLEditor, nsIDOMNode* aNode, int32_t aOffset);
|
||||
~WSRunObject();
|
||||
|
||||
// ScrubBlockBoundary removes any non-visible whitespace at the specified
|
||||
|
|
|
@ -919,7 +919,8 @@ CSSStyleSheet::ReparseSheet(const nsAString& aInput)
|
|||
|
||||
nsCSSParser parser(loader, this);
|
||||
nsresult rv = parser.ParseSheet(aInput, mInner->mSheetURI, mInner->mBaseURI,
|
||||
mInner->mPrincipal, lineNumber, &reusableSheets);
|
||||
mInner->mPrincipal, /* aLoadData = */ nullptr,
|
||||
lineNumber, &reusableSheets);
|
||||
DidDirty(); // we are always 'dirty' here since we always remove rules first
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
|
|
@ -162,6 +162,7 @@ SheetLoadData::SheetLoadData(Loader* aLoader,
|
|||
, mSyncLoad(false)
|
||||
, mIsNonDocumentSheet(false)
|
||||
, mIsLoading(false)
|
||||
, mIsBeingParsed(false)
|
||||
, mIsCancelled(false)
|
||||
, mMustNotify(false)
|
||||
, mWasAlternate(aIsAlternate)
|
||||
|
@ -196,6 +197,7 @@ SheetLoadData::SheetLoadData(Loader* aLoader,
|
|||
, mSyncLoad(false)
|
||||
, mIsNonDocumentSheet(false)
|
||||
, mIsLoading(false)
|
||||
, mIsBeingParsed(false)
|
||||
, mIsCancelled(false)
|
||||
, mMustNotify(false)
|
||||
, mWasAlternate(false)
|
||||
|
@ -240,6 +242,7 @@ SheetLoadData::SheetLoadData(Loader* aLoader,
|
|||
, mSyncLoad(aSyncLoad)
|
||||
, mIsNonDocumentSheet(true)
|
||||
, mIsLoading(false)
|
||||
, mIsBeingParsed(false)
|
||||
, mIsCancelled(false)
|
||||
, mMustNotify(false)
|
||||
, mWasAlternate(false)
|
||||
|
@ -319,9 +322,7 @@ SheetLoadData::FireLoadEvent(nsIThreadInternal* aThread)
|
|||
false, false);
|
||||
|
||||
// And unblock onload
|
||||
if (mLoader->mDocument) {
|
||||
mLoader->mDocument->UnblockOnload(true);
|
||||
}
|
||||
mLoader->UnblockOnload(true);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -337,9 +338,7 @@ SheetLoadData::ScheduleLoadEventIfNeeded(nsresult aStatus)
|
|||
nsCOMPtr<nsIThreadInternal> internalThread = do_QueryInterface(thread);
|
||||
if (NS_SUCCEEDED(internalThread->AddObserver(this))) {
|
||||
// Make sure to block onload here
|
||||
if (mLoader->mDocument) {
|
||||
mLoader->mDocument->BlockOnload();
|
||||
}
|
||||
mLoader->BlockOnload();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -619,8 +618,11 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader,
|
|||
return rv;
|
||||
}
|
||||
|
||||
// NB: The aAllowAsync doesn't really matter here, because this path is only
|
||||
// for the old style system.
|
||||
bool completed;
|
||||
rv = mLoader->ParseSheet(aBuffer, Span<const uint8_t>(), this, completed);
|
||||
rv = mLoader->ParseSheet(aBuffer, Span<const uint8_t>(), this,
|
||||
/* aAllowAsync = */ true, completed);
|
||||
NS_ASSERTION(completed || !mSyncLoad, "sync load did not complete");
|
||||
return rv;
|
||||
}
|
||||
|
@ -1673,54 +1675,46 @@ Loader::LoadSheet(SheetLoadData* aLoadData,
|
|||
}
|
||||
|
||||
/**
|
||||
* ParseSheet handles parsing the data stream. The main idea here is
|
||||
* to push the current load data onto the parse stack before letting
|
||||
* the CSS parser at the data stream. That lets us handle @import
|
||||
* correctly.
|
||||
* ParseSheet handles parsing the data stream.
|
||||
*/
|
||||
nsresult
|
||||
Loader::ParseSheet(const nsAString& aUTF16,
|
||||
Span<const uint8_t> aUTF8,
|
||||
SheetLoadData* aLoadData,
|
||||
bool aAllowAsync,
|
||||
bool& aCompleted)
|
||||
{
|
||||
LOG(("css::Loader::ParseSheet"));
|
||||
NS_PRECONDITION(aLoadData, "Must have load data");
|
||||
NS_PRECONDITION(aLoadData->mSheet, "Must have sheet to parse into");
|
||||
|
||||
aCompleted = false;
|
||||
|
||||
// Push our load data on the stack so any kids can pick it up
|
||||
mParsingDatas.AppendElement(aLoadData);
|
||||
nsIURI* sheetURI = aLoadData->mSheet->GetSheetURI();
|
||||
nsIURI* baseURI = aLoadData->mSheet->GetBaseURI();
|
||||
|
||||
nsresult rv;
|
||||
|
||||
if (aLoadData->mSheet->IsGecko()) {
|
||||
if (ServoStyleSheet* sheet = aLoadData->mSheet->GetAsServo()) {
|
||||
return DoParseSheetServo(sheet, aUTF16, aUTF8, aLoadData, aAllowAsync, aCompleted);
|
||||
}
|
||||
#ifdef MOZ_OLD_STYLE
|
||||
nsCSSParser parser(this, aLoadData->mSheet->AsGecko());
|
||||
rv = parser.ParseSheet(aUTF16,
|
||||
sheetURI,
|
||||
baseURI,
|
||||
aLoadData->mSheet->Principal(),
|
||||
aLoadData->mLineNumber);
|
||||
return DoParseSheetGecko(aLoadData->mSheet->AsGecko(), aUTF16, aUTF8, aLoadData, aCompleted);
|
||||
#else
|
||||
MOZ_CRASH("old style system disabled");
|
||||
#endif
|
||||
} else {
|
||||
rv = aLoadData->mSheet->AsServo()->ParseSheet(
|
||||
this,
|
||||
aUTF8.IsEmpty() ? NS_ConvertUTF16toUTF8(aUTF16) : aUTF8,
|
||||
sheetURI,
|
||||
baseURI,
|
||||
aLoadData->mSheet->Principal(),
|
||||
aLoadData->mLineNumber,
|
||||
GetCompatibilityMode());
|
||||
}
|
||||
|
||||
mParsingDatas.RemoveElementAt(mParsingDatas.Length() - 1);
|
||||
}
|
||||
|
||||
#ifdef MOZ_OLD_STYLE
|
||||
nsresult
|
||||
Loader::DoParseSheetGecko(CSSStyleSheet* aSheet,
|
||||
const nsAString& aUTF16,
|
||||
Span<const uint8_t> aUTF8,
|
||||
SheetLoadData* aLoadData,
|
||||
bool& aCompleted)
|
||||
{
|
||||
aLoadData->mIsBeingParsed = true;
|
||||
nsCSSParser parser(this, aSheet);
|
||||
nsresult rv = parser.ParseSheet(aUTF16,
|
||||
aSheet->GetSheetURI(),
|
||||
aSheet->GetBaseURI(),
|
||||
aSheet->Principal(),
|
||||
aLoadData,
|
||||
aLoadData->mLineNumber);
|
||||
aLoadData->mIsBeingParsed = false;
|
||||
if (NS_FAILED(rv)) {
|
||||
LOG_ERROR((" Low-level error in parser!"));
|
||||
SheetComplete(aLoadData, rv);
|
||||
|
@ -1740,6 +1734,75 @@ Loader::ParseSheet(const nsAString& aUTF16,
|
|||
|
||||
return NS_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
nsresult
|
||||
Loader::DoParseSheetServo(ServoStyleSheet* aSheet,
|
||||
const nsAString& aUTF16,
|
||||
Span<const uint8_t> aUTF8,
|
||||
SheetLoadData* aLoadData,
|
||||
bool aAllowAsync,
|
||||
bool& aCompleted)
|
||||
{
|
||||
aLoadData->mIsBeingParsed = true;
|
||||
|
||||
// Some cases, like inline style and UA stylesheets, need to be parsed
|
||||
// synchronously. The former may trigger child loads, the latter must not.
|
||||
if (aLoadData->mSyncLoad || !aAllowAsync) {
|
||||
aSheet->ParseSheetSync(
|
||||
this,
|
||||
aUTF8.IsEmpty() ? NS_ConvertUTF16toUTF8(aUTF16) : aUTF8,
|
||||
aSheet->GetSheetURI(),
|
||||
aSheet->GetBaseURI(),
|
||||
aSheet->Principal(),
|
||||
aLoadData,
|
||||
aLoadData->mLineNumber,
|
||||
GetCompatibilityMode()
|
||||
);
|
||||
aLoadData->mIsBeingParsed = false;
|
||||
|
||||
bool noPendingChildren = aLoadData->mPendingChildren == 0;
|
||||
MOZ_ASSERT_IF(aLoadData->mSyncLoad, noPendingChildren);
|
||||
if (noPendingChildren) {
|
||||
aCompleted = true;
|
||||
SheetComplete(aLoadData, NS_OK);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// This parse does not need to be synchronous. \o/
|
||||
//
|
||||
// Note that we need to block onload because there may be no network requests
|
||||
// pending.
|
||||
BlockOnload();
|
||||
RefPtr<SheetLoadData> loadData = aLoadData;
|
||||
nsCOMPtr<nsISerialEventTarget> target = DispatchTarget();
|
||||
aSheet->ParseSheet(
|
||||
this,
|
||||
aUTF8.IsEmpty() ? NS_ConvertUTF16toUTF8(aUTF16) : aUTF8,
|
||||
aSheet->GetSheetURI(),
|
||||
aSheet->GetBaseURI(),
|
||||
aSheet->Principal(),
|
||||
aLoadData,
|
||||
aLoadData->mLineNumber,
|
||||
GetCompatibilityMode()
|
||||
)->Then(target, __func__,
|
||||
[loadData](bool aDummy) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
loadData->mIsBeingParsed = false;
|
||||
loadData->mLoader->UnblockOnload(/* aFireSync = */ false);
|
||||
// If there are no child sheets outstanding, mark us as complete.
|
||||
// Otherwise, the children are holding strong refs to the data and
|
||||
// will call SheetComplete() on it when they complete.
|
||||
if (loadData->mPendingChildren == 0) {
|
||||
loadData->mLoader->SheetComplete(loadData, NS_OK);
|
||||
}
|
||||
}, [] { MOZ_CRASH("rejected parse promise"); }
|
||||
);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* SheetComplete is the do-it-all cleanup function. It removes the
|
||||
|
@ -1856,7 +1919,7 @@ Loader::DoSheetComplete(SheetLoadData* aLoadData, nsresult aStatus,
|
|||
// or some such).
|
||||
if (data->mParentData &&
|
||||
--(data->mParentData->mPendingChildren) == 0 &&
|
||||
!mParsingDatas.Contains(data->mParentData)) {
|
||||
!data->mParentData->mIsBeingParsed) {
|
||||
DoSheetComplete(data->mParentData, aStatus, aDatasToNotify);
|
||||
}
|
||||
|
||||
|
@ -1924,7 +1987,6 @@ Loader::LoadInlineStyle(nsIContent* aElement,
|
|||
bool* aIsAlternate)
|
||||
{
|
||||
LOG(("css::Loader::LoadInlineStyle"));
|
||||
MOZ_ASSERT(mParsingDatas.IsEmpty(), "We're in the middle of a parse?");
|
||||
|
||||
*aCompleted = true;
|
||||
|
||||
|
@ -1985,8 +2047,12 @@ Loader::LoadInlineStyle(nsIContent* aElement,
|
|||
|
||||
NS_ADDREF(data);
|
||||
data->mLineNumber = aLineNumber;
|
||||
// Parse completion releases the load data
|
||||
rv = ParseSheet(aBuffer, Span<const uint8_t>(), data, *aCompleted);
|
||||
// Parse completion releases the load data.
|
||||
//
|
||||
// Note that we need to parse synchronously, since the web expects that the
|
||||
// effects of inline stylesheets are visible immediately (aside from @imports).
|
||||
rv = ParseSheet(aBuffer, Span<const uint8_t>(), data,
|
||||
/* aAllowAsync = */ false, *aCompleted);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// If aCompleted is true, |data| may well be deleted by now.
|
||||
|
@ -2009,10 +2075,8 @@ Loader::LoadStyleLink(nsIContent* aElement,
|
|||
nsICSSLoaderObserver* aObserver,
|
||||
bool* aIsAlternate)
|
||||
{
|
||||
LOG(("css::Loader::LoadStyleLink"));
|
||||
NS_PRECONDITION(aURL, "Must have URL to load");
|
||||
NS_ASSERTION(mParsingDatas.Length() == 0, "We're in the middle of a parse?");
|
||||
|
||||
LOG(("css::Loader::LoadStyleLink"));
|
||||
LOG_URI(" Link uri: '%s'", aURL);
|
||||
LOG((" Link title: '%s'", NS_ConvertUTF16toUTF8(aTitle).get()));
|
||||
LOG((" Link media: '%s'", NS_ConvertUTF16toUTF8(aMedia).get()));
|
||||
|
@ -2143,6 +2207,7 @@ HaveAncestorDataWithURI(SheetLoadData *aData, nsIURI *aURI)
|
|||
|
||||
nsresult
|
||||
Loader::LoadChildSheet(StyleSheet* aParentSheet,
|
||||
SheetLoadData* aParentData,
|
||||
nsIURI* aURL,
|
||||
dom::MediaList* aMedia,
|
||||
ImportRule* aGeckoParentRule,
|
||||
|
@ -2186,22 +2251,19 @@ Loader::LoadChildSheet(StyleSheet* aParentSheet,
|
|||
nsresult rv = CheckContentPolicy(loadingPrincipal, principal, aURL, context, false);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
SheetLoadData* parentData = nullptr;
|
||||
nsCOMPtr<nsICSSLoaderObserver> observer;
|
||||
|
||||
int32_t count = mParsingDatas.Length();
|
||||
if (count > 0) {
|
||||
if (aParentData) {
|
||||
LOG((" Have a parent load"));
|
||||
parentData = mParsingDatas.ElementAt(count - 1);
|
||||
// Check for cycles
|
||||
if (HaveAncestorDataWithURI(parentData, aURL)) {
|
||||
if (HaveAncestorDataWithURI(aParentData, aURL)) {
|
||||
// Houston, we have a loop, blow off this child and pretend this never
|
||||
// happened
|
||||
LOG_ERROR((" @import cycle detected, dropping load"));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_ASSERTION(parentData->mSheet == aParentSheet,
|
||||
NS_ASSERTION(aParentData->mSheet == aParentSheet,
|
||||
"Unexpected call to LoadChildSheet");
|
||||
} else {
|
||||
LOG((" No parent load; must be CSSOM"));
|
||||
|
@ -2231,7 +2293,7 @@ Loader::LoadChildSheet(StyleSheet* aParentSheet,
|
|||
aParentSheet->ParsingMode(),
|
||||
CORS_NONE, aParentSheet->GetReferrerPolicy(),
|
||||
EmptyString(), // integrity is only checked on main sheet
|
||||
parentData ? parentData->mSyncLoad : false,
|
||||
aParentData ? aParentData->mSyncLoad : false,
|
||||
false, empty, state, &isAlternate, &sheet);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
@ -2250,7 +2312,7 @@ Loader::LoadChildSheet(StyleSheet* aParentSheet,
|
|||
}
|
||||
|
||||
nsCOMPtr<nsINode> requestingNode = do_QueryInterface(context);
|
||||
SheetLoadData* data = new SheetLoadData(this, aURL, sheet, parentData,
|
||||
SheetLoadData* data = new SheetLoadData(this, aURL, sheet, aParentData,
|
||||
observer, principal, requestingNode);
|
||||
|
||||
NS_ADDREF(data);
|
||||
|
@ -2361,7 +2423,6 @@ Loader::InternalLoadNonDocumentSheet(nsIURI* aURL,
|
|||
NS_PRECONDITION(aSheet || aObserver, "Sheet and observer can't both be null");
|
||||
NS_PRECONDITION(!aUseSystemPrincipal || !aObserver,
|
||||
"Shouldn't load system-principal sheets async");
|
||||
NS_ASSERTION(mParsingDatas.Length() == 0, "We're in the middle of a parse?");
|
||||
|
||||
LOG_URI(" Non-document sheet uri: '%s'", aURL);
|
||||
|
||||
|
@ -2470,9 +2531,7 @@ Loader::PostLoadEvent(nsIURI* aURI,
|
|||
mPostedEvents.RemoveElement(evt);
|
||||
} else {
|
||||
// We'll unblock onload when we handle the event.
|
||||
if (mDocument) {
|
||||
mDocument->BlockOnload();
|
||||
}
|
||||
BlockOnload();
|
||||
|
||||
// We want to notify the observer for this data.
|
||||
evt->mMustNotify = true;
|
||||
|
@ -2508,9 +2567,7 @@ Loader::HandleLoadEvent(SheetLoadData* aEvent)
|
|||
SheetComplete(aEvent, NS_OK);
|
||||
}
|
||||
|
||||
if (mDocument) {
|
||||
mDocument->UnblockOnload(true);
|
||||
}
|
||||
UnblockOnload(true);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2668,7 +2725,6 @@ Loader::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
|||
// worthwhile:
|
||||
// - mLoadingDatas: transient, and should be small
|
||||
// - mPendingDatas: transient, and should be small
|
||||
// - mParsingDatas: transient, and should be small
|
||||
// - mPostedEvents: transient, and should be small
|
||||
//
|
||||
// The following members aren't measured:
|
||||
|
@ -2690,5 +2746,36 @@ Loader::GetStyleBackendType() const
|
|||
return mDocument->GetStyleBackendType();
|
||||
}
|
||||
|
||||
void
|
||||
Loader::BlockOnload()
|
||||
{
|
||||
if (mDocument) {
|
||||
mDocument->BlockOnload();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Loader::UnblockOnload(bool aFireSync)
|
||||
{
|
||||
if (mDocument) {
|
||||
mDocument->UnblockOnload(aFireSync);
|
||||
}
|
||||
}
|
||||
|
||||
already_AddRefed<nsISerialEventTarget>
|
||||
Loader::DispatchTarget()
|
||||
{
|
||||
nsCOMPtr<nsISerialEventTarget> target;
|
||||
if (mDocument) {
|
||||
target = mDocument->EventTargetFor(TaskCategory::Other);
|
||||
} else if (mDocGroup) {
|
||||
target = mDocGroup->EventTargetFor(TaskCategory::Other);
|
||||
} else {
|
||||
target = SystemGroup::EventTargetFor(TaskCategory::Other);
|
||||
}
|
||||
|
||||
return target.forget();
|
||||
}
|
||||
|
||||
} // namespace css
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -298,6 +298,8 @@ public:
|
|||
* nsICSSLoaderObserver notification will be sent.
|
||||
*
|
||||
* @param aParentSheet the parent of this child sheet
|
||||
* @param aParentData the SheetLoadData corresponding to the load of the
|
||||
* parent sheet.
|
||||
* @param aURL the URL of the child sheet
|
||||
* @param aMedia the already-parsed media list for the child sheet
|
||||
* @param aGeckoParentRule the @import rule importing this child, when using
|
||||
|
@ -307,6 +309,7 @@ public:
|
|||
* for this load
|
||||
*/
|
||||
nsresult LoadChildSheet(StyleSheet* aParentSheet,
|
||||
SheetLoadData* aParentData,
|
||||
nsIURI* aURL,
|
||||
dom::MediaList* aMedia,
|
||||
ImportRule* aGeckoParentRule,
|
||||
|
@ -482,6 +485,14 @@ private:
|
|||
friend class SheetLoadData;
|
||||
friend class StreamLoader;
|
||||
|
||||
// Helpers to conditionally block onload if mDocument is non-null.
|
||||
void BlockOnload();
|
||||
void UnblockOnload(bool aFireSync);
|
||||
|
||||
// Helper to select the correct dispatch target for asynchronous events for
|
||||
// this loader.
|
||||
already_AddRefed<nsISerialEventTarget> DispatchTarget();
|
||||
|
||||
nsresult CheckContentPolicy(nsIPrincipal* aLoadingPrincipal,
|
||||
nsIPrincipal* aTriggeringPrincipal,
|
||||
nsIURI* aTargetURI,
|
||||
|
@ -571,8 +582,31 @@ private:
|
|||
nsresult ParseSheet(const nsAString& aUTF16,
|
||||
Span<const uint8_t> aUTF8,
|
||||
SheetLoadData* aLoadData,
|
||||
bool aAllowAsync,
|
||||
bool& aCompleted);
|
||||
|
||||
//
|
||||
// Separate parsing paths for the old and new style systems, so that we can
|
||||
// make parsing asynchronous in the new style system without touching the old
|
||||
// one. Once we drop the old style system, this can be simplified.
|
||||
//
|
||||
|
||||
|
||||
#ifdef MOZ_OLD_STYLE
|
||||
nsresult DoParseSheetGecko(CSSStyleSheet* aSheet,
|
||||
const nsAString& aUTF16,
|
||||
Span<const uint8_t> aUTF8,
|
||||
SheetLoadData* aLoadData,
|
||||
bool& aCompleted);
|
||||
#endif
|
||||
|
||||
nsresult DoParseSheetServo(ServoStyleSheet* aSheet,
|
||||
const nsAString& aUTF16,
|
||||
Span<const uint8_t> aUTF8,
|
||||
SheetLoadData* aLoadData,
|
||||
bool aAllowAsync,
|
||||
bool& aCompleted);
|
||||
|
||||
// The load of the sheet in aLoadData is done, one way or another. Do final
|
||||
// cleanup, including releasing aLoadData.
|
||||
void SheetComplete(SheetLoadData* aLoadData, nsresult aStatus);
|
||||
|
@ -596,10 +630,6 @@ private:
|
|||
};
|
||||
nsAutoPtr<Sheets> mSheets;
|
||||
|
||||
// We're not likely to have many levels of @import... But likely to have
|
||||
// some. Allocate some storage, what the hell.
|
||||
AutoTArray<SheetLoadData*, 8> mParsingDatas;
|
||||
|
||||
// The array of posted stylesheet loaded events (SheetLoadDatas) we have.
|
||||
// Note that these are rare.
|
||||
LoadDataArray mPostedEvents;
|
||||
|
|
|
@ -52,6 +52,7 @@ SERVO_BINDING_FUNC(Servo_StyleSheet_FromUTF8Bytes,
|
|||
RawServoStyleSheetContentsStrong,
|
||||
mozilla::css::Loader* loader,
|
||||
mozilla::ServoStyleSheet* gecko_stylesheet,
|
||||
mozilla::css::SheetLoadData* load_data,
|
||||
const uint8_t* data,
|
||||
size_t data_len,
|
||||
mozilla::css::SheetParsingMode parsing_mode,
|
||||
|
|
|
@ -2523,6 +2523,7 @@ Gecko_GetAppUnitsPerPhysicalInch(RawGeckoPresContextBorrowed aPresContext)
|
|||
ServoStyleSheet*
|
||||
Gecko_LoadStyleSheet(css::Loader* aLoader,
|
||||
ServoStyleSheet* aParent,
|
||||
SheetLoadData* aParentLoadData,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets,
|
||||
RawGeckoURLExtraData* aURLExtraData,
|
||||
const uint8_t* aURLString,
|
||||
|
@ -2544,7 +2545,7 @@ Gecko_LoadStyleSheet(css::Loader* aLoader,
|
|||
|
||||
StyleSheet* previousFirstChild = aParent->GetFirstChild();
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
rv = aLoader->LoadChildSheet(aParent, uri, media, nullptr, aReusableSheets);
|
||||
rv = aLoader->LoadChildSheet(aParent, aParentLoadData, uri, media, nullptr, aReusableSheets);
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv) ||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "mozilla/ServoTypes.h"
|
||||
#include "mozilla/ServoBindingTypes.h"
|
||||
#include "mozilla/ServoElementSnapshot.h"
|
||||
#include "mozilla/css/SheetLoadData.h"
|
||||
#include "mozilla/css/SheetParsingMode.h"
|
||||
#include "mozilla/css/URLMatchingFunction.h"
|
||||
#include "mozilla/EffectCompositor.h"
|
||||
|
@ -179,6 +180,7 @@ RawGeckoNodeBorrowedOrNull Gecko_GetNextStyleChild(RawGeckoStyleChildrenIterator
|
|||
mozilla::ServoStyleSheet*
|
||||
Gecko_LoadStyleSheet(mozilla::css::Loader* loader,
|
||||
mozilla::ServoStyleSheet* parent,
|
||||
mozilla::css::SheetLoadData* parent_load_data,
|
||||
mozilla::css::LoaderReusableStyleSheets* reusable_sheets,
|
||||
RawGeckoURLExtraData* base_url_data,
|
||||
const uint8_t* url_bytes,
|
||||
|
|
|
@ -55,6 +55,7 @@ headers = [
|
|||
"gfxFontFeatures.h",
|
||||
"nsThemeConstants.h",
|
||||
"mozilla/css/Loader.h",
|
||||
"mozilla/css/SheetLoadData.h",
|
||||
"mozilla/dom/AnimationEffectReadOnlyBinding.h",
|
||||
"mozilla/dom/HTMLSlotElement.h",
|
||||
"mozilla/dom/KeyframeEffectBinding.h",
|
||||
|
@ -230,6 +231,7 @@ whitelist-types = [
|
|||
"mozilla::CSSPseudoClassType",
|
||||
"mozilla::css::ErrorReporter",
|
||||
"mozilla::css::LoaderReusableStyleSheets",
|
||||
"mozilla::css::SheetLoadData",
|
||||
"mozilla::css::SheetParsingMode",
|
||||
"mozilla::css::URLMatchingFunction",
|
||||
"mozilla::dom::IterationCompositeOperation",
|
||||
|
@ -599,6 +601,7 @@ structs-types = [
|
|||
"nsresult",
|
||||
"Loader",
|
||||
"LoaderReusableStyleSheets",
|
||||
"SheetLoadData",
|
||||
"ServoStyleSheet",
|
||||
"ServoComputedData",
|
||||
"ServoStyleContext",
|
||||
|
|
|
@ -195,31 +195,69 @@ ServoStyleSheet::HasRules() const
|
|||
return Servo_StyleSheet_HasRules(Inner()->mContents);
|
||||
}
|
||||
|
||||
nsresult
|
||||
RefPtr<StyleSheetParsePromise>
|
||||
ServoStyleSheet::ParseSheet(css::Loader* aLoader,
|
||||
Span<const uint8_t> aInput,
|
||||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
css::SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
nsCompatibility aCompatMode,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets)
|
||||
{
|
||||
MOZ_ASSERT(mParsePromise.IsEmpty());
|
||||
RefPtr<StyleSheetParsePromise> p = mParsePromise.Ensure(__func__);
|
||||
MOZ_ASSERT(!mMedia || mMedia->IsServo());
|
||||
RefPtr<URLExtraData> extraData =
|
||||
new URLExtraData(aBaseURI, aSheetURI, aSheetPrincipal);
|
||||
|
||||
Inner()->mURLData = new URLExtraData(aBaseURI, aSheetURI, aSheetPrincipal); // RefPtr
|
||||
Inner()->mContents = Servo_StyleSheet_FromUTF8Bytes(aLoader,
|
||||
this,
|
||||
aLoadData,
|
||||
aInput.Elements(),
|
||||
aInput.Length(),
|
||||
mParsingMode,
|
||||
extraData,
|
||||
Inner()->mURLData,
|
||||
aLineNumber,
|
||||
aCompatMode,
|
||||
aReusableSheets)
|
||||
.Consume();
|
||||
FinishParse();
|
||||
mParsePromise.Resolve(true, __func__);
|
||||
return Move(p);
|
||||
}
|
||||
|
||||
void
|
||||
ServoStyleSheet::ParseSheetSync(css::Loader* aLoader,
|
||||
Span<const uint8_t> aInput,
|
||||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
css::SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
nsCompatibility aCompatMode,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets)
|
||||
{
|
||||
MOZ_ASSERT(!mMedia || mMedia->IsServo());
|
||||
Inner()->mURLData = new URLExtraData(aBaseURI, aSheetURI, aSheetPrincipal); // RefPtr
|
||||
|
||||
Inner()->mContents = Servo_StyleSheet_FromUTF8Bytes(aLoader,
|
||||
this,
|
||||
aLoadData,
|
||||
aInput.Elements(),
|
||||
aInput.Length(),
|
||||
mParsingMode,
|
||||
Inner()->mURLData,
|
||||
aLineNumber,
|
||||
aCompatMode,
|
||||
aReusableSheets)
|
||||
.Consume();
|
||||
|
||||
FinishParse();
|
||||
}
|
||||
|
||||
void
|
||||
ServoStyleSheet::FinishParse()
|
||||
{
|
||||
nsString sourceMapURL;
|
||||
Servo_StyleSheet_GetSourceMapURL(Inner()->mContents, &sourceMapURL);
|
||||
SetSourceMapURLFromComment(sourceMapURL);
|
||||
|
@ -227,9 +265,6 @@ ServoStyleSheet::ParseSheet(css::Loader* aLoader,
|
|||
nsString sourceURL;
|
||||
Servo_StyleSheet_GetSourceURL(Inner()->mContents, &sourceURL);
|
||||
SetSourceURL(sourceURL);
|
||||
|
||||
Inner()->mURLData = extraData.forget();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -298,16 +333,16 @@ ServoStyleSheet::ReparseSheet(const nsAString& aInput)
|
|||
|
||||
DropRuleList();
|
||||
|
||||
nsresult rv = ParseSheet(loader,
|
||||
NS_ConvertUTF16toUTF8(aInput),
|
||||
mInner->mSheetURI,
|
||||
mInner->mBaseURI,
|
||||
mInner->mPrincipal,
|
||||
lineNumber,
|
||||
eCompatibility_FullStandards,
|
||||
&reusableSheets);
|
||||
ParseSheetSync(loader,
|
||||
NS_ConvertUTF16toUTF8(aInput),
|
||||
mInner->mSheetURI,
|
||||
mInner->mBaseURI,
|
||||
mInner->mPrincipal,
|
||||
/* aLoadData = */ nullptr,
|
||||
lineNumber,
|
||||
eCompatibility_FullStandards,
|
||||
&reusableSheets);
|
||||
DidDirty();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Notify the stylesets about the new rules.
|
||||
{
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#define mozilla_ServoStyleSheet_h
|
||||
|
||||
#include "mozilla/dom/SRIMetadata.h"
|
||||
#include "mozilla/MozPromise.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/ServoBindingTypes.h"
|
||||
#include "mozilla/StyleSheet.h"
|
||||
|
@ -19,10 +20,14 @@
|
|||
namespace mozilla {
|
||||
|
||||
class ServoCSSRuleList;
|
||||
typedef MozPromise</* Dummy */ bool,
|
||||
/* Dummy */ bool,
|
||||
/* IsExclusive = */ true> StyleSheetParsePromise;
|
||||
|
||||
namespace css {
|
||||
class Loader;
|
||||
class LoaderReusableStyleSheets;
|
||||
class SheetLoadData;
|
||||
}
|
||||
|
||||
// -------------------------------
|
||||
|
@ -84,16 +89,32 @@ public:
|
|||
|
||||
bool HasRules() const;
|
||||
|
||||
MOZ_MUST_USE nsresult
|
||||
// Parses a stylesheet. The aLoadData argument corresponds to the
|
||||
// SheetLoadData for this stylesheet. It may be null in some cases.
|
||||
RefPtr<StyleSheetParsePromise>
|
||||
ParseSheet(css::Loader* aLoader,
|
||||
Span<const uint8_t> aInput,
|
||||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
css::SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
nsCompatibility aCompatMode,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets = nullptr);
|
||||
|
||||
// Similar to the above, but guarantees that parsing will be performed
|
||||
// synchronously.
|
||||
void
|
||||
ParseSheetSync(css::Loader* aLoader,
|
||||
Span<const uint8_t> aInput,
|
||||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
css::SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
nsCompatibility aCompatMode,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets = nullptr);
|
||||
|
||||
nsresult ReparseSheet(const nsAString& aInput);
|
||||
|
||||
const RawServoStyleSheetContents* RawContents() const {
|
||||
|
@ -154,6 +175,9 @@ private:
|
|||
nsIDocument* aDocumentToUse,
|
||||
nsINode* aOwningNodeToUse);
|
||||
|
||||
// Common tail routine for the synchronous and asynchronous parsing paths.
|
||||
void FinishParse();
|
||||
|
||||
void DropRuleList();
|
||||
|
||||
// Take the recently cloned sheets from the `@import` rules, and reparent them
|
||||
|
@ -162,6 +186,8 @@ private:
|
|||
|
||||
RefPtr<ServoCSSRuleList> mRuleList;
|
||||
|
||||
MozPromiseHolder<StyleSheetParsePromise> mParsePromise;
|
||||
|
||||
friend class StyleSheet;
|
||||
};
|
||||
|
||||
|
|
|
@ -136,6 +136,9 @@ public:
|
|||
// completing or being cancelled).
|
||||
bool mIsLoading : 1;
|
||||
|
||||
// mIsBeingParsed is true if this stylesheet is currently being parsed.
|
||||
bool mIsBeingParsed : 1;
|
||||
|
||||
// mIsCancelled is set to true when a sheet load is stopped by
|
||||
// Stop() or StopLoadingSheet() (which was removed in Bug 556446).
|
||||
// SheetLoadData::OnStreamComplete() checks this to avoid parsing
|
||||
|
|
|
@ -131,6 +131,7 @@ StreamLoader::OnStopRequest(nsIRequest* aRequest,
|
|||
EmptyString(),
|
||||
Span<const uint8_t>(utf8String).From(skip),
|
||||
mSheetLoadData,
|
||||
/* aAllowAsync = */ true,
|
||||
dummy);
|
||||
}
|
||||
|
||||
|
|
|
@ -143,6 +143,7 @@ public:
|
|||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets);
|
||||
|
||||
|
@ -1299,6 +1300,9 @@ protected:
|
|||
// The sheet we're parsing into
|
||||
RefPtr<CSSStyleSheet> mSheet;
|
||||
|
||||
// The data describing this load, if applicable.
|
||||
RefPtr<SheetLoadData> mLoadData;
|
||||
|
||||
// Used for @import rules
|
||||
css::Loader* mChildLoader; // not ref counted, it owns us
|
||||
|
||||
|
@ -1574,6 +1578,7 @@ CSSParserImpl::ParseSheet(const nsAString& aInput,
|
|||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets)
|
||||
{
|
||||
|
@ -1597,6 +1602,7 @@ CSSParserImpl::ParseSheet(const nsAString& aInput,
|
|||
nsCSSScanner scanner(aInput, aLineNumber);
|
||||
css::ErrorReporter reporter(scanner, mSheet, mChildLoader, aSheetURI);
|
||||
InitScanner(scanner, reporter, aSheetURI, aBaseURI, aSheetPrincipal);
|
||||
mLoadData = aLoadData;
|
||||
|
||||
int32_t ruleCount = mSheet->StyleRuleCount();
|
||||
if (0 < ruleCount) {
|
||||
|
@ -1645,6 +1651,7 @@ CSSParserImpl::ParseSheet(const nsAString& aInput,
|
|||
|
||||
mSheet->SetSourceMapURLFromComment(scanner.GetSourceMapURL());
|
||||
mSheet->SetSourceURL(scanner.GetSourceURL());
|
||||
mLoadData = nullptr;
|
||||
ReleaseScanner();
|
||||
|
||||
mParsingMode = css::eAuthorSheetFeatures;
|
||||
|
@ -3699,7 +3706,7 @@ CSSParserImpl::ProcessImport(const nsString& aURLSpec,
|
|||
}
|
||||
|
||||
if (mChildLoader) {
|
||||
mChildLoader->LoadChildSheet(mSheet, url, aMedia, rule, mReusableSheets);
|
||||
mChildLoader->LoadChildSheet(mSheet, mLoadData, url, aMedia, rule, mReusableSheets);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17932,12 +17939,13 @@ nsCSSParser::ParseSheet(const nsAString& aInput,
|
|||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
css::LoaderReusableStyleSheets* aReusableSheets)
|
||||
{
|
||||
return static_cast<CSSParserImpl*>(mImpl)->
|
||||
ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLineNumber,
|
||||
aReusableSheets);
|
||||
ParseSheet(aInput, aSheetURI, aBaseURI, aSheetPrincipal, aLoadData,
|
||||
aLineNumber, aReusableSheets);
|
||||
}
|
||||
|
||||
already_AddRefed<css::Declaration>
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/css/Loader.h"
|
||||
#include "mozilla/css/SheetLoadData.h"
|
||||
|
||||
#include "nsCSSPropertyID.h"
|
||||
#include "nsCSSScanner.h"
|
||||
|
@ -74,6 +75,7 @@ public:
|
|||
* @param aSheetPrincipal the principal of the stylesheet. This must match
|
||||
* the principal of the sheet passed to the
|
||||
* constructor.
|
||||
* @param aLoadData the SheetLoadData for this sheet, if applicable.
|
||||
* @param aLineNumber the line number of the first line of the sheet.
|
||||
* @param aReusableSheets style sheets that can be reused by an @import.
|
||||
* This can be nullptr.
|
||||
|
@ -82,6 +84,7 @@ public:
|
|||
nsIURI* aSheetURL,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
mozilla::css::SheetLoadData* aLoadData,
|
||||
uint32_t aLineNumber,
|
||||
mozilla::css::LoaderReusableStyleSheets* aReusableSheets =
|
||||
nullptr);
|
||||
|
|
|
@ -1012,11 +1012,8 @@ nsLayoutStylesheetCache::BuildPreferenceSheet(RefPtr<StyleSheet>* aSheet,
|
|||
} else {
|
||||
ServoStyleSheet* servoSheet = sheet->AsServo();
|
||||
// NB: The pref sheet never has @import rules.
|
||||
nsresult rv = servoSheet->ParseSheet(
|
||||
nullptr, sheetText, uri, uri, nullptr, 0, eCompatibility_FullStandards);
|
||||
// Parsing the about:PreferenceStyleSheet URI can only fail on OOM. If we
|
||||
// are OOM before we parsed any documents we might as well abort.
|
||||
MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
|
||||
servoSheet->ParseSheetSync(
|
||||
nullptr, sheetText, uri, uri, nullptr, /* aLoadData = */ nullptr, 0, eCompatibility_FullStandards);
|
||||
}
|
||||
|
||||
#undef NS_GET_R_G_B
|
||||
|
|
|
@ -33,6 +33,7 @@ static void ServoParsingBench() {
|
|||
for (int i = 0; i < PARSING_REPETITIONS; i++) {
|
||||
RefPtr<RawServoStyleSheetContents> stylesheet =
|
||||
Servo_StyleSheet_FromUTF8Bytes(nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
css.Elements(),
|
||||
css.Length(),
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
#define mozilla_FStream_h
|
||||
|
||||
#include "mozilla/Char16.h"
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <ostream>
|
||||
#include <fstream>
|
||||
#if defined(__MINGW32__)
|
||||
#include "mozilla/UniquePtr.h"
|
||||
|
|
|
@ -1162,4 +1162,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
|||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1528144877030000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1528315154580000);
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -90,14 +90,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "azure"
|
||||
version = "0.25.0"
|
||||
source = "git+https://github.com/servo/rust-azure#78f3850ab31c2178d493c1f0fb47fb3d22484a0e"
|
||||
version = "0.27.0"
|
||||
source = "git+https://github.com/servo/rust-azure#46a9c9c6279ba46354b48f6fc849ee20624cbf90"
|
||||
dependencies = [
|
||||
"cmake 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-freetype-sys 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-skia 0.30000010.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-skia 0.30000012.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -270,17 +270,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
name = "canvas"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"azure 0.25.0 (git+https://github.com/servo/rust-azure)",
|
||||
"azure 0.27.0 (git+https://github.com/servo/rust-azure)",
|
||||
"canvas_traits 0.0.1",
|
||||
"compositing 0.0.1",
|
||||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"offscreen_gl_context 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"offscreen_gl_context 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo_config 0.0.1",
|
||||
"webrender 0.57.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_api 0.57.0 (git+https://github.com/servo/webrender)",
|
||||
|
@ -291,13 +291,13 @@ name = "canvas_traits"
|
|||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"malloc_size_of 0.0.1",
|
||||
"malloc_size_of_derive 0.0.1",
|
||||
"nonzero 0.0.1",
|
||||
"offscreen_gl_context 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"offscreen_gl_context 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo_config 0.0.1",
|
||||
"webrender_api 0.57.0 (git+https://github.com/servo/webrender)",
|
||||
|
@ -421,7 +421,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
name = "compositing"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx_traits 0.0.1",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"image 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -454,7 +454,7 @@ dependencies = [
|
|||
"compositing 0.0.1",
|
||||
"debugger 0.0.1",
|
||||
"devtools_traits 0.0.1",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gaol 0.0.1 (git+https://github.com/servo/gaol)",
|
||||
"gfx 0.0.1",
|
||||
"gfx_traits 0.0.1",
|
||||
|
@ -853,7 +853,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "euclid"
|
||||
version = "0.16.4"
|
||||
version = "0.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1000,7 +1000,7 @@ dependencies = [
|
|||
"core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-text 9.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fontsan 0.4.0 (git+https://github.com/servo/fontsan)",
|
||||
"freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1362,7 +1362,7 @@ dependencies = [
|
|||
"atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"canvas_traits 0.0.1",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx 0.0.1",
|
||||
"gfx_traits 0.0.1",
|
||||
|
@ -1404,7 +1404,7 @@ version = "0.0.1"
|
|||
dependencies = [
|
||||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx 0.0.1",
|
||||
"gfx_traits 0.0.1",
|
||||
|
@ -1511,7 +1511,7 @@ dependencies = [
|
|||
"devtools 0.0.1",
|
||||
"devtools_traits 0.0.1",
|
||||
"env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gaol 0.0.1 (git+https://github.com/servo/gaol)",
|
||||
"gfx 0.0.1",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1589,7 +1589,7 @@ version = "0.0.1"
|
|||
dependencies = [
|
||||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hashglobe 0.1.0",
|
||||
"mozjs 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"selectors 0.19.0",
|
||||
|
@ -1979,12 +1979,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "offscreen_gl_context"
|
||||
version = "0.14.4"
|
||||
version = "0.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cgl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gl_generator 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2145,12 +2145,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "plane-split"
|
||||
version = "0.7.0"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"binary-space-partition 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -2406,7 +2406,7 @@ dependencies = [
|
|||
"dom_struct 0.0.1",
|
||||
"domobject_derive 0.0.1",
|
||||
"encoding_rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"half 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2429,7 +2429,7 @@ dependencies = [
|
|||
"msg 0.0.1",
|
||||
"net_traits 0.0.1",
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"offscreen_gl_context 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"offscreen_gl_context 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2474,7 +2474,7 @@ dependencies = [
|
|||
"atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"canvas_traits 0.0.1",
|
||||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx_traits 0.0.1",
|
||||
"html5ever 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2511,7 +2511,7 @@ dependencies = [
|
|||
name = "script_tests"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"msg 0.0.1",
|
||||
"script 0.0.1",
|
||||
"servo_url 0.0.1",
|
||||
|
@ -2526,7 +2526,7 @@ dependencies = [
|
|||
"canvas_traits 0.0.1",
|
||||
"cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"devtools_traits 0.0.1",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx_traits 0.0.1",
|
||||
"hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hyper_serde 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2623,7 +2623,7 @@ dependencies = [
|
|||
"backtrace 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"compositing 0.0.1",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libservo 0.0.1",
|
||||
|
@ -2705,12 +2705,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "servo-skia"
|
||||
version = "0.30000010.0"
|
||||
version = "0.30000012.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cgl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"expat-sys 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"glx 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2771,7 +2771,7 @@ version = "0.0.1"
|
|||
dependencies = [
|
||||
"android_injected_glue 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2789,7 +2789,7 @@ name = "servo_geometry"
|
|||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"malloc_size_of 0.0.1",
|
||||
"malloc_size_of_derive 0.0.1",
|
||||
"webrender_api 0.57.0 (git+https://github.com/servo/webrender)",
|
||||
|
@ -2933,7 +2933,7 @@ dependencies = [
|
|||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"debug_unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"encoding_rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fallible 0.0.1",
|
||||
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hashglobe 0.1.0",
|
||||
|
@ -2993,7 +2993,7 @@ dependencies = [
|
|||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"html5ever 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3015,7 +3015,7 @@ dependencies = [
|
|||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"malloc_size_of 0.0.1",
|
||||
"malloc_size_of_derive 0.0.1",
|
||||
"selectors 0.19.0",
|
||||
|
@ -3033,7 +3033,7 @@ dependencies = [
|
|||
"cssparser 0.23.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cstr 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"geckoservo 0.0.1",
|
||||
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3355,7 +3355,7 @@ version = "0.0.1"
|
|||
dependencies = [
|
||||
"base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"image 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3375,7 +3375,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.57.0"
|
||||
source = "git+https://github.com/servo/webrender#681e181d254e867efb07b91436daf5a6aea71d34"
|
||||
source = "git+https://github.com/servo/webrender#d7735c7da9844775d4a3e6ec8b6cea25fb0b0486"
|
||||
dependencies = [
|
||||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3385,14 +3385,14 @@ dependencies = [
|
|||
"core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-text 9.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"freetype 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.4.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plane-split 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"thread_profiler 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3403,7 +3403,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "webrender_api"
|
||||
version = "0.57.0"
|
||||
source = "git+https://github.com/servo/webrender#681e181d254e867efb07b91436daf5a6aea71d34"
|
||||
source = "git+https://github.com/servo/webrender#d7735c7da9844775d4a3e6ec8b6cea25fb0b0486"
|
||||
dependencies = [
|
||||
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bincode 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3412,7 +3412,7 @@ dependencies = [
|
|||
"core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3424,7 +3424,7 @@ name = "webvr"
|
|||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"canvas_traits 0.0.1",
|
||||
"euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ipc-channel 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"msg 0.0.1",
|
||||
|
@ -3585,7 +3585,7 @@ dependencies = [
|
|||
"checksum atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb2dcb6e6d35f20276943cc04bb98e538b348d525a04ac79c10021561d202f21"
|
||||
"checksum atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "21e50800ec991574876040fff8ee46b136a53e985286fbe6a3bdfe6421b78860"
|
||||
"checksum audio-video-metadata 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "71536082079f5ba92c274fba7c2dcd4e2f9d5c13ce6d7f8fe9acbbb258916d18"
|
||||
"checksum azure 0.25.0 (git+https://github.com/servo/rust-azure)" = "<none>"
|
||||
"checksum azure 0.27.0 (git+https://github.com/servo/rust-azure)" = "<none>"
|
||||
"checksum backtrace 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "72f9b4182546f4b04ebc4ab7f84948953a118bd6021a1b6a6c909e3e94f6be76"
|
||||
"checksum backtrace-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3a0d842ea781ce92be2bf78a9b38883948542749640b8378b3b2f03d1fd9f1ff"
|
||||
"checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9"
|
||||
|
@ -3650,7 +3650,7 @@ dependencies = [
|
|||
"checksum enum_primitive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180"
|
||||
"checksum env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b"
|
||||
"checksum error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8"
|
||||
"checksum euclid 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d33ed9630f5f7a86abb0849e96a585922cc5a640478a36f05f74d96a22655f"
|
||||
"checksum euclid 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b2744c002882c67d0f6d6e8cfdf16eae729dc27744d312745132e62218b7de5c"
|
||||
"checksum expat-sys 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c470ccb972f2088549b023db8029ed9da9426f5affbf9b62efff7009ab8ed5b1"
|
||||
"checksum flate2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)" = "36df0166e856739905cd3d7e0b210fe818592211a008862599845e012d8d304c"
|
||||
"checksum fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"
|
||||
|
@ -3736,7 +3736,7 @@ dependencies = [
|
|||
"checksum objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "877f30f37acef6749b1841cceab289707f211aecfc756553cd63976190e6cc2e"
|
||||
"checksum objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
|
||||
"checksum objc_id 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4730aa1c64d722db45f7ccc4113a3e2c465d018de6db4d3e7dfe031e8c8a297"
|
||||
"checksum offscreen_gl_context 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)" = "818643a4ea6e790be67aca18c9756f9d3d388997836610ab697215ca86567b30"
|
||||
"checksum offscreen_gl_context 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f7698545d3c6db6a9f748cfd399880893d8876c3b980fa57c52b5a99b105abce"
|
||||
"checksum ogg 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7137bf02687385302f4c0aecd77cfce052b69f5b4ee937be778e125c62f67e30"
|
||||
"checksum ogg_metadata 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fc665717454399cba557c55ad226148996e9266ee291f8a37a98bb2cded0a490"
|
||||
"checksum openssl 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)" = "419ef26bb651d72b6c5a603bcc4e4856a362460e62352dfffa53de91d2e81181"
|
||||
|
@ -3755,7 +3755,7 @@ dependencies = [
|
|||
"checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03"
|
||||
"checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2"
|
||||
"checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"
|
||||
"checksum plane-split 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2adb8d1523b2ddcd98275613e9bc04eef75b47a39e252e63733a3218ae3c1b7"
|
||||
"checksum plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "69c557e11e3a1533bc969fa596e5011e1d9f76dd61cd102ef942c9f8654b17a2"
|
||||
"checksum png 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925"
|
||||
"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
||||
"checksum proc-macro2 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d1cb7aaaa4bf022ec2b14ff2f2ba1643a22f3cee88df014a85e14b392282c61d"
|
||||
|
@ -3791,7 +3791,7 @@ dependencies = [
|
|||
"checksum servo-fontconfig-sys 4.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "38b494f03009ee81914b0e7d387ad7c145cafcd69747c2ec89b0e17bb94f303a"
|
||||
"checksum servo-freetype-sys 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9232032c2e85118c0282c6562c84cab12316e655491ba0a5d1905b2320060d1b"
|
||||
"checksum servo-glutin 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f883df5d9d1e35a86670a14e8392bc1cc64511b59ff2c27c6c28b99cec7a894b"
|
||||
"checksum servo-skia 0.30000010.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4cfa78174a63556118abfe6ea7641f5f0823e7f51f0023c998017642686df6"
|
||||
"checksum servo-skia 0.30000012.0 (registry+https://github.com/rust-lang/crates.io-index)" = "80980e6eb854c06e8e45fa3cfbd439bf4223a6840f38c3caec34efa39cf9405e"
|
||||
"checksum servo-websocket 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efde78dfcf2178d5a11e1e2268e0d8df0627dfe2724546db8585d6678e1af150"
|
||||
"checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c"
|
||||
"checksum shared_library 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fb04126b6fcfd2710fb5b6d18f4207b6c535f2850a7e1a43bcd526d44f30a79a"
|
||||
|
|
|
@ -14,13 +14,13 @@ azure = {git = "https://github.com/servo/rust-azure"}
|
|||
canvas_traits = {path = "../canvas_traits"}
|
||||
compositing = {path = "../compositing"}
|
||||
cssparser = "0.23.0"
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
fnv = "1.0"
|
||||
gleam = "0.4"
|
||||
ipc-channel = "0.9"
|
||||
log = "0.3.5"
|
||||
num-traits = "0.1.32"
|
||||
offscreen_gl_context = { version = "0.14", features = ["serde", "osmesa"] }
|
||||
offscreen_gl_context = { version = "0.15", features = ["serde", "osmesa"] }
|
||||
servo_config = {path = "../config"}
|
||||
webrender = {git = "https://github.com/servo/webrender"}
|
||||
webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]}
|
||||
|
|
|
@ -11,13 +11,13 @@ path = "lib.rs"
|
|||
|
||||
[dependencies]
|
||||
cssparser = "0.23.0"
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
ipc-channel = "0.9"
|
||||
lazy_static = "1"
|
||||
malloc_size_of = { path = "../malloc_size_of" }
|
||||
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
|
||||
nonzero = {path = "../nonzero"}
|
||||
offscreen_gl_context = { version = "0.14", features = ["serde"] }
|
||||
offscreen_gl_context = { version = "0.15", features = ["serde"] }
|
||||
serde = "1.0"
|
||||
servo_config = {path = "../config"}
|
||||
webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]}
|
||||
|
|
|
@ -10,7 +10,7 @@ name = "compositing"
|
|||
path = "lib.rs"
|
||||
|
||||
[dependencies]
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
gfx_traits = {path = "../gfx_traits"}
|
||||
gleam = "0.4"
|
||||
image = "0.17"
|
||||
|
|
|
@ -12,7 +12,7 @@ test = false
|
|||
doctest = false
|
||||
|
||||
[dependencies]
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
getopts = "0.2.11"
|
||||
lazy_static = "1"
|
||||
log = "0.3.5"
|
||||
|
|
|
@ -18,7 +18,7 @@ canvas_traits = {path = "../canvas_traits"}
|
|||
compositing = {path = "../compositing"}
|
||||
debugger = {path = "../debugger"}
|
||||
devtools_traits = {path = "../devtools_traits"}
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
gfx = {path = "../gfx"}
|
||||
gfx_traits = {path = "../gfx_traits"}
|
||||
hyper = "0.10"
|
||||
|
|
|
@ -11,7 +11,7 @@ path = "lib.rs"
|
|||
|
||||
[dependencies]
|
||||
app_units = "0.6"
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
malloc_size_of = { path = "../malloc_size_of" }
|
||||
malloc_size_of_derive = { path = "../malloc_size_of_derive" }
|
||||
webrender_api = { git = "https://github.com/servo/webrender" }
|
||||
|
|
|
@ -18,7 +18,7 @@ unstable = ["simd"]
|
|||
[dependencies]
|
||||
app_units = "0.6"
|
||||
bitflags = "1.0"
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
fnv = "1.0"
|
||||
fontsan = {git = "https://github.com/servo/fontsan"}
|
||||
gfx_traits = {path = "../gfx_traits"}
|
||||
|
|
|
@ -16,7 +16,7 @@ app_units = "0.6.1"
|
|||
atomic_refcell = "0.1"
|
||||
bitflags = "1.0"
|
||||
canvas_traits = {path = "../canvas_traits"}
|
||||
euclid = "0.16.4"
|
||||
euclid = "0.17"
|
||||
fnv = "1.0"
|
||||
gfx = {path = "../gfx"}
|
||||
gfx_traits = {path = "../gfx_traits"}
|
||||
|
|
|
@ -15,7 +15,7 @@ unstable = ["parking_lot/nightly"]
|
|||
[dependencies]
|
||||
app_units = "0.6"
|
||||
atomic_refcell = "0.1"
|
||||
euclid = "0.16"
|
||||
euclid = "0.17"
|
||||
fnv = "1.0"
|
||||
gfx = {path = "../gfx"}
|
||||
gfx_traits = {path = "../gfx_traits"}
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче