Merge mozilla-central to inbound. a=merge on a CLOSED TREE

This commit is contained in:
Cosmin Sabou 2018-02-28 23:55:37 +02:00
Родитель 02c8ddc6db a97105ec0d
Коммит 6edc2e0f3b
183 изменённых файлов: 9869 добавлений и 1524 удалений

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

@ -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

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

До

Ширина:  |  Высота:  |  Размер: 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

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

До

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

Двоичные данные
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

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

До

Ширина:  |  Высота:  |  Размер: 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);
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)");
hud.setFilterState("exception", true);
info(`toggle "error" filter in browser console`);
await setFilterState(hud, {
error: false
});
filterState = await getFilterState(hud);
ok(!filterState.error, "The browser console error filter is disabled");
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(
sheet->AsServo()->ParseSheetSync(
aDocument->CSSLoader(), NS_ConvertUTF16toUTF8(aOriginal),
aDocument->GetDocumentURI(), aBaseURI, aDocument->NodePrincipal(),
0, aDocument->GetCompatibilityMode());
/* 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);

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

@ -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,6 +582,29 @@ 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
@ -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());
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();
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());
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();
}
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,
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,12 +89,28 @@ 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);
@ -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);

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

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

96
servo/Cargo.lock сгенерированный
Просмотреть файл

@ -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"}

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