Skip to content

Commit 46f0cfe

Browse files
Andrew Millerrpl
authored andcommitted
fix(firefox-android): Support abstract sockets for RDB (#1391)
New versions of firefox-android (>= 63) appear to use abstract unix sockets instead of filesystem sockets for the debugging connection. This change ensures support for both the original filesystem namespace and also the abstract namespace.
1 parent 7f90caa commit 46f0cfe

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/extension-runners/firefox-android.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,9 +578,13 @@ export class FirefoxAndroidExtensionRunner {
578578
// to connect the Firefox DevTools to the Firefox for Android instance).
579579
log.info(`You can connect to this Android device on TCP port ${tcpPort}`);
580580

581+
const forwardSocketSpec = this.selectedRDPSocketFile.startsWith('@') ?
582+
`localabstract:${this.selectedRDPSocketFile.substr(1)}`
583+
: `localfilesystem:${this.selectedRDPSocketFile}`;
584+
581585
await adbUtils.setupForward(
582586
selectedAdbDevice,
583-
`localfilesystem:${this.selectedRDPSocketFile}`,
587+
forwardSocketSpec,
584588
`tcp:${tcpPort}`
585589
);
586590

tests/unit/test-extension-runners/test.firefox-android.js

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ const fakeRDPUnixSocketFile = (
4343
'/data/data/org.mozilla.firefox/firefox-debugger-socket'
4444
);
4545

46+
const fakeRDPUnixAbstractSocketFile = (
47+
'@org.mozilla.firefox/firefox-debugger-socket'
48+
);
49+
4650
type PrepareParams = {
4751
params?: Object,
4852
debuggerPort?: number,
@@ -101,7 +105,8 @@ function prepareExtensionRunnerParams({
101105
};
102106
}
103107

104-
function prepareSelectedDeviceAndAPKParams(overriddenProperties = {}) {
108+
function prepareSelectedDeviceAndAPKParams(
109+
overriddenProperties = {}, adbOverrides = {}) {
105110
const fakeADBUtils = {
106111
discoverDevices: sinon.spy(() => Promise.resolve([
107112
'emulator-1', 'emulator-2',
@@ -124,6 +129,7 @@ function prepareSelectedDeviceAndAPKParams(overriddenProperties = {}) {
124129
clearArtifactsDir: sinon.spy(() => Promise.resolve()),
125130
setUserAbortDiscovery: sinon.spy(() => {}),
126131
ensureRequiredAPKRuntimePermissions: sinon.spy(() => Promise.resolve()),
132+
...adbOverrides,
127133
};
128134

129135
const {params} = prepareExtensionRunnerParams({
@@ -397,6 +403,36 @@ describe('util/extension-runners/firefox-android', () => {
397403
);
398404
});
399405

406+
it('discovers the RDP abstract unix socket and forward it on',
407+
async () => {
408+
const {
409+
params, fakeADBUtils,
410+
} = prepareSelectedDeviceAndAPKParams({}, {
411+
discoverRDPUnixSocket: sinon.spy(
412+
() => Promise.resolve(fakeRDPUnixAbstractSocketFile)
413+
)});
414+
415+
const runnerInstance = new FirefoxAndroidExtensionRunner(params);
416+
await runnerInstance.run();
417+
418+
sinon.assert.calledWithMatch(
419+
fakeADBUtils.discoverRDPUnixSocket,
420+
'emulator-1', 'org.mozilla.firefox'
421+
);
422+
423+
sinon.assert.calledWithMatch(
424+
fakeADBUtils.setupForward,
425+
'emulator-1',
426+
'localabstract:org.mozilla.firefox/firefox-debugger-socket',
427+
`tcp:${runnerInstance.selectedTCPPort}`,
428+
);
429+
430+
sinon.assert.callOrder(
431+
fakeADBUtils.discoverRDPUnixSocket,
432+
fakeADBUtils.setupForward
433+
);
434+
});
435+
400436
it('installs the build extension as a temporarily installed addon',
401437
async () => {
402438
const {

0 commit comments

Comments
 (0)