Merge m-c to b2g-inbound

This commit is contained in:
Wes Kocher 2014-02-13 18:12:02 -08:00
commit 455454b827
298 changed files with 4196 additions and 2244 deletions

View File

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

View File

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

View File

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

View File

@ -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',
]

View File

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

View File

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

View File

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

View File

@ -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',
]

View File

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

View File

@ -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");
}
}
},

View File

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

View File

@ -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");

View File

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

View File

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

View File

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

View File

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

View File

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

View 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();
});
}

View File

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

View File

@ -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(() => {

View 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();
});
}

View File

@ -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);
});
});

View File

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

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

View File

@ -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.
});

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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();

View File

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

View File

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

View File

@ -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");

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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);
}

View File

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

View File

@ -0,0 +1,6 @@
[DEFAULT]
support-files =
bug421622-referer.sjs
nochrome_bug765993.html
nochrome_bug765993.js
nochrome_bug765993.js^headers^

View File

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

View File

@ -0,0 +1 @@
Content-Security-Policy-Report-Only: default-src 'self';

View File

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

View File

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

View File

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

View File

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

View File

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

View 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)

View File

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

View File

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

View File

@ -60,6 +60,7 @@ if CONFIG['MOZ_WEBGL']:
'WebGLExtensionTextureFloat.cpp',
'WebGLExtensionTextureFloatLinear.cpp',
'WebGLExtensionTextureHalfFloat.cpp',
'WebGLExtensionTextureHalfFloatLinear.cpp',
'WebGLExtensionVertexArray.cpp',
'WebGLFramebuffer.cpp',
'WebGLObjectModel.cpp',

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
[DEFAULT]
support-files =
audio-testing.js
convolution-testing.js
panner-model-testing.js

View File

@ -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',
]

View File

@ -1,4 +1,4 @@
This is sqlite 3.8.3
This is sqlite 3.8.3.1
-- Ryan VanderMeulen <ryanvm@gmail.com>, 2/2014

View File

@ -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, &notUsed);
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 ){

View File

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

View File

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

View File

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

View 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1415,6 +1415,11 @@ DOMInterfaces = {
'headerFile': 'WebGLExtensions.h'
},
'WebGLExtensionTextureHalfFloatLinear': {
'nativeType': 'mozilla::WebGLExtensionTextureHalfFloatLinear',
'headerFile': 'WebGLExtensions.h'
},
'WebGLExtensionDrawBuffers': {
'nativeType': 'mozilla::WebGLExtensionDrawBuffers',
'headerFile': 'WebGLExtensions.h'

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,4 @@
[DEFAULT]
support-files =
AJAX_setup.js
test.css

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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',
]

View File

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

View File

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

View File

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

View File

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