Skip to content

Commit 6db5b6a

Browse files
committed
Fix error in Firefox 48+
1 parent e97ca41 commit 6db5b6a

File tree

5 files changed

+117
-69
lines changed

5 files changed

+117
-69
lines changed

gruntfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ module.exports = function(grunt) {
4343
'src/firefox/chrome/tool.xul',
4444
'src/firefox/chrome/tool.js',
4545
'src/firefox/chrome/panel.js',
46-
'src/firefox/chrome/resourceHelpers.jsm',
46+
'src/firefox/chrome/resourceLoader.js',
4747
'src/firefox/locale/**',
4848
'src/firefox/skin/**',
4949
'src/firefox/*'

src/firefox/chrome/panel.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,25 @@
11
'use strict';
22

3-
const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
4-
53
this.EXPORTED_SYMBOLS = ['GADebuggerPanel'];
64

7-
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
8-
9-
XPCOMUtils.defineLazyModuleGetter(this, 'EventEmitter','resource://gre/modules/devtools/event-emitter.js');
10-
XPCOMUtils.defineLazyModuleGetter(this, 'promise', 'resource://gre/modules/commonjs/sdk/core/promise.js', 'Promise');
11-
125
function GADebuggerPanel(iframeWindow, toolbox) {
136
this.panelWin = iframeWindow;
147
this._toolbox = toolbox;
15-
EventEmitter.decorate(this);
168
};
179

1810
GADebuggerPanel.prototype = {
19-
get target() this._toolbox.target,
11+
get target() {
12+
return this._toolbox.target;
13+
},
2014
open: function() {
2115
return this.panelWin.startup(this._toolbox, this.target).then(() => {
2216
this.isReady = true;
23-
this.emit('ready');
2417
return this;
2518
});
2619
},
2720
destroy: function() {
2821
return this.panelWin.shutdown().then(() => {
2922
this.isReady = false;
30-
this.emit('destroyed');
3123
});
3224
}
3325
};

src/firefox/chrome/resourceHelpers.jsm

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/firefox/chrome/resourceLoader.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
// GA Debugger uses a few of devtools internal assets for various UI elements
2+
// such as the split view and beacon inspector (a VariableView). Unfortunately,
3+
// the Devtools framework is in a state of flux, with asset paths and import
4+
// methods changing regularly with each release of Firefox.
5+
//
6+
// This helper module provides methods for loading script dependencies in either
7+
// commonJS or the older JSM format. Method calls accept the latest paths,
8+
// resolving them to the correct location for the current browser version. The
9+
// correct commonJS or JSM module is then loaded and returned to the caller.
10+
//
11+
// It also provides methods for loading stylesheets (again, with differing paths)
12+
// into an XUL document.
13+
//
14+
// ** This is a temporary fix and will remain here unitl the old versions are
15+
// phased out, at which point the min version for this extension will be changed
16+
// to 44 **
17+
18+
'use strict';
19+
20+
const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
21+
const appInfo = Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULAppInfo);
22+
const appMajorVer = parseInt(appInfo.version);
23+
24+
let ResourceLoader = {},
25+
require;
26+
27+
if (appMajorVer >= 48) {
28+
require = Cu.import("resource://devtools/shared/Loader.jsm", {}).require;
29+
}
30+
31+
ResourceLoader.require = function (url) {
32+
33+
if (url === 'devtools/client/shared/l10n') {
34+
// Prior to v48, the localization helpers were in ViewHelpers.jsm
35+
if (appMajorVer < 48) {
36+
return {
37+
LocalizationHelper: ResourceLoader.require('devtools/client/shared/widgets/view-helpers').ViewHelpers.L10N
38+
}
39+
}
40+
} else if (url === 'devtools/client/shared/widgets/view-helpers') {
41+
if (appMajorVer < 44) {
42+
// Prior to v44, ViewHelpers was in a different directory. (see: https://bugzil.la/912121)
43+
url = 'resource:///modules/devtools/ViewHelpers.jsm';
44+
} else if (appMajorVer < 49) {
45+
// Prior to v49, ViewHelpers was JSM. from 49 it's a commonJS module
46+
url = 'resource://devtools/client/shared/widgets/ViewHelpers.jsm';
47+
}
48+
} else if (url === 'devtools/shared/event-emitter') {
49+
// Proior to v48, event-emitter must be loaded as JSM
50+
if (appMajorVer < 44) {
51+
return Cu.import('resource://gre/modules/devtools/event-emitter.js', {}).EventEmitter;
52+
} else if (appMajorVer < 48) {
53+
return Cu.import('resource://devtools/shared/event-emitter.js', {}).EventEmitter;
54+
}
55+
} else if (url === 'resource://devtools/client/shared/widgets/SideMenuWidget.jsm') {
56+
// Proior to v44, SideMenuWidget.jsm existed elsewhere. (see: https://bugzil.la/912121)
57+
if (appMajorVer < 44) {
58+
url = 'resource:///modules/devtools/SideMenuWidget.jsm';
59+
}
60+
} else if (url === 'resource://devtools/client/shared/widgets/VariablesView.jsm') {
61+
// Proior to v44, VariablesView.jsm existed elsewhere. (see: https://bugzil.la/912121)
62+
if (appMajorVer < 44) {
63+
url = 'resource:///modules/devtools/VariablesView.jsm';
64+
}
65+
} else if (url === 'promise') {
66+
// Proior to v48, promise must be loaded as JSM
67+
if (appMajorVer < 48) {
68+
return Cu.import('resource://gre/modules/Promise.jsm', {}).Promise;
69+
}
70+
}
71+
72+
if (appMajorVer >= 48 && !url.endsWith('.jsm')) {
73+
return require(url);
74+
} else {
75+
return Cu.import(url, {});
76+
}
77+
}
78+
79+
80+
ResourceLoader.loadStyleSheet = function(url, doc) {
81+
if (appMajorVer < 44) {
82+
if (url === 'chrome://devtools/content/shared/widgets/widgets.css') {
83+
url = 'chrome://browser/content/devtools/widgets.css';
84+
} else {
85+
url = url.replace('chrome://devtools/skin/', 'chrome://browser/skin/devtools/')
86+
}
87+
}
88+
var pi = doc.createProcessingInstruction('xml-stylesheet', 'href="' + url + '" type="text/css"');
89+
doc.insertBefore(pi, doc.firstChild);
90+
}
91+
92+
93+
ResourceLoader.getAppMajorVersion = function () {
94+
return appMajorVer;
95+
}
96+
97+
this.EXPORTED_SYMBOLS = ['ResourceLoader'];

