mirror of
https://github.com/GoogleChrome/chrome-extensions-samples.git
synced 2026-03-27 13:29:34 +07:00
* Remove docs folder. This was a redirect from a GitHub pages site that does not appear to be in use. * Rename api folder to api-samples. * Move examples to functional-samples folder. * Move cookbook sample to functional-samples. * Move tutorials to functional-samples folder. * Move mv2 and apps folders to _archive. * Rename tools folder to .repo. * Move reference folder to functional-samples. * Update README. Update README with new relative links for reorg. * Update README.md Co-authored-by: amysteamdev <37001393+AmySteam@users.noreply.github.com> --------- Co-authored-by: amysteamdev <37001393+AmySteam@users.noreply.github.com>
186 lines
5.0 KiB
JavaScript
186 lines
5.0 KiB
JavaScript
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
function Console() {
|
|
}
|
|
|
|
Console.Type = {
|
|
LOG: "log",
|
|
DEBUG: "debug",
|
|
INFO: "info",
|
|
WARN: "warn",
|
|
ERROR: "error",
|
|
GROUP: "group",
|
|
GROUP_COLLAPSED: "groupCollapsed",
|
|
GROUP_END: "groupEnd"
|
|
};
|
|
|
|
Console.addMessage = function(type, format, args) {
|
|
chrome.extension.sendRequest({
|
|
command: "sendToConsole",
|
|
tabId: chrome.devtools.tabId,
|
|
args: escape(JSON.stringify(Array.prototype.slice.call(arguments, 0)))
|
|
});
|
|
};
|
|
|
|
// Generate Console output methods, i.e. Console.log(), Console.debug() etc.
|
|
(function() {
|
|
var console_types = Object.getOwnPropertyNames(Console.Type);
|
|
for (var type = 0; type < console_types.length; ++type) {
|
|
var method_name = Console.Type[console_types[type]];
|
|
Console[method_name] = Console.addMessage.bind(Console, method_name);
|
|
}
|
|
})();
|
|
|
|
function ChromeFirePHP() {
|
|
};
|
|
|
|
ChromeFirePHP.handleFirePhpHeaders = function(har_entry) {
|
|
var response_headers = har_entry.response.headers;
|
|
var wf_header_map = {};
|
|
var had_wf_headers = false;
|
|
|
|
for (var i = 0; i < response_headers.length; ++i) {
|
|
var header = response_headers[i];
|
|
if (/^X-Wf-/.test(header.name)) {
|
|
wf_header_map[header.name] = header.value;
|
|
had_wf_headers = true;
|
|
}
|
|
}
|
|
|
|
var proto_header = wf_header_map["X-Wf-Protocol-1"];
|
|
if (!had_wf_headers || !this._checkProtoVersion(proto_header))
|
|
return;
|
|
|
|
var message_objects = this._buildMessageObjects(wf_header_map);
|
|
message_objects.sort(function(a, b) {
|
|
var aFile = a.File || "";
|
|
var bFile = b.File || "";
|
|
if (aFile !== bFile)
|
|
return aFile.localeCompare(bFile);
|
|
var aLine = a.Line !== undefined ? a.Line : -1;
|
|
var bLine = b.Line !== undefined ? b.Line : -1;
|
|
return aLine - bLine;
|
|
});
|
|
|
|
var context = { pageRef: har_entry.pageref };
|
|
for (var i = 0; i < message_objects.length; ++i)
|
|
this._processLogMessage(message_objects[i], context);
|
|
if (context.groupStarted)
|
|
Console.groupEnd();
|
|
};
|
|
|
|
ChromeFirePHP._processLogMessage = function(message, context) {
|
|
var meta = message[0];
|
|
if (!meta) {
|
|
Console.error("No Meta in FirePHP message");
|
|
return;
|
|
}
|
|
|
|
var body = message[1];
|
|
var type = meta.Type;
|
|
if (!type) {
|
|
Console.error("No Type for FirePHP message");
|
|
return;
|
|
}
|
|
|
|
switch (type) {
|
|
case "LOG":
|
|
case "INFO":
|
|
case "WARN":
|
|
case "ERROR":
|
|
if (!context.groupStarted) {
|
|
context.groupStarted = true;
|
|
Console.groupCollapsed(context.pageRef || "");
|
|
}
|
|
Console.addMessage(Console.Type[type], "%s%o",
|
|
(meta.Label ? meta.Label + ": " : ""), body);
|
|
break;
|
|
case "EXCEPTION":
|
|
case "TABLE":
|
|
case "TRACE":
|
|
case "GROUP_START":
|
|
case "GROUP_END":
|
|
// FIXME: implement
|
|
break;
|
|
}
|
|
};
|
|
|
|
ChromeFirePHP._buildMessageObjects = function(header_map)
|
|
{
|
|
const normal_header_prefix = "X-Wf-1-1-1-";
|
|
|
|
return this._collectMessageObjectsForPrefix(header_map, normal_header_prefix);
|
|
};
|
|
|
|
ChromeFirePHP._collectMessageObjectsForPrefix = function(header_map, prefix) {
|
|
var results = [];
|
|
const header_regexp = /(?:\d+)?\|(.+)/;
|
|
var json = "";
|
|
for (var i = 1; ; ++i) {
|
|
var name = prefix + i;
|
|
var value = header_map[name];
|
|
if (!value)
|
|
break;
|
|
|
|
var match = value.match(header_regexp);
|
|
if (!match) {
|
|
Console.error("Failed to parse FirePHP log message: " + value);
|
|
break;
|
|
}
|
|
var json_part = match[1];
|
|
json += json_part.substring(0, json_part.lastIndexOf("|"));
|
|
if (json_part.charAt(json_part.length - 1) === "\\")
|
|
continue;
|
|
try {
|
|
var message = JSON.parse(json);
|
|
results.push(message);
|
|
} catch(e) {
|
|
Console.error("Failed to parse FirePHP log message: " + json);
|
|
}
|
|
json = "";
|
|
}
|
|
return results;
|
|
};
|
|
|
|
ChromeFirePHP._checkProtoVersion = function(proto_header) {
|
|
if (!proto_header) {
|
|
Console.warn("WildFire protocol header not found");
|
|
return;
|
|
}
|
|
|
|
var match = /http:\/\/meta\.wildfirehq\.org\/Protocol\/([^\/]+)\/(.+)/.exec(
|
|
proto_header);
|
|
if (!match) {
|
|
Console.warn("Invalid WildFire protocol header");
|
|
return;
|
|
}
|
|
var proto_name = match[1];
|
|
var proto_version = match[2];
|
|
if (proto_name !== "JsonStream" || proto_version !== "0.2") {
|
|
Console.warn(
|
|
"Unknown FirePHP protocol version: %s (expecting JsonStream/0.2)",
|
|
proto_name + "/" + proto_version);
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
chrome.devtools.network.addRequestHeaders({
|
|
"X-FirePHP-Version": "0.0.6"
|
|
});
|
|
|
|
chrome.devtools.network.getHAR(function(result) {
|
|
var entries = result.entries;
|
|
if (!entries.length) {
|
|
Console.warn("ChromeFirePHP suggests that you reload the page to track" +
|
|
" FirePHP messages for all the requests");
|
|
}
|
|
for (var i = 0; i < entries.length; ++i)
|
|
ChromeFirePHP.handleFirePhp_headers(entries[i]);
|
|
|
|
chrome.devtools.network.onRequestFinished.addListener(
|
|
ChromeFirePHP.handleFirePhpHeaders.bind(ChromeFirePHP));
|
|
});
|