Skip to content

Commit 6aa07a7

Browse files
authored
Merge pull request #34 from keithclark/bug-33-firefox-48-error
Firefox 48 error
2 parents e97ca41 + 7a70fa0 commit 6aa07a7

File tree

9 files changed

+161
-77
lines changed

9 files changed

+161
-77
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: 35 additions & 20 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();
@@ -175,8 +175,15 @@ let ToolbarView = {
175175
this._clearButton = $('#clear-button');
176176
this._preserveLogCheckbox = $('#preserve-log');
177177

178-
this._captureToggleButton.setAttribute('label', L10N.getStr('startLabel'));
179-
this._clearButton.setAttribute('label', L10N.getStr('clearLabel'));
178+
// Prior to v48, use buttons text labels instead of icons. Altough pre-48
179+
// supported icons, the icon colouring requirements were different
180+
if (appVersion < 50) {
181+
this._captureToggleButton.classList.remove('record-button');
182+
this._clearButton.classList.remove('devtools-clear-icon');
183+
this._clearButton.setAttribute('label', L10N.getStr('clearLabel'));
184+
}
185+
186+
this._clearButton.setAttribute('tooltiptext', L10N.getStr('clearTooltip'));
180187
this._preserveLogCheckbox.setAttribute('label', L10N.getStr('preserveLogLabel'));
181188

182189
this._onCaptureTogglePressed = this._onCaptureTogglePressed.bind(this);
@@ -215,12 +222,18 @@ let ToolbarView = {
215222
BeaconPropertiesView.hide();
216223
},
217224
_onBeaconMonitorStart: function() {
218-
let label = L10N.getStr('stopLabel');
219-
this._captureToggleButton.setAttribute('label', label);
225+
if (appVersion < 50) {
226+
this._captureToggleButton.setAttribute('label', L10N.getStr('stopLabel'));
227+
}
228+
this._captureToggleButton.setAttribute('tooltiptext', L10N.getStr('stopTooltip'));
229+
this._captureToggleButton.setAttribute('checked', 'true');
220230
},
221231
_onBeaconMonitorStop: function() {
222-
let label = L10N.getStr('startLabel');
223-
this._captureToggleButton.setAttribute('label', label);
232+
if (appVersion < 50) {
233+
this._captureToggleButton.setAttribute('label', L10N.getStr('startLabel'));
234+
}
235+
this._captureToggleButton.setAttribute('tooltiptext', L10N.getStr('startTooltip'));
236+
this._captureToggleButton.removeAttribute('checked');
224237
}
225238
};
226239

@@ -562,7 +575,7 @@ let BeaconPropertiesView = {
562575
/**
563576
* Localization convenience methods.
564577
*/
565-
let L10N = new ViewHelpers.L10N(STRINGS_URI);
578+
let L10N = new LocalizationHelper(STRINGS_URI);
566579

567580
/**
568581
* Convenient way of emitting events from the panel window.
@@ -572,4 +585,6 @@ EventEmitter.decorate(this);
572585
/**
573586
* DOM query helper.
574587
*/
575-
function $(selector, target = document) target.querySelector(selector)
588+
function $(selector, target = document) {
589+
return target.querySelector(selector);
590+
}

src/firefox/chrome/tool.xul

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
<box>
1313
<toolbar class="devtools-toolbar" flex="1">
1414
<hbox class="devtools-toolbarbutton-group">
15-
<toolbarbutton id="capture-button" class="devtools-toolbarbutton" />
16-
<toolbarbutton id="clear-button" class="devtools-toolbarbutton" />
15+
<toolbarbutton id="clear-button" class="devtools-toolbarbutton devtools-clear-icon" />
16+
<toolbarbutton id="capture-button" class="devtools-toolbarbutton record-button" />
1717
</hbox>
1818
<checkbox id="preserve-log" checked="true" />
1919
</toolbar>

src/firefox/locale/en-US/strings.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ devtoolsTooltip=Google Analytics Debugger
33

44
# Button labels
55
startLabel=Start
6+
startTooltip=Start recording
67
stopLabel=Stop
8+
stopTooltip=Stop recording
79
clearLabel=Clear
10+
clearTooltip=Clear the beacon log
811
preserveLogLabel=Preserve log
912

1013
# Tracker

src/firefox/skin/icon-record.svg

Lines changed: 3 additions & 0 deletions
Loading

src/firefox/skin/style.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,20 @@
7272
background-position: 45px 50%;
7373
padding-left: 60px;
7474
}
75+
76+
.record-button {
77+
list-style-image: url(icon-record.svg);
78+
}
79+
80+
#trackers-list {
81+
min-width: 150px;
82+
}
83+
#tracker-beacons {
84+
min-width: 300px;
85+
}
86+
#beacon-properties {
87+
min-width: 300px;
88+
}
89+
#preserve-log {
90+
margin-left: .75em;
91+
}

0 commit comments

Comments
 (0)