src/firefox/chrome/tool.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ const EVENTS = {
1515
const RE_ALPHA_CHARS = /[^a-z]/gi;
1616
const RE_NUMBERIC_CHARS = /[^0-9.]/g;
1717

18-
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
19-
Cu.import('chrome://gadebugger/content/resourceHelpers.jsm')
18+
Cu.import('chrome://gadebugger/content/resourceLoader.js');
2019

21-
ResourceHelpers.importModule('resource://devtools/client/shared/widgets/SideMenuWidget.jsm', this);
22-
ResourceHelpers.importModule('resource://devtools/client/shared/widgets/ViewHelpers.jsm', this);
23-
ResourceHelpers.importModule('resource://devtools/client/shared/widgets/VariablesView.jsm', this);
20+
const appVersion = ResourceLoader.getAppMajorVersion();
21+
const {Heritage, WidgetMethods, ViewHelpers} = ResourceLoader.require('devtools/client/shared/widgets/view-helpers');
22+
const {SideMenuWidget} = ResourceLoader.require('resource://devtools/client/shared/widgets/SideMenuWidget.jsm');
23+
const {VariablesView} = ResourceLoader.require('resource://devtools/client/shared/widgets/VariablesView.jsm');
24+
const {LocalizationHelper} = ResourceLoader.require('devtools/client/shared/l10n');
25+
const EventEmitter = ResourceLoader.require('devtools/shared/event-emitter');
26+
const promise = ResourceLoader.require('promise');
2427

25-
ResourceHelpers.insertStyleSheet('chrome://devtools/skin/common.css', document);
26-
ResourceHelpers.insertStyleSheet('chrome://devtools/skin/splitview.css', document);
27-
ResourceHelpers.insertStyleSheet('chrome://devtools/skin/widgets.css', document);
28-
ResourceHelpers.insertStyleSheet('chrome://devtools/content/shared/widgets/widgets.css', document);
29-
30-
XPCOMUtils.defineLazyModuleGetter(this, 'EventEmitter', 'resource://gre/modules/devtools/event-emitter.js');
31-
XPCOMUtils.defineLazyModuleGetter(this, 'promise', 'resource://gre/modules/commonjs/sdk/core/promise.js', 'Promise');
28+
ResourceLoader.loadStyleSheet('chrome://devtools/skin/common.css', document);
29+
ResourceLoader.loadStyleSheet('chrome://devtools/skin/splitview.css', document);
30+
ResourceLoader.loadStyleSheet('chrome://devtools/skin/widgets.css', document);
31+
ResourceLoader.loadStyleSheet('chrome://devtools/content/shared/widgets/widgets.css', document);
3232

3333
function startup(toolbox, target) {
3434
TrackerListView.initialize();
@@ -562,7 +562,7 @@ let BeaconPropertiesView = {
562562
/**
563563
* Localization convenience methods.
564564
*/
565-
let L10N = new ViewHelpers.L10N(STRINGS_URI);
565+
let L10N = new LocalizationHelper(STRINGS_URI);
566566

567567
/**
568568
* Convenient way of emitting events from the panel window.
@@ -572,4 +572,6 @@ EventEmitter.decorate(this);
572572
/**
573573
* DOM query helper.
574574
*/
575-
function $(selector, target = document) target.querySelector(selector)
575+
function $(selector, target = document) {
576+
return target.querySelector(selector);
577+
}

0 commit comments

Comments
 (0)