diff --git a/browser/devtools/netmonitor/netmonitor-controller.js b/browser/devtools/netmonitor/netmonitor-controller.js index e9ab5b82727b..48c0e6dc604b 100644 --- a/browser/devtools/netmonitor/netmonitor-controller.js +++ b/browser/devtools/netmonitor/netmonitor-controller.js @@ -140,9 +140,6 @@ Object.defineProperty(this, "NetworkHelper", { XPCOMUtils.defineLazyServiceGetter(this, "clipboardHelper", "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper"); -XPCOMUtils.defineLazyModuleGetter(this, "Curl", - "resource:///modules/devtools/Curl.jsm"); - /** * Object defining the network monitor controller components. */ diff --git a/browser/devtools/netmonitor/netmonitor-view.js b/browser/devtools/netmonitor/netmonitor-view.js index 769e8f2ec602..261312c1ee18 100644 --- a/browser/devtools/netmonitor/netmonitor-view.js +++ b/browser/devtools/netmonitor/netmonitor-view.js @@ -523,37 +523,6 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, { clipboardHelper.copyString(selected.url, document); }, - /** - * Copy a cURL command from the currently selected item. - */ - copyAsCurl: function() { - let selected = this.selectedItem.attachment; - Task.spawn(function*() { - // Create a sanitized object for the Curl command generator. - let data = { - url: selected.url, - method: selected.method, - headers: [], - httpVersion: selected.httpVersion, - postDataText: null - }; - - // Fetch header values. - for (let { name, value } of selected.requestHeaders.headers) { - let text = yield gNetwork.getString(value); - data.headers.push({ name: name, value: text }); - } - - // Fetch the request payload. - if (selected.requestPostData) { - let postData = selected.requestPostData.postData.text; - data.postDataText = yield gNetwork.getString(postData); - } - - clipboardHelper.copyString(Curl.generateCommand(data), document); - }); - }, - /** * Copy image as data uri. */ @@ -1591,9 +1560,6 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, { let copyUrlElement = $("#request-menu-context-copy-url"); copyUrlElement.hidden = !selectedItem; - let copyAsCurlElement = $("#request-menu-context-copy-as-curl"); - copyAsCurlElement.hidden = !selectedItem || !selectedItem.attachment.responseContent; - let copyImageAsDataUriElement = $("#request-menu-context-copy-image-as-data-uri"); copyImageAsDataUriElement.hidden = !selectedItem || !selectedItem.attachment.responseContent || diff --git a/browser/devtools/netmonitor/netmonitor.xul b/browser/devtools/netmonitor/netmonitor.xul index d91c9f22f709..484088ad4ea8 100644 --- a/browser/devtools/netmonitor/netmonitor.xul +++ b/browser/devtools/netmonitor/netmonitor.xul @@ -29,9 +29,6 @@ - diff --git a/browser/devtools/netmonitor/test/browser.ini b/browser/devtools/netmonitor/test/browser.ini index acc0a5714b54..7ba4ba489783 100644 --- a/browser/devtools/netmonitor/test/browser.ini +++ b/browser/devtools/netmonitor/test/browser.ini @@ -21,8 +21,6 @@ support-files = html_sorting-test-page.html html_statistics-test-page.html html_status-codes-test-page.html - html_copy-as-curl.html - html_curl-utils.html sjs_content-type-test-server.sjs sjs_simple-test-server.sjs sjs_sorting-test-server.sjs @@ -41,10 +39,8 @@ support-files = [browser_net_clear.js] [browser_net_complex-params.js] [browser_net_content-type.js] -[browser_net_curl-utils.js] [browser_net_copy_image_as_data_uri.js] [browser_net_copy_url.js] -[browser_net_copy_as_curl.js] [browser_net_cyrillic-01.js] [browser_net_cyrillic-02.js] [browser_net_filter-01.js] diff --git a/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js b/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js deleted file mode 100644 index 102e37a33b87..000000000000 --- a/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js +++ /dev/null @@ -1,72 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Tests if Copy as cURL works. - */ - -function test() { - initNetMonitor(CURL_URL).then(([aTab, aDebuggee, aMonitor]) => { - info("Starting test... "); - - const EXPECTED_POSIX_RESULT = [ - "curl", - "'" + SIMPLE_SJS + "'", - "-H 'Host: example.com'", - "-H 'User-Agent: " + aDebuggee.navigator.userAgent + "'", - "-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'", - "-H 'Accept-Language: " + aDebuggee.navigator.language + "'", - "-H 'Accept-Encoding: gzip, deflate'", - "-H 'X-Custom-Header-1: Custom value'", - "-H 'X-Custom-Header-2: 8.8.8.8'", - "-H 'X-Custom-Header-3: Mon, 3 Mar 2014 11:11:11 GMT'", - "-H 'Referer: " + CURL_URL + "'", - "-H 'Connection: keep-alive'" - ].join(" "); - - const EXPECTED_WIN_RESULT = [ - 'curl', - '"' + SIMPLE_SJS + '"', - '-H "Host: example.com"', - '-H "User-Agent: ' + aDebuggee.navigator.userAgent + '"', - '-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"', - '-H "Accept-Language: ' + aDebuggee.navigator.language + '"', - '-H "Accept-Encoding: gzip, deflate"', - '-H "X-Custom-Header-1: Custom value"', - '-H "X-Custom-Header-2: 8.8.8.8"', - '-H "X-Custom-Header-3: Mon, 3 Mar 2014 11:11:11 GMT"', - '-H "Referer: ' + CURL_URL + '"', - '-H "Connection: keep-alive"' - ].join(" "); - - const EXPECTED_RESULT = Services.appinfo.OS == "WINNT" ? - EXPECTED_WIN_RESULT : EXPECTED_POSIX_RESULT; - - let { NetMonitorView } = aMonitor.panelWin; - let { RequestsMenu } = NetMonitorView; - - RequestsMenu.lazyUpdate = false; - - waitForNetworkEvents(aMonitor, 1).then(() => { - let requestItem = RequestsMenu.getItemAtIndex(0); - RequestsMenu.selectedItem = requestItem; - - waitForClipboard(EXPECTED_RESULT, function setup() { - RequestsMenu.copyAsCurl(); - }, function onSuccess() { - ok(true, "Clipboard contains a cURL command for the currently selected item's url."); - cleanUp(); - }, function onFailure() { - ok(false, "Creating a cURL command for the currently selected item was unsuccessful."); - cleanUp(); - }); - - }); - - aDebuggee.performRequest(SIMPLE_SJS); - - function cleanUp(){ - teardown(aMonitor).then(finish); - } - }); -} diff --git a/browser/devtools/netmonitor/test/browser_net_curl-utils.js b/browser/devtools/netmonitor/test/browser_net_curl-utils.js deleted file mode 100644 index cbb4389124b7..000000000000 --- a/browser/devtools/netmonitor/test/browser_net_curl-utils.js +++ /dev/null @@ -1,232 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Tests Curl Utils functionality. - */ - -function test() { - initNetMonitor(CURL_UTILS_URL).then(([aTab, aDebuggee, aMonitor]) => { - info("Starting test... "); - - let { NetMonitorView, gNetwork } = aMonitor.panelWin; - let { RequestsMenu } = NetMonitorView; - - RequestsMenu.lazyUpdate = false; - - waitForNetworkEvents(aMonitor, 1, 3).then(() => { - let requests = { - get: RequestsMenu.getItemAtIndex(0), - post: RequestsMenu.getItemAtIndex(1), - multipart: RequestsMenu.getItemAtIndex(2), - multipartForm: RequestsMenu.getItemAtIndex(3) - }; - - Task.spawn(function*() { - yield createCurlData(requests.get.attachment, gNetwork).then((aData) => { - test_findHeader(aData); - }); - - yield createCurlData(requests.post.attachment, gNetwork).then((aData) => { - test_isUrlEncodedRequest(aData); - test_writePostDataTextParams(aData); - }); - - yield createCurlData(requests.multipart.attachment, gNetwork).then((aData) => { - test_isMultipartRequest(aData); - test_getMultipartBoundary(aData); - test_removeBinaryDataFromMultipartText(aData); - }); - - yield createCurlData(requests.multipartForm.attachment, gNetwork).then((aData) => { - test_getHeadersFromMultipartText(aData); - }); - - if (Services.appinfo.OS != "WINNT") { - test_escapeStringPosix(); - } else { - test_escapeStringWin(); - } - - teardown(aMonitor).then(finish); - }); - }); - - aDebuggee.performRequests(SIMPLE_SJS); - }); -} - -function test_isUrlEncodedRequest(aData) { - let isUrlEncoded = CurlUtils.isUrlEncodedRequest(aData); - ok(isUrlEncoded, "Should return true for url encoded requests."); -} - -function test_isMultipartRequest(aData) { - let isMultipart = CurlUtils.isMultipartRequest(aData); - ok(isMultipart, "Should return true for multipart/form-data requests."); -} - -function test_findHeader(aData) { - let headers = aData.headers; - let hostName = CurlUtils.findHeader(headers, "Host"); - let requestedWithLowerCased = CurlUtils.findHeader(headers, "x-requested-with"); - let doesNotExist = CurlUtils.findHeader(headers, "X-Does-Not-Exist"); - - is(hostName, "example.com", - "Header with name 'Host' should be found in the request array."); - is(requestedWithLowerCased, "XMLHttpRequest", - "The search should be case insensitive."); - is(doesNotExist, null, - "Should return null when a header is not found."); -} - -function test_writePostDataTextParams(aData) { - let params = CurlUtils.writePostDataTextParams(aData.postDataText); - is(params, "param1=value1¶m2=value2¶m3=value3", - "Should return a serialized representation of the request parameters"); -} - -function test_getMultipartBoundary(aData) { - let boundary = CurlUtils.getMultipartBoundary(aData); - ok(/-{3,}\w+/.test(boundary), - "A boundary string should be found in a multipart request."); -} - -function test_removeBinaryDataFromMultipartText(aData) { - let generatedBoundary = CurlUtils.getMultipartBoundary(aData); - let text = aData.postDataText; - let binaryRemoved = - CurlUtils.removeBinaryDataFromMultipartText(text, generatedBoundary); - let boundary = "--" + generatedBoundary; - - const EXPECTED_POSIX_RESULT = [ - "$'", - boundary, - "\\r\\n\\r\\n", - "Content-Disposition: form-data; name=\"param1\"", - "\\r\\n\\r\\n", - "value1", - "\\r\\n", - boundary, - "\\r\\n\\r\\n", - "Content-Disposition: form-data; name=\"file\"; filename=\"filename.png\"", - "\\r\\n", - "Content-Type: image/png", - "\\r\\n\\r\\n", - generatedBoundary, - "--\\r\\n", - "'" - ].join(""); - - const EXPECTED_WIN_RESULT = [ - '"' + boundary + '"^', - '\u000d\u000A\u000d\u000A', - '"Content-Disposition: form-data; name=""param1"""^', - '\u000d\u000A\u000d\u000A', - '"value1"^', - '\u000d\u000A', - '"' + boundary + '"^', - '\u000d\u000A\u000d\u000A', - '"Content-Disposition: form-data; name=""file""; filename=""filename.png"""^', - '\u000d\u000A', - '"Content-Type: image/png"^', - '\u000d\u000A\u000d\u000A', - '"' + generatedBoundary + '--"^', - '\u000d\u000A', - '""' - ].join(""); - - if (Services.appinfo.OS != "WINNT") { - is(CurlUtils.escapeStringPosix(binaryRemoved), EXPECTED_POSIX_RESULT, - "The mulitpart request payload should not contain binary data."); - } else { - is(CurlUtils.escapeStringWin(binaryRemoved), EXPECTED_WIN_RESULT, - "WinNT: The mulitpart request payload should not contain binary data."); - } -} - -function test_getHeadersFromMultipartText(aData) { - let headers = CurlUtils.getHeadersFromMultipartText(aData.postDataText); - - ok(Array.isArray(headers), - "Should return an array."); - ok(headers.length > 0, - "There should exist at least one request header."); - is(headers[0].name, "Content-Type", - "The first header name should be 'Content-Type'."); -} - -function test_escapeStringPosix() { - let surroundedWithQuotes = "A simple string"; - is(CurlUtils.escapeStringPosix(surroundedWithQuotes), "'A simple string'", - "The string should be surrounded with single quotes."); - - let singleQuotes = "It's unusual to put crickets in your coffee."; - is(CurlUtils.escapeStringPosix(singleQuotes), - "$'It\\'s unusual to put crickets in your coffee.'", - "Single quotes should be escaped."); - - let newLines = "Line 1\r\nLine 2\u000d\u000ALine3"; - is(CurlUtils.escapeStringPosix(newLines), "$'Line 1\\r\\nLine 2\\r\\nLine3'", - "Newlines should be escaped."); - - let controlChars = "\u0007 \u0009 \u000C \u001B"; - is(CurlUtils.escapeStringPosix(controlChars), "$'\\x07 \\x09 \\x0c \\x1b'", - "Control characters should be escaped."); - - let extendedAsciiChars = "æ ø ü ß ö é"; - is(CurlUtils.escapeStringPosix(extendedAsciiChars), - "$'\\xc3\\xa6 \\xc3\\xb8 \\xc3\\xbc \\xc3\\x9f \\xc3\\xb6 \\xc3\\xa9'", - "Character codes outside of the decimal range 32 - 126 should be escaped."); -} - -function test_escapeStringWin() { - let surroundedWithDoubleQuotes = "A simple string"; - is(CurlUtils.escapeStringWin(surroundedWithDoubleQuotes), '"A simple string"', - "The string should be surrounded with double quotes."); - - let doubleQuotes = "Quote: \"Time is an illusion. Lunchtime doubly so.\""; - is(CurlUtils.escapeStringWin(doubleQuotes), - '"Quote: ""Time is an illusion. Lunchtime doubly so."""', - "Double quotes should be escaped."); - - let percentSigns = "%AppData%"; - is(CurlUtils.escapeStringWin(percentSigns), '""%"AppData"%""', - "Percent signs should be escaped."); - - let backslashes = "\\A simple string\\"; - is(CurlUtils.escapeStringWin(backslashes), '"\\\\A simple string\\\\"', - "Backslashes should be escaped."); - - let newLines = "line1\r\nline2\r\nline3"; - is(CurlUtils.escapeStringWin(newLines), - '"line1"^\u000d\u000A"line2"^\u000d\u000A"line3"', - "Newlines should be escaped."); -} - -function createCurlData(aSelected, aNetwork) { - return Task.spawn(function*() { - // Create a sanitized object for the Curl command generator. - let data = { - url: aSelected.url, - method: aSelected.method, - headers: [], - httpVersion: aSelected.httpVersion, - postDataText: null - }; - - // Fetch header values. - for (let { name, value } of aSelected.requestHeaders.headers) { - let text = yield aNetwork.getString(value); - data.headers.push({ name: name, value: text }); - } - - // Fetch the request payload. - if (aSelected.requestPostData) { - let postData = aSelected.requestPostData.postData.text; - data.postDataText = yield aNetwork.getString(postData); - } - - return data; - }); -} \ No newline at end of file diff --git a/browser/devtools/netmonitor/test/head.js b/browser/devtools/netmonitor/test/head.js index 17fb59ba19c0..496cd7051ebd 100644 --- a/browser/devtools/netmonitor/test/head.js +++ b/browser/devtools/netmonitor/test/head.js @@ -9,7 +9,6 @@ let { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {}); let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); -let { CurlUtils } = Cu.import("resource:///modules/devtools/Curl.jsm", {}); let TargetFactory = devtools.TargetFactory; let Toolbox = devtools.Toolbox; @@ -35,8 +34,6 @@ const FILTERING_URL = EXAMPLE_URL + "html_filter-test-page.html"; const INFINITE_GET_URL = EXAMPLE_URL + "html_infinite-get-page.html"; const CUSTOM_GET_URL = EXAMPLE_URL + "html_custom-get-page.html"; const STATISTICS_URL = EXAMPLE_URL + "html_statistics-test-page.html"; -const CURL_URL = EXAMPLE_URL + "html_copy-as-curl.html"; -const CURL_UTILS_URL = EXAMPLE_URL + "html_curl-utils.html"; const SIMPLE_SJS = EXAMPLE_URL + "sjs_simple-test-server.sjs"; const CONTENT_TYPE_SJS = EXAMPLE_URL + "sjs_content-type-test-server.sjs"; diff --git a/browser/devtools/netmonitor/test/html_copy-as-curl.html b/browser/devtools/netmonitor/test/html_copy-as-curl.html deleted file mode 100644 index 482d8cd630e3..000000000000 --- a/browser/devtools/netmonitor/test/html_copy-as-curl.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - Network Monitor test page - - - -

Performing a GET request

- - - - - diff --git a/browser/devtools/netmonitor/test/html_curl-utils.html b/browser/devtools/netmonitor/test/html_curl-utils.html deleted file mode 100644 index 466edcb9bb93..000000000000 --- a/browser/devtools/netmonitor/test/html_curl-utils.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - Network Monitor test page - - - -

Performing requests

- -

- -

- -
- -
- - - - -
- - - - - - diff --git a/browser/devtools/shared/Curl.jsm b/browser/devtools/shared/Curl.jsm deleted file mode 100644 index fc8bcbecaeaf..000000000000 --- a/browser/devtools/shared/Curl.jsm +++ /dev/null @@ -1,396 +0,0 @@ -/* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ -/* 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/. */ - -/* - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. - * Copyright (C) 2008, 2009 Anthony Ricaud - * Copyright (C) 2011 Google Inc. All rights reserved. - * Copyright (C) 2009 Mozilla Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -"use strict"; - -this.EXPORTED_SYMBOLS = ["Curl", "CurlUtils"]; - -Components.utils.import("resource://gre/modules/Services.jsm"); - -const DEFAULT_HTTP_VERSION = "HTTP/1.1"; - -this.Curl = { - /** - * Generates a cURL command string which can be used from the command line etc. - * - * @param object aData - * Datasource to create the command from. - * The object must contain the following properties: - * - url:string, the URL of the request. - * - method:string, the request method upper cased. HEAD / GET / POST etc. - * - headers:array, an array of request headers {name:x, value:x} tuples. - * - httpVersion:string, http protocol version rfc2616 formatted. Eg. "HTTP/1.1" - * - postDataText:string, optional - the request payload. - * - * @return string - * A cURL command. - */ - generateCommand: function(aData) { - let utils = CurlUtils; - - let command = ["curl"]; - let ignoredHeaders = new Set(); - - // The cURL command is expected to run on the same platform that Firefox runs - // (it may be different from the inspected page platform). - let escapeString = Services.appinfo.OS == "WINNT" ? - utils.escapeStringWin : utils.escapeStringPosix; - - // Add URL. - command.push(escapeString(aData.url)); - - let postDataText = null; - let multipartRequest = utils.isMultipartRequest(aData); - - // Create post data. - let data = []; - if (utils.isUrlEncodedRequest(aData) || aData.method == "PUT") { - postDataText = aData.postDataText; - data.push("--data"); - data.push(escapeString(utils.writePostDataTextParams(postDataText))); - ignoredHeaders.add("Content-Length"); - } else if (multipartRequest) { - postDataText = aData.postDataText; - data.push("--data-binary"); - let boundary = utils.getMultipartBoundary(aData); - let text = utils.removeBinaryDataFromMultipartText(postDataText, boundary); - data.push(escapeString(text)); - ignoredHeaders.add("Content-Length"); - } - - // Add method. - // For GET and POST requests this is not necessary as GET is the - // default. If --data or --binary is added POST is the default. - if (!(aData.method == "GET" || aData.method == "POST")) { - command.push("-X"); - command.push(aData.method); - } - - // Add -I (HEAD) - // For servers that supports HEAD. - // This will fetch the header of a document only. - if (aData.method == "HEAD") { - command.push("-I"); - } - - // Add http version. - if (aData.httpVersion && aData.httpVersion != DEFAULT_HTTP_VERSION) { - command.push("--" + aData.httpVersion.split("/")[1]); - } - - // Add request headers. - let headers = aData.headers; - if (multipartRequest) { - let multipartHeaders = utils.getHeadersFromMultipartText(postDataText); - headers = headers.concat(multipartHeaders); - } - for (let i = 0; i < headers.length; i++) { - let header = headers[i]; - if (ignoredHeaders.has(header.name)) { - continue; - } - command.push("-H"); - command.push(escapeString(header.name + ": " + header.value)); - } - - // Add post data. - command = command.concat(data); - - return command.join(" "); - } -}; - -/** - * Utility functions for the Curl command generator. - */ -this.CurlUtils = { - /** - * Check if the request is an URL encoded request. - * - * @param object aData - * The data source. See the description in the Curl object. - * @return boolean - * True if the request is URL encoded, false otherwise. - */ - isUrlEncodedRequest: function(aData) { - let postDataText = aData.postDataText; - if (!postDataText) { - return false; - } - - postDataText = postDataText.toLowerCase(); - if (postDataText.contains("content-type: application/x-www-form-urlencoded")) { - return true; - } - - let contentType = this.findHeader(aData.headers, "content-type"); - - return (contentType && - contentType.toLowerCase().contains("application/x-www-form-urlencoded")); - }, - - /** - * Check if the request is a multipart request. - * - * @param object aData - * The data source. - * @return boolean - * True if the request is multipart reqeust, false otherwise. - */ - isMultipartRequest: function(aData) { - let postDataText = aData.postDataText; - if (!postDataText) { - return false; - } - - postDataText = postDataText.toLowerCase(); - if (postDataText.contains("content-type: multipart/form-data")) { - return true; - } - - let contentType = this.findHeader(aData.headers, "content-type"); - - return (contentType && - contentType.toLowerCase().contains("multipart/form-data;")); - }, - - /** - * Write out paramters from post data text. - * - * @param object aPostDataText - * Post data text. - * @return string - * Post data parameters. - */ - writePostDataTextParams: function(aPostDataText) { - let lines = aPostDataText.split("\r\n"); - return lines[lines.length - 1]; - }, - - /** - * Finds the header with the given name in the headers array. - * - * @param array aHeaders - * Array of headers info {name:x, value:x}. - * @param string aName - * The header name to find. - * @return string - * The found header value or null if not found. - */ - findHeader: function(aHeaders, aName) { - if (!aHeaders) { - return null; - } - - let name = aName.toLowerCase(); - for (let header of aHeaders) { - if (name == header.name.toLowerCase()) { - return header.value; - } - } - - return null; - }, - - /** - * Returns the boundary string for a multipart request. - * - * @param string aData - * The data source. See the description in the Curl object. - * @return string - * The boundary string for the request. - */ - getMultipartBoundary: function(aData) { - let boundaryRe = /\bboundary=(-{3,}\w+)/i; - - // Get the boundary string from the Content-Type request header. - let contentType = this.findHeader(aData.headers, "Content-Type"); - if (boundaryRe.test(contentType)) { - return contentType.match(boundaryRe)[1]; - } - // Temporary workaround. As of 2014-03-11 the requestHeaders array does not - // always contain the Content-Type header for mulitpart requests. See bug 978144. - // Find the header from the request payload. - let boundaryString = aData.postDataText.match(boundaryRe)[1]; - if (boundaryString) { - return boundaryString; - } - - return null; - }, - - /** - * Removes the binary data from mulitpart text. - * - * @param string aMultipartText - * Multipart form data text. - * @param string aBoundary - * The boundary string. - * @return string - * The mulitpart text without the binary data. - */ - removeBinaryDataFromMultipartText: function(aMultipartText, aBoundary) { - let result = ""; - let boundary = "--" + aBoundary; - let parts = aMultipartText.split(boundary); - for (let part of parts) { - // Each part is expected to have a content disposition line. - let contentDispositionLine = part.trimLeft().split("\r\n")[0]; - if (!contentDispositionLine) { - continue; - } - contentDispositionLine = contentDispositionLine.toLowerCase(); - if (contentDispositionLine.contains("content-disposition: form-data")) { - if (contentDispositionLine.contains("filename=")) { - // The header lines and the binary blob is separated by 2 CRLF's. - // Add only the headers to the result. - let headers = part.split("\r\n\r\n")[0]; - result += boundary + "\r\n" + headers + "\r\n\r\n"; - } - else { - result += boundary + "\r\n" + part; - } - } - } - result += aBoundary + "--\r\n"; - - return result; - }, - - /** - * Get the headers from a multipart post data text. - * - * @param string aMultipartText - * Multipart post text. - * @return array - * An array of header objects {name:x, value:x} - */ - getHeadersFromMultipartText: function(aMultipartText) { - let headers = []; - if (!aMultipartText || aMultipartText.startsWith("---")) { - return headers; - } - - // Get the header section. - let index = aMultipartText.indexOf("\r\n\r\n"); - if (index == -1) { - return headers; - } - - // Parse the header lines. - let headersText = aMultipartText.substring(0, index); - let headerLines = headersText.split("\r\n"); - let lastHeaderName = null; - - for (let line of headerLines) { - // Create a header for each line in fields that spans across multiple lines. - // Subsquent lines always begins with at least one space or tab character. - // (rfc2616) - if (lastHeaderName && /^\s+/.test(line)) { - headers.push({ name: lastHeaderName, value: line.trim() }); - continue; - } - - let indexOfColon = line.indexOf(":"); - if (indexOfColon == -1) { - continue; - } - - let header = [line.slice(0, indexOfColon), line.slice(indexOfColon + 1)]; - if (header.length != 2) { - continue; - } - lastHeaderName = header[0].trim(); - headers.push({ name: lastHeaderName, value: header[1].trim() }); - } - - return headers; - }, - - /** - * Escape util function for POSIX oriented operating systems. - * Credit: Google DevTools - */ - escapeStringPosix: function(str) { - function escapeCharacter(x) { - let code = x.charCodeAt(0); - if (code < 256) { - // Add leading zero when needed to not care about the next character. - return code < 16 ? "\\x0" + code.toString(16) : "\\x" + code.toString(16); - } - code = code.toString(16); - return "\\u" + ("0000" + code).substr(code.length, 4); - } - - if (/[^\x20-\x7E]|\'/.test(str)) { - // Use ANSI-C quoting syntax. - return "$\'" + str.replace(/\\/g, "\\\\") - .replace(/\'/g, "\\\'") - .replace(/\n/g, "\\n") - .replace(/\r/g, "\\r") - .replace(/[^\x20-\x7E]/g, escapeCharacter) + "'"; - } else { - // Use single quote syntax. - return "'" + str + "'"; - } - }, - - /** - * Escape util function for Windows systems. - * Credit: Google DevTools - */ - escapeStringWin: function(str) { - /* Replace quote by double quote (but not by \") because it is - recognized by both cmd.exe and MS Crt arguments parser. - - Replace % by "%" because it could be expanded to an environment - variable value. So %% becomes "%""%". Even if an env variable "" - (2 doublequotes) is declared, the cmd.exe will not - substitute it with its value. - - Replace each backslash with double backslash to make sure - MS Crt arguments parser won't collapse them. - - Replace new line outside of quotes since cmd.exe doesn't let - to do it inside. - */ - return "\"" + str.replace(/"/g, "\"\"") - .replace(/%/g, "\"%\"") - .replace(/\\/g, "\\\\") - .replace(/[\r\n]+/g, "\"^$&\"") + "\""; - } -}; \ No newline at end of file diff --git a/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd b/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd index 71f7101967b5..79aa7149cb28 100644 --- a/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd +++ b/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd @@ -202,12 +202,6 @@ - on the context menu that copies the selected request's url --> - - - diff --git a/toolkit/components/osfile/modules/osfile_async_front.jsm b/toolkit/components/osfile/modules/osfile_async_front.jsm index aef1670c518e..6bd0d86e7694 100644 --- a/toolkit/components/osfile/modules/osfile_async_front.jsm +++ b/toolkit/components/osfile/modules/osfile_async_front.jsm @@ -135,47 +135,6 @@ for (let [constProp, dirKey] of [ */ let clone = SharedAll.clone; -/** - * Extract a shortened version of an object, fit for logging. - * - * This function returns a copy of the original object in which all - * long strings, Arrays, TypedArrays, ArrayBuffers are removed and - * replaced with plceholders. Use this function to sanitize objects - * if you wish to log them or to keep them in memory. - * - * @param {*} obj The obj to shorten. - * @return {*} array A shorter object, fit for logging. - */ -function summarizeObject(obj) { - if (!obj) { - return null; - } - if (typeof obj == "string") { - if (obj.length > 1024) { - return {"Long string": obj.length}; - } - return obj; - } - if (typeof obj == "object") { - if (Array.isArray(obj)) { - if (obj.length > 32) { - return {"Long array": obj.length}; - } - return [summarizeObject(k) for (k of obj)]; - } - if ("byteLength" in obj) { - // Assume TypedArray or ArrayBuffer - return {"Binary Data": obj.byteLength}; - } - let result = {}; - for (let k of Object.keys(obj)) { - result[k] = summarizeObject(obj[k]); - } - return result; - } - return obj; -} - let worker = null; let Scheduler = { /** @@ -198,41 +157,19 @@ let Scheduler = { queue: Promise.resolve(), /** - * Miscellaneous debugging information + * The latest message sent and still waiting for a reply. In DEBUG + * builds, the entire message is stored, which may be memory-consuming. + * In non-DEBUG builds, only the method name is stored. */ - Debugging: { - /** - * The latest message sent and still waiting for a reply. In DEBUG - * builds, the entire message is stored, which may be memory-consuming. - * In non-DEBUG builds, only the method name is stored. - */ - latestSent: undefined, + latestSent: undefined, - /** - * The latest reply received, or null if we are waiting for a reply. - * In DEBUG builds, the entire response is stored, which may be - * memory-consuming. In non-DEBUG builds, only exceptions and - * method names are stored. - */ - latestReceived: undefined, - - /** - * Number of messages sent to the worker. This includes the - * initial SET_DEBUG, if applicable. - */ - messagesSent: 0, - - /** - * Total number of messages ever queued, including the messages - * sent. - */ - messagesQueued: 0, - - /** - * Number of messages received from the worker. - */ - messagesReceived: 0, - }, + /** + * The latest reply received, or null if we are waiting for a reply. + * In DEBUG builds, the entire response is stored, which may be + * memory-consuming. In non-DEBUG builds, only exceptions and + * method names are stored. + */ + latestReceived: undefined, /** * A timer used to automatically shut down the worker after some time. @@ -297,7 +234,6 @@ let Scheduler = { if (firstLaunch && SharedAll.Config.DEBUG) { // If we have delayed sending SET_DEBUG, do it now. worker.post("SET_DEBUG", [true]); - Scheduler.Debugging.messagesSent++; } // By convention, the last argument of any message may be an |options| object. @@ -306,43 +242,41 @@ let Scheduler = { if (methodArgs) { options = methodArgs[methodArgs.length - 1]; } - Scheduler.Debugging.messagesQueued++; return this.push(() => Task.spawn(function*() { - // Update debugging information. As |args| may be quite - // expensive, we only keep a shortened version of it. - Scheduler.Debugging.latestReceived = null; - Scheduler.Debugging.latestSent = [Date.now(), method, summarizeObject(methodArgs)]; + Scheduler.latestReceived = null; + if (OS.Constants.Sys.DEBUG) { + // Update possibly memory-expensive debugging information + Scheduler.latestSent = [Date.now(), method, ...args]; + } else { + Scheduler.latestSent = [Date.now(), method]; + } let data; let reply; let isError = false; try { - try { - data = yield worker.post(method, ...args); - } finally { - Scheduler.Debugging.messagesReceived++; - } + data = yield worker.post(method, ...args); reply = data; - } catch (error) { + } catch (error if error instanceof PromiseWorker.WorkerError) { reply = error; isError = true; - if (error instanceof PromiseWorker.WorkerError) { - throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); + throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); + } catch (error if error instanceof ErrorEvent) { + reply = error; + let message = error.message; + if (message == "uncaught exception: [object StopIteration]") { + throw StopIteration; } - if (error instanceof ErrorEvent) { - let message = error.message; - if (message == "uncaught exception: [object StopIteration]") { - isError = false; - throw StopIteration; - } - throw new Error(message, error.filename, error.lineno); - } - throw ex; + isError = true; + throw new Error(message, error.filename, error.lineno); } finally { - Scheduler.Debugging.latestSent = Scheduler.Debugging.latestSent.slice(0, 2); - if (isError) { - Scheduler.Debugging.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; + Scheduler.latestSent = Scheduler.latestSent.slice(0, 2); + if (OS.Constants.Sys.DEBUG) { + // Update possibly memory-expensive debugging information + Scheduler.latestReceived = [Date.now(), reply]; + } else if (isError) { + Scheduler.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; } else { - Scheduler.Debugging.latestReceived = [Date.now(), summarizeObject(reply)]; + Scheduler.latestReceived = [Date.now()]; } if (firstLaunch) { Scheduler._updateTelemetry(); @@ -1429,12 +1363,8 @@ AsyncShutdown.profileBeforeChange.addBlocker( shutdown: Scheduler.shutdown, worker: !!worker, pendingReset: !!Scheduler.resetTimer, - latestSent: Scheduler.Debugging.latestSent, - latestReceived: Scheduler.Debugging.latestReceived, - messagesSent: Scheduler.Debugging.messagesSent, - messagesReceived: Scheduler.Debugging.messagesReceived, - messagesQueued: Scheduler.Debugging.messagesQueued, - DEBUG: SharedAll.Config.DEBUG + latestSent: Scheduler.latestSent, + latestReceived: Scheduler.latestReceived }; // Convert dates to strings for better readability for (let key of ["latestSent", "latestReceived"]) { diff --git a/toolkit/devtools/client/dbg-client.jsm b/toolkit/devtools/client/dbg-client.jsm index 5bf90b96cfcb..5ffdd46636d5 100644 --- a/toolkit/devtools/client/dbg-client.jsm +++ b/toolkit/devtools/client/dbg-client.jsm @@ -28,8 +28,6 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Timer.jsm"); -Cu.import("resource://gre/modules/devtools/Console.jsm"); - let promise = Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js").Promise; const { defer, resolve, reject } = promise; @@ -1409,28 +1407,17 @@ ThreadClient.prototype = { * @param function aOnResponse * Called with the thread's response. */ - setBreakpoint: function ({ url, line, column, condition }, aOnResponse) { + setBreakpoint: function (aLocation, aOnResponse) { // A helper function that sets the breakpoint. let doSetBreakpoint = function (aCallback) { - const location = { - url: url, - line: line, - column: column - }; - - let packet = { - to: this._actor, - type: "setBreakpoint", - location: location, - condition: condition - }; + let packet = { to: this._actor, type: "setBreakpoint", + location: aLocation }; this.client.request(packet, function (aResponse) { // Ignoring errors, since the user may be setting a breakpoint in a // dead script that will reappear on a page reload. if (aOnResponse) { - let bpClient = new BreakpointClient(this.client, - aResponse.actor, - location); + let bpClient = new BreakpointClient(this.client, aResponse.actor, + aLocation); if (aCallback) { aCallback(aOnResponse(aResponse, bpClient)); } else { diff --git a/toolkit/devtools/server/actors/root.js b/toolkit/devtools/server/actors/root.js index 07bb2a3bac80..4be5bbdbabe9 100644 --- a/toolkit/devtools/server/actors/root.js +++ b/toolkit/devtools/server/actors/root.js @@ -187,8 +187,6 @@ RootActor.prototype = { storageInspector: true, // Wether storage inspector is read only storageInspectorReadOnly: true, - // Wether conditional breakpoints are supported - conditionalBreakpoints: true } }; }, diff --git a/toolkit/devtools/server/actors/script.js b/toolkit/devtools/server/actors/script.js index 3175b5a0fb6b..841d3d47eca8 100644 --- a/toolkit/devtools/server/actors/script.js +++ b/toolkit/devtools/server/actors/script.js @@ -38,7 +38,7 @@ function BreakpointStore() { // // is an object // - // { url, line, column[, actor] } + // { url, line[, actor] } // // where the `actor` property is optional. this._breakpoints = Object.create(null); @@ -58,7 +58,6 @@ BreakpointStore.prototype = { * - line * - column (optional; omission implies that the breakpoint is for * the whole line) - * - condition (optional) * - actor (optional) */ addBreakpoint: function (aBreakpoint) { @@ -1375,8 +1374,7 @@ ThreadActor.prototype = { let response = this._createAndStoreBreakpoint({ url: url, line: line, - column: column, - condition: aRequest.condition + column: column }); // If the original location of our generated location is different from // the original location we attempted to set the breakpoint on, we will @@ -1444,13 +1442,11 @@ ThreadActor.prototype = { let storedBp = this.breakpointStore.getBreakpoint(aLocation); if (storedBp.actor) { actor = storedBp.actor; - actor.condition = aLocation.condition; } else { storedBp.actor = actor = new BreakpointActor(this, { url: aLocation.url, line: aLocation.line, - column: aLocation.column, - condition: aLocation.condition + column: aLocation.column }); this.threadLifetimePool.addActor(actor); } @@ -4225,17 +4221,15 @@ FrameActor.prototype.requestTypes = { * @param object aLocation * The location of the breakpoint as specified in the protocol. */ -function BreakpointActor(aThreadActor, { url, line, column, condition }) +function BreakpointActor(aThreadActor, aLocation) { this.scripts = []; this.threadActor = aThreadActor; - this.location = { url: url, line: line, column: column }; - this.condition = condition; + this.location = aLocation; } BreakpointActor.prototype = { actorPrefix: "breakpoint", - condition: null, /** * Called when this same breakpoint is added to another Debugger.Script @@ -4261,14 +4255,6 @@ BreakpointActor.prototype = { this.scripts = []; }, - isValidCondition: function(aFrame) { - if(!this.condition) { - return true; - } - var res = aFrame.eval(this.condition); - return res.return; - }, - /** * A function that the engine calls when a breakpoint has been hit. * @@ -4285,9 +4271,7 @@ BreakpointActor.prototype = { column: this.location.column })); - if (this.threadActor.sources.isBlackBoxed(url) - || aFrame.onStep - || !this.isValidCondition(aFrame)) { + if (this.threadActor.sources.isBlackBoxed(url) || aFrame.onStep) { return undefined; } diff --git a/toolkit/devtools/server/main.js b/toolkit/devtools/server/main.js index 699126240bf0..1fdca2634aa5 100644 --- a/toolkit/devtools/server/main.js +++ b/toolkit/devtools/server/main.js @@ -65,7 +65,6 @@ this.promised = promised; this.all = all; Cu.import("resource://gre/modules/devtools/SourceMap.jsm"); -Cu.import("resource://gre/modules/devtools/Console.jsm"); function dumpn(str) { if (wantLogging) { diff --git a/toolkit/devtools/server/tests/unit/head_dbg.js b/toolkit/devtools/server/tests/unit/head_dbg.js index 135ec33ef10e..69f0fbcc22a8 100644 --- a/toolkit/devtools/server/tests/unit/head_dbg.js +++ b/toolkit/devtools/server/tests/unit/head_dbg.js @@ -30,7 +30,6 @@ function tryImport(url) { tryImport("resource://gre/modules/devtools/dbg-server.jsm"); tryImport("resource://gre/modules/devtools/dbg-client.jsm"); tryImport("resource://gre/modules/devtools/Loader.jsm"); -tryImport("resource://gre/modules/devtools/Console.jsm"); function testExceptionHook(ex) { try { diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js deleted file mode 100644 index 3d229b50ea32..000000000000 --- a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js +++ /dev/null @@ -1,61 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Check conditional breakpoint when condition evaluates to true. - */ - -var gDebuggee; -var gClient; -var gThreadClient; - -function run_test() -{ - initTestDebuggerServer(); - gDebuggee = addTestGlobal("test-conditional-breakpoint"); - gClient = new DebuggerClient(DebuggerServer.connectPipe()); - gClient.connect(function () { - attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { - gThreadClient = aThreadClient; - test_simple_breakpoint(); - }); - }); - do_test_pending(); -} - -function test_simple_breakpoint() -{ - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - gThreadClient.setBreakpoint({ - url: "test.js", - line: 3, - condition: "a === 1" - }, function (aResponse, bpClient) { - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - // Check the return value. - do_check_eq(aPacket.why.type, "breakpoint"); - do_check_eq(aPacket.frame.where.line, 3); - - // Remove the breakpoint. - bpClient.remove(function (aResponse) { - gThreadClient.resume(function () { - finishClient(gClient); - }); - }); - - }); - // Continue until the breakpoint is hit. - gThreadClient.resume(); - - }); - - }); - - Components.utils.evalInSandbox("debugger;\n" + // 1 - "var a = 1;\n" + // 2 - "var b = 2;\n", // 3 - gDebuggee, - "1.8", - "test.js", - 1); -} diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js deleted file mode 100644 index f74cedc4e704..000000000000 --- a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js +++ /dev/null @@ -1,60 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Check conditional breakpoint when condition evaluates to false. - */ - -var gDebuggee; -var gClient; -var gThreadClient; - -function run_test() -{ - initTestDebuggerServer(); - gDebuggee = addTestGlobal("test-conditional-breakpoint"); - gClient = new DebuggerClient(DebuggerServer.connectPipe()); - gClient.connect(function () { - attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { - gThreadClient = aThreadClient; - test_simple_breakpoint(); - }); - }); - do_test_pending(); -} - -function test_simple_breakpoint() -{ - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - gThreadClient.setBreakpoint({ - url: "test.js", - line: 3, - condition: "a === 2" - }, function (aResponse, bpClient) { - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - // Check the return value. - do_check_eq(aPacket.why.type, "debuggerStatement"); - do_check_eq(aPacket.frame.where.line, 4); - - // Remove the breakpoint. - bpClient.remove(function (aResponse) { - gThreadClient.resume(function () { - finishClient(gClient); - }); - }); - - }); - // Continue until the breakpoint is hit. - gThreadClient.resume(); - }); - }); - - Components.utils.evalInSandbox("debugger;\n" + // 1 - "var a = 1;\n" + // 2 - "var b = 2;\n" + // 3 - "debugger;", // 4 - gDebuggee, - "1.8", - "test.js", - 1); -} diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js deleted file mode 100644 index c340a1cab30a..000000000000 --- a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js +++ /dev/null @@ -1,62 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Check conditional breakpoint when condition throws and make sure it is ignored - */ - -var gDebuggee; -var gClient; -var gThreadClient; - -function run_test() -{ - initTestDebuggerServer(); - gDebuggee = addTestGlobal("test-conditional-breakpoint"); - gClient = new DebuggerClient(DebuggerServer.connectPipe()); - gClient.connect(function () { - attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { - gThreadClient = aThreadClient; - test_simple_breakpoint(); - }); - }); - do_test_pending(); -} - -function test_simple_breakpoint() -{ - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - gThreadClient.setBreakpoint({ - url: "test.js", - line: 3, - condition: "throw new Error()" - }, function (aResponse, bpClient) { - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - // Check the return value. - do_check_eq(aPacket.why.type, "debuggerStatement"); - do_check_eq(aPacket.frame.where.line, 4); - - // Remove the breakpoint. - bpClient.remove(function (aResponse) { - gThreadClient.resume(function () { - finishClient(gClient); - }); - }); - - }); - // Continue until the breakpoint is hit. - gThreadClient.resume(); - - }); - - }); - - Components.utils.evalInSandbox("debugger;\n" + // 1 - "var a = 1;\n" + // 2 - "var b = 2;\n" + // 3 - "debugger;", // 4 - gDebuggee, - "1.8", - "test.js", - 1); -} diff --git a/toolkit/devtools/server/tests/unit/xpcshell.ini b/toolkit/devtools/server/tests/unit/xpcshell.ini index b7e548bd282f..8808865d1111 100644 --- a/toolkit/devtools/server/tests/unit/xpcshell.ini +++ b/toolkit/devtools/server/tests/unit/xpcshell.ini @@ -112,9 +112,6 @@ reason = bug 820380 [test_breakpoint-16.js] [test_breakpoint-17.js] [test_breakpoint-18.js] -[test_conditional_breakpoint-01.js] -[test_conditional_breakpoint-02.js] -[test_conditional_breakpoint-03.js] [test_eventlooplag_actor.js] run-if = toolkit == "gonk" [test_listsources-01.js]