mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge m-c to b2g-inbound
This commit is contained in:
commit
455454b827
@ -1,11 +0,0 @@
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# Disabled on Linux and Windows due to frequent failures - bug 695019, bug 890795
|
||||
ifeq (,$(filter Linux WINNT,$(OS_ARCH)))
|
||||
MOCHITEST_A11Y_FILES += \
|
||||
test_focus_autocomplete.xul \
|
||||
$(NULL)
|
||||
endif
|
@ -19,6 +19,9 @@ support-files =
|
||||
[test_dragndrop.html]
|
||||
[test_flush.html]
|
||||
[test_focus_aria_activedescendant.html]
|
||||
[test_focus_autocomplete.xul]
|
||||
# Disabled on Linux and Windows due to frequent failures - bug 695019, bug 890795
|
||||
skip-if = os == 'win' || os == 'linux'
|
||||
[test_focus_browserui.xul]
|
||||
[test_focus_canvas.html]
|
||||
[test_focus_contextmenu.xul]
|
||||
|
@ -1,8 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
A11Y_MANIFESTS += ['a11y.ini']
|
||||
|
@ -10,7 +10,6 @@ DIRS += [
|
||||
'bounds',
|
||||
'editabletext',
|
||||
'elm',
|
||||
'events',
|
||||
'focus',
|
||||
'hittest',
|
||||
'hyperlink',
|
||||
@ -34,5 +33,6 @@ DIRS += [
|
||||
|
||||
A11Y_MANIFESTS += [
|
||||
'a11y.ini',
|
||||
'events/a11y.ini',
|
||||
'tree/a11y.ini',
|
||||
]
|
||||
|
@ -1,66 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# test_contextmenu.html and test_contextmenu_input are disabled on Linux due to bug 513558
|
||||
ifndef MOZ_WIDGET_GTK
|
||||
MOCHITEST_FILES += \
|
||||
audio.ogg \
|
||||
privateBrowsingMode.js \
|
||||
subtst_contextmenu.html \
|
||||
contextmenu_common.js \
|
||||
test_contextmenu.html \
|
||||
test_contextmenu_input.html \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
# The following tests are disabled because they are unreliable:
|
||||
# browser_bug423833.js is bug 428712
|
||||
# browser_sanitize-download-history.js is bug 432425
|
||||
#
|
||||
# browser_sanitizeDialog_treeView.js is disabled until the tree view is added
|
||||
# back to the clear recent history dialog (sanitize.xul), if it ever is (bug
|
||||
# 480169)
|
||||
|
||||
# browser_drag.js is disabled, as it needs to be updated for the new behavior from bug 320638.
|
||||
|
||||
# browser_bug321000.js is disabled because newline handling is shaky (bug 592528)
|
||||
|
||||
# Disable tests on Windows due to frequent failures (bugs 825739, 841341)
|
||||
ifneq (windows,$(MOZ_WIDGET_TOOLKIT))
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_bookmark_titles.js \
|
||||
browser_popupNotification.js \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_bug462289.js \
|
||||
$(NULL)
|
||||
else
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_bug565667.js \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
ifdef MOZ_DATA_REPORTING
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_datareporting_notification.js \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
ifdef MOZ_CRASHREPORTER
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_pluginCrashCommentAndURL.js \
|
||||
pluginCrashCommentAndURL.html \
|
||||
browser_CTP_crashreporting.js \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
# browser_CTP_context_menu.js fails intermittently on Linux (bug 909342)
|
||||
ifndef MOZ_WIDGET_GTK
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_CTP_context_menu.js \
|
||||
$(NULL)
|
||||
endif
|
@ -246,6 +246,7 @@ skip-if = os == "mac" # Intermittent failures, bug 925225
|
||||
[browser_clearplugindata.js]
|
||||
[browser_contentAreaClick.js]
|
||||
[browser_contextSearchTabPosition.js]
|
||||
skip-if = os == "mac" # bug 967013, bug 926729
|
||||
[browser_ctrlTab.js]
|
||||
[browser_customize_popupNotification.js]
|
||||
[browser_datareporting_notification.js]
|
||||
@ -305,6 +306,7 @@ skip-if = true # disabled until the tree view is added
|
||||
# it ever is (bug 480169)
|
||||
[browser_save_link-perwindowpb.js]
|
||||
[browser_save_private_link_perwindowpb.js]
|
||||
skip-if = os == "linux" # bug 857427
|
||||
[browser_save_video.js]
|
||||
[browser_scope.js]
|
||||
[browser_selectTabAtIndex.js]
|
||||
|
@ -1,5 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
@ -4,10 +4,6 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
TEST_DIRS += [
|
||||
'content/test/general',
|
||||
]
|
||||
|
||||
MOCHITEST_MANIFESTS += [
|
||||
'content/test/general/mochitest.ini',
|
||||
]
|
||||
|
@ -112,13 +112,13 @@
|
||||
<toolbarseparator/>
|
||||
<toolbarbutton id="panelMenu_bookmarksToolbar"
|
||||
label="&personalbarCmd.label;"
|
||||
class="subviewbutton"
|
||||
class="subviewbutton cui-withicon"
|
||||
oncommand="PlacesCommandHook.showPlacesOrganizer('BookmarksToolbar'); PanelUI.hide();"/>
|
||||
<toolbarbutton id="panelMenu_unsortedBookmarks"
|
||||
label="&unsortedBookmarksCmd.label;"
|
||||
class="subviewbutton"
|
||||
class="subviewbutton cui-withicon"
|
||||
oncommand="PlacesCommandHook.showPlacesOrganizer('UnfiledBookmarks'); PanelUI.hide();"/>
|
||||
<toolbarseparator/>
|
||||
<toolbarseparator class="small-separator"/>
|
||||
<toolbaritem id="panelMenu_bookmarksMenu"
|
||||
orient="vertical"
|
||||
smoothscroll="false"
|
||||
|
@ -662,6 +662,7 @@ const CustomizableWidgets = [{
|
||||
for (let item of list) {
|
||||
let elem = aDocument.createElementNS(kNSXUL, "toolbarbutton");
|
||||
elem.setAttribute("label", item.label);
|
||||
elem.setAttribute("type", "checkbox");
|
||||
elem.section = aSection == "detectors" ? "detectors" : "charsets";
|
||||
elem.value = item.id;
|
||||
elem.setAttribute("class", "subviewbutton");
|
||||
@ -706,9 +707,9 @@ const CustomizableWidgets = [{
|
||||
elem.removeAttribute("disabled");
|
||||
}
|
||||
if (elem.value.toLowerCase() == aCurrentItem.toLowerCase()) {
|
||||
elem.setAttribute("current", "true");
|
||||
elem.setAttribute("checked", "true");
|
||||
} else {
|
||||
elem.removeAttribute("current");
|
||||
elem.removeAttribute("checked");
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1122,8 +1122,10 @@ CustomizeMode.prototype = {
|
||||
DragPositionManager.start(this.window);
|
||||
if (item.nextSibling) {
|
||||
this._setDragActive(item.nextSibling, "before", draggedItem.id, isInToolbar);
|
||||
this._dragOverItem = item.nextSibling;
|
||||
} else if (isInToolbar && item.previousSibling) {
|
||||
this._setDragActive(item.previousSibling, "after", draggedItem.id, isInToolbar);
|
||||
this._dragOverItem = item.previousSibling;
|
||||
}
|
||||
}
|
||||
this._initializeDragAfterMove = null;
|
||||
|
@ -293,6 +293,7 @@ PlacesViewBase.prototype = {
|
||||
let type = aPlacesNode.type;
|
||||
if (type == Ci.nsINavHistoryResultNode.RESULT_TYPE_SEPARATOR) {
|
||||
element = document.createElement("menuseparator");
|
||||
element.setAttribute("class", "small-separator");
|
||||
}
|
||||
else {
|
||||
let itemId = aPlacesNode.itemId;
|
||||
@ -1808,6 +1809,7 @@ PlacesPanelMenuView.prototype = {
|
||||
let button;
|
||||
if (type == Ci.nsINavHistoryResultNode.RESULT_TYPE_SEPARATOR) {
|
||||
button = document.createElement("toolbarseparator");
|
||||
button.setAttribute("class", "small-separator");
|
||||
}
|
||||
else {
|
||||
button = document.createElement("toolbarbutton");
|
||||
|
@ -489,7 +489,7 @@
|
||||
<!-- Most of this is copied from the arrowpanel binding in popup.xml -->
|
||||
<binding id="places-popup-arrow"
|
||||
extends="chrome://browser/content/places/menu.xml#places-popup-base">
|
||||
<content flip="both" side="top" position="bottomcenter topleft">
|
||||
<content flip="both" side="top" position="bottomcenter topright">
|
||||
<xul:vbox anonid="container" class="panel-arrowcontainer" flex="1"
|
||||
xbl:inherits="side,panelopen">
|
||||
<xul:box anonid="arrowbox" class="panel-arrowbox">
|
||||
|
@ -57,6 +57,9 @@ const EVENTS = {
|
||||
// When the response body is displayed in the UI.
|
||||
RESPONSE_BODY_DISPLAYED: "NetMonitor:ResponseBodyAvailable",
|
||||
|
||||
// When the html response preview is displayed in the UI.
|
||||
RESPONSE_HTML_PREVIEW_DISPLAYED: "NetMonitor:ResponseHtmlPreviewAvailable",
|
||||
|
||||
// When `onTabSelect` is fired and subsequently rendered.
|
||||
TAB_UPDATED: "NetMonitor:TabUpdated",
|
||||
|
||||
@ -412,8 +415,7 @@ TargetEventsHandler.prototype = {
|
||||
case "will-navigate": {
|
||||
// Reset UI.
|
||||
NetMonitorView.RequestsMenu.reset();
|
||||
NetMonitorView.Sidebar.reset();
|
||||
NetMonitorView.NetworkDetails.reset();
|
||||
NetMonitorView.Sidebar.toggle(false);
|
||||
|
||||
// Switch to the default network traffic inspector view.
|
||||
if (NetMonitorController.getCurrentActivity() == ACTIVITY_TYPE.NONE) {
|
||||
|
@ -55,8 +55,7 @@ const GENERIC_VARIABLES_VIEW_SETTINGS = {
|
||||
editableNameTooltip: "",
|
||||
preventDisableOnChange: true,
|
||||
preventDescriptorModifiers: true,
|
||||
eval: () => {},
|
||||
switch: () => {}
|
||||
eval: () => {}
|
||||
};
|
||||
const NETWORK_ANALYSIS_PIE_CHART_DIAMETER = 200; // px
|
||||
|
||||
@ -1051,6 +1050,9 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, {
|
||||
this.filterContents();
|
||||
this.refreshSummary();
|
||||
this.refreshZebra();
|
||||
|
||||
// Rescale all the waterfalls so that everything is visible at once.
|
||||
this._flushWaterfallViews();
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1185,14 +1187,6 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, {
|
||||
timingsNode.insertBefore(timingBox, timingsTotal);
|
||||
}
|
||||
}
|
||||
|
||||
// Don't paint things while the waterfall view isn't even visible.
|
||||
if (NetMonitorView.currentFrontendMode != "network-inspector-view") {
|
||||
return;
|
||||
}
|
||||
|
||||
// Rescale all the waterfalls so that everything is visible at once.
|
||||
this._flushWaterfallViews();
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1202,6 +1196,12 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, {
|
||||
* True if this container's width was changed.
|
||||
*/
|
||||
_flushWaterfallViews: function(aReset) {
|
||||
// Don't paint things while the waterfall view isn't even visible,
|
||||
// or there are no items added to this container.
|
||||
if (NetMonitorView.currentFrontendMode != "network-inspector-view" || !this.itemCount) {
|
||||
return;
|
||||
}
|
||||
|
||||
// To avoid expensive operations like getBoundingClientRect() and
|
||||
// rebuilding the waterfall background each time a new request comes in,
|
||||
// stuff is cached. However, in certain scenarios like when the window
|
||||
@ -1429,11 +1429,6 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, {
|
||||
* The resize listener for this container's window.
|
||||
*/
|
||||
_onResize: function(e) {
|
||||
// Don't paint things while the waterfall view isn't even visible.
|
||||
if (NetMonitorView.currentFrontendMode != "network-inspector-view") {
|
||||
return;
|
||||
}
|
||||
|
||||
// Allow requests to settle down first.
|
||||
setNamedTimeout(
|
||||
"resize-events", RESIZE_REFRESH_RATE, () => this._flushWaterfallViews(true));
|
||||
@ -1634,13 +1629,6 @@ SidebarView.prototype = {
|
||||
$("#details-pane").selectedIndex = isCustom ? 0 : 1
|
||||
window.emit(EVENTS.SIDEBAR_POPULATED);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Hides this container.
|
||||
*/
|
||||
reset: function() {
|
||||
this.toggle(false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1837,13 +1825,6 @@ NetworkDetailsView.prototype = {
|
||||
dumpn("Destroying the NetworkDetailsView");
|
||||
},
|
||||
|
||||
/**
|
||||
* Resets this container (removes all the networking information).
|
||||
*/
|
||||
reset: function() {
|
||||
this._dataSrc = null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Populates this view with the specified data.
|
||||
*
|
||||
@ -1861,6 +1842,18 @@ NetworkDetailsView.prototype = {
|
||||
$("#response-content-textarea-box").hidden = true;
|
||||
$("#response-content-image-box").hidden = true;
|
||||
|
||||
let isHtml = RequestsMenuView.prototype.isHtml({ attachment: aData });
|
||||
|
||||
// Show the "Preview" tabpanel only for plain HTML responses.
|
||||
$("#preview-tab").hidden = !isHtml;
|
||||
$("#preview-tabpanel").hidden = !isHtml;
|
||||
|
||||
// Switch to the "Headers" tabpanel if the "Preview" previously selected
|
||||
// and this is not an HTML response.
|
||||
if (!isHtml && this.widget.selectedIndex == 5) {
|
||||
this.widget.selectedIndex = 0;
|
||||
}
|
||||
|
||||
this._headers.empty();
|
||||
this._cookies.empty();
|
||||
this._params.empty();
|
||||
@ -1907,6 +1900,9 @@ NetworkDetailsView.prototype = {
|
||||
case 4: // "Timings"
|
||||
yield view._setTimingsInformation(src.eventTimings);
|
||||
break;
|
||||
case 5: // "Preview"
|
||||
yield view._setHtmlPreview(src.responseContent);
|
||||
break;
|
||||
}
|
||||
populated[tab] = true;
|
||||
window.emit(EVENTS.TAB_UPDATED);
|
||||
@ -2104,32 +2100,45 @@ NetworkDetailsView.prototype = {
|
||||
if (!aHeadersResponse || !aPostDataResponse) {
|
||||
return promise.resolve();
|
||||
}
|
||||
return gNetwork.getString(aPostDataResponse.postData.text).then(aString => {
|
||||
// Handle query strings (poor man's forms, e.g. "?foo=bar&baz=42").
|
||||
let cType = aHeadersResponse.headers.filter(({ name }) => name == "Content-Type")[0];
|
||||
let cString = cType ? cType.value : "";
|
||||
if (cString.contains("x-www-form-urlencoded") ||
|
||||
aString.contains("x-www-form-urlencoded")) {
|
||||
let formDataGroups = aString.split(/\r\n|\n|\r/);
|
||||
for (let group of formDataGroups) {
|
||||
this._addParams(this._paramsFormData, group);
|
||||
}
|
||||
}
|
||||
// Handle actual forms ("multipart/form-data" content type).
|
||||
else {
|
||||
// This is really awkward, but hey, it works. Let's show an empty
|
||||
// scope in the params view and place the source editor containing
|
||||
// the raw post data directly underneath.
|
||||
$("#request-params-box").removeAttribute("flex");
|
||||
let paramsScope = this._params.addScope(this._paramsPostPayload);
|
||||
paramsScope.expanded = true;
|
||||
paramsScope.locked = true;
|
||||
return gNetwork.getString(aPostDataResponse.postData.text).then(aPostData => {
|
||||
let contentTypeHeader = aHeadersResponse.headers.filter(({ name }) => name == "Content-Type")[0];
|
||||
let contentTypeLongString = contentTypeHeader ? contentTypeHeader.value : "";
|
||||
|
||||
$("#request-post-data-textarea-box").hidden = false;
|
||||
return NetMonitorView.editor("#request-post-data-textarea").then(aEditor => {
|
||||
aEditor.setText(aString);
|
||||
});
|
||||
}
|
||||
return gNetwork.getString(contentTypeLongString).then(aContentType => {
|
||||
let urlencoded = "x-www-form-urlencoded";
|
||||
|
||||
// Handle query strings (poor man's forms, e.g. "?foo=bar&baz=42").
|
||||
if (aContentType.contains(urlencoded)) {
|
||||
let formDataGroups = aPostData.split(/\r\n|\r|\n/);
|
||||
for (let group of formDataGroups) {
|
||||
this._addParams(this._paramsFormData, group);
|
||||
}
|
||||
}
|
||||
// Handle actual forms ("multipart/form-data" content type).
|
||||
else {
|
||||
// This is really awkward, but hey, it works. Let's show an empty
|
||||
// scope in the params view and place the source editor containing
|
||||
// the raw post data directly underneath.
|
||||
$("#request-params-box").removeAttribute("flex");
|
||||
let paramsScope = this._params.addScope(this._paramsPostPayload);
|
||||
paramsScope.expanded = true;
|
||||
paramsScope.locked = true;
|
||||
|
||||
$("#request-post-data-textarea-box").hidden = false;
|
||||
return NetMonitorView.editor("#request-post-data-textarea").then(aEditor => {
|
||||
// Most POST bodies are usually JSON, so they can be neatly
|
||||
// syntax highlighted as JS. Otheriwse, fall back to plain text.
|
||||
try {
|
||||
JSON.parse(aPostData);
|
||||
aEditor.setMode(Editor.modes.js);
|
||||
} catch (e) {
|
||||
aEditor.setMode(Editor.modes.text);
|
||||
} finally {
|
||||
aEditor.setText(aPostData);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}).then(() => window.emit(EVENTS.REQUEST_POST_PARAMS_DISPLAYED));
|
||||
},
|
||||
|
||||
@ -2150,8 +2159,8 @@ NetworkDetailsView.prototype = {
|
||||
paramsScope.expanded = true;
|
||||
|
||||
for (let param of paramsArray) {
|
||||
let headerVar = paramsScope.addItem(param.name, {}, true);
|
||||
headerVar.setGrip(param.value);
|
||||
let paramVar = paramsScope.addItem(param.name, {}, true);
|
||||
paramVar.setGrip(param.value);
|
||||
}
|
||||
},
|
||||
|
||||
@ -2345,6 +2354,30 @@ NetworkDetailsView.prototype = {
|
||||
.style.transform = "translateX(" + (scale * (blocked + dns + connect + send + wait)) + "px)";
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the preview for HTML responses shown in this view.
|
||||
*
|
||||
* @param object aResponse
|
||||
* The message received from the server.
|
||||
* @return object
|
||||
* A promise that is resolved when the response body is set
|
||||
*/
|
||||
_setHtmlPreview: function(aResponse) {
|
||||
if (!aResponse) {
|
||||
return promise.resolve();
|
||||
}
|
||||
let { text } = aResponse.content;
|
||||
let iframe = $("#response-preview");
|
||||
|
||||
return gNetwork.getString(text).then(aString => {
|
||||
// Always disable JS when previewing HTML responses.
|
||||
iframe.contentDocument.docShell.allowJavascript = false;
|
||||
iframe.contentDocument.documentElement.innerHTML = aString;
|
||||
|
||||
window.emit(EVENTS.RESPONSE_HTML_PREVIEW_DISPLAYED);
|
||||
});
|
||||
},
|
||||
|
||||
_dataSrc: null,
|
||||
_headers: null,
|
||||
_cookies: null,
|
||||
@ -2570,14 +2603,16 @@ nsIURL.store = new Map();
|
||||
*/
|
||||
function parseQueryString(aQueryString) {
|
||||
// Make sure there's at least one param available.
|
||||
if (!aQueryString || !aQueryString.contains("=")) {
|
||||
// Be careful here, params don't necessarily need to have values, so
|
||||
// no need to verify the existence of a "=".
|
||||
if (!aQueryString) {
|
||||
return;
|
||||
}
|
||||
// Turn the params string into an array containing { name: value } tuples.
|
||||
let paramsArray = aQueryString.replace(/^[?&]/, "").split("&").map(e =>
|
||||
let (param = e.split("=")) {
|
||||
name: NetworkHelper.convertToUnicode(unescape(param[0])),
|
||||
value: NetworkHelper.convertToUnicode(unescape(param[1]))
|
||||
name: param[0] ? NetworkHelper.convertToUnicode(unescape(param[0])) : "",
|
||||
value: param[1] ? NetworkHelper.convertToUnicode(unescape(param[1])) : ""
|
||||
});
|
||||
return paramsArray;
|
||||
}
|
||||
|
@ -13,7 +13,8 @@
|
||||
%netmonitorDTD;
|
||||
]>
|
||||
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<script type="application/javascript;version=1.8"
|
||||
src="chrome://browser/content/devtools/theme-switching.js"/>
|
||||
@ -238,14 +239,21 @@
|
||||
class="devtools-sidebar-tabs"
|
||||
handleCtrlTab="false">
|
||||
<tabs>
|
||||
<tab label="&netmonitorUI.tab.headers;"/>
|
||||
<tab label="&netmonitorUI.tab.cookies;"/>
|
||||
<tab label="&netmonitorUI.tab.params;"/>
|
||||
<tab label="&netmonitorUI.tab.response;"/>
|
||||
<tab label="&netmonitorUI.tab.timings;"/>
|
||||
<tab id="headers-tab"
|
||||
label="&netmonitorUI.tab.headers;"/>
|
||||
<tab id="cookies-tab"
|
||||
label="&netmonitorUI.tab.cookies;"/>
|
||||
<tab id="params-tab"
|
||||
label="&netmonitorUI.tab.params;"/>
|
||||
<tab id="response-tab"
|
||||
label="&netmonitorUI.tab.response;"/>
|
||||
<tab id="timings-tab"
|
||||
label="&netmonitorUI.tab.timings;"/>
|
||||
<tab id="preview-tab"
|
||||
label="&netmonitorUI.tab.preview;"/>
|
||||
</tabs>
|
||||
<tabpanels flex="1">
|
||||
<tabpanel id="headers-tabppanel"
|
||||
<tabpanel id="headers-tabpanel"
|
||||
class="tabpanel-content">
|
||||
<vbox flex="1">
|
||||
<hbox id="headers-summary-url"
|
||||
@ -413,6 +421,12 @@
|
||||
</hbox>
|
||||
</vbox>
|
||||
</tabpanel>
|
||||
<tabpanel id="preview-tabpanel"
|
||||
class="tabpanel-content">
|
||||
<html:iframe id="response-preview"
|
||||
frameborder="0"
|
||||
sandbox=""/>
|
||||
</tabpanel>
|
||||
</tabpanels>
|
||||
</tabbox>
|
||||
</deck>
|
||||
|
@ -13,6 +13,7 @@ support-files =
|
||||
html_json-text-mime-test-page.html
|
||||
html_jsonp-test-page.html
|
||||
html_navigate-test-page.html
|
||||
html_params-test-page.html
|
||||
html_post-data-test-page.html
|
||||
html_post-raw-test-page.html
|
||||
html_simple-test-page.html
|
||||
@ -35,15 +36,17 @@ support-files =
|
||||
[browser_net_charts-04.js]
|
||||
[browser_net_charts-05.js]
|
||||
[browser_net_clear.js]
|
||||
[browser_net_complex-params.js]
|
||||
[browser_net_content-type.js]
|
||||
[browser_net_copy_url.js]
|
||||
[browser_net_copy_image_as_data_uri.js]
|
||||
[browser_net_copy_url.js]
|
||||
[browser_net_cyrillic-01.js]
|
||||
[browser_net_cyrillic-02.js]
|
||||
[browser_net_filter-01.js]
|
||||
[browser_net_filter-02.js]
|
||||
[browser_net_filter-03.js]
|
||||
[browser_net_footer-summary.js]
|
||||
[browser_net_html-preview.js]
|
||||
[browser_net_json-long.js]
|
||||
[browser_net_json-malformed.js]
|
||||
[browser_net_json_custom_mime.js]
|
||||
|
148
browser/devtools/netmonitor/test/browser_net_complex-params.js
Normal file
148
browser/devtools/netmonitor/test/browser_net_complex-params.js
Normal file
@ -0,0 +1,148 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Tests whether complex request params and payload sent via POST are
|
||||
* displayed correctly.
|
||||
*/
|
||||
|
||||
function test() {
|
||||
initNetMonitor(PARAMS_URL).then(([aTab, aDebuggee, aMonitor]) => {
|
||||
info("Starting test... ");
|
||||
|
||||
let { document, L10N, EVENTS, Editor, NetMonitorView } = aMonitor.panelWin;
|
||||
let { RequestsMenu, NetworkDetails } = NetMonitorView;
|
||||
|
||||
RequestsMenu.lazyUpdate = false;
|
||||
NetworkDetails._params.lazyEmpty = false;
|
||||
|
||||
Task.spawn(function () {
|
||||
yield waitForNetworkEvents(aMonitor, 0, 6);
|
||||
|
||||
EventUtils.sendMouseEvent({ type: "mousedown" },
|
||||
document.getElementById("details-pane-toggle"));
|
||||
EventUtils.sendMouseEvent({ type: "mousedown" },
|
||||
document.querySelectorAll("#details-pane tab")[2]);
|
||||
|
||||
yield waitFor(aMonitor.panelWin, EVENTS.REQUEST_POST_PARAMS_DISPLAYED);
|
||||
yield testParamsTab1('a', '""', '{ "foo": "bar" }', '""');
|
||||
|
||||
RequestsMenu.selectedIndex = 1;
|
||||
yield waitFor(aMonitor.panelWin, EVENTS.REQUEST_POST_PARAMS_DISPLAYED);
|
||||
yield testParamsTab1('a', '"b"', '{ "foo": "bar" }', '""');
|
||||
|
||||
RequestsMenu.selectedIndex = 2;
|
||||
yield waitFor(aMonitor.panelWin, EVENTS.REQUEST_POST_PARAMS_DISPLAYED);
|
||||
yield testParamsTab1('a', '"b"', 'foo', '"bar"');
|
||||
|
||||
RequestsMenu.selectedIndex = 3;
|
||||
yield waitFor(aMonitor.panelWin, EVENTS.REQUEST_POST_PARAMS_DISPLAYED);
|
||||
yield testParamsTab2('a', '""', '{ "foo": "bar" }', "js");
|
||||
|
||||
RequestsMenu.selectedIndex = 4;
|
||||
yield waitFor(aMonitor.panelWin, EVENTS.REQUEST_POST_PARAMS_DISPLAYED);
|
||||
yield testParamsTab2('a', '"b"', '{ "foo": "bar" }', "js");
|
||||
|
||||
RequestsMenu.selectedIndex = 5;
|
||||
yield waitFor(aMonitor.panelWin, EVENTS.REQUEST_POST_PARAMS_DISPLAYED);
|
||||
yield testParamsTab2('a', '"b"', '?foo=bar', "text");
|
||||
|
||||
yield teardown(aMonitor);
|
||||
finish();
|
||||
});
|
||||
|
||||
function testParamsTab1(
|
||||
aQueryStringParamName, aQueryStringParamValue, aFormDataParamName, aFormDataParamValue)
|
||||
{
|
||||
let tab = document.querySelectorAll("#details-pane tab")[2];
|
||||
let tabpanel = document.querySelectorAll("#details-pane tabpanel")[2];
|
||||
|
||||
is(tabpanel.querySelectorAll(".variables-view-scope").length, 2,
|
||||
"The number of param scopes displayed in this tabpanel is incorrect.");
|
||||
is(tabpanel.querySelectorAll(".variable-or-property").length, 2,
|
||||
"The number of param values displayed in this tabpanel is incorrect.");
|
||||
is(tabpanel.querySelectorAll(".variables-view-empty-notice").length, 0,
|
||||
"The empty notice should not be displayed in this tabpanel.");
|
||||
|
||||
is(tabpanel.querySelector("#request-params-box")
|
||||
.hasAttribute("hidden"), false,
|
||||
"The request params box should not be hidden.");
|
||||
is(tabpanel.querySelector("#request-post-data-textarea-box")
|
||||
.hasAttribute("hidden"), true,
|
||||
"The request post data textarea box should be hidden.");
|
||||
|
||||
let paramsScope = tabpanel.querySelectorAll(".variables-view-scope")[0];
|
||||
let formDataScope = tabpanel.querySelectorAll(".variables-view-scope")[1];
|
||||
|
||||
is(paramsScope.querySelector(".name").getAttribute("value"),
|
||||
L10N.getStr("paramsQueryString"),
|
||||
"The params scope doesn't have the correct title.");
|
||||
is(formDataScope.querySelector(".name").getAttribute("value"),
|
||||
L10N.getStr("paramsFormData"),
|
||||
"The form data scope doesn't have the correct title.");
|
||||
|
||||
is(paramsScope.querySelectorAll(".variables-view-variable .name")[0].getAttribute("value"),
|
||||
aQueryStringParamName,
|
||||
"The first query string param name was incorrect.");
|
||||
is(paramsScope.querySelectorAll(".variables-view-variable .value")[0].getAttribute("value"),
|
||||
aQueryStringParamValue,
|
||||
"The first query string param value was incorrect.");
|
||||
|
||||
is(formDataScope.querySelectorAll(".variables-view-variable .name")[0].getAttribute("value"),
|
||||
aFormDataParamName,
|
||||
"The first form data param name was incorrect.");
|
||||
is(formDataScope.querySelectorAll(".variables-view-variable .value")[0].getAttribute("value"),
|
||||
aFormDataParamValue,
|
||||
"The first form data param value was incorrect.");
|
||||
}
|
||||
|
||||
function testParamsTab2(
|
||||
aQueryStringParamName, aQueryStringParamValue, aRequestPayload, aEditorMode)
|
||||
{
|
||||
let tab = document.querySelectorAll("#details-pane tab")[2];
|
||||
let tabpanel = document.querySelectorAll("#details-pane tabpanel")[2];
|
||||
|
||||
is(tabpanel.querySelectorAll(".variables-view-scope").length, 2,
|
||||
"The number of param scopes displayed in this tabpanel is incorrect.");
|
||||
is(tabpanel.querySelectorAll(".variable-or-property").length, 1,
|
||||
"The number of param values displayed in this tabpanel is incorrect.");
|
||||
is(tabpanel.querySelectorAll(".variables-view-empty-notice").length, 0,
|
||||
"The empty notice should not be displayed in this tabpanel.");
|
||||
|
||||
is(tabpanel.querySelector("#request-params-box")
|
||||
.hasAttribute("hidden"), false,
|
||||
"The request params box should not be hidden.");
|
||||
is(tabpanel.querySelector("#request-post-data-textarea-box")
|
||||
.hasAttribute("hidden"), false,
|
||||
"The request post data textarea box should not be hidden.");
|
||||
|
||||
let paramsScope = tabpanel.querySelectorAll(".variables-view-scope")[0];
|
||||
let payloadScope = tabpanel.querySelectorAll(".variables-view-scope")[1];
|
||||
|
||||
is(paramsScope.querySelector(".name").getAttribute("value"),
|
||||
L10N.getStr("paramsQueryString"),
|
||||
"The params scope doesn't have the correct title.");
|
||||
is(payloadScope.querySelector(".name").getAttribute("value"),
|
||||
L10N.getStr("paramsPostPayload"),
|
||||
"The request payload scope doesn't have the correct title.");
|
||||
|
||||
is(paramsScope.querySelectorAll(".variables-view-variable .name")[0].getAttribute("value"),
|
||||
aQueryStringParamName,
|
||||
"The first query string param name was incorrect.");
|
||||
is(paramsScope.querySelectorAll(".variables-view-variable .value")[0].getAttribute("value"),
|
||||
aQueryStringParamValue,
|
||||
"The first query string param value was incorrect.");
|
||||
|
||||
return NetMonitorView.editor("#request-post-data-textarea").then((aEditor) => {
|
||||
is(aEditor.getText(), aRequestPayload,
|
||||
"The text shown in the source editor is incorrect.");
|
||||
is(aEditor.getMode(), Editor.modes[aEditorMode],
|
||||
"The mode active in the source editor is incorrect.");
|
||||
|
||||
teardown(aMonitor).then(finish);
|
||||
});
|
||||
}
|
||||
|
||||
aDebuggee.performRequests();
|
||||
});
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
function test() {
|
||||
initNetMonitor(CONTENT_TYPE_URL).then(([aTab, aDebuggee, aMonitor]) => {
|
||||
initNetMonitor(CONTENT_TYPE_WITHOUT_CACHE_URL).then(([aTab, aDebuggee, aMonitor]) => {
|
||||
info("Starting test... ");
|
||||
|
||||
let { document, L10N, Editor, NetMonitorView } = aMonitor.panelWin;
|
||||
@ -62,6 +62,7 @@ function test() {
|
||||
});
|
||||
verifyRequestItemTarget(RequestsMenu.getItemAtIndex(5),
|
||||
"GET", TEST_IMAGE, {
|
||||
fuzzyUrl: true,
|
||||
status: 200,
|
||||
statusText: "OK",
|
||||
type: "png",
|
||||
|
@ -11,7 +11,9 @@ function test() {
|
||||
|
||||
let { NetMonitorView } = aMonitor.panelWin;
|
||||
let { RequestsMenu } = NetMonitorView;
|
||||
|
||||
RequestsMenu.lazyUpdate = false;
|
||||
|
||||
let imageDataUri = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==";
|
||||
|
||||
waitForNetworkEvents(aMonitor, 6).then(() => {
|
||||
|
63
browser/devtools/netmonitor/test/browser_net_html-preview.js
Normal file
63
browser/devtools/netmonitor/test/browser_net_html-preview.js
Normal file
@ -0,0 +1,63 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Tests if html responses show and properly populate a "Preview" tab.
|
||||
*/
|
||||
|
||||
function test() {
|
||||
initNetMonitor(CONTENT_TYPE_URL).then(([aTab, aDebuggee, aMonitor]) => {
|
||||
info("Starting test... ");
|
||||
|
||||
let { $, document, NetMonitorView } = aMonitor.panelWin;
|
||||
let { RequestsMenu } = NetMonitorView;
|
||||
|
||||
RequestsMenu.lazyUpdate = false;
|
||||
|
||||
waitForNetworkEvents(aMonitor, 6).then(() => {
|
||||
EventUtils.sendMouseEvent({ type: "mousedown" },
|
||||
document.getElementById("details-pane-toggle"));
|
||||
|
||||
is($("#event-details-pane").selectedIndex, 0,
|
||||
"The first tab in the details pane should be selected.");
|
||||
is($("#preview-tab").hidden, true,
|
||||
"The preview tab should be hidden for non html responses.");
|
||||
is($("#preview-tabpanel").hidden, true,
|
||||
"The preview tabpanel should be hidden for non html responses.");
|
||||
|
||||
RequestsMenu.selectedIndex = 4;
|
||||
NetMonitorView.toggleDetailsPane({ visible: true, animated: false }, 5);
|
||||
|
||||
is($("#event-details-pane").selectedIndex, 5,
|
||||
"The fifth tab in the details pane should be selected.");
|
||||
is($("#preview-tab").hidden, false,
|
||||
"The preview tab should be visible now.");
|
||||
is($("#preview-tabpanel").hidden, false,
|
||||
"The preview tabpanel should be visible now.");
|
||||
|
||||
let RESPONSE_HTML_PREVIEW_DISPLAYED = aMonitor.panelWin.EVENTS.RESPONSE_HTML_PREVIEW_DISPLAYED;
|
||||
waitFor(aMonitor.panelWin, RESPONSE_HTML_PREVIEW_DISPLAYED).then(() => {
|
||||
let iframe = $("#response-preview");
|
||||
ok(iframe,
|
||||
"There should be a response preview iframe available.");
|
||||
ok(iframe.contentDocument,
|
||||
"The iframe's content document should be available.");
|
||||
is(iframe.contentDocument.querySelector("blink").textContent, "Not Found",
|
||||
"The iframe's content document should be loaded and correct.");
|
||||
|
||||
RequestsMenu.selectedIndex = 5;
|
||||
|
||||
is($("#event-details-pane").selectedIndex, 0,
|
||||
"The first tab in the details pane should be selected again.");
|
||||
is($("#preview-tab").hidden, true,
|
||||
"The preview tab should be hidden again for non html responses.");
|
||||
is($("#preview-tabpanel").hidden, true,
|
||||
"The preview tabpanel should be hidden again for non html responses.");
|
||||
|
||||
teardown(aMonitor).then(finish);
|
||||
});
|
||||
});
|
||||
|
||||
aDebuggee.performRequests();
|
||||
});
|
||||
}
|
@ -55,6 +55,7 @@ function test() {
|
||||
"baz", "The second query param name was incorrect.");
|
||||
is(postScope.querySelectorAll(".variables-view-variable .value")[1].getAttribute("value"),
|
||||
"\"123\"", "The second query param value was incorrect.");
|
||||
|
||||
teardown(aMonitor).then(finish);
|
||||
});
|
||||
});
|
||||
|
@ -22,6 +22,7 @@ const CYRILLIC_URL = EXAMPLE_URL + "html_cyrillic-test-page.html";
|
||||
const STATUS_CODES_URL = EXAMPLE_URL + "html_status-codes-test-page.html";
|
||||
const POST_DATA_URL = EXAMPLE_URL + "html_post-data-test-page.html";
|
||||
const POST_RAW_URL = EXAMPLE_URL + "html_post-raw-test-page.html";
|
||||
const PARAMS_URL = EXAMPLE_URL + "html_params-test-page.html";
|
||||
const JSONP_URL = EXAMPLE_URL + "html_jsonp-test-page.html";
|
||||
const JSON_LONG_URL = EXAMPLE_URL + "html_json-long-test-page.html";
|
||||
const JSON_MALFORMED_URL = EXAMPLE_URL + "html_json-malformed-test-page.html";
|
||||
|
54
browser/devtools/netmonitor/test/html_params-test-page.html
Normal file
54
browser/devtools/netmonitor/test/html_params-test-page.html
Normal file
@ -0,0 +1,54 @@
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<!doctype html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Network Monitor test page</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>Request params type test</p>
|
||||
|
||||
<script type="text/javascript">
|
||||
function post(aAddress, aQuery, aContentType, aPostBody) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", aAddress + aQuery, true);
|
||||
xhr.setRequestHeader("content-type", aContentType);
|
||||
xhr.send(aPostBody);
|
||||
}
|
||||
|
||||
function performRequests() {
|
||||
var urlencoded = "application/x-www-form-urlencoded";
|
||||
|
||||
setTimeout(function() {
|
||||
post("baz", "?a", urlencoded, '{ "foo": "bar" }');
|
||||
|
||||
setTimeout(function() {
|
||||
post("baz", "?a=b", urlencoded, '{ "foo": "bar" }');
|
||||
|
||||
setTimeout(function() {
|
||||
post("baz", "?a=b", urlencoded, '?foo=bar');
|
||||
|
||||
setTimeout(function() {
|
||||
post("baz", "?a", undefined, '{ "foo": "bar" }');
|
||||
|
||||
setTimeout(function() {
|
||||
post("baz", "?a=b", undefined, '{ "foo": "bar" }');
|
||||
|
||||
setTimeout(function() {
|
||||
post("baz", "?a=b", undefined, '?foo=bar');
|
||||
|
||||
// Done.
|
||||
}, 10);
|
||||
}, 10);
|
||||
}, 10);
|
||||
}, 10);
|
||||
}, 10);
|
||||
}, 10);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -15,6 +15,7 @@
|
||||
function post(aAddress, aMessage, aCallback) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", aAddress, true);
|
||||
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
|
||||
|
||||
xhr.onreadystatechange = function() {
|
||||
if (this.readyState == this.DONE) {
|
||||
@ -25,7 +26,7 @@
|
||||
}
|
||||
|
||||
function performRequests() {
|
||||
var rawData = "Content-Type: application/x-www-form-urlencoded\r\n\r\nfoo=bar&baz=123";
|
||||
var rawData = "foo=bar&baz=123";
|
||||
post("sjs_simple-test-server.sjs", rawData, function() {
|
||||
// Done.
|
||||
});
|
||||
|
@ -153,8 +153,8 @@ function Editor(config) {
|
||||
|
||||
// Additional shortcuts.
|
||||
this.config.extraKeys[Editor.keyFor("jumpToLine")] = () => this.jumpToLine();
|
||||
this.config.extraKeys[Editor.keyFor("moveLineUp")] = () => this.moveLineUp();
|
||||
this.config.extraKeys[Editor.keyFor("moveLineDown")] = () => this.moveLineDown();
|
||||
this.config.extraKeys[Editor.keyFor("moveLineUp", { noaccel: true })] = () => this.moveLineUp();
|
||||
this.config.extraKeys[Editor.keyFor("moveLineDown", { noaccel: true })] = () => this.moveLineDown();
|
||||
this.config.extraKeys[Editor.keyFor("toggleComment")] = "toggleComment";
|
||||
|
||||
// Disable ctrl-[ and ctrl-] because toolbox uses those shortcuts.
|
||||
@ -844,12 +844,13 @@ Editor.accel = function (key, modifiers={}) {
|
||||
|
||||
/**
|
||||
* Returns a string representation of a shortcut for a
|
||||
* specified command 'cmd'. Cmd- for macs, Ctrl- for other
|
||||
* platforms. Useful when overwriting or disabling default
|
||||
* shortcuts.
|
||||
* specified command 'cmd'. Append Cmd- for macs, Ctrl- for other
|
||||
* platforms unless noaccel is specified in the options. Useful when overwriting
|
||||
* or disabling default shortcuts.
|
||||
*/
|
||||
Editor.keyFor = function (cmd) {
|
||||
return Editor.accel(L10N.GetStringFromName(cmd + ".commandkey"));
|
||||
Editor.keyFor = function (cmd, opts={ noaccel: false }) {
|
||||
let key = L10N.GetStringFromName(cmd + ".commandkey");
|
||||
return opts.noaccel ? key : Editor.accel(key);
|
||||
};
|
||||
|
||||
// Since Gecko already provide complete and up to date list of CSS property
|
||||
|
@ -31,6 +31,7 @@ support-files =
|
||||
|
||||
[browser_styleeditor_autocomplete.js]
|
||||
[browser_styleeditor_bug_740541_iframes.js]
|
||||
skip-if = os == "linux" || "mac" # bug 949355
|
||||
[browser_styleeditor_bug_851132_middle_click.js]
|
||||
[browser_styleeditor_bug_870339.js]
|
||||
[browser_styleeditor_cmd_edit.js]
|
||||
|
@ -68,6 +68,10 @@
|
||||
- in the network details pane identifying the timings tab. -->
|
||||
<!ENTITY netmonitorUI.tab.timings "Timings">
|
||||
|
||||
<!-- LOCALIZATION NOTE (debuggerUI.tab.preview): This is the label displayed
|
||||
- in the network details pane identifying the preview tab. -->
|
||||
<!ENTITY netmonitorUI.tab.preview "Preview">
|
||||
|
||||
<!-- LOCALIZATION NOTE (debuggerUI.footer.filterAll): This is the label displayed
|
||||
- in the network details footer for the "All" filtering button. -->
|
||||
<!ENTITY netmonitorUI.footer.filterAll "All">
|
||||
|
@ -49,17 +49,17 @@ annotation.currentLine=Current line
|
||||
# user-defined lines.
|
||||
annotation.debugLocation.title=Current step: %S
|
||||
|
||||
# LOCALIZATION NOTE (jumpToLine.commandkey): This the key to use in
|
||||
# LOCALIZATION NOTE (jumpToLine.commandkey): This is the key to use in
|
||||
# conjunction with accel (Command on Mac or Ctrl on other platforms) to jump to
|
||||
# a specific line in the editor.
|
||||
jumpToLine.commandkey=J
|
||||
|
||||
# LOCALIZATION NOTE (toggleComment.commandkey): This the key to use in
|
||||
# LOCALIZATION NOTE (toggleComment.commandkey): This is the key to use in
|
||||
# conjunction with accel (Command on Mac or Ctrl on other platforms) to either
|
||||
# comment or uncomment selected lines in the editor.
|
||||
toggleComment.commandkey=/
|
||||
|
||||
# LOCALIZATION NOTE (toolboxPrevTool.commandkey): This the key to use in
|
||||
# LOCALIZATION NOTE (indentLess.commandkey): This is the key to use in
|
||||
# conjunction with accel (Command on Mac or Ctrl on other platforms) to reduce
|
||||
# indentation level in CodeMirror. However, its default value also used by
|
||||
# the Toolbox to switch between tools so we disable it.
|
||||
@ -67,7 +67,7 @@ toggleComment.commandkey=/
|
||||
# DO NOT translate this key without proper synchronization with toolbox.dtd.
|
||||
indentLess.commandkey=[
|
||||
|
||||
# LOCALIZATION NOTE (toolboxPrevTool.commandkey): This the key to use in
|
||||
# LOCALIZATION NOTE (indentMore.commandkey): This is the key to use in
|
||||
# conjunction with accel (Command on Mac or Ctrl on other platforms) to increase
|
||||
# indentation level in CodeMirror. However, its default value also used by
|
||||
# the Toolbox to switch between tools
|
||||
@ -75,12 +75,10 @@ indentLess.commandkey=[
|
||||
# DO NOT translate this key without proper synchronization with toolbox.dtd.
|
||||
indentMore.commandkey=]
|
||||
|
||||
# LOCALIZATION NOTE (moveLineUp.commandkey): This the key to use in
|
||||
# conjunction with accel (Command on Mac or Ctrl on other platforms) to move
|
||||
# LOCALIZATION NOTE (moveLineUp.commandkey): This is the key to use to move
|
||||
# the selected lines up.
|
||||
moveLineUp.commandkey=Alt-Up
|
||||
|
||||
# LOCALIZATION NOTE (moveLineDown.commandkey): This the key to use in
|
||||
# conjunction with accel (Command on Mac or Ctrl on other platforms) to move
|
||||
# LOCALIZATION NOTE (moveLineDown.commandkey): This is the key to use to move
|
||||
# the selected lines down.
|
||||
moveLineDown.commandkey=Alt-Down
|
||||
|
@ -3,7 +3,6 @@
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
|
||||
<!DOCTYPE bindings [
|
||||
<!ENTITY % browserDTD SYSTEM "chrome://browser/locale/browser.dtd">
|
||||
%browserDTD;
|
||||
@ -13,7 +12,6 @@
|
||||
xmlns="http://www.mozilla.org/xbl"
|
||||
xmlns:xbl="http://www.mozilla.org/xbl"
|
||||
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<binding id="error" extends="chrome://browser/content/bindings/bindings.xml#richlistitem">
|
||||
<content orient="vertical">
|
||||
<xul:hbox class="console-row-internal-box" flex="1">
|
||||
@ -22,7 +20,6 @@
|
||||
<xul:label class="label title" xbl:inherits="value=typetext"/>
|
||||
<xul:description class="console-error-msg title" xbl:inherits="xbl:text=msg" flex="1"/>
|
||||
</xul:hbox>
|
||||
|
||||
<xul:hbox class="console-row-file" xbl:inherits="hidden=hideSource">
|
||||
<xul:label class="label title" value="&consoleErrFile.label;"/>
|
||||
<xul:label class="title" xbl:inherits="value=href" crop="right"/>
|
||||
@ -32,20 +29,13 @@
|
||||
<xul:label class="label title" xbl:inherits="value=line"/>
|
||||
</xul:hbox>
|
||||
</xul:hbox>
|
||||
|
||||
<xul:vbox class="console-row-code" xbl:inherits="hidden=hideCode">
|
||||
<xul:label class="monospace console-code" xbl:inherits="value=code" crop="end"/>
|
||||
<xul:hbox xbl:inherits="hidden=hideCaret">
|
||||
<xul:label class="monospace console-dots title" xbl:inherits="value=errorDots"/>
|
||||
<xul:label class="monospace console-caret title" xbl:inherits="value=errorCaret"/>
|
||||
<xul:spacer flex="1"/>
|
||||
</xul:hbox>
|
||||
</xul:vbox>
|
||||
</xul:vbox>
|
||||
</xul:hbox>
|
||||
</content>
|
||||
</binding>
|
||||
|
||||
<binding id="message" extends="chrome://browser/content/bindings/bindings.xml#richlistitem">
|
||||
<content>
|
||||
<xul:hbox class="console-internal-box" flex="1">
|
||||
@ -57,5 +47,4 @@
|
||||
</xul:hbox>
|
||||
</content>
|
||||
</binding>
|
||||
|
||||
</bindings>
|
||||
|
@ -588,7 +588,9 @@ Desktop browser's sync prefs.
|
||||
</hbox>
|
||||
<hbox align="center"
|
||||
pack="end">
|
||||
<radiogroup id="console-filter"
|
||||
<checkbox id="console-follow-checkbox" label="&consoleFollowCheckbox.label;" checked="true"/>
|
||||
<spacer flex="1"/>
|
||||
<radiogroup id="console-filter" orient="horizontal"
|
||||
oncommand="ConsolePanelView.changeMode();">
|
||||
<radio id="console-filter-all"
|
||||
value="all"
|
||||
@ -608,6 +610,10 @@ Desktop browser's sync prefs.
|
||||
class="show-text"
|
||||
label="&consoleClear.label;"
|
||||
oncommand="ConsolePanelView.clearConsole();"/>
|
||||
<button id="console-copy"
|
||||
class="show-text"
|
||||
label="&consoleCopyAll.label;"
|
||||
oncommand="ConsolePanelView.copyAll();"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
|
@ -13,6 +13,14 @@ let ConsolePanelView = {
|
||||
_showChromeErrors: -1,
|
||||
_enabledPref: "devtools.errorconsole.enabled",
|
||||
|
||||
get enabled() {
|
||||
return Services.prefs.getBoolPref(this._enabledPref);
|
||||
},
|
||||
|
||||
get follow() {
|
||||
return document.getElementById("console-follow-checkbox").checked;
|
||||
},
|
||||
|
||||
init: function cv_init() {
|
||||
if (this._list)
|
||||
return;
|
||||
@ -23,6 +31,7 @@ let ConsolePanelView = {
|
||||
|
||||
this._count = 0;
|
||||
this.limit = 250;
|
||||
this.fieldMaxLength = 140;
|
||||
|
||||
try {
|
||||
// update users using the legacy pref
|
||||
@ -63,10 +72,6 @@ let ConsolePanelView = {
|
||||
Services.prefs.removeObserver(this._enabledPref, this, false);
|
||||
},
|
||||
|
||||
get enabled() {
|
||||
return Services.prefs.getBoolPref(this._enabledPref);
|
||||
},
|
||||
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
if (aTopic == "nsPref:changed") {
|
||||
// We may choose to create a new menu in v2
|
||||
@ -89,6 +94,7 @@ let ConsolePanelView = {
|
||||
},
|
||||
|
||||
appendItem: function cv_appendItem(aObject) {
|
||||
let index = -1;
|
||||
try {
|
||||
// Try to QI it to a script error to get more info
|
||||
let scriptError = aObject.QueryInterface(Ci.nsIScriptError);
|
||||
@ -96,7 +102,7 @@ let ConsolePanelView = {
|
||||
// filter chrome urls
|
||||
if (!this.showChromeErrors && scriptError.sourceName.substr(0, 9) == "chrome://")
|
||||
return;
|
||||
this.appendError(scriptError);
|
||||
index = this.appendError(scriptError);
|
||||
}
|
||||
catch (ex) {
|
||||
try {
|
||||
@ -104,15 +110,30 @@ let ConsolePanelView = {
|
||||
let msg = aObject.QueryInterface(Ci.nsIConsoleMessage);
|
||||
|
||||
if (msg.message)
|
||||
this.appendMessage(msg.message);
|
||||
index = this.appendMessage(msg.message);
|
||||
else // observed a null/"clear" message
|
||||
this.clearConsole();
|
||||
}
|
||||
catch (ex2) {
|
||||
// Give up and append the object itself as a string
|
||||
this.appendMessage(aObject);
|
||||
index = this.appendMessage(aObject);
|
||||
}
|
||||
}
|
||||
if (this.follow) {
|
||||
this._list.ensureIndexIsVisible(index);
|
||||
}
|
||||
},
|
||||
|
||||
truncateIfNecessary: function (aString) {
|
||||
if (!aString || aString.length <= this.fieldMaxLength) {
|
||||
return aString;
|
||||
}
|
||||
let truncatedString = aString.substring(0, this.fieldMaxLength);
|
||||
let Ci = Components.interfaces;
|
||||
let ellipsis = Services.prefs.getComplexValue("intl.ellipsis",
|
||||
Ci.nsIPrefLocalizedString).data;
|
||||
truncatedString = truncatedString + ellipsis;
|
||||
return truncatedString;
|
||||
},
|
||||
|
||||
appendError: function cv_appendError(aObject) {
|
||||
@ -134,26 +155,26 @@ let ConsolePanelView = {
|
||||
else {
|
||||
row.setAttribute("hideSource", "true");
|
||||
}
|
||||
// hide code by default, otherwise initial item display will
|
||||
// hang the browser.
|
||||
row.setAttribute("hideCode", "true");
|
||||
row.setAttribute("hideCaret", "true");
|
||||
|
||||
if (aObject.sourceLine) {
|
||||
row.setAttribute("code", aObject.sourceLine.replace(/\s/g, " "));
|
||||
row.setAttribute("code", this.truncateIfNecessary(aObject.sourceLine.replace(/\s/g, " ")));
|
||||
if (aObject.columnNumber) {
|
||||
row.setAttribute("col", aObject.columnNumber);
|
||||
row.setAttribute("errorDots", this.repeatChar(" ", aObject.columnNumber));
|
||||
row.setAttribute("errorCaret", " ");
|
||||
}
|
||||
else {
|
||||
row.setAttribute("hideCaret", "true");
|
||||
}
|
||||
}
|
||||
else {
|
||||
row.setAttribute("hideCode", "true");
|
||||
}
|
||||
|
||||
let mode = document.getElementById("console-filter").value;
|
||||
if (mode != "all" && mode != row.getAttribute("type"))
|
||||
if (mode != "all" && mode != row.getAttribute("type")) {
|
||||
row.collapsed = true;
|
||||
}
|
||||
|
||||
row.setAttribute("onclick", "ConsolePanelView.onRowClick(this)");
|
||||
this.appendConsoleRow(row);
|
||||
return this._list.getIndexOfItem(row);
|
||||
},
|
||||
|
||||
appendMessage: function cv_appendMessage (aMessage) {
|
||||
@ -166,6 +187,7 @@ let ConsolePanelView = {
|
||||
row.collapsed = true;
|
||||
|
||||
this.appendConsoleRow(row);
|
||||
return this._list.getIndexOfItem(row);
|
||||
},
|
||||
|
||||
createConsoleRow: function cv_createConsoleRow() {
|
||||
@ -176,8 +198,9 @@ let ConsolePanelView = {
|
||||
|
||||
appendConsoleRow: function cv_appendConsoleRow(aRow) {
|
||||
this._list.appendChild(aRow);
|
||||
if (++this._count > this.limit)
|
||||
if (++this._count > this.limit) {
|
||||
this.deleteFirst();
|
||||
}
|
||||
},
|
||||
|
||||
deleteFirst: function cv_deleteFirst() {
|
||||
@ -187,6 +210,7 @@ let ConsolePanelView = {
|
||||
},
|
||||
|
||||
appendInitialItems: function cv_appendInitialItems() {
|
||||
this._list.collapsed = true;
|
||||
let messages = Services.console.getMessageArray();
|
||||
|
||||
// In case getMessageArray returns 0-length array as null
|
||||
@ -198,13 +222,17 @@ let ConsolePanelView = {
|
||||
limit = 0;
|
||||
|
||||
// Checks if console ever been cleared
|
||||
for (var i = messages.length - 1; i >= limit; --i)
|
||||
if (!messages[i].message)
|
||||
for (var i = messages.length - 1; i >= limit; --i) {
|
||||
if (!messages[i].message) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Populate with messages after latest "clear"
|
||||
while (++i < messages.length)
|
||||
while (++i < messages.length) {
|
||||
this.appendItem(messages[i]);
|
||||
}
|
||||
this._list.collapsed = false;
|
||||
},
|
||||
|
||||
clearConsole: function cv_clearConsole() {
|
||||
@ -218,6 +246,27 @@ let ConsolePanelView = {
|
||||
this.selectedItem = null;
|
||||
},
|
||||
|
||||
copyAll: function () {
|
||||
let mode = document.getElementById("console-filter").value;
|
||||
let rows = this._list.childNodes;
|
||||
let copyText = "";
|
||||
for (let i=0; i < rows.length; i++) {
|
||||
let row = rows[i];
|
||||
if (mode == "all" || row.getAttribute ("type") == mode) {
|
||||
let text = "* " + row.getAttribute("msg");
|
||||
if (row.hasAttribute("href")) {
|
||||
text += "\r\n " + row.getAttribute("href") + " line:" + row.getAttribute("line");
|
||||
}
|
||||
if (row.hasAttribute("code")) {
|
||||
text += "\r\n " + row.getAttribute("code") + " col:" + row.getAttribute("col");
|
||||
}
|
||||
copyText += text + "\r\n";
|
||||
}
|
||||
}
|
||||
let clip = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
|
||||
clip.copyString(copyText, document);
|
||||
},
|
||||
|
||||
changeMode: function cv_changeMode() {
|
||||
let mode = document.getElementById("console-filter").value;
|
||||
if (this._list.getAttribute("mode") != mode) {
|
||||
@ -237,7 +286,7 @@ let ConsolePanelView = {
|
||||
onContextMenu: function cv_onContextMenu(aEvent) {
|
||||
let row = aEvent.target;
|
||||
let text = ["msg", "href", "line", "code", "col"].map(function(attr) row.getAttribute(attr))
|
||||
.filter(function(x) x).join("\n");
|
||||
.filter(function(x) x).join("\r\n");
|
||||
|
||||
ContextMenuUI.showContextMenu({
|
||||
target: row,
|
||||
@ -250,6 +299,15 @@ let ConsolePanelView = {
|
||||
});
|
||||
},
|
||||
|
||||
onRowClick: function (aRow) {
|
||||
if (aRow.hasAttribute("code")) {
|
||||
aRow.setAttribute("hideCode", "false");
|
||||
}
|
||||
if (aRow.hasAttribute("col")) {
|
||||
aRow.setAttribute("hideCaret", "false");
|
||||
}
|
||||
},
|
||||
|
||||
onEvalKeyPress: function cv_onEvalKeyPress(aEvent) {
|
||||
if (aEvent.keyCode == 13)
|
||||
this.evaluateTypein();
|
||||
|
@ -59,10 +59,12 @@
|
||||
<!ENTITY consoleMessages.label "Messages">
|
||||
<!ENTITY consoleCodeEval.label "Code:">
|
||||
<!ENTITY consoleClear.label "Clear">
|
||||
<!ENTITY consoleCopyAll.label "Copy">
|
||||
<!ENTITY consoleEvaluate.label "…">
|
||||
<!ENTITY consoleErrFile.label "Source File:">
|
||||
<!ENTITY consoleErrLine.label "Line:">
|
||||
<!ENTITY consoleErrColumn.label "Column:">
|
||||
<!ENTITY consoleFollowCheckbox.label "Follow">
|
||||
|
||||
<!-- TEXT CONTEXT MENU -->
|
||||
<!ENTITY contextTextCut.label "Cut">
|
||||
|
@ -922,3 +922,8 @@ appbar toolbar[labelled] toolbarbutton > .toolbarbutton-text {
|
||||
.flyout-narrow .flyoutpanel-hack {
|
||||
max-width: calc(346px - 2 * 40px);
|
||||
}
|
||||
|
||||
.console-row-code {
|
||||
padding-top: 2px;
|
||||
font-size: small;
|
||||
}
|
@ -1466,6 +1466,11 @@ richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-
|
||||
margin-bottom: -16px;
|
||||
}
|
||||
|
||||
#nav-bar .toolbarbutton-1 > menupopup[side="top"].cui-widget-panel,
|
||||
#nav-bar .toolbarbutton-1 > menupopup[side="bottom"].cui-widget-panel {
|
||||
margin-top: -4px;
|
||||
}
|
||||
|
||||
/* Bookmarking panel */
|
||||
#editBookmarkPanelStarIcon {
|
||||
list-style-image: url("chrome://browser/skin/places/starred48.png");
|
||||
|
@ -16,3 +16,10 @@
|
||||
.widget-overflow-list .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
|
||||
-moz-margin-start: 0;
|
||||
}
|
||||
|
||||
.PanelUI-subView toolbarseparator,
|
||||
.PanelUI-subView menuseparator,
|
||||
.cui-widget-panelview menuseparator,
|
||||
#PanelUI-footer-inner > toolbarseparator {
|
||||
-moz-appearance: none !important;
|
||||
}
|
||||
|
@ -1272,6 +1272,10 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.toolbarbutton-1 > menupopup.cui-widget-panel {
|
||||
margin-top: -5px;
|
||||
}
|
||||
|
||||
/* Common back and forward button styles */
|
||||
|
||||
#back-button,
|
||||
|
@ -66,3 +66,8 @@
|
||||
.widget-overflow-list .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
|
||||
-moz-margin-start: 4px;
|
||||
}
|
||||
|
||||
.PanelUI-subView menuseparator,
|
||||
.cui-widget-panelview menuseparator {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
@ -54,6 +54,10 @@
|
||||
-moz-box-flex: 1;
|
||||
}
|
||||
|
||||
.subviewbutton:not(:-moz-any([image],[targetURI],.cui-withicon)) > .toolbarbutton-text {
|
||||
-moz-margin-start: 0;
|
||||
}
|
||||
|
||||
.panel-subview-body {
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
@ -62,6 +66,7 @@
|
||||
|
||||
#PanelUI-popup .panel-subview-body {
|
||||
margin: -4px;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
.panel-subview-header,
|
||||
@ -154,7 +159,6 @@
|
||||
panelview:not([mainview]) .toolbarbutton-text,
|
||||
.cui-widget-panel toolbarbutton > .toolbarbutton-text {
|
||||
text-align: start;
|
||||
-moz-padding-start: 8px;
|
||||
display: -moz-box;
|
||||
}
|
||||
|
||||
@ -335,6 +339,7 @@ toolbarpaletteitem[place="palette"] > toolbaritem > toolbarbutton {
|
||||
border: 0;
|
||||
border-left: 1px solid rgba(0,0,0,0.1);
|
||||
margin: 7px 0 7px;
|
||||
-moz-appearance: none;
|
||||
}
|
||||
|
||||
#PanelUI-footer-inner:hover > toolbarseparator {
|
||||
@ -529,12 +534,6 @@ panelview .toolbarbutton-1,
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.PanelUI-subView menuseparator,
|
||||
.PanelUI-subView toolbarseparator {
|
||||
-moz-margin-start: -5px;
|
||||
-moz-margin-end: -4px;
|
||||
}
|
||||
|
||||
panelview .toolbarbutton-1,
|
||||
.widget-overflow-list .toolbarbutton-1 {
|
||||
margin-top: 6px;
|
||||
@ -580,12 +579,31 @@ panelview .toolbarbutton-1@buttonStateActive@,
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
panelview toolbarseparator,
|
||||
#BMB_bookmarksPopup > menuseparator {
|
||||
.PanelUI-subView menuseparator,
|
||||
.PanelUI-subView toolbarseparator,
|
||||
.cui-widget-panelview menuseparator {
|
||||
-moz-appearance: none;
|
||||
min-height: 0;
|
||||
border-top: 1px solid ThreeDShadow;
|
||||
margin: 5px 0;
|
||||
border-top: 1px solid hsla(210,4%,10%,.15);
|
||||
margin: 2px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.PanelUI-subView menuseparator,
|
||||
.PanelUI-subView toolbarseparator {
|
||||
-moz-margin-start: -5px;
|
||||
-moz-margin-end: -4px;
|
||||
}
|
||||
|
||||
.PanelUI-subView menuseparator.small-separator,
|
||||
.PanelUI-subView toolbarseparator.small-separator {
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.cui-widget-panelview menuseparator.small-separator {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.subviewbutton > .menu-accel-container {
|
||||
@ -782,36 +800,20 @@ toolbarpaletteitem[place="palette"] > #search-container {
|
||||
box-shadow: 0 0 0 1px hsla(0,0%,100%,.2);
|
||||
}
|
||||
|
||||
#PanelUI-developerItems > toolbarbutton[checked="true"],
|
||||
#PanelUI-bookmarks > toolbarbutton[checked="true"],
|
||||
#PanelUI-history > toolbarbutton[checked="true"],
|
||||
.PanelUI-characterEncodingView-list > toolbarbutton[current] {
|
||||
.PanelUI-subView toolbarbutton[checked="true"] {
|
||||
-moz-padding-start: 4px;
|
||||
}
|
||||
|
||||
#PanelUI-developerItems > toolbarbutton[checked="true"] > .toolbarbutton-text,
|
||||
#PanelUI-bookmarks > toolbarbutton[checked="true"] > .toolbarbutton-text,
|
||||
#PanelUI-history > toolbarbutton[checked="true"] > .toolbarbutton-text,
|
||||
.PanelUI-characterEncodingView-list > toolbarbutton[current] > .toolbarbutton-text,
|
||||
.cui-widget-panel .PanelUI-characterEncodingView-list > toolbarbutton[current] > .toolbarbutton-text {
|
||||
.PanelUI-subView toolbarbutton[checked="true"] > .toolbarbutton-text {
|
||||
-moz-padding-start: 0px;
|
||||
}
|
||||
|
||||
#BMB_bookmarksPopup > menuitem[checked="true"]::before,
|
||||
#PanelUI-bookmarks > toolbarbutton[checked="true"]::before,
|
||||
#PanelUI-history > toolbarbutton[checked="true"]::before,
|
||||
#PanelUI-developerItems > toolbarbutton[checked="true"]::before,
|
||||
.PanelUI-characterEncodingView-list > toolbarbutton[current]::before {
|
||||
.PanelUI-subView menuitem[checked="true"]::before,
|
||||
.PanelUI-subView toolbarbutton[checked="true"]::before {
|
||||
content: "✓";
|
||||
display: -moz-box;
|
||||
width: 12px;
|
||||
}
|
||||
|
||||
#PanelUI-bookmarks > toolbarbutton[checked="true"]::before,
|
||||
#PanelUI-history > toolbarbutton[checked="true"]::before,
|
||||
#PanelUI-developerItems > toolbarbutton[checked="true"]::before,
|
||||
.PanelUI-characterEncodingView-list > toolbarbutton[current]::before {
|
||||
-moz-margin-end: -2px;
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
#BMB_bookmarksPopup > menuitem[checked="true"] > .menu-iconic-left {
|
||||
|
@ -458,6 +458,17 @@ box.requests-menu-status {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* Preview tabpanel */
|
||||
|
||||
#preview-tabpanel {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#response-preview {
|
||||
display: -moz-box;
|
||||
-moz-box-flex: 1;
|
||||
}
|
||||
|
||||
/* Timings tabpanel */
|
||||
|
||||
#timings-tabpanel .tabpanel-summary-label {
|
||||
|
@ -505,6 +505,10 @@ menuitem.bookmark-item {
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
#nav-bar .toolbarbutton-1 > menupopup.cui-widget-panel {
|
||||
margin-top: -8px;
|
||||
}
|
||||
|
||||
#nav-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button {
|
||||
-moz-padding-end: 0;
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ GCONF_VERSION=1.2.1
|
||||
GIO_VERSION=2.20
|
||||
STARTUP_NOTIFICATION_VERSION=0.8
|
||||
DBUS_VERSION=0.60
|
||||
SQLITE_VERSION=3.8.3
|
||||
SQLITE_VERSION=3.8.3.1
|
||||
|
||||
MSMANIFEST_TOOL=
|
||||
|
||||
|
@ -523,6 +523,15 @@ CSPRep.fromString = function(aStr, self, reportOnly, docRequest, csp,
|
||||
cspWarn(aCSPR, CSPLocalizer.getStr("allowOrDefaultSrcRequired"));
|
||||
return CSPRep.fromString("default-src 'none'", null, reportOnly);
|
||||
}
|
||||
|
||||
// If this is a Report-Only header and report-uri is not in the directive
|
||||
// list, tell developer either specify report-uri directive or use
|
||||
// a non-Report-Only CSP header.
|
||||
if (aCSPR._reportOnlyMode && !aCSPR._directives.hasOwnProperty(UD.REPORT_URI)) {
|
||||
cspWarn(aCSPR, CSPLocalizer.getFormatStr("reportURInotInReportOnlyHeader",
|
||||
[selfUri ? selfUri.prePath : "undefined"]))
|
||||
}
|
||||
|
||||
return aCSPR;
|
||||
};
|
||||
|
||||
@ -763,6 +772,14 @@ CSPRep.fromStringSpecCompliant = function(aStr, self, reportOnly, docRequest, cs
|
||||
|
||||
} // end directive: loop
|
||||
|
||||
// If this is a Report-Only header and report-uri is not in the directive
|
||||
// list, tell developer either specify report-uri directive or use
|
||||
// a non-Report-Only CSP header.
|
||||
if (aCSPR._reportOnlyMode && !aCSPR._directives.hasOwnProperty(UD.REPORT_URI)) {
|
||||
cspWarn(aCSPR, CSPLocalizer.getFormatStr("reportURInotInReportOnlyHeader",
|
||||
[selfUri ? selfUri.prePath : "undefined"]));
|
||||
}
|
||||
|
||||
return aCSPR;
|
||||
};
|
||||
|
||||
|
@ -1042,8 +1042,7 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
||||
if (!JS_CallFunctionValue(cx, thisObject,
|
||||
funval, argv, rval.address())) {
|
||||
if (!JS_CallFunctionValue(cx, thisObject, funval, argv, &rval)) {
|
||||
nsJSUtils::ReportPendingException(cx);
|
||||
continue;
|
||||
}
|
||||
@ -1430,8 +1429,7 @@ nsFrameScriptExecutor::LoadFrameScriptInternal(const nsAString& aURL,
|
||||
}
|
||||
JS::Rooted<JS::Value> rval(cx);
|
||||
JS::Rooted<JS::Value> methodVal(cx, JS::ObjectValue(*method));
|
||||
ok = JS_CallFunctionValue(cx, global, methodVal,
|
||||
JS::EmptyValueArray, rval.address());
|
||||
ok = JS_CallFunctionValue(cx, global, methodVal, JS::EmptyValueArray, &rval);
|
||||
} else if (script) {
|
||||
ok = JS_ExecuteScript(cx, global, script, nullptr);
|
||||
}
|
||||
|
@ -1,10 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_FILES = \
|
||||
bug421622-referer.sjs \
|
||||
nochrome_bug765993.html \
|
||||
nochrome_bug765993.js \
|
||||
nochrome_bug765993.js^headers^ \
|
||||
$(NULL)
|
6
content/base/test/chrome/mochitest.ini
Normal file
6
content/base/test/chrome/mochitest.ini
Normal file
@ -0,0 +1,6 @@
|
||||
[DEFAULT]
|
||||
support-files =
|
||||
bug421622-referer.sjs
|
||||
nochrome_bug765993.html
|
||||
nochrome_bug765993.js
|
||||
nochrome_bug765993.js^headers^
|
@ -1,8 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
|
||||
|
@ -0,0 +1 @@
|
||||
Content-Security-Policy-Report-Only: default-src 'self';
|
@ -111,6 +111,8 @@ support-files =
|
||||
file_csp_testserver.sjs
|
||||
file_csp_regexp_parsing.html
|
||||
file_csp_regexp_parsing.js
|
||||
file_report_uri_missing_in_report_only_header.html
|
||||
file_report_uri_missing_in_report_only_header.html^headers^
|
||||
|
||||
[test_CSP.html]
|
||||
[test_CSP_bug663567.html]
|
||||
@ -137,3 +139,4 @@ support-files =
|
||||
[test_self_none_as_hostname_confusion.html]
|
||||
[test_bug949549.html]
|
||||
[test_csp_regexp_parsing.html]
|
||||
[test_report_uri_missing_in_report_only_header.html]
|
||||
|
@ -0,0 +1,51 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=847081
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for Bug 847081</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=847081">Mozilla Bug 847081</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<iframe id="cspframe"></iframe>
|
||||
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
var stringBundleService = SpecialPowers.Cc["@mozilla.org/intl/stringbundle;1"]
|
||||
.getService(SpecialPowers.Ci.nsIStringBundleService);
|
||||
var localizer = stringBundleService.createBundle("chrome://global/locale/security/csp.properties");
|
||||
var warningMsg = localizer.formatStringFromName("reportURInotInReportOnlyHeader", [window.location.origin], 1);
|
||||
function cleanup() {
|
||||
SpecialPowers.postConsoleSentinel();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SpecialPowers.registerConsoleListener(function ConsoleMsgListener(aMsg) {
|
||||
if (aMsg.message.indexOf(warningMsg) > -1) {
|
||||
ok(true, "report-uri not specified in Report-Only should throw a CSP warning.");
|
||||
SimpleTest.executeSoon(cleanup);
|
||||
return;
|
||||
} else {
|
||||
// if some other console message is present, we wait
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// set up and start testing
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv(
|
||||
{'set': [["security.csp.speccompliant", true]]},
|
||||
function() {
|
||||
document.getElementById('cspframe').src = 'file_report_uri_missing_in_report_only_header.html';
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@ -5,7 +5,6 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
TEST_TOOL_DIRS += [
|
||||
'chrome',
|
||||
'csp',
|
||||
'websocket_hybi',
|
||||
]
|
||||
@ -22,9 +21,15 @@ CPP_UNIT_TESTS += [
|
||||
'TestPlainTextSerializer.cpp',
|
||||
]
|
||||
|
||||
MOCHITEST_MANIFESTS += ['mochitest.ini']
|
||||
MOCHITEST_MANIFESTS += [
|
||||
'chrome/mochitest.ini',
|
||||
'mochitest.ini',
|
||||
]
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
|
||||
MOCHITEST_CHROME_MANIFESTS += [
|
||||
'chrome.ini',
|
||||
'chrome/chrome.ini',
|
||||
]
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += ['browser.ini']
|
||||
|
||||
|
@ -902,6 +902,7 @@ protected:
|
||||
OES_texture_float,
|
||||
OES_texture_float_linear,
|
||||
OES_texture_half_float,
|
||||
OES_texture_half_float_linear,
|
||||
OES_vertex_array_object,
|
||||
WEBGL_compressed_texture_atc,
|
||||
WEBGL_compressed_texture_pvrtc,
|
||||
|
@ -24,6 +24,7 @@ static const char *sExtensionNames[] = {
|
||||
"OES_texture_float",
|
||||
"OES_texture_float_linear",
|
||||
"OES_texture_half_float",
|
||||
"OES_texture_half_float_linear",
|
||||
"OES_vertex_array_object",
|
||||
"WEBGL_compressed_texture_atc",
|
||||
"WEBGL_compressed_texture_pvrtc",
|
||||
@ -104,6 +105,8 @@ bool WebGLContext::IsExtensionSupported(WebGLExtensionID ext) const
|
||||
// right before making the relevant calls.
|
||||
return gl->IsExtensionSupported(GLContext::OES_texture_half_float) ||
|
||||
gl->IsSupported(GLFeature::texture_half_float);
|
||||
case OES_texture_half_float_linear:
|
||||
return gl->IsSupported(GLFeature::texture_half_float_linear);
|
||||
case OES_vertex_array_object:
|
||||
return WebGLExtensionVertexArray::IsSupported(this);
|
||||
case EXT_texture_filter_anisotropic:
|
||||
@ -277,6 +280,9 @@ WebGLContext::EnableExtension(WebGLExtensionID ext)
|
||||
case OES_texture_half_float:
|
||||
obj = new WebGLExtensionTextureHalfFloat(this);
|
||||
break;
|
||||
case OES_texture_half_float_linear:
|
||||
obj = new WebGLExtensionTextureHalfFloatLinear(this);
|
||||
break;
|
||||
case WEBGL_draw_buffers:
|
||||
obj = new WebGLExtensionDrawBuffers(this);
|
||||
break;
|
||||
|
20
content/canvas/src/WebGLExtensionTextureHalfFloatLinear.cpp
Normal file
20
content/canvas/src/WebGLExtensionTextureHalfFloatLinear.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "WebGLContext.h"
|
||||
#include "WebGLExtensions.h"
|
||||
#include "mozilla/dom/WebGLRenderingContextBinding.h"
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
WebGLExtensionTextureHalfFloatLinear::WebGLExtensionTextureHalfFloatLinear(WebGLContext* context)
|
||||
: WebGLExtensionBase(context)
|
||||
{
|
||||
}
|
||||
|
||||
WebGLExtensionTextureHalfFloatLinear::~WebGLExtensionTextureHalfFloatLinear()
|
||||
{
|
||||
}
|
||||
|
||||
IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionTextureHalfFloatLinear)
|
@ -183,6 +183,16 @@ public:
|
||||
DECL_WEBGL_EXTENSION_GOOP
|
||||
};
|
||||
|
||||
class WebGLExtensionTextureHalfFloatLinear
|
||||
: public WebGLExtensionBase
|
||||
{
|
||||
public:
|
||||
WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
|
||||
virtual ~WebGLExtensionTextureHalfFloatLinear();
|
||||
|
||||
DECL_WEBGL_EXTENSION_GOOP
|
||||
};
|
||||
|
||||
class WebGLExtensionDrawBuffers
|
||||
: public WebGLExtensionBase
|
||||
{
|
||||
|
@ -350,8 +350,8 @@ WebGLTexture::ResolvedFakeBlackStatus() {
|
||||
"Try enabling the OES_texture_float_linear extension if supported.", msg_rendering_as_black);
|
||||
mFakeBlackStatus = WebGLTextureFakeBlackStatus::IncompleteTexture;
|
||||
}
|
||||
}
|
||||
else if (ImageInfoBase().mType == LOCAL_GL_HALF_FLOAT_OES)
|
||||
} else if (ImageInfoBase().mType == LOCAL_GL_HALF_FLOAT_OES &&
|
||||
!Context()->IsExtensionEnabled(WebGLContext::OES_texture_half_float_linear))
|
||||
{
|
||||
if (mMinFilter == LOCAL_GL_LINEAR ||
|
||||
mMinFilter == LOCAL_GL_LINEAR_MIPMAP_LINEAR ||
|
||||
|
@ -60,6 +60,7 @@ if CONFIG['MOZ_WEBGL']:
|
||||
'WebGLExtensionTextureFloat.cpp',
|
||||
'WebGLExtensionTextureFloatLinear.cpp',
|
||||
'WebGLExtensionTextureHalfFloat.cpp',
|
||||
'WebGLExtensionTextureHalfFloatLinear.cpp',
|
||||
'WebGLExtensionVertexArray.cpp',
|
||||
'WebGLFramebuffer.cpp',
|
||||
'WebGLObjectModel.cpp',
|
||||
|
@ -1,99 +0,0 @@
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# SkiaGL on Android/Gonk does not implement these composite ops yet
|
||||
ifneq (1_Linux,$(MOZ_SUITE)_$(OS_ARCH))
|
||||
# This test fails in Suite on Linux for some reason, disable it there
|
||||
MOCHITEST_FILES += test_2d.composite.uncovered.image.destination-atop.html
|
||||
endif
|
||||
|
||||
# xor and lighter aren't well handled by cairo; they mostly work, but we don't want
|
||||
# to test that
|
||||
# test_2d.composite.solid.xor.html \
|
||||
# test_2d.composite.solid.lighter.html \
|
||||
# test_2d.composite.transparent.xor.html \
|
||||
# test_2d.composite.transparent.lighter.html \
|
||||
# test_2d.composite.image.xor.html \
|
||||
# test_2d.composite.image.lighter.html \
|
||||
# test_2d.composite.canvas.xor.html \
|
||||
# test_2d.composite.canvas.lighter.html \
|
||||
# test_2d.composite.clip.xor.html \
|
||||
# test_2d.composite.clip.lighter.html \
|
||||
#
|
||||
|
||||
# Tests that fail on Mac (possibly because spec is underdefined?). Bug 407105
|
||||
ifneq ($(MOZ_WIDGET_TOOLKIT),cocoa)
|
||||
# XXX vlad don't test these anywhere, cairo behaviour changed
|
||||
MOCHITEST_FILES += \
|
||||
test_2d.line.join.parallel.html \
|
||||
$(NULL)
|
||||
|
||||
ifneq ($(MOZ_WIDGET_TOOLKIT), android)
|
||||
ifneq ($(MOZ_WIDGET_TOOLKIT), gonk)
|
||||
# This is an issue with Quartz's handling of radial gradients and some numeric
|
||||
# imprecision that results in errors here. SkiaGL (on Android/Gonk) also has
|
||||
# a similar problem.
|
||||
MOCHITEST_FILES += \
|
||||
test_2d.gradient.radial.inside2.html \
|
||||
test_2d.gradient.radial.inside3.html \
|
||||
test_2d.gradient.radial.outside1.html \
|
||||
test_2d.gradient.radial.cone.front.html \
|
||||
test_2d.gradient.radial.cone.top.html \
|
||||
$(NULL)
|
||||
endif
|
||||
endif
|
||||
|
||||
# This is another Quartz bug -- closed paths that don't lie fully within the
|
||||
# destination bounds seem to have problems with the BEVEL/SQUARE join/cap combo.
|
||||
# The joins are rendered as if with MITER; the correct behaviour is also seen
|
||||
# if BUTT is used instead of SQUARE.
|
||||
MOCHITEST_FILES += test_2d.line.cap.closed.html
|
||||
|
||||
endif
|
||||
|
||||
# Tests that fail on non-Mac (bug 407107)
|
||||
ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa)
|
||||
|
||||
# still need bug numbers
|
||||
MOCHITEST_FILES += \
|
||||
test_2d.composite.uncovered.fill.source-in.html \
|
||||
test_2d.composite.uncovered.fill.destination-in.html \
|
||||
test_2d.composite.uncovered.fill.source-out.html \
|
||||
test_2d.composite.uncovered.fill.destination-atop.html \
|
||||
test_2d.composite.uncovered.pattern.source-in.html \
|
||||
test_2d.composite.uncovered.pattern.destination-in.html \
|
||||
test_2d.composite.uncovered.pattern.source-out.html \
|
||||
test_2d.composite.uncovered.pattern.destination-atop.html \
|
||||
$(NULL)
|
||||
|
||||
# still need bug numbers
|
||||
MOCHITEST_FILES += \
|
||||
test_2d.gradient.radial.outside2.html \
|
||||
test_2d.gradient.radial.outside3.html \
|
||||
$(NULL)
|
||||
|
||||
# still need bug numbers
|
||||
MOCHITEST_FILES += test_2d.path.arc.shape.3.html
|
||||
|
||||
MOCHITEST_FILES += test_2d.path.rect.selfintersect.html
|
||||
endif
|
||||
|
||||
# These tests only pass on Mac OS X >= 10.5; see bug 450114
|
||||
# test_2d.gradient.radial.touch1.html \
|
||||
# test_2d.gradient.radial.touch2.html \
|
||||
# test_2d.gradient.radial.touch3.html \
|
||||
# test_2d.gradient.radial.equal.html \
|
||||
|
||||
# These tests do not pass on any platform; Quartz backend won't pass them
|
||||
# because we fall back to pixman when one circle doesn't contain the other.
|
||||
# See bug 512647.
|
||||
# test_2d.gradient.radial.cone.shape2.html \
|
||||
# test_2d.gradient.radial.cone.behind.html \
|
||||
# test_2d.gradient.radial.cone.beside.html \
|
||||
|
||||
# This test is bogus according to the spec; see bug 407107
|
||||
# test_2d.path.rect.zero.6.html
|
||||
|
||||
# split up into groups to work around command-line length limits
|
@ -1,8 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
|
||||
|
@ -1,8 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_MANIFESTS += ['mochitest.ini']
|
||||
|
@ -47,6 +47,28 @@ support-files =
|
||||
[test_2d.composite.image.destination-in.html]
|
||||
[test_2d.composite.image.source-in.html]
|
||||
[test_2d.composite.image.source-out.html]
|
||||
# xor and lighter aren't well handled by cairo; they mostly work, but we don't want
|
||||
# to test that
|
||||
[test_2d.composite.solid.xor.html]
|
||||
disabled =
|
||||
[test_2d.composite.solid.lighter.html]
|
||||
disabled =
|
||||
[test_2d.composite.transparent.xor.html]
|
||||
disabled =
|
||||
[test_2d.composite.transparent.lighter.html]
|
||||
disabled =
|
||||
[test_2d.composite.image.xor.html]
|
||||
disabled =
|
||||
[test_2d.composite.image.lighter.html]
|
||||
disabled =
|
||||
[test_2d.composite.canvas.xor.html]
|
||||
disabled =
|
||||
[test_2d.composite.canvas.lighter.html]
|
||||
disabled =
|
||||
[test_2d.composite.clip.xor.html]
|
||||
disabled =
|
||||
[test_2d.composite.clip.lighter.html]
|
||||
disabled =
|
||||
[test_2d.composite.solid.color-burn.html]
|
||||
[test_2d.composite.solid.color-dodge.html]
|
||||
[test_2d.composite.solid.color.html]
|
||||
@ -62,6 +84,9 @@ support-files =
|
||||
[test_2d.composite.solid.saturation.html]
|
||||
[test_2d.composite.solid.screen.html]
|
||||
[test_2d.composite.solid.soft-light.html]
|
||||
[test_2d.composite.uncovered.image.destination-atop.html]
|
||||
# This test fails in Suite on Linux for some reason, disable it there
|
||||
skip-if = os == 'linux' && buildapp == 'suite'
|
||||
[test_2d.composite.uncovered.fill.color-burn.html]
|
||||
[test_2d.composite.uncovered.fill.color-dodge.html]
|
||||
[test_2d.composite.uncovered.fill.color.html]
|
||||
@ -77,12 +102,84 @@ support-files =
|
||||
[test_2d.composite.uncovered.fill.saturation.html]
|
||||
[test_2d.composite.uncovered.fill.screen.html]
|
||||
[test_2d.composite.uncovered.fill.soft-light.html]
|
||||
# Tests that fail on non-Mac (bug 407107)
|
||||
[test_2d.composite.uncovered.fill.source-in.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.composite.uncovered.fill.destination-in.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.composite.uncovered.fill.source-out.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.composite.uncovered.fill.destination-atop.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.composite.uncovered.image.destination-in.html]
|
||||
[test_2d.composite.uncovered.image.source-in.html]
|
||||
[test_2d.composite.uncovered.image.source-out.html]
|
||||
# Tests that fail on non-Mac (bug 407107)
|
||||
[test_2d.composite.uncovered.pattern.source-in.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.composite.uncovered.pattern.destination-in.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.composite.uncovered.pattern.source-out.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.composite.uncovered.pattern.destination-atop.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.drawImage.zerocanvas.html]
|
||||
[test_2d.fill.winding.html]
|
||||
# These tests do not pass on any platform; Quartz backend won't pass them
|
||||
# because we fall back to pixman when one circle doesn't contain the other.
|
||||
# See bug 512647.
|
||||
[test_2d.gradient.radial.cone.shape2.html]
|
||||
disabled = bug 512647
|
||||
[test_2d.gradient.radial.cone.behind.html]
|
||||
disabled = bug 512647
|
||||
[test_2d.gradient.radial.cone.beside.html]
|
||||
disabled = bug 512647
|
||||
# This is an issue with Quartz's handling of radial gradients and some numeric
|
||||
# imprecision that results in errors here. SkiaGL (on Android/Gonk) also has
|
||||
# a similar problem.
|
||||
[test_2d.gradient.radial.inside2.html]
|
||||
skip-if = toolkit == 'cocoa' || toolkit == 'android' || toolkit == 'gonk'
|
||||
[test_2d.gradient.radial.inside3.html]
|
||||
skip-if = toolkit == 'cocoa' || toolkit == 'android' || toolkit == 'gonk'
|
||||
[test_2d.gradient.radial.outside1.html]
|
||||
skip-if = toolkit == 'cocoa' || toolkit == 'android' || toolkit == 'gonk'
|
||||
[test_2d.gradient.radial.cone.front.html]
|
||||
skip-if = toolkit == 'cocoa' || toolkit == 'android' || toolkit == 'gonk'
|
||||
[test_2d.gradient.radial.cone.top.html]
|
||||
skip-if = toolkit == 'cocoa' || toolkit == 'android' || toolkit == 'gonk'
|
||||
# Tests that fail on non-Mac (bug 407107)
|
||||
[test_2d.gradient.radial.outside2.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.gradient.radial.outside3.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
# These tests only pass on Mac OS X >= 10.5; see bug 450114
|
||||
[test_2d.gradient.radial.touch1.html]
|
||||
disabled = bug 450114
|
||||
[test_2d.gradient.radial.touch2.html]
|
||||
disabled = bug 450114
|
||||
[test_2d.gradient.radial.touch3.html]
|
||||
disabled = bug 450114
|
||||
[test_2d.gradient.radial.equal.html]
|
||||
disabled = bug 450114
|
||||
[test_2d.isPointInPath.winding.html]
|
||||
[test_2d.line.cap.closed.html]
|
||||
# This is another Quartz bug -- closed paths that don't lie fully within the
|
||||
# destination bounds seem to have problems with the BEVEL/SQUARE join/cap combo.
|
||||
# The joins are rendered as if with MITER; the correct behaviour is also seen
|
||||
# if BUTT is used instead of SQUARE.
|
||||
skip-if = toolkit == 'cocoa'
|
||||
[test_2d.line.join.parallel.html]
|
||||
# Tests that fail on Mac (possibly because spec is underdefined?). Bug 407105
|
||||
# XXX vlad don't test these anywhere, cairo behaviour changed
|
||||
skip-if = toolkit == 'cocoa'
|
||||
# Tests that fail on non-Mac (bug 407107)
|
||||
[test_2d.path.arc.shape.3.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
[test_2d.path.rect.selfintersect.html]
|
||||
skip-if = toolkit != 'cocoa'
|
||||
# This test is bogus according to the spec; see bug 407107
|
||||
[test_2d.path.rect.zero.6.html]
|
||||
disabled = bug 407107
|
||||
[test_2d.strokeRect.zero.5.html]
|
||||
[test_bug613794.html]
|
||||
[test_bug753758.html]
|
||||
|
@ -4,7 +4,11 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DIRS += ['webgl', 'crossorigin', 'chrome']
|
||||
DIRS += ['webgl']
|
||||
|
||||
MOCHITEST_MANIFESTS += ['mochitest.ini']
|
||||
MOCHITEST_MANIFESTS += [
|
||||
'crossorigin/mochitest.ini',
|
||||
'mochitest.ini',
|
||||
]
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['chrome/chrome.ini']
|
||||
|
@ -1,9 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_FILES := \
|
||||
audio-testing.js \
|
||||
convolution-testing.js \
|
||||
panner-model-testing.js \
|
||||
$(NULL)
|
5
content/media/webaudio/test/blink/mochitest.ini
Normal file
5
content/media/webaudio/test/blink/mochitest.ini
Normal file
@ -0,0 +1,5 @@
|
||||
[DEFAULT]
|
||||
support-files =
|
||||
audio-testing.js
|
||||
convolution-testing.js
|
||||
panner-model-testing.js
|
@ -4,7 +4,7 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
PARALLEL_DIRS += ['blink']
|
||||
|
||||
MOCHITEST_MANIFESTS += ['mochitest.ini']
|
||||
|
||||
MOCHITEST_MANIFESTS += [
|
||||
'blink/mochitest.ini',
|
||||
'mochitest.ini',
|
||||
]
|
||||
|
@ -1,4 +1,4 @@
|
||||
This is sqlite 3.8.3
|
||||
This is sqlite 3.8.3.1
|
||||
|
||||
-- Ryan VanderMeulen <ryanvm@gmail.com>, 2/2014
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/******************************************************************************
|
||||
** This file is an amalgamation of many separate C source files from SQLite
|
||||
** version 3.8.3. By combining all the individual C code files into this
|
||||
** version 3.8.3.1. By combining all the individual C code files into this
|
||||
** single large file, the entire code can be compiled as a single translation
|
||||
** unit. This allows many compilers to do optimizations that would not be
|
||||
** possible if the files were compiled separately. Performance improvements
|
||||
@ -135,9 +135,9 @@ extern "C" {
|
||||
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
||||
** [sqlite_version()] and [sqlite_source_id()].
|
||||
*/
|
||||
#define SQLITE_VERSION "3.8.3"
|
||||
#define SQLITE_VERSION "3.8.3.1"
|
||||
#define SQLITE_VERSION_NUMBER 3008003
|
||||
#define SQLITE_SOURCE_ID "2014-02-03 14:04:11 6c643e45c274e755dc5a1a65673df79261c774be"
|
||||
#define SQLITE_SOURCE_ID "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
|
||||
|
||||
/*
|
||||
** CAPI3REF: Run-Time Library Version Numbers
|
||||
@ -41076,7 +41076,7 @@ static int writeMasterJournal(Pager *pPager, const char *zMaster){
|
||||
** already in memory.
|
||||
*/
|
||||
static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){
|
||||
PgHdr *p; /* Return value */
|
||||
PgHdr *p = 0; /* Return value */
|
||||
|
||||
/* It is not possible for a call to PcacheFetch() with createFlag==0 to
|
||||
** fail, since no attempt to allocate dynamic memory will be made.
|
||||
@ -55450,15 +55450,6 @@ SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
|
||||
** successful then set *pRes=0. If the cursor
|
||||
** was already pointing to the last entry in the database before
|
||||
** this routine was called, then set *pRes=1.
|
||||
**
|
||||
** The calling function will set *pRes to 0 or 1. The initial *pRes value
|
||||
** will be 1 if the cursor being stepped corresponds to an SQL index and
|
||||
** if this routine could have been skipped if that SQL index had been
|
||||
** a unique index. Otherwise the caller will have set *pRes to zero.
|
||||
** Zero is the common case. The btree implementation is free to use the
|
||||
** initial *pRes value as a hint to improve performance, but the current
|
||||
** SQLite btree implementation does not. (Note that the comdb2 btree
|
||||
** implementation does use this hint, however.)
|
||||
*/
|
||||
SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
|
||||
int rc;
|
||||
@ -55467,7 +55458,6 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
|
||||
|
||||
assert( cursorHoldsMutex(pCur) );
|
||||
assert( pRes!=0 );
|
||||
assert( *pRes==0 || *pRes==1 );
|
||||
assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );
|
||||
if( pCur->eState!=CURSOR_VALID ){
|
||||
rc = restoreCursorPosition(pCur);
|
||||
@ -55546,15 +55536,6 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
|
||||
** successful then set *pRes=0. If the cursor
|
||||
** was already pointing to the first entry in the database before
|
||||
** this routine was called, then set *pRes=1.
|
||||
**
|
||||
** The calling function will set *pRes to 0 or 1. The initial *pRes value
|
||||
** will be 1 if the cursor being stepped corresponds to an SQL index and
|
||||
** if this routine could have been skipped if that SQL index had been
|
||||
** a unique index. Otherwise the caller will have set *pRes to zero.
|
||||
** Zero is the common case. The btree implementation is free to use the
|
||||
** initial *pRes value as a hint to improve performance, but the current
|
||||
** SQLite btree implementation does not. (Note that the comdb2 btree
|
||||
** implementation does use this hint, however.)
|
||||
*/
|
||||
SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
|
||||
int rc;
|
||||
@ -55562,7 +55543,6 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
|
||||
|
||||
assert( cursorHoldsMutex(pCur) );
|
||||
assert( pRes!=0 );
|
||||
assert( *pRes==0 || *pRes==1 );
|
||||
assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );
|
||||
pCur->atLast = 0;
|
||||
if( pCur->eState!=CURSOR_VALID ){
|
||||
@ -57789,7 +57769,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
|
||||
** sub-tree headed by the child page of the cell being deleted. This makes
|
||||
** balancing the tree following the delete operation easier. */
|
||||
if( !pPage->leaf ){
|
||||
int notUsed = 0;
|
||||
int notUsed;
|
||||
rc = sqlite3BtreePrevious(pCur, ¬Used);
|
||||
if( rc ) return rc;
|
||||
}
|
||||
@ -70054,7 +70034,6 @@ case OP_SeekGt: { /* jump, in3 */
|
||||
#endif
|
||||
if( oc>=OP_SeekGe ){ assert( oc==OP_SeekGe || oc==OP_SeekGt );
|
||||
if( res<0 || (res==0 && oc==OP_SeekGt) ){
|
||||
res = 0;
|
||||
rc = sqlite3BtreeNext(pC->pCursor, &res);
|
||||
if( rc!=SQLITE_OK ) goto abort_due_to_error;
|
||||
pC->rowidIsValid = 0;
|
||||
@ -70064,7 +70043,6 @@ case OP_SeekGt: { /* jump, in3 */
|
||||
}else{
|
||||
assert( oc==OP_SeekLt || oc==OP_SeekLe );
|
||||
if( res>0 || (res==0 && oc==OP_SeekLt) ){
|
||||
res = 0;
|
||||
rc = sqlite3BtreePrevious(pC->pCursor, &res);
|
||||
if( rc!=SQLITE_OK ) goto abort_due_to_error;
|
||||
pC->rowidIsValid = 0;
|
||||
@ -70917,7 +70895,7 @@ case OP_Rewind: { /* jump */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Opcode: Next P1 P2 P3 * P5
|
||||
/* Opcode: Next P1 P2 * * P5
|
||||
**
|
||||
** Advance cursor P1 so that it points to the next key/data pair in its
|
||||
** table or index. If there are no more key/value pairs then fall through
|
||||
@ -70927,11 +70905,6 @@ case OP_Rewind: { /* jump */
|
||||
** The P1 cursor must be for a real table, not a pseudo-table. P1 must have
|
||||
** been opened prior to this opcode or the program will segfault.
|
||||
**
|
||||
** The P3 value is a hint to the btree implementation. If P3==1, that
|
||||
** means P1 is an SQL index and that this instruction could have been
|
||||
** omitted if that index had been unique. P3 is usually 0. P3 is
|
||||
** always either 0 or 1.
|
||||
**
|
||||
** P4 is always of type P4_ADVANCE. The function pointer points to
|
||||
** sqlite3BtreeNext().
|
||||
**
|
||||
@ -70940,12 +70913,12 @@ case OP_Rewind: { /* jump */
|
||||
**
|
||||
** See also: Prev, NextIfOpen
|
||||
*/
|
||||
/* Opcode: NextIfOpen P1 P2 P3 * P5
|
||||
/* Opcode: NextIfOpen P1 P2 * * P5
|
||||
**
|
||||
** This opcode works just like OP_Next except that if cursor P1 is not
|
||||
** open it behaves a no-op.
|
||||
*/
|
||||
/* Opcode: Prev P1 P2 P3 * P5
|
||||
/* Opcode: Prev P1 P2 * * P5
|
||||
**
|
||||
** Back up cursor P1 so that it points to the previous key/data pair in its
|
||||
** table or index. If there is no previous key/value pairs then fall through
|
||||
@ -70955,18 +70928,13 @@ case OP_Rewind: { /* jump */
|
||||
** The P1 cursor must be for a real table, not a pseudo-table. If P1 is
|
||||
** not open then the behavior is undefined.
|
||||
**
|
||||
** The P3 value is a hint to the btree implementation. If P3==1, that
|
||||
** means P1 is an SQL index and that this instruction could have been
|
||||
** omitted if that index had been unique. P3 is usually 0. P3 is
|
||||
** always either 0 or 1.
|
||||
**
|
||||
** P4 is always of type P4_ADVANCE. The function pointer points to
|
||||
** sqlite3BtreePrevious().
|
||||
**
|
||||
** If P5 is positive and the jump is taken, then event counter
|
||||
** number P5-1 in the prepared statement is incremented.
|
||||
*/
|
||||
/* Opcode: PrevIfOpen P1 P2 P3 * P5
|
||||
/* Opcode: PrevIfOpen P1 P2 * * P5
|
||||
**
|
||||
** This opcode works just like OP_Prev except that if cursor P1 is not
|
||||
** open it behaves a no-op.
|
||||
@ -70988,12 +70956,9 @@ case OP_Next: /* jump */
|
||||
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
|
||||
assert( pOp->p5<ArraySize(p->aCounter) );
|
||||
pC = p->apCsr[pOp->p1];
|
||||
res = pOp->p3;
|
||||
assert( pC!=0 );
|
||||
assert( pC->deferredMoveto==0 );
|
||||
assert( pC->pCursor );
|
||||
assert( res==0 || (res==1 && pC->isTable==0) );
|
||||
testcase( res==1 );
|
||||
assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext );
|
||||
assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious );
|
||||
assert( pOp->opcode!=OP_NextIfOpen || pOp->p4.xAdvance==sqlite3BtreeNext );
|
||||
@ -108490,7 +108455,7 @@ struct WhereLevel {
|
||||
int addrFirst; /* First instruction of interior of the loop */
|
||||
int addrBody; /* Beginning of the body of this loop */
|
||||
u8 iFrom; /* Which entry in the FROM clause */
|
||||
u8 op, p3, p5; /* Opcode, P3 & P5 of the opcode that ends the loop */
|
||||
u8 op, p5; /* Opcode and P5 of the opcode that ends the loop */
|
||||
int p1, p2; /* Operands of the opcode used to ends the loop */
|
||||
union { /* Information that depends on pWLoop->wsFlags */
|
||||
struct {
|
||||
@ -108877,7 +108842,6 @@ struct WhereInfo {
|
||||
#define WHERE_MULTI_OR 0x00002000 /* OR using multiple indices */
|
||||
#define WHERE_AUTO_INDEX 0x00004000 /* Uses an ephemeral index */
|
||||
#define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */
|
||||
#define WHERE_UNQ_WANTED 0x00010000 /* WHERE_ONEROW would have been helpful*/
|
||||
|
||||
/************** End of whereInt.h ********************************************/
|
||||
/************** Continuing where we left off in where.c **********************/
|
||||
@ -112047,8 +112011,6 @@ static Bitmask codeOneLoopStart(
|
||||
pLevel->op = OP_Next;
|
||||
}
|
||||
pLevel->p1 = iIdxCur;
|
||||
assert( (WHERE_UNQ_WANTED>>16)==1 );
|
||||
pLevel->p3 = (pLoop->wsFlags>>16)&1;
|
||||
if( (pLoop->wsFlags & WHERE_CONSTRAINT)==0 ){
|
||||
pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
|
||||
}else{
|
||||
@ -112179,7 +112141,9 @@ static Bitmask codeOneLoopStart(
|
||||
Expr *pExpr = pWC->a[iTerm].pExpr;
|
||||
if( &pWC->a[iTerm] == pTerm ) continue;
|
||||
if( ExprHasProperty(pExpr, EP_FromJoin) ) continue;
|
||||
if( pWC->a[iTerm].wtFlags & (TERM_ORINFO) ) continue;
|
||||
testcase( pWC->a[iTerm].wtFlags & TERM_ORINFO );
|
||||
testcase( pWC->a[iTerm].wtFlags & TERM_VIRTUAL );
|
||||
if( pWC->a[iTerm].wtFlags & (TERM_ORINFO|TERM_VIRTUAL) ) continue;
|
||||
if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue;
|
||||
pExpr = sqlite3ExprDup(db, pExpr, 0);
|
||||
pAndExpr = sqlite3ExprAnd(db, pAndExpr, pExpr);
|
||||
@ -112851,13 +112815,12 @@ static int whereLoopAddBtreeIndex(
|
||||
|| nInMul==0
|
||||
);
|
||||
pNew->wsFlags |= WHERE_COLUMN_EQ;
|
||||
if( iCol<0 || (nInMul==0 && pNew->u.btree.nEq==pProbe->nKeyCol-1)){
|
||||
if( iCol<0
|
||||
|| (pProbe->onError!=OE_None && nInMul==0
|
||||
&& pNew->u.btree.nEq==pProbe->nKeyCol-1)
|
||||
){
|
||||
assert( (pNew->wsFlags & WHERE_COLUMN_IN)==0 || iCol<0 );
|
||||
if( iCol>=0 && pProbe->onError==OE_None ){
|
||||
pNew->wsFlags |= WHERE_UNQ_WANTED;
|
||||
}else{
|
||||
pNew->wsFlags |= WHERE_ONEROW;
|
||||
}
|
||||
pNew->wsFlags |= WHERE_ONEROW;
|
||||
}
|
||||
pNew->u.btree.nEq++;
|
||||
pNew->nOut = nRowEst + nInMul;
|
||||
@ -114651,7 +114614,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
|
||||
pLoop = pLevel->pWLoop;
|
||||
sqlite3VdbeResolveLabel(v, pLevel->addrCont);
|
||||
if( pLevel->op!=OP_Noop ){
|
||||
sqlite3VdbeAddOp3(v, pLevel->op, pLevel->p1, pLevel->p2, pLevel->p3);
|
||||
sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2);
|
||||
sqlite3VdbeChangeP5(v, pLevel->p5);
|
||||
}
|
||||
if( pLoop->wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){
|
||||
|
@ -107,9 +107,9 @@ extern "C" {
|
||||
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
||||
** [sqlite_version()] and [sqlite_source_id()].
|
||||
*/
|
||||
#define SQLITE_VERSION "3.8.3"
|
||||
#define SQLITE_VERSION "3.8.3.1"
|
||||
#define SQLITE_VERSION_NUMBER 3008003
|
||||
#define SQLITE_SOURCE_ID "2014-02-03 14:04:11 6c643e45c274e755dc5a1a65673df79261c774be"
|
||||
#define SQLITE_SOURCE_ID "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
|
||||
|
||||
/*
|
||||
** CAPI3REF: Run-Time Library Version Numbers
|
||||
|
@ -1,29 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_FILES = \
|
||||
bug89419.sjs \
|
||||
blue.png \
|
||||
red.png \
|
||||
92598_nostore.html \
|
||||
92598_nostore.html^headers^ \
|
||||
112564_nocache.html \
|
||||
112564_nocache.html^headers^ \
|
||||
215405_nostore.html \
|
||||
215405_nostore.html^headers^ \
|
||||
215405_nocache.html \
|
||||
215405_nocache.html^headers^ \
|
||||
582176_dummy.html \
|
||||
582176_xml.xml \
|
||||
582176_xslt.xsl \
|
||||
allowContentRetargeting.sjs \
|
||||
$(NULL)
|
||||
|
||||
ifneq ($(MOZ_WIDGET_TOOLKIT),gtk2)
|
||||
MOCHITEST_CHROME_FILES += \
|
||||
test_bug454235.xul \
|
||||
$(NULL)
|
||||
else
|
||||
$(filter disabled-temporarily--bug-684176, test_bug454235.xul)
|
||||
endif
|
@ -65,6 +65,9 @@ support-files =
|
||||
[test_bug449778.xul]
|
||||
[test_bug449780.xul]
|
||||
[test_bug453650.xul]
|
||||
[test_bug454235.xul]
|
||||
# bug 684176
|
||||
skip-if = toolkit == "gtk2"
|
||||
[test_bug456980.xul]
|
||||
[test_bug565388.xul]
|
||||
[test_bug582176.xul]
|
||||
|
17
docshell/test/chrome/mochitest.ini
Normal file
17
docshell/test/chrome/mochitest.ini
Normal file
@ -0,0 +1,17 @@
|
||||
[DEFAULT]
|
||||
support-files =
|
||||
bug89419.sjs
|
||||
blue.png
|
||||
red.png
|
||||
92598_nostore.html
|
||||
92598_nostore.html^headers^
|
||||
112564_nocache.html
|
||||
112564_nocache.html^headers^
|
||||
215405_nostore.html
|
||||
215405_nostore.html^headers^
|
||||
215405_nocache.html
|
||||
215405_nocache.html^headers^
|
||||
582176_dummy.html
|
||||
582176_xml.xml
|
||||
582176_xslt.xsl
|
||||
allowContentRetargeting.sjs
|
@ -1,8 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
|
||||
|
@ -4,8 +4,6 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DIRS += ['chrome', 'navigation']
|
||||
|
||||
XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini']
|
||||
|
||||
# FIXME/bug 575918: out-of-process xpcshell is broken on OS X
|
||||
@ -13,8 +11,14 @@ if CONFIG['OS_ARCH'] != 'Darwin':
|
||||
XPCSHELL_TESTS_MANIFESTS += ['unit_ipc/xpcshell.ini']
|
||||
|
||||
MOCHITEST_MANIFESTS += [
|
||||
'chrome/mochitest.ini',
|
||||
'iframesandbox/mochitest.ini',
|
||||
'mochitest.ini'
|
||||
'mochitest.ini',
|
||||
'navigation/mochitest.ini',
|
||||
]
|
||||
BROWSER_CHROME_MANIFESTS += [
|
||||
'browser/browser.ini',
|
||||
'navigation/browser.ini',
|
||||
]
|
||||
BROWSER_CHROME_MANIFESTS += ['browser/browser.ini']
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['chrome/chrome.ini']
|
||||
|
@ -1,10 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifneq (mobile/android,$(MOZ_BUILD_APP))
|
||||
MOCHITEST_FILES += \
|
||||
test_bug270414.html \
|
||||
$(NULL)
|
||||
endif
|
||||
|
@ -20,6 +20,8 @@ support-files =
|
||||
parent.html
|
||||
|
||||
[test_bug13871.html]
|
||||
[test_bug270414.html]
|
||||
skip-if = toolkit == "android"
|
||||
[test_bug278916.html]
|
||||
[test_bug279495.html]
|
||||
[test_bug344861.html]
|
||||
|
@ -1,10 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_MANIFESTS += ['mochitest.ini']
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += ['browser.ini']
|
||||
|
@ -2060,7 +2060,7 @@ BaseStubConstructor(nsIWeakReference* aWeakOwner,
|
||||
}
|
||||
|
||||
JS::Rooted<JS::Value> frval(cx);
|
||||
bool ret = JS_CallFunctionValue(cx, thisObject, funval, argv, frval.address());
|
||||
bool ret = JS_CallFunctionValue(cx, thisObject, funval, argv, &frval);
|
||||
|
||||
if (!ret) {
|
||||
return NS_ERROR_FAILURE;
|
||||
|
@ -1177,10 +1177,10 @@ nsGlobalWindow::nsGlobalWindow(nsGlobalWindow *aOuterWindow)
|
||||
if (!PR_GetEnv("MOZ_QUIET")) {
|
||||
printf_stderr("++DOMWINDOW == %d (%p) [pid = %d] [serial = %d] [outer = %p]\n",
|
||||
gRefCnt,
|
||||
static_cast<void*>(static_cast<nsIScriptGlobalObject*>(this)),
|
||||
static_cast<void*>(ToCanonicalSupports(this)),
|
||||
getpid(),
|
||||
gSerialCounter,
|
||||
static_cast<void*>(static_cast<nsIScriptGlobalObject*>(aOuterWindow)));
|
||||
static_cast<void*>(ToCanonicalSupports(aOuterWindow)));
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1255,10 +1255,10 @@ nsGlobalWindow::~nsGlobalWindow()
|
||||
nsGlobalWindow* outer = static_cast<nsGlobalWindow*>(mOuterWindow.get());
|
||||
printf_stderr("--DOMWINDOW == %d (%p) [pid = %d] [serial = %d] [outer = %p] [url = %s]\n",
|
||||
gRefCnt,
|
||||
static_cast<void*>(static_cast<nsIScriptGlobalObject*>(this)),
|
||||
static_cast<void*>(ToCanonicalSupports(this)),
|
||||
getpid(),
|
||||
mSerial,
|
||||
static_cast<void*>(static_cast<nsIScriptGlobalObject*>(outer)),
|
||||
static_cast<void*>(ToCanonicalSupports(outer)),
|
||||
url.get());
|
||||
}
|
||||
#endif
|
||||
|
@ -1608,8 +1608,7 @@ NativeToString(JSContext* cx, JS::Handle<JSObject*> wrapper,
|
||||
}
|
||||
MOZ_ASSERT(JS_ObjectIsCallable(cx, &toString.toObject()));
|
||||
JS::Rooted<JS::Value> toStringResult(cx);
|
||||
if (JS_CallFunctionValue(cx, obj, toString, JS::EmptyValueArray,
|
||||
toStringResult.address())) {
|
||||
if (JS_CallFunctionValue(cx, obj, toString, JS::EmptyValueArray, &toStringResult)) {
|
||||
str = toStringResult.toString();
|
||||
} else {
|
||||
str = nullptr;
|
||||
|
@ -1415,6 +1415,11 @@ DOMInterfaces = {
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionTextureHalfFloatLinear': {
|
||||
'nativeType': 'mozilla::WebGLExtensionTextureHalfFloatLinear',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
},
|
||||
|
||||
'WebGLExtensionDrawBuffers': {
|
||||
'nativeType': 'mozilla::WebGLExtensionDrawBuffers',
|
||||
'headerFile': 'WebGLExtensions.h'
|
||||
|
@ -11332,15 +11332,16 @@ class CallbackMethod(CallbackMember):
|
||||
def getCall(self):
|
||||
replacements = {
|
||||
"errorReturn" : self.getDefaultRetval(),
|
||||
"declThis": self.getThisDecl(),
|
||||
"thisVal": self.getThisVal(),
|
||||
"getCallable": self.getCallableDecl(),
|
||||
"declCallable": self.getCallableDecl(),
|
||||
"callGuard": self.getCallGuard()
|
||||
}
|
||||
if self.argCount > 0:
|
||||
replacements["args"] = "JS::HandleValueArray::subarray(argv, 0, argc)"
|
||||
else:
|
||||
replacements["args"] = "JS::EmptyValueArray"
|
||||
return string.Template("${getCallable}"
|
||||
return string.Template("${declCallable}${declThis}"
|
||||
"if (${callGuard}!JS::Call(cx, ${thisVal}, callable,\n"
|
||||
" ${args}, &rval)) {\n"
|
||||
" aRv.Throw(NS_ERROR_UNEXPECTED);\n"
|
||||
@ -11353,6 +11354,9 @@ class CallCallback(CallbackMethod):
|
||||
CallbackMethod.__init__(self, callback.signatures()[0], "Call",
|
||||
descriptorProvider, needThisHandling=True)
|
||||
|
||||
def getThisDecl(self):
|
||||
return ""
|
||||
|
||||
def getThisVal(self):
|
||||
return "aThisVal"
|
||||
|
||||
@ -11376,13 +11380,18 @@ class CallbackOperationBase(CallbackMethod):
|
||||
self.methodName = descriptor.binaryNames.get(jsName, jsName)
|
||||
CallbackMethod.__init__(self, signature, nativeName, descriptor, singleOperation, rethrowContentException)
|
||||
|
||||
def getThisVal(self):
|
||||
def getThisDecl(self):
|
||||
if not self.singleOperation:
|
||||
return "JS::ObjectValue(*mCallback)"
|
||||
return "JS::Rooted<JS::Value> thisValue(cx, JS::ObjectValue(*mCallback));\n"
|
||||
# This relies on getCallableDecl declaring a boolean
|
||||
# isCallable in the case when we're a single-operation
|
||||
# interface.
|
||||
return "isCallable ? aThisVal.get() : JS::ObjectValue(*mCallback)"
|
||||
return (
|
||||
'JS::Rooted<JS::Value> thisValue(cx, isCallable ? aThisVal.get()\n'
|
||||
' : JS::ObjectValue(*mCallback));\n')
|
||||
|
||||
def getThisVal(self):
|
||||
return "thisValue"
|
||||
|
||||
def getCallableDecl(self):
|
||||
replacements = {
|
||||
|
@ -28,6 +28,9 @@ ignoringUnknownOption = Ignoring unknown option %1$S
|
||||
# LOCALIZATION NOTE (reportURInotHttpsOrHttp2):
|
||||
# %1$S is the ETLD of the report URI that is not HTTP or HTTPS
|
||||
reportURInotHttpsOrHttp2 = The report URI (%1$S) should be an HTTP or HTTPS URI.
|
||||
# LOCALIZATION NOTE (reportURInotInReportOnlyHeader):
|
||||
# %1$S is the ETLD of the page with the policy
|
||||
reportURInotInReportOnlyHeader = This site (%1$S) has a Report-Only policy without a report URI. CSP will not block and cannot report violations of this policy.
|
||||
# LOCALIZATION NOTE (pageCannotSendReportsTo):
|
||||
# %1$S is the URI of the page with the policy
|
||||
# %2$S is the report URI that could not be used
|
||||
|
@ -623,18 +623,19 @@ doInvoke(NPObject *npobj, NPIdentifier method, const NPVariant *args,
|
||||
|
||||
nsCxPusher pusher;
|
||||
pusher.Push(cx);
|
||||
JSAutoCompartment ac(cx, npjsobj->mJSObj);
|
||||
JS::Rooted<JSObject*> jsobj(cx, npjsobj->mJSObj);
|
||||
JSAutoCompartment ac(cx, jsobj);
|
||||
JS::Rooted<JS::Value> fv(cx);
|
||||
|
||||
AutoJSExceptionReporter reporter(cx);
|
||||
|
||||
if (method != NPIdentifier_VOID) {
|
||||
if (!GetProperty(cx, npjsobj->mJSObj, method, &fv) ||
|
||||
if (!GetProperty(cx, jsobj, method, &fv) ||
|
||||
::JS_TypeOfValue(cx, fv) != JSTYPE_FUNCTION) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
fv = OBJECT_TO_JSVAL(npjsobj->mJSObj);
|
||||
fv.setObject(*jsobj);
|
||||
}
|
||||
|
||||
// Convert args
|
||||
@ -652,14 +653,14 @@ doInvoke(NPObject *npobj, NPIdentifier method, const NPVariant *args,
|
||||
|
||||
if (ctorCall) {
|
||||
JSObject *newObj =
|
||||
::JS_New(cx, npjsobj->mJSObj, jsargs.length(), jsargs.begin());
|
||||
::JS_New(cx, jsobj, jsargs.length(), jsargs.begin());
|
||||
|
||||
if (newObj) {
|
||||
v.setObject(*newObj);
|
||||
ok = true;
|
||||
}
|
||||
} else {
|
||||
ok = ::JS_CallFunctionValue(cx, npjsobj->mJSObj, fv, jsargs, v.address());
|
||||
ok = ::JS_CallFunctionValue(cx, jsobj, fv, jsargs, &v);
|
||||
}
|
||||
|
||||
if (ok)
|
||||
@ -1605,7 +1606,7 @@ NPObjWrapper_Convert(JSContext *cx, JS::Handle<JSObject*> obj, JSType hint, JS::
|
||||
if (!JS_GetProperty(cx, obj, "toString", &v))
|
||||
return false;
|
||||
if (!JSVAL_IS_PRIMITIVE(v) && JS_ObjectIsCallable(cx, JSVAL_TO_OBJECT(v))) {
|
||||
if (!JS_CallFunctionValue(cx, obj, v, JS::EmptyValueArray, vp.address()))
|
||||
if (!JS_CallFunctionValue(cx, obj, v, JS::EmptyValueArray, vp))
|
||||
return false;
|
||||
if (JSVAL_IS_PRIMITIVE(vp))
|
||||
return true;
|
||||
|
@ -220,7 +220,7 @@ nsJSON::EncodeInternal(JSContext* cx, const JS::Value& aValue,
|
||||
toJSON.isObject() &&
|
||||
JS_ObjectIsCallable(cx, &toJSON.toObject())) {
|
||||
// If toJSON is implemented, it must not throw
|
||||
if (!JS_CallFunctionValue(cx, obj, toJSON, JS::EmptyValueArray, val.address())) {
|
||||
if (!JS_CallFunctionValue(cx, obj, toJSON, JS::EmptyValueArray, &val)) {
|
||||
if (JS_IsExceptionPending(cx))
|
||||
// passing NS_OK will throw the pending exception
|
||||
return NS_OK;
|
||||
|
@ -1,17 +0,0 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifdef MOZ_B2G
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_webapps_permissions.js \
|
||||
test-webapp.webapp \
|
||||
test-webapp-reinstall.webapp \
|
||||
test-webapp-original.webapp \
|
||||
test-webapps-permissions.html \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
|
||||
# TODO: Re-enable permissions tests on Mac, bug 795334
|
||||
# TODO: disabled test browser_webapps_perms_reinstall.js, re-enable when bug 794920 is fixed
|
@ -18,4 +18,14 @@ support-files =
|
||||
[browser_frame_elements.js]
|
||||
[browser_geolocation_privatebrowsing_perwindowpb.js]
|
||||
[browser_localStorage_privatestorageevent.js]
|
||||
[browser_webapps_permissions.js]
|
||||
# TODO: Re-enable permissions tests on Mac, bug 795334
|
||||
skip-if = buildapp != "b2g"
|
||||
support-files =
|
||||
test-webapp.webapp
|
||||
test-webapp-reinstall.webapp
|
||||
test-webapp-original.webapp
|
||||
test-webapps-permissions.html
|
||||
[browser_webapps_perms_reinstall.js]
|
||||
disabled = re-enable when bug 794920 is fixed
|
||||
[browser_xhr_sandbox.js]
|
||||
|
@ -1,8 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += ['browser.ini']
|
||||
|
@ -1,9 +0,0 @@
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_FILES = \
|
||||
AJAX_setup.js \
|
||||
test.css \
|
||||
$(NULL)
|
4
dom/tests/mochitest/ajax/lib/mochitest.ini
Normal file
4
dom/tests/mochitest/ajax/lib/mochitest.ini
Normal file
@ -0,0 +1,4 @@
|
||||
[DEFAULT]
|
||||
support-files =
|
||||
AJAX_setup.js
|
||||
test.css
|
@ -1,6 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
@ -4,12 +4,9 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DIRS += [
|
||||
'lib',
|
||||
]
|
||||
|
||||
MOCHITEST_MANIFESTS += [
|
||||
'jquery/mochitest.ini',
|
||||
'lib/mochitest.ini',
|
||||
'mochikit/mochitest.ini',
|
||||
'mochikit/tests/mochitest.ini',
|
||||
'offline/mochitest.ini',
|
||||
|
@ -1,29 +0,0 @@
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
ifeq (WINNT,$(OS_ARCH))
|
||||
MOCHITEST_CHROME_FILES += \
|
||||
test_sizemode_attribute.xul \
|
||||
sizemode_attribute.xul \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
ifneq (Linux,$(OS_ARCH))
|
||||
MOCHITEST_CHROME_FILES += \
|
||||
test_resize_move_windows.xul \
|
||||
test_fullscreen.xul \
|
||||
$(NULL)
|
||||
else
|
||||
$(filter disabled-on-linux-for-timeouts--bug-834716, test_resize_move_windows.xul)
|
||||
$(filter disabled-on-linux-for-timeouts--bug-867745, test_fullscreen.xul)
|
||||
endif
|
||||
|
||||
ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
|
||||
MOCHITEST_CHROME_FILES += \
|
||||
test_MozEnteredDomFullscreen_event.xul \
|
||||
$(NULL)
|
||||
else
|
||||
$(filter disabled-on-os-x-for-intermittent-failures--bug-798848, test_MozEnteredDomFullscreen_event.xul)
|
||||
endif
|
@ -17,6 +17,7 @@ support-files =
|
||||
queryCaretRectUnix.html
|
||||
queryCaretRectWin.html
|
||||
selectAtPoint.html
|
||||
sizemode_attribute.xul
|
||||
window_activation.xul
|
||||
window_callback_wrapping.xul
|
||||
window_docshell_swap.xul
|
||||
@ -38,19 +39,30 @@ support-files =
|
||||
[test_focus_docnav.xul]
|
||||
[test_focus_switchbinding.xul]
|
||||
[test_focused_link_scroll.xul]
|
||||
[test_fullscreen.xul]
|
||||
# disabled on linux for timeouts--bug-867745
|
||||
skip-if = os == 'linux'
|
||||
[test_fullscreen_preventdefault.xul]
|
||||
[test_geolocation.xul]
|
||||
[test_indexedSetter.html]
|
||||
[test_moving_nodeList.xul]
|
||||
[test_moving_xhr.xul]
|
||||
[test_MozEnteredDomFullscreen_event.xul]
|
||||
# disabled on OS X for intermittent failures--bug-798848
|
||||
skip-if = toolkit == 'cocoa'
|
||||
[test_nodesFromRect.html]
|
||||
[test_popup_blocker_chrome.xul]
|
||||
[test_queryCaretRect.html]
|
||||
[test_resize_move_windows.xul]
|
||||
# disabled on linux for timeouts--bug-834716
|
||||
skip-if = os == 'linux'
|
||||
[test_sandbox_bindings.xul]
|
||||
[test_sandbox_eventhandler.xul]
|
||||
[test_sandbox_image.xul]
|
||||
[test_sandbox_postMessage.html]
|
||||
[test_selectAtPoint.html]
|
||||
[test_sizemode_attribute.xul]
|
||||
skip-if = os != 'win'
|
||||
[test_subscript_bindings.xul]
|
||||
[test_xray_event_constructor.xul]
|
||||
[test_clipboard_events_chrome.html]
|
||||
|
@ -1,8 +0,0 @@
|
||||
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
|
||||
|
@ -8,7 +8,6 @@ DIRS += [
|
||||
'dom-level0',
|
||||
'ajax',
|
||||
'bugs',
|
||||
'chrome',
|
||||
'crypto',
|
||||
'general',
|
||||
'geolocation',
|
||||
@ -32,6 +31,7 @@ MOCHITEST_MANIFESTS += [
|
||||
]
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += [
|
||||
'chrome/chrome.ini',
|
||||
'webapps/chrome.ini',
|
||||
'whatwg/chrome.ini',
|
||||
]
|
||||
|
@ -4,6 +4,7 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
DIRS += ['mochitest', 'browser']
|
||||
DIRS += ['mochitest']
|
||||
|
||||
XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini']
|
||||
BROWSER_CHROME_MANIFESTS += ['browser/browser.ini']
|
||||
|
@ -907,6 +907,11 @@ interface WebGLExtensionTextureHalfFloat
|
||||
const GLenum HALF_FLOAT_OES = 0x8D61;
|
||||
};
|
||||
|
||||
[NoInterfaceObject]
|
||||
interface WebGLExtensionTextureHalfFloatLinear
|
||||
{
|
||||
};
|
||||
|
||||
[NoInterfaceObject]
|
||||
interface WebGLExtensionVertexArray {
|
||||
const GLenum VERTEX_ARRAY_BINDING_OES = 0x85B5;
|
||||
|
@ -327,7 +327,7 @@ private:
|
||||
args[2].set(stackValue);
|
||||
|
||||
JS::Rooted<JS::Value> ret(cx);
|
||||
JS_CallFunctionName(cx, consoleObj, "queueCall", args, ret.address());
|
||||
JS_CallFunctionName(cx, consoleObj, "queueCall", args, &ret);
|
||||
}
|
||||
|
||||
WorkerConsole* mConsole;
|
||||
|
@ -5395,14 +5395,11 @@ WorkerPrivate::RunExpiredTimeouts(JSContext* aCx)
|
||||
|
||||
if (!info->mTimeoutCallable.isUndefined()) {
|
||||
JS::Rooted<JS::Value> rval(aCx);
|
||||
/*
|
||||
* unsafeGet() is needed below because the argument is a not a const
|
||||
* pointer, even though values are not modified.
|
||||
*/
|
||||
JS::HandleValueArray args =
|
||||
JS::HandleValueArray::fromMarkedLocation(info->mExtraArgVals.Length(),
|
||||
info->mExtraArgVals.Elements()->unsafeGet());
|
||||
if (!JS_CallFunctionValue(aCx, global, info->mTimeoutCallable, args, rval.address()) &&
|
||||
info->mExtraArgVals.Elements()->address());
|
||||
JS::Rooted<JS::Value> callable(aCx, info->mTimeoutCallable);
|
||||
if (!JS_CallFunctionValue(aCx, global, callable, args, &rval) &&
|
||||
!JS_ReportPendingException(aCx)) {
|
||||
retval = false;
|
||||
break;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user