зеркало из https://github.com/mozilla/gecko-dev.git
backing out bugs 587574, 588540, 573103, 568634 to clear leaks, a=#developers
This commit is contained in:
Родитель
c176716ced
Коммит
08f159e29c
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,132 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
|
||||
<!ENTITY % webConsoleDTD SYSTEM "chrome://global/locale/webConsole.dtd" >
|
||||
%webConsoleDTD;
|
||||
]>
|
||||
|
||||
<!-- ***** BEGIN LICENSE BLOCK *****
|
||||
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
-
|
||||
- The contents of this file are subject to the Mozilla Public License Version
|
||||
- 1.1 (the "License"); you may not use this file except in compliance with
|
||||
- the License. You may obtain a copy of the License at
|
||||
- http://www.mozilla.org/MPL/
|
||||
-
|
||||
- Software distributed under the License is distributed on an "AS IS" basis,
|
||||
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
- for the specific language governing rights and limitations under the
|
||||
- License.
|
||||
-
|
||||
- The Original Code is DevTools WebConsole Code.
|
||||
-
|
||||
- The Initial Developer of the Original Code is
|
||||
- Mozilla Foundation.
|
||||
- Portions created by the Initial Developer are Copyright (C) 2010
|
||||
- the Initial Developer. All Rights Reserved.
|
||||
-
|
||||
- Contributor(s):
|
||||
- Joe Walker <jwalker@mozilla.com>
|
||||
- Julian Viereck <jviereck@mozilla.com>
|
||||
-
|
||||
- Alternatively, the contents of this file may be used under the terms of
|
||||
- either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
- in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
- of those above. If you wish to allow use of your version of this file only
|
||||
- under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
- use your version of this file under the terms of the MPL, indicate your
|
||||
- decision by deleting the provisions above and replace them with the notice
|
||||
- and other provisions required by the LGPL or the GPL. If you do not delete
|
||||
- the provisions above, a recipient may use your version of this file under
|
||||
- the terms of any one of the MPL, the GPL or the LGPL.
|
||||
-
|
||||
- ***** END LICENSE BLOCK ***** -->
|
||||
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<link rel="stylesheet" href="chrome://global/skin/webConsole_networkPanel.css" type="text/css"/>
|
||||
</head>
|
||||
<body role="application">
|
||||
<div id="header">
|
||||
<span class="property-name">&networkPanel.requestURL;:</span>
|
||||
<span class="property-value" id="headUrl"></span><br />
|
||||
<span class="property-name">&networkPanel.requestMethod;:</span>
|
||||
<span class="property-value" id="headMethod"></span><br />
|
||||
<span class="property-name">&networkPanel.statusCode;:</span>
|
||||
<span class="property-value" id="headStatus"></span>
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<h1>
|
||||
&networkPanel.requestHeaders;
|
||||
<span id="requestHeadersInfo" class="info"></span>
|
||||
</h1>
|
||||
<div class="property-header" id="requestHeadersContent"></div>
|
||||
|
||||
<div id="requestCookie" style="display:none">
|
||||
<h1>&networkPanel.requestCookie;</h1>
|
||||
<div class="property-header" id="requestCookieContent"></div>
|
||||
</div>
|
||||
|
||||
<div id="requestBody" style="display:none">
|
||||
<h1>&networkPanel.requestBody;</h1>
|
||||
<div class="property-header" id="requestBodyContent"></div>
|
||||
</div>
|
||||
<div id="requestFormData" style="display:none">
|
||||
<h1>&networkPanel.requestFormData;</h1>
|
||||
<div class="property-header" id="requestFormDataContent"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="group" id="responseContainer" style="display:none">
|
||||
<h1>
|
||||
&networkPanel.responseHeaders;
|
||||
<span id="responseHeadersInfo" class="info">Δ</span>
|
||||
</h1>
|
||||
<div class="property-header" id="responseHeadersContent"></div>
|
||||
|
||||
<div id="responseBody" style="display:none">
|
||||
<h1>
|
||||
&networkPanel.responseBody;
|
||||
<span class="info" id="responseBodyInfo">Δ</span>
|
||||
</h1>
|
||||
<div class="property-header" id="responseBodyContent"></div>
|
||||
</div>
|
||||
<div id="responseBodyCached" style="display:none">
|
||||
<h1>
|
||||
&networkPanel.responseBodyCached;
|
||||
<span class="info" id="responseBodyCachedInfo">Δ</span>
|
||||
</h1>
|
||||
<div class="property-header" id="responseBodyCachedContent"></div>
|
||||
</div>
|
||||
<div id="responseNoBody" style="display:none">
|
||||
<h1>
|
||||
&networkPanel.responseNoBody;
|
||||
<span id="responseNoBodyInfo" class="info">Δ</span>
|
||||
</h1>
|
||||
</div>
|
||||
<div id="responseImage" style="display:none">
|
||||
<h1>
|
||||
&networkPanel.responseImage;
|
||||
<span id="responseImageInfo" class="info"></span>
|
||||
</h1>
|
||||
<div id="responseImageNodeDiv">
|
||||
<img id="responseImageNode" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="responseImageCached" style="display:none">
|
||||
<h1>
|
||||
&networkPanel.responseImageCached;
|
||||
<span id="responseImageCachedInfo" class="info"></span>
|
||||
</h1>
|
||||
<div id="responseImageNodeDiv">
|
||||
<img id="responseImageCachedNode" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -45,13 +45,11 @@ include $(topsrcdir)/config/rules.mk
|
|||
|
||||
_BROWSER_TEST_FILES = \
|
||||
browser_HUDServiceTestsAll.js \
|
||||
browser_webconsole_netlogging.js \
|
||||
$(NULL)
|
||||
|
||||
_BROWSER_TEST_PAGES = \
|
||||
test-console.html \
|
||||
test-network.html \
|
||||
test-network-request.html \
|
||||
test-mutation.html \
|
||||
testscript.js \
|
||||
test-filter.html \
|
||||
|
@ -61,7 +59,6 @@ _BROWSER_TEST_PAGES = \
|
|||
test-error.html \
|
||||
test-duplicate-error.html \
|
||||
test-image.png \
|
||||
test-encoding-ISO-8859-1.html \
|
||||
$(NULL)
|
||||
|
||||
libs:: $(_BROWSER_TEST_FILES)
|
||||
|
|
|
@ -70,10 +70,6 @@ const TEST_ERROR_URI = "http://example.com/browser/toolkit/components/console/hu
|
|||
|
||||
const TEST_DUPLICATE_ERROR_URI = "http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-duplicate-error.html";
|
||||
|
||||
const TEST_IMG = "http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-image.png";
|
||||
|
||||
const TEST_ENCODING_ISO_8859_1 = "http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-encoding-ISO-8859-1.html";
|
||||
|
||||
function noCacheUriSpec(aUriSpec) {
|
||||
return aUriSpec + "?_=" + Date.now();
|
||||
}
|
||||
|
@ -573,348 +569,6 @@ function testConsoleHistory()
|
|||
is (input.value, executeList[idxLast], "check history next idx:" + idxLast);
|
||||
}
|
||||
|
||||
function testNetworkPanel()
|
||||
{
|
||||
function checkIsVisible(aPanel, aList) {
|
||||
for (let id in aList) {
|
||||
let node = aPanel.document.getElementById(id);
|
||||
let isVisible = aList[id];
|
||||
is(node.style.display, (isVisible ? "block" : "none"), id + " isVisible=" + isVisible);
|
||||
}
|
||||
}
|
||||
|
||||
function checkNodeContent(aPanel, aId, aContent) {
|
||||
let node = aPanel.document.getElementById(aId);
|
||||
if (node == null) {
|
||||
ok(false, "Tried to access node " + aId + " that doesn't exist!");
|
||||
}
|
||||
else if (node.textContent.indexOf(aContent) != -1) {
|
||||
ok(true, "checking content of " + aId);
|
||||
}
|
||||
else {
|
||||
ok(false, "Got false value for " + aId + ": " + node.textContent + " doesn't have " + aContent);
|
||||
}
|
||||
}
|
||||
|
||||
function checkNodeKeyValue(aPanel, aId, aKey, aValue) {
|
||||
let node = aPanel.document.getElementById(aId);
|
||||
|
||||
let testHTML = '<span xmlns="http://www.w3.org/1999/xhtml" class="property-name">' + aKey + ':</span>';
|
||||
testHTML += '<span xmlns="http://www.w3.org/1999/xhtml" class="property-value">' + aValue + '</span>';
|
||||
isnot(node.innerHTML.indexOf(testHTML), -1, "checking content of " + aId);
|
||||
}
|
||||
|
||||
let testDriver;
|
||||
function testGen() {
|
||||
var httpActivity = {
|
||||
url: "http://www.testpage.com",
|
||||
method: "GET",
|
||||
|
||||
panels: [],
|
||||
request: {
|
||||
header: {
|
||||
foo: "bar"
|
||||
}
|
||||
},
|
||||
response: { },
|
||||
timing: {
|
||||
"REQUEST_HEADER": 0
|
||||
}
|
||||
};
|
||||
|
||||
let networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
|
||||
is (networkPanel, httpActivity.panels[0].get(), "Network panel stored on httpActivity object");
|
||||
networkPanel.panel.addEventListener("load", function onLoad() {
|
||||
networkPanel.panel.removeEventListener("load", onLoad, true);
|
||||
testDriver.next();
|
||||
}, true);
|
||||
yield;
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestCookie: false,
|
||||
requestFormData: false,
|
||||
requestBody: false,
|
||||
responseContainer: false,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: false
|
||||
});
|
||||
|
||||
checkNodeContent(networkPanel, "header", "http://www.testpage.com");
|
||||
checkNodeContent(networkPanel, "header", "GET");
|
||||
checkNodeKeyValue(networkPanel, "requestHeadersContent", "foo", "bar");
|
||||
|
||||
// Test request body.
|
||||
httpActivity.request.body = "hello world";
|
||||
networkPanel.update();
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: true,
|
||||
requestFormData: false,
|
||||
requestCookie: false,
|
||||
responseContainer: false,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: false
|
||||
});
|
||||
checkNodeContent(networkPanel, "requestBodyContent", "hello world");
|
||||
|
||||
// Test response header.
|
||||
httpActivity.timing.RESPONSE_HEADER = 1000;
|
||||
httpActivity.response.status = "999 earthquake win";
|
||||
httpActivity.response.header = {
|
||||
leaveHouses: "true"
|
||||
}
|
||||
networkPanel.update();
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: true,
|
||||
requestFormData: false,
|
||||
requestCookie: false,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: false
|
||||
});
|
||||
|
||||
checkNodeContent(networkPanel, "header", "999 earthquake win");
|
||||
checkNodeKeyValue(networkPanel, "responseHeadersContent", "leaveHouses", "true");
|
||||
checkNodeContent(networkPanel, "responseHeadersInfo", "1ms");
|
||||
|
||||
httpActivity.timing.RESPONSE_COMPLETE = 2500;
|
||||
// This is necessary to show that the request is done.
|
||||
httpActivity.timing.TRANSACTION_CLOSE = 2500;
|
||||
networkPanel.update();
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: true,
|
||||
requestCookie: false,
|
||||
requestFormData: false,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: false
|
||||
});
|
||||
|
||||
httpActivity.response.isDone = true;
|
||||
networkPanel.update();
|
||||
|
||||
checkNodeContent(networkPanel, "responseNoBodyInfo", "2ms");
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: true,
|
||||
requestCookie: false,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseNoBody: true,
|
||||
responseImage: false,
|
||||
responseImageCached: false
|
||||
});
|
||||
|
||||
networkPanel.panel.hidePopup();
|
||||
|
||||
// Second run: Test for cookies and response body.
|
||||
httpActivity.request.header.Cookie = "foo=bar; hello=world";
|
||||
httpActivity.response.body = "get out here";
|
||||
|
||||
networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
is (networkPanel, httpActivity.panels[1].get(), "Network panel stored on httpActivity object");
|
||||
networkPanel.panel.addEventListener("load", function onLoad() {
|
||||
networkPanel.panel.removeEventListener("load", onLoad, true);
|
||||
testDriver.next();
|
||||
}, true);
|
||||
yield;
|
||||
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: true,
|
||||
requestFormData: false,
|
||||
requestCookie: true,
|
||||
responseContainer: true,
|
||||
responseBody: true,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: false
|
||||
});
|
||||
|
||||
checkNodeKeyValue(networkPanel, "requestCookieContent", "foo", "bar");
|
||||
checkNodeKeyValue(networkPanel, "requestCookieContent", "hello", "world");
|
||||
checkNodeContent(networkPanel, "responseBodyContent", "get out here");
|
||||
checkNodeContent(networkPanel, "responseBodyInfo", "2ms");
|
||||
|
||||
networkPanel.panel.hidePopup();
|
||||
|
||||
// Check image request.
|
||||
httpActivity.response.header["Content-Type"] = "image/png";
|
||||
httpActivity.url = TEST_IMG;
|
||||
|
||||
networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
networkPanel.panel.addEventListener("load", function onLoad() {
|
||||
networkPanel.panel.removeEventListener("load", onLoad, true);
|
||||
testDriver.next();
|
||||
}, true);
|
||||
yield;
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: true,
|
||||
requestFormData: false,
|
||||
requestCookie: true,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: true,
|
||||
responseImageCached: false
|
||||
});
|
||||
|
||||
let imgNode = networkPanel.document.getElementById("responseImageNode");
|
||||
is(imgNode.getAttribute("src"), TEST_IMG, "Displayed image is correct");
|
||||
|
||||
function checkImageResponseInfo() {
|
||||
checkNodeContent(networkPanel, "responseImageInfo", "2ms");
|
||||
checkNodeContent(networkPanel, "responseImageInfo", "16x16px");
|
||||
}
|
||||
|
||||
// Check if the image is loaded already.
|
||||
if (imgNode.width == 0) {
|
||||
imgNode.addEventListener("load", function onLoad() {
|
||||
imgNode.removeEventListener("load", onLoad, false);
|
||||
checkImageResponseInfo();
|
||||
networkPanel.panel.hidePopup();
|
||||
testDriver.next();
|
||||
}, false);
|
||||
// Wait until the image is loaded.
|
||||
yield;
|
||||
}
|
||||
else {
|
||||
checkImageResponseInfo();
|
||||
networkPanel.panel.hidePopup();
|
||||
}
|
||||
|
||||
// Check cached image request.
|
||||
httpActivity.response.status = "HTTP/1.1 304 Not Modified";
|
||||
|
||||
networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
networkPanel.panel.addEventListener("load", function onLoad() {
|
||||
networkPanel.panel.removeEventListener("load", onLoad, true);
|
||||
testDriver.next();
|
||||
}, true);
|
||||
yield;
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: true,
|
||||
requestFormData: false,
|
||||
requestCookie: true,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: true
|
||||
});
|
||||
|
||||
let imgNode = networkPanel.document.getElementById("responseImageCachedNode");
|
||||
is(imgNode.getAttribute("src"), TEST_IMG, "Displayed image is correct");
|
||||
|
||||
networkPanel.panel.hidePopup();
|
||||
|
||||
// Test sent form data.
|
||||
httpActivity.request.body = [
|
||||
"Content-Type: application/x-www-form-urlencoded\n" +
|
||||
"Content-Length: 59\n" +
|
||||
"name=rob&age=20"
|
||||
].join("");
|
||||
|
||||
networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
networkPanel.panel.addEventListener("load", function onLoad() {
|
||||
networkPanel.panel.removeEventListener("load", onLoad, true);
|
||||
testDriver.next();
|
||||
}, true);
|
||||
yield;
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: false,
|
||||
requestFormData: true,
|
||||
requestCookie: true,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: true
|
||||
});
|
||||
|
||||
checkNodeKeyValue(networkPanel, "requestFormDataContent", "name", "rob");
|
||||
checkNodeKeyValue(networkPanel, "requestFormDataContent", "age", "20");
|
||||
networkPanel.panel.hidePopup();
|
||||
|
||||
// Test no space after Content-Type:
|
||||
httpActivity.request.body = "Content-Type:application/x-www-form-urlencoded\n";
|
||||
|
||||
networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
networkPanel.panel.addEventListener("load", function onLoad() {
|
||||
networkPanel.panel.removeEventListener("load", onLoad, true);
|
||||
testDriver.next();
|
||||
}, true);
|
||||
yield;
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: false,
|
||||
requestFormData: true,
|
||||
requestCookie: true,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: true
|
||||
});
|
||||
|
||||
networkPanel.panel.hidePopup();
|
||||
|
||||
// Test cached data.
|
||||
|
||||
// Load a Latein-1 encoded page.
|
||||
browser.addEventListener("load", function onLoad () {
|
||||
browser.removeEventListener("load", onLoad, true);
|
||||
httpActivity.charset = content.document.characterSet;
|
||||
testDriver.next();
|
||||
}, true);
|
||||
content.location = TEST_ENCODING_ISO_8859_1;
|
||||
|
||||
yield;
|
||||
|
||||
httpActivity.url = TEST_ENCODING_ISO_8859_1;
|
||||
httpActivity.response.header["Content-Type"] = "application/json";
|
||||
httpActivity.response.body = "";
|
||||
|
||||
networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
networkPanel.isDoneCallback = function NP_doneCallback() {
|
||||
networkPanel.isDoneCallback = null;
|
||||
|
||||
checkIsVisible(networkPanel, {
|
||||
requestBody: false,
|
||||
requestFormData: true,
|
||||
requestCookie: true,
|
||||
responseContainer: true,
|
||||
responseBody: false,
|
||||
responseBodyCached: true,
|
||||
responseNoBody: false,
|
||||
responseImage: false,
|
||||
responseImageCached: false
|
||||
});
|
||||
|
||||
checkNodeContent(networkPanel, "responseBodyCachedContent", "<body>\u00fc\u00f6\u00E4</body>");
|
||||
networkPanel.panel.hidePopup();
|
||||
|
||||
// Run the next test.
|
||||
testErrorOnPageReload();
|
||||
}
|
||||
yield;
|
||||
};
|
||||
|
||||
testDriver = testGen();
|
||||
testDriver.next();
|
||||
}
|
||||
|
||||
// test property provider
|
||||
function testPropertyProvider()
|
||||
{
|
||||
|
@ -1175,7 +829,7 @@ function testPageReload() {
|
|||
is(typeof console.error, "function", "console.error is a function");
|
||||
is(typeof console.exception, "function", "console.exception is a function");
|
||||
|
||||
testNetworkPanel();
|
||||
testErrorOnPageReload();
|
||||
}, false);
|
||||
|
||||
content.location.reload();
|
||||
|
|
|
@ -1,185 +0,0 @@
|
|||
/* vim:set ts=2 sw=2 sts=2 et: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*
|
||||
* Contributor(s):
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
const Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/HUDService.jsm");
|
||||
|
||||
const TEST_NETWORK_REQUEST_URI = "http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-network-request.html";
|
||||
|
||||
const TEST_IMG = "http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-image.png";
|
||||
|
||||
const TEST_DATA_JSON_CONTENT =
|
||||
'{ id: "test JSON data", myArray: [ "foo", "bar", "baz", "biff" ] }';
|
||||
|
||||
var hud;
|
||||
var hudId;
|
||||
|
||||
function testOpenWebConsole()
|
||||
{
|
||||
HUDService.activateHUDForContext(gBrowser.selectedTab);
|
||||
is(HUDService.displaysIndex().length, 1, "WebConsole was opened");
|
||||
|
||||
hudId = HUDService.displaysIndex()[0];
|
||||
hud = HUDService.getHeadsUpDisplay(hudId);
|
||||
|
||||
testNetworkLogging();
|
||||
}
|
||||
|
||||
function finishTest() {
|
||||
hud = null;
|
||||
hudId = null;
|
||||
|
||||
let tab = gBrowser.selectedTab;
|
||||
HUDService.deactivateHUDForContext(tab);
|
||||
executeSoon(function() {
|
||||
gBrowser.removeCurrentTab();
|
||||
finish();
|
||||
});
|
||||
}
|
||||
|
||||
function testNetworkLogging()
|
||||
{
|
||||
var lastFinishedRequest = null;
|
||||
HUDService.lastFinishedRequestCallback =
|
||||
function requestDoneCallback(aHttpRequest)
|
||||
{
|
||||
lastFinishedRequest = aHttpRequest;
|
||||
}
|
||||
|
||||
let browser = gBrowser.selectedBrowser;
|
||||
let loggingGen;
|
||||
// This generator function is used to step through the individual, async tests.
|
||||
function loggingGeneratorFunc() {
|
||||
browser.addEventListener("load", function onLoad () {
|
||||
browser.removeEventListener("load", onLoad, true);
|
||||
loggingGen.next();
|
||||
}, true);
|
||||
content.location = TEST_NETWORK_REQUEST_URI;
|
||||
yield;
|
||||
|
||||
// Check if page load was logged correctly.
|
||||
let httpActivity = lastFinishedRequest;
|
||||
isnot(httpActivity, null, "Page load was logged");
|
||||
is(httpActivity.url, TEST_NETWORK_REQUEST_URI,
|
||||
"Logged network entry is page load");
|
||||
is(httpActivity.method, "GET", "Method is correct");
|
||||
is(httpActivity.request.body, undefined, "No request body sent");
|
||||
|
||||
// TODO: Figure out why the following test is failing on linux (bug 588533).
|
||||
//
|
||||
// If not linux, then run the test. On Linux it always fails.
|
||||
if (navigator.platform.indexOf("Linux") != 0) {
|
||||
ok(httpActivity.response.body.indexOf("<!DOCTYPE HTML>") == 0,
|
||||
"Response body's beginning is okay");
|
||||
}
|
||||
|
||||
// Start xhr-get test.
|
||||
browser.contentWindow.wrappedJSObject.testXhrGet(loggingGen);
|
||||
yield;
|
||||
|
||||
// Use executeSoon here as the xhr callback calls loggingGen.next() before
|
||||
// the network observer detected that the request is completly done and the
|
||||
// HUDService.lastFinishedRequest is set. executeSoon solves that problem.
|
||||
executeSoon(function() {
|
||||
// Check if xhr-get test was successful.
|
||||
httpActivity = lastFinishedRequest;
|
||||
isnot(httpActivity, null, "testXhrGet() was logged");
|
||||
is(httpActivity.method, "GET", "Method is correct");
|
||||
is(httpActivity.request.body, undefined, "No request body was sent");
|
||||
is(httpActivity.response.body, TEST_DATA_JSON_CONTENT,
|
||||
"Response is correct");
|
||||
lastFinishedRequest = null;
|
||||
loggingGen.next();
|
||||
});
|
||||
yield;
|
||||
|
||||
// Start xhr-post test.
|
||||
browser.contentWindow.wrappedJSObject.testXhrPost(loggingGen);
|
||||
yield;
|
||||
|
||||
executeSoon(function() {
|
||||
// Check if xhr-post test was successful.
|
||||
httpActivity = lastFinishedRequest;
|
||||
isnot(httpActivity, null, "testXhrPost() was logged");
|
||||
is(httpActivity.method, "POST", "Method is correct");
|
||||
is(httpActivity.request.body, "Hello world!",
|
||||
"Request body was logged");
|
||||
is(httpActivity.response.body, TEST_DATA_JSON_CONTENT,
|
||||
"Response is correct");
|
||||
lastFinishedRequest = null
|
||||
loggingGen.next();
|
||||
});
|
||||
yield;
|
||||
|
||||
// Start submit-form test. As the form is submitted, the page is loaded
|
||||
// again. Bind to the DOMContentLoaded event to catch when this is done.
|
||||
browser.addEventListener("load", function onLoad () {
|
||||
browser.removeEventListener("load", onLoad, true);
|
||||
loggingGen.next();
|
||||
}, true);
|
||||
browser.contentWindow.wrappedJSObject.testSubmitForm();
|
||||
yield;
|
||||
|
||||
// Check if submitting the form was logged successful.
|
||||
httpActivity = lastFinishedRequest;
|
||||
isnot(httpActivity, null, "testSubmitForm() was logged");
|
||||
is(httpActivity.method, "POST", "Method is correct");
|
||||
isnot(httpActivity.request.body.indexOf(
|
||||
"Content-Type: application/x-www-form-urlencoded"), -1,
|
||||
"Content-Type is correct");
|
||||
isnot(httpActivity.request.body.indexOf(
|
||||
"Content-Length: 20"), -1, "Content-length is correct");
|
||||
isnot(httpActivity.request.body.indexOf(
|
||||
"name=foo+bar&age=144"), -1, "Form data is correct");
|
||||
ok(httpActivity.response.body.indexOf("<!DOCTYPE HTML>") == 0,
|
||||
"Response body's beginning is okay");
|
||||
|
||||
lastFinishedRequest = null
|
||||
|
||||
// Open the NetworkPanel. The functionality of the NetworkPanel is tested
|
||||
// within the testNetworkPanel() function.
|
||||
let filterBox = hud.querySelectorAll(".hud-filter-box")[0];
|
||||
let networkPanel = HUDService.openNetworkPanel(filterBox, httpActivity);
|
||||
is (networkPanel, httpActivity.panels[0].get(), "Network panel stored on httpActivity object");
|
||||
networkPanel.panel.addEventListener("load", function onLoad() {
|
||||
networkPanel.panel.removeEventListener("load", onLoad, true);
|
||||
|
||||
ok(true, "NetworkPanel was opened");
|
||||
networkPanel.panel.hidePopup();
|
||||
|
||||
// All tests are done. Shutdown.
|
||||
browser = null;
|
||||
lastFinishedRequest = null;
|
||||
HUDService.lastFinishedRequestCallback = null;
|
||||
|
||||
finishTest();
|
||||
}, true);
|
||||
}
|
||||
|
||||
loggingGen = loggingGeneratorFunc();
|
||||
loggingGen.next();
|
||||
}
|
||||
|
||||
function test()
|
||||
{
|
||||
waitForExplicitFinish();
|
||||
gBrowser.selectedTab = gBrowser.addTab();
|
||||
|
||||
gBrowser.selectedBrowser.addEventListener("load", function() {
|
||||
gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
|
||||
waitForFocus(testOpenWebConsole, content);
|
||||
}, true);
|
||||
|
||||
content.location = "data:text/html,WebConsole network logging tests";
|
||||
}
|
|
@ -1 +1 @@
|
|||
{ id: "test JSON data", myArray: [ "foo", "bar", "baz", "biff" ] }
|
||||
{ id: "test JSON data", myArray: [ "foo", "bar", "baz", "biff" ] }
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="ISO-8859-1">
|
||||
</head>
|
||||
<body>üöä</body>
|
||||
</html>
|
|
@ -1,38 +0,0 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html dir="ltr" xml:lang="en-US" lang="en-US"><head>
|
||||
<title>Console HTTP test page</title>
|
||||
<script type="text/javascript">
|
||||
function makeXhr(aMethod, aUrl, aRequestBody, aTestGenerator) {
|
||||
var xmlhttp = new XMLHttpRequest();
|
||||
xmlhttp.open(aMethod, aUrl, true);
|
||||
xmlhttp.onreadystatechange = function (aEvt) {
|
||||
if (xmlhttp.readyState == 4) {
|
||||
aTestGenerator.next();
|
||||
}
|
||||
};
|
||||
xmlhttp.send(aRequestBody);
|
||||
}
|
||||
|
||||
function testXhrGet(aTestGenerator) {
|
||||
makeXhr('get', 'test-data.json', null, aTestGenerator);
|
||||
}
|
||||
|
||||
function testXhrPost(aTestGenerator) {
|
||||
makeXhr('post', 'test-data.json', "Hello world!", aTestGenerator);
|
||||
}
|
||||
|
||||
function testSubmitForm() {
|
||||
document.getElementsByTagName("form")[0].submit();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Heads Up Display HTTP Logging Testpage</h1>
|
||||
<h2>This page is used to test the HTTP logging.</h2>
|
||||
|
||||
<form action="http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-network-request.html" method="post">
|
||||
<input name="name" type="text" value="foo bar"><br>
|
||||
<input name="age" type="text" value="144"><br>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -1,6 +1,5 @@
|
|||
toolkit.jar:
|
||||
*+ content/global/console.js (content/console.js)
|
||||
*+ content/global/console.xul (content/console.xul)
|
||||
+ content/global/NetworkPanel.xhtml (hudservice/NetworkPanel.xhtml)
|
||||
+ content/global/console.css (content/console.css)
|
||||
+ content/global/consoleBindings.xml (content/consoleBindings.xml)
|
||||
|
|
|
@ -63,39 +63,3 @@ jsPropertyTitle=Object Inspector
|
|||
jsPropertyInspectTitle=Inspect: %S
|
||||
copyCmd.label=Copy
|
||||
copyCmd.accesskey=C
|
||||
# LOCALIZATION NOTE (networkUrlWithStatus):
|
||||
#
|
||||
# When the HTTP request is started only the URL of the request is printed to the
|
||||
# WebConsole. As the response status of the HTTP request arrives, the URL string
|
||||
# is replaced by this string (the response status can look like `HTTP/1.1 200 OK`).
|
||||
# The bracket is not closed to mark that this request is not done by now. As the
|
||||
# request is finished (the HTTP connection is closed) this string is replaced
|
||||
# by `networkUrlWithStatusAndDuration` which has a closing the braket.
|
||||
#
|
||||
# %1$S = URL of network request
|
||||
# %2$S = response status code from the server (e.g. `HTTP/1.1 200 OK`)
|
||||
networkUrlWithStatus=%1$S [%2$S
|
||||
# LOCALIZATION NOTE (networkUrlWithStatusAndDuration):
|
||||
#
|
||||
# When the HTTP request is finished (the HTTP connection is closed) this string
|
||||
# replaces the former `networkUrlWithStatus` string in the WebConsole.
|
||||
#
|
||||
# %1$S = URL of network request
|
||||
# %2$S = response status code from the server (e.g. `HTTP/1.1 200 OK`)
|
||||
# %3$S = duration for the complete network request in milliseconds
|
||||
networkUrlWithStatusAndDuration=%1$S [%2$S %3$Sms]
|
||||
NetworkPanel.label=Inspect Network Request
|
||||
# LOCALIZATION NOTE (NetworkPanel.deltaDurationMS):
|
||||
#
|
||||
# This string is used to show the duration between two network events (e.g
|
||||
# request and respones header or response header and response body).
|
||||
NetworkPanel.durationMS=%Sms
|
||||
# LOCALIZATION NOTE (NetworkPanel.imageSizeDeltaDurationMS):
|
||||
# This string is used to show the duration between the response header and the
|
||||
# response body event. It also shows the size of the received or cached image.
|
||||
#
|
||||
# The first %S is replace by the width of the inspected image.
|
||||
# The second %S is replaced by the height of the inspected image.
|
||||
# The third %S is replaced by the duration between the response header and the
|
||||
# response body event.
|
||||
NetworkPanel.imageSizeDeltaDurationMS=%Sx%Spx, Δ%Sms
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
<!ENTITY networkPanel.requestURL "Request URL">
|
||||
<!ENTITY networkPanel.requestMethod "Request Method">
|
||||
<!ENTITY networkPanel.statusCode "Status Code">
|
||||
|
||||
<!ENTITY networkPanel.requestHeaders "Request Headers">
|
||||
<!ENTITY networkPanel.requestCookie "Sent Cookie">
|
||||
<!ENTITY networkPanel.requestBody "Request Body">
|
||||
<!ENTITY networkPanel.requestFormData "Sent Form Data">
|
||||
|
||||
<!ENTITY networkPanel.responseHeaders "Response Headers">
|
||||
<!ENTITY networkPanel.responseBody "Response Body">
|
||||
<!ENTITY networkPanel.responseBodyCached "Cached Data">
|
||||
<!ENTITY networkPanel.responseNoBody "No Response Body">
|
||||
<!ENTITY networkPanel.responseImage "Received Image">
|
||||
<!ENTITY networkPanel.responseImageCached "Cached Image">
|
|
@ -37,7 +37,6 @@
|
|||
+ locale/@AB_CD@/global/finddialog.properties (%chrome/global/finddialog.properties)
|
||||
locale/@AB_CD@/global/globalKeys.dtd (%chrome/global/globalKeys.dtd)
|
||||
+ locale/@AB_CD@/global/headsUpDisplay.properties (%chrome/global/headsUpDisplay.properties)
|
||||
+ locale/@AB_CD@/global/webConsole.dtd (%chrome/global/webConsole.dtd)
|
||||
+ locale/@AB_CD@/global/intl.css (%chrome/global/intl.css)
|
||||
+ locale/@AB_CD@/global/intl.properties (%chrome/global/intl.properties)
|
||||
+ locale/@AB_CD@/global/keys.properties (%chrome/global/keys.properties)
|
||||
|
|
|
@ -28,7 +28,6 @@ toolkit.jar:
|
|||
+ skin/classic/global/toolbarbutton.css
|
||||
+ skin/classic/global/tree.css
|
||||
+ skin/classic/global/webConsole.css
|
||||
+ skin/classic/global/webConsole_networkPanel.css
|
||||
+ skin/classic/global/alerts/alert.css (alerts/alert.css)
|
||||
+ skin/classic/global/console/console.css (console/console.css)
|
||||
+ skin/classic/global/console/console.png (console/console.png)
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is DevTools code
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Corporation
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Joe Walker <jwalker@mozilla.com>
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
body {
|
||||
font-family: Lucida Grande, sans-serif;
|
||||
font-size: 11px;
|
||||
background: #EEE;
|
||||
}
|
||||
|
||||
div#header {
|
||||
padding: 5px;
|
||||
overflow-x:auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 13px;
|
||||
padding: 2px 10px;
|
||||
margin: 0px;
|
||||
background: -moz-linear-gradient(top, #BBB, #999);
|
||||
-moz-border-radius: 2px;
|
||||
text-shadow: #FFF 0px 1px 0px;
|
||||
}
|
||||
|
||||
h1 .info {
|
||||
font-size: 11px;
|
||||
float: right;
|
||||
color: #333;
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
div.property-header {
|
||||
padding: 2px 5px;
|
||||
background: -moz-linear-gradient(top, #FFF, #F8F8F8);
|
||||
color: #333;
|
||||
max-height: 330px;
|
||||
overflow-y: auto;
|
||||
overflow-x: auto;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
span.property-name {
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
padding-right: 4px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
span.property-value {
|
||||
padding-right: 5px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
div.group {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.group, div#header {
|
||||
background: #FFF;
|
||||
border-color: #E1E1E1;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
-moz-border-radius: 4px 4px 4px 4px;
|
||||
}
|
||||
|
||||
img#responseImageNode {
|
||||
-moz-box-shadow: rgba(0,0,0,0.2) 0px 3px 5px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
#responseImageNodeDiv {
|
||||
padding: 5px;
|
||||
}
|
|
@ -50,7 +50,6 @@ toolkit.jar:
|
|||
skin/classic/global/tree.css
|
||||
* skin/classic/global/viewbuttons.css
|
||||
* skin/classic/global/webConsole.css
|
||||
* skin/classic/global/webConsole_networkPanel.css
|
||||
skin/classic/global/wizard.css
|
||||
skin/classic/global/arrow/arrow-dn-dis.gif (arrow/arrow-dn-dis.gif)
|
||||
skin/classic/global/arrow/arrow-dn-dis.png (arrow/arrow-dn-dis.png)
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is DevTools code
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Corporation
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Joe Walker <jwalker@mozilla.com>
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
body {
|
||||
font-family: Lucida Grande, sans-serif;
|
||||
font-size: 11px;
|
||||
background: #EEE;
|
||||
}
|
||||
|
||||
div#header {
|
||||
padding: 5px;
|
||||
overflow-x:auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 13px;
|
||||
padding: 2px 10px;
|
||||
margin: 0px;
|
||||
background: -moz-linear-gradient(top, #BBB, #999);
|
||||
-moz-border-radius: 2px;
|
||||
text-shadow: #FFF 0px 1px 0px;
|
||||
}
|
||||
|
||||
h1 .info {
|
||||
font-size: 11px;
|
||||
float: right;
|
||||
color: #333;
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
div.property-header {
|
||||
padding: 2px 5px;
|
||||
background: -moz-linear-gradient(top, #FFF, #F8F8F8);
|
||||
color: #333;
|
||||
max-height: 330px;
|
||||
overflow-y: auto;
|
||||
overflow-x: auto;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
span.property-name {
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
padding-right: 4px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
span.property-value {
|
||||
padding-right: 5px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
div.group {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.group, div#header {
|
||||
background: #FFF;
|
||||
border-color: #E1E1E1;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
-moz-border-radius: 4px 4px 4px 4px;
|
||||
}
|
||||
|
||||
img#responseImageNode {
|
||||
-moz-box-shadow: rgba(0,0,0,0.2) 0px 3px 5px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
#responseImageNodeDiv {
|
||||
padding: 5px;
|
||||
}
|
|
@ -54,7 +54,6 @@ toolkit.jar:
|
|||
skin/classic/global/toolbarbutton.css
|
||||
skin/classic/global/tree.css
|
||||
* skin/classic/global/webConsole.css
|
||||
* skin/classic/global/webConsole_networkPanel.css
|
||||
skin/classic/global/wizard.css
|
||||
skin/classic/global/alerts/alert.css (alerts/alert.css)
|
||||
skin/classic/global/arrow/arrow-dn.gif (arrow/arrow-dn.gif)
|
||||
|
@ -223,7 +222,6 @@ toolkit.jar:
|
|||
* skin/classic/aero/global/toolbarbutton.css (toolbarbutton-aero.css)
|
||||
* skin/classic/aero/global/tree.css (tree-aero.css)
|
||||
* skin/classic/aero/global/webConsole.css
|
||||
* skin/classic/global/webConsole_networkPanel.css
|
||||
skin/classic/aero/global/wizard.css
|
||||
skin/classic/aero/global/alerts/alert.css (alerts/alert.css)
|
||||
skin/classic/aero/global/arrow/arrow-dn.gif (arrow/arrow-dn.gif)
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is DevTools code
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Corporation
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Joe Walker <jwalker@mozilla.com>
|
||||
* Julian Viereck <jviereck@mozilla.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
body {
|
||||
font-family: Lucida Grande, sans-serif;
|
||||
font-size: 11px;
|
||||
background: #EEE;
|
||||
}
|
||||
|
||||
div#header {
|
||||
padding: 5px;
|
||||
overflow-x:auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 13px;
|
||||
padding: 2px 10px;
|
||||
margin: 0px;
|
||||
background: -moz-linear-gradient(top, #BBB, #999);
|
||||
-moz-border-radius: 2px;
|
||||
text-shadow: #FFF 0px 1px 0px;
|
||||
}
|
||||
|
||||
h1 .info {
|
||||
font-size: 11px;
|
||||
float: right;
|
||||
color: #333;
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
div.property-header {
|
||||
padding: 2px 5px;
|
||||
background: -moz-linear-gradient(top, #FFF, #F8F8F8);
|
||||
color: #333;
|
||||
max-height: 330px;
|
||||
overflow-y: auto;
|
||||
overflow-x: auto;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
span.property-name {
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
padding-right: 4px;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
span.property-value {
|
||||
padding-right: 5px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
div.group {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.group, div#header {
|
||||
background: #FFF;
|
||||
border-color: #E1E1E1;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
-moz-border-radius: 4px 4px 4px 4px;
|
||||
}
|
||||
|
||||
img#responseImageNode {
|
||||
-moz-box-shadow: rgba(0,0,0,0.2) 0px 3px 5px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
#responseImageNodeDiv {
|
||||
padding: 5px;
|
||||
}
|
Загрузка…
Ссылка в новой задаче