mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Backed out 2 changesets (bug 1302996) for being the likely cause of browser chrome crashes a=backout
Backed out changeset 8a97f217ebe8 (bug 1302996) Backed out changeset 45bcf45afca2 (bug 1302996)
This commit is contained in:
parent
f91a03949a
commit
8df5ab601c
@ -12,7 +12,6 @@ loader.lazyGetter(this, "OptionsPanel", () => require("devtools/client/framework
|
||||
loader.lazyGetter(this, "InspectorPanel", () => require("devtools/client/inspector/panel").InspectorPanel);
|
||||
loader.lazyGetter(this, "WebConsolePanel", () => require("devtools/client/webconsole/panel").WebConsolePanel);
|
||||
loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/client/debugger/panel").DebuggerPanel);
|
||||
loader.lazyGetter(this, "NewDebuggerPanel", () => require("devtools/client/debugger/new/panel").DebuggerPanel);
|
||||
loader.lazyGetter(this, "StyleEditorPanel", () => require("devtools/client/styleeditor/styleeditor-panel").StyleEditorPanel);
|
||||
loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/client/shadereditor/panel").ShaderEditorPanel);
|
||||
loader.lazyGetter(this, "CanvasDebuggerPanel", () => require("devtools/client/canvasdebugger/panel").CanvasDebuggerPanel);
|
||||
@ -156,6 +155,8 @@ Tools.jsdebugger = {
|
||||
|
||||
function switchDebugger() {
|
||||
if (Services.prefs.getBoolPref("devtools.debugger.new-debugger-frontend")) {
|
||||
const NewDebuggerPanel = require("devtools/client/debugger/new/panel").DebuggerPanel;
|
||||
|
||||
Tools.jsdebugger.url = "chrome://devtools/content/debugger/new/index.html";
|
||||
Tools.jsdebugger.build = function (iframeWindow, toolbox) {
|
||||
return new NewDebuggerPanel(iframeWindow, toolbox);
|
||||
|
@ -18,6 +18,7 @@ const promise = require("promise");
|
||||
const defer = require("devtools/shared/defer");
|
||||
const Telemetry = require("devtools/client/shared/telemetry");
|
||||
const { gDevTools } = require("./devtools");
|
||||
const { when: unload } = require("sdk/system/unload");
|
||||
|
||||
// Load target and toolbox lazily as they need gDevTools to be fully initialized
|
||||
loader.lazyRequireGetter(this, "TargetFactory", "devtools/client/framework/target", true);
|
||||
@ -141,16 +142,6 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "quit-application":
|
||||
gDevToolsBrowser.destroy({ shuttingDown: true });
|
||||
break;
|
||||
case "sdk:loader:destroy":
|
||||
// This event is fired when the devtools loader unloads, which happens
|
||||
// only when the add-on workflow ask devtools to be reloaded.
|
||||
if (subject.wrappedJSObject == require('@loader/unload')) {
|
||||
gDevToolsBrowser.destroy({ shuttingDown: false });
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
@ -739,19 +730,12 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
|
||||
},
|
||||
|
||||
/**
|
||||
* Either the SDK Loader has been destroyed by the add-on contribution
|
||||
* workflow, or firefox is shutting down.
|
||||
|
||||
* @param {boolean} shuttingDown
|
||||
* True if firefox is currently shutting down. We may prevent doing
|
||||
* some cleanups to speed it up. Otherwise everything need to be
|
||||
* cleaned up in order to be able to load devtools again.
|
||||
* All browser windows have been closed, tidy up remaining objects.
|
||||
*/
|
||||
destroy: function ({ shuttingDown }) {
|
||||
destroy: function () {
|
||||
Services.prefs.removeObserver("devtools.", gDevToolsBrowser);
|
||||
Services.obs.removeObserver(gDevToolsBrowser, "browser-delayed-startup-finished");
|
||||
Services.obs.removeObserver(gDevToolsBrowser, "quit-application");
|
||||
Services.obs.removeObserver(gDevToolsBrowser, "sdk:loader:destroy");
|
||||
Services.obs.removeObserver(gDevToolsBrowser.destroy, "quit-application");
|
||||
|
||||
gDevToolsBrowser._pingTelemetry();
|
||||
gDevToolsBrowser._telemetry = null;
|
||||
@ -759,8 +743,6 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
|
||||
for (let win of gDevToolsBrowser._trackedBrowserWindows) {
|
||||
gDevToolsBrowser._forgetBrowserWindow(win);
|
||||
}
|
||||
|
||||
gDevTools.destroy({ shuttingDown });
|
||||
},
|
||||
};
|
||||
|
||||
@ -784,10 +766,8 @@ gDevTools.on("tool-unregistered", function (ev, toolId) {
|
||||
gDevTools.on("toolbox-ready", gDevToolsBrowser._updateMenuCheckbox);
|
||||
gDevTools.on("toolbox-destroyed", gDevToolsBrowser._updateMenuCheckbox);
|
||||
|
||||
Services.obs.addObserver(gDevToolsBrowser, "quit-application", false);
|
||||
Services.obs.addObserver(gDevToolsBrowser.destroy, "quit-application", false);
|
||||
Services.obs.addObserver(gDevToolsBrowser, "browser-delayed-startup-finished", false);
|
||||
// Watch for module loader unload. Fires when the tools are reloaded.
|
||||
Services.obs.addObserver(gDevToolsBrowser, "sdk:loader:destroy", false);
|
||||
|
||||
// Fake end of browser window load event for all already opened windows
|
||||
// that is already fully loaded.
|
||||
@ -798,3 +778,8 @@ while (enumerator.hasMoreElements()) {
|
||||
gDevToolsBrowser._registerBrowserWindow(win);
|
||||
}
|
||||
}
|
||||
|
||||
// Watch for module loader unload. Fires when the tools are reloaded.
|
||||
unload(function () {
|
||||
gDevToolsBrowser.destroy();
|
||||
});
|
||||
|
@ -18,6 +18,7 @@ const {defaultTools: DefaultTools, defaultThemes: DefaultThemes} =
|
||||
const EventEmitter = require("devtools/shared/event-emitter");
|
||||
const {JsonView} = require("devtools/client/jsonview/main");
|
||||
const AboutDevTools = require("devtools/client/framework/about-devtools-toolbox");
|
||||
const {when: unload} = require("sdk/system/unload");
|
||||
const {Task} = require("devtools/shared/task");
|
||||
|
||||
const FORBIDDEN_IDS = new Set(["toolbox", ""]);
|
||||
@ -34,6 +35,9 @@ this.DevTools = function DevTools() {
|
||||
// List of toolboxes that are still in process of creation
|
||||
this._creatingToolboxes = new Map(); // Map<target, toolbox Promise>
|
||||
|
||||
// destroy() is an observer's handler so we need to preserve context.
|
||||
this.destroy = this.destroy.bind(this);
|
||||
|
||||
// JSON Viewer for 'application/json' documents.
|
||||
JsonView.initialize();
|
||||
|
||||
@ -41,6 +45,8 @@ this.DevTools = function DevTools() {
|
||||
|
||||
EventEmitter.decorate(this);
|
||||
|
||||
Services.obs.addObserver(this.destroy, "quit-application", false);
|
||||
|
||||
// This is important step in initialization codepath where we are going to
|
||||
// start registering all default tools and themes: create menuitems, keys, emit
|
||||
// related events.
|
||||
@ -482,23 +488,20 @@ DevTools.prototype = {
|
||||
},
|
||||
|
||||
/**
|
||||
* Either the SDK Loader has been destroyed by the add-on contribution
|
||||
* workflow, or firefox is shutting down.
|
||||
|
||||
* @param {boolean} shuttingDown
|
||||
* True if firefox is currently shutting down. We may prevent doing
|
||||
* some cleanups to speed it up. Otherwise everything need to be
|
||||
* cleaned up in order to be able to load devtools again.
|
||||
* Called to tear down a tools provider.
|
||||
*/
|
||||
destroy: function ({ shuttingDown }) {
|
||||
// Do not cleanup everything during firefox shutdown, but only when
|
||||
// devtools are reloaded via the add-on contribution workflow.
|
||||
if (!shuttingDown) {
|
||||
for (let [target, toolbox] of this._toolboxes) {
|
||||
toolbox.destroy();
|
||||
}
|
||||
AboutDevTools.unregister();
|
||||
_teardown: function DT_teardown() {
|
||||
for (let [target, toolbox] of this._toolboxes) {
|
||||
toolbox.destroy();
|
||||
}
|
||||
AboutDevTools.unregister();
|
||||
},
|
||||
|
||||
/**
|
||||
* All browser windows have been closed, tidy up remaining objects.
|
||||
*/
|
||||
destroy: function () {
|
||||
Services.obs.removeObserver(this.destroy, "quit-application");
|
||||
|
||||
for (let [key, tool] of this.getToolDefinitionMap()) {
|
||||
this.unregisterTool(key, true);
|
||||
@ -524,3 +527,8 @@ DevTools.prototype = {
|
||||
};
|
||||
|
||||
const gDevTools = exports.gDevTools = new DevTools();
|
||||
|
||||
// Watch for module loader unload. Fires when the tools are reloaded.
|
||||
unload(function () {
|
||||
gDevTools._teardown();
|
||||
});
|
||||
|
@ -6,17 +6,16 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu, Cm, Cr, components} = require("chrome");
|
||||
const registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
|
||||
const { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
|
||||
const {Cu, Cc, Ci, components} = require("chrome");
|
||||
const Services = require("Services");
|
||||
const {Class} = require("sdk/core/heritage");
|
||||
const {Unknown} = require("sdk/platform/xpcom");
|
||||
const xpcom = require("sdk/platform/xpcom");
|
||||
const Events = require("sdk/dom/events");
|
||||
const Clipboard = require("sdk/clipboard");
|
||||
|
||||
loader.lazyRequireGetter(this, "NetworkHelper",
|
||||
"devtools/shared/webconsole/network-helper");
|
||||
loader.lazyRequireGetter(this, "Events",
|
||||
"sdk/dom/events");
|
||||
loader.lazyRequireGetter(this, "Clipboard",
|
||||
"sdk/clipboard");
|
||||
loader.lazyRequireGetter(this, "JsonViewUtils",
|
||||
"devtools/client/jsonview/utils");
|
||||
|
||||
@ -31,14 +30,11 @@ const SEGMENT_SIZE = Math.pow(2, 17);
|
||||
const JSON_VIEW_MIME_TYPE = "application/vnd.mozilla.json.view";
|
||||
const CONTRACT_ID = "@mozilla.org/streamconv;1?from=" +
|
||||
JSON_VIEW_MIME_TYPE + "&to=*/*";
|
||||
const CLASS_ID = components.ID("{d8c9acee-dec5-11e4-8c75-1681e6b88ec1}");
|
||||
const CLASS_DESCRIPTION = "JSONView converter";
|
||||
const CLASS_ID = "{d8c9acee-dec5-11e4-8c75-1681e6b88ec1}";
|
||||
|
||||
// Localization
|
||||
loader.lazyGetter(this, "jsonViewStrings", () => {
|
||||
return Services.strings.createBundle(
|
||||
"chrome://devtools/locale/jsonview.properties");
|
||||
});
|
||||
let jsonViewStrings = Services.strings.createBundle(
|
||||
"chrome://devtools/locale/jsonview.properties");
|
||||
|
||||
/**
|
||||
* This object detects 'application/vnd.mozilla.json.view' content type
|
||||
@ -47,14 +43,14 @@ loader.lazyGetter(this, "jsonViewStrings", () => {
|
||||
*
|
||||
* Inspired by JSON View: https://github.com/bhollis/jsonview/
|
||||
*/
|
||||
function Converter() {}
|
||||
let Converter = Class({
|
||||
extends: Unknown,
|
||||
|
||||
Converter.prototype = {
|
||||
QueryInterface: XPCOMUtils.generateQI([
|
||||
Ci.nsIStreamConverter,
|
||||
Ci.nsIStreamListener,
|
||||
Ci.nsIRequestObserver
|
||||
]),
|
||||
interfaces: [
|
||||
"nsIStreamConverter",
|
||||
"nsIStreamListener",
|
||||
"nsIRequestObserver"
|
||||
],
|
||||
|
||||
get wrappedJSObject() {
|
||||
return this;
|
||||
@ -305,32 +301,28 @@ Converter.prototype = {
|
||||
|
||||
Clipboard.set(value, "text");
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
const Factory = {
|
||||
createInstance: function (outer, iid) {
|
||||
if (outer) {
|
||||
throw Cr.NS_ERROR_NO_AGGREGATION;
|
||||
}
|
||||
return new Converter();
|
||||
}
|
||||
};
|
||||
// Stream converter component definition
|
||||
let service = xpcom.Service({
|
||||
id: components.ID(CLASS_ID),
|
||||
contract: CONTRACT_ID,
|
||||
Component: Converter,
|
||||
register: false,
|
||||
unregister: false
|
||||
});
|
||||
|
||||
function register() {
|
||||
if (!registrar.isCIDRegistered(CLASS_ID)) {
|
||||
registrar.registerFactory(CLASS_ID,
|
||||
CLASS_DESCRIPTION,
|
||||
CONTRACT_ID,
|
||||
Factory);
|
||||
if (!xpcom.isRegistered(service)) {
|
||||
xpcom.register(service);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function unregister() {
|
||||
if (registrar.isCIDRegistered(CLASS_ID)) {
|
||||
registrar.unregisterFactory(CLASS_ID, Factory);
|
||||
if (xpcom.isRegistered(service)) {
|
||||
xpcom.unregister(service);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -6,30 +6,25 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu, Cm, Cr, components} = require("chrome");
|
||||
const registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
|
||||
const { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
|
||||
const {Cc, Ci, components} = require("chrome");
|
||||
const xpcom = require("sdk/platform/xpcom");
|
||||
const {Unknown} = require("sdk/platform/xpcom");
|
||||
const {Class} = require("sdk/core/heritage");
|
||||
|
||||
const categoryManager = Cc["@mozilla.org/categorymanager;1"]
|
||||
.getService(Ci.nsICategoryManager);
|
||||
|
||||
loader.lazyRequireGetter(this, "NetworkHelper",
|
||||
"devtools/shared/webconsole/network-helper");
|
||||
|
||||
// Constants
|
||||
const JSON_TYPE = "application/json";
|
||||
const CONTRACT_ID = "@mozilla.org/devtools/jsonview-sniffer;1";
|
||||
const CLASS_ID = components.ID("{4148c488-dca1-49fc-a621-2a0097a62422}");
|
||||
const CLASS_DESCRIPTION = "JSONView content sniffer";
|
||||
const CLASS_ID = "{4148c488-dca1-49fc-a621-2a0097a62422}";
|
||||
const JSON_VIEW_MIME_TYPE = "application/vnd.mozilla.json.view";
|
||||
const JSON_VIEW_TYPE = "JSON View";
|
||||
const CONTENT_SNIFFER_CATEGORY = "net-content-sniffers";
|
||||
|
||||
function isTopLevelLoad(request) {
|
||||
let loadInfo = request.loadInfo;
|
||||
if (loadInfo && loadInfo.isTopLevelLoad) {
|
||||
return (request.loadFlags & Ci.nsIChannel.LOAD_DOCUMENT_URI);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This component represents a sniffer (implements nsIContentSniffer
|
||||
* interface) responsible for changing top level 'application/json'
|
||||
@ -38,21 +33,24 @@ function isTopLevelLoad(request) {
|
||||
* This internal type is consequently rendered by JSON View component
|
||||
* that represents the JSON through a viewer interface.
|
||||
*/
|
||||
function Sniffer() {}
|
||||
var Sniffer = Class({
|
||||
extends: Unknown,
|
||||
|
||||
Sniffer.prototype = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentSniffer]),
|
||||
interfaces: [
|
||||
"nsIContentSniffer",
|
||||
],
|
||||
|
||||
get wrappedJSObject() {
|
||||
return this;
|
||||
},
|
||||
|
||||
getMIMETypeFromContent: function (request, data, length) {
|
||||
// JSON View is enabled only for top level loads only.
|
||||
if (!NetworkHelper.isTopLevelLoad(request)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (request instanceof Ci.nsIChannel) {
|
||||
// JSON View is enabled only for top level loads only.
|
||||
if (!isTopLevelLoad(request)) {
|
||||
return "";
|
||||
}
|
||||
try {
|
||||
if (request.contentDisposition ==
|
||||
Ci.nsIChannel.DISPOSITION_ATTACHMENT) {
|
||||
@ -71,23 +69,19 @@ Sniffer.prototype = {
|
||||
|
||||
return "";
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
const Factory = {
|
||||
createInstance: function (outer, iid) {
|
||||
if (outer) {
|
||||
throw Cr.NS_ERROR_NO_AGGREGATION;
|
||||
}
|
||||
return new Sniffer();
|
||||
}
|
||||
};
|
||||
var service = xpcom.Service({
|
||||
id: components.ID(CLASS_ID),
|
||||
contract: CONTRACT_ID,
|
||||
Component: Sniffer,
|
||||
register: false,
|
||||
unregister: false
|
||||
});
|
||||
|
||||
function register() {
|
||||
if (!registrar.isCIDRegistered(CLASS_ID)) {
|
||||
registrar.registerFactory(CLASS_ID,
|
||||
CLASS_DESCRIPTION,
|
||||
CONTRACT_ID,
|
||||
Factory);
|
||||
if (!xpcom.isRegistered(service)) {
|
||||
xpcom.register(service);
|
||||
categoryManager.addCategoryEntry(CONTENT_SNIFFER_CATEGORY, JSON_VIEW_TYPE,
|
||||
CONTRACT_ID, false, false);
|
||||
return true;
|
||||
@ -97,10 +91,10 @@ function register() {
|
||||
}
|
||||
|
||||
function unregister() {
|
||||
if (registrar.isCIDRegistered(CLASS_ID)) {
|
||||
registrar.unregisterFactory(CLASS_ID, Factory);
|
||||
if (xpcom.isRegistered(service)) {
|
||||
categoryManager.deleteCategoryEntry(CONTENT_SNIFFER_CATEGORY,
|
||||
JSON_VIEW_TYPE, false);
|
||||
xpcom.unregister(service);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user