From 53b0c295e2be20fe2e6f0e139c1cab4d3d2b6672 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 5 Oct 2015 23:12:32 -0700 Subject: [PATCH 01/42] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ======== https://hg.mozilla.org/integration/gaia-central/rev/e83090296c16 Author: Yi-Fan Liao Desc: Merge pull request #32229 from ferjm/bug1211367.fxaassertionkeys.tv Bug 1211367 - Add getAssertion and getKeys to Firefox Accounts client. r=yifan ======== https://hg.mozilla.org/integration/gaia-central/rev/f28082794508 Author: Fernando Jiménez Moreno Desc: Bug 1211367 - Add getAssertion and getKeys to Firefox Accounts client. r=yifan --- b2g/config/gaia.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index a72fcf6cc66..5ddf2d08a8a 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -1,9 +1,9 @@ { "git": { - "git_revision": "60cdaa3d3424db3432dc903e7f9c6c8fa099c06d", + "git_revision": "8c58d628dcccdfccd238d5f128dfce37795a981f", "remote": "https://git.mozilla.org/releases/gaia.git", "branch": "" }, - "revision": "1de2dfa13b0b91c293111198011353c7bb86242d", + "revision": "e83090296c16cd09dc5ed5bb2de157547beba4c9", "repo_path": "integration/gaia-central" } From 95c51c7f22394174b43c9dd4c55edaf9f8815577 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 5 Oct 2015 23:15:40 -0700 Subject: [PATCH 02/42] Bumping manifests a=b2g-bump --- b2g/config/aries/sources.xml | 2 +- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator-l/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/nexus-4-kk/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/nexus-5-l/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/aries/sources.xml b/b2g/config/aries/sources.xml index fa381995fd4..f3ac2b4a847 100644 --- a/b2g/config/aries/sources.xml +++ b/b2g/config/aries/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index e6d93db6e11..c3a6f3fafc7 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 17ed8e3480e..434079de15f 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index b85821e6120..4eef3aa971e 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index e07de16b155..8f829599e9f 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator-l/sources.xml b/b2g/config/emulator-l/sources.xml index 1baf3418253..335062e5849 100644 --- a/b2g/config/emulator-l/sources.xml +++ b/b2g/config/emulator-l/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 17ed8e3480e..434079de15f 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index af584905fa3..7cd005a3fab 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4-kk/sources.xml b/b2g/config/nexus-4-kk/sources.xml index cc6f720cd2d..edc3a358faa 100644 --- a/b2g/config/nexus-4-kk/sources.xml +++ b/b2g/config/nexus-4-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 671e16d0af6..6f86326fd14 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -18,7 +18,7 @@ - + diff --git a/b2g/config/nexus-5-l/sources.xml b/b2g/config/nexus-5-l/sources.xml index 5ae9e0c3c5d..e573739f338 100644 --- a/b2g/config/nexus-5-l/sources.xml +++ b/b2g/config/nexus-5-l/sources.xml @@ -15,7 +15,7 @@ - + From 89613d27805248f93460ff3f24ee73cbc3c157e9 Mon Sep 17 00:00:00 2001 From: Ben Hsu Date: Sun, 4 Oct 2015 22:51:00 +0800 Subject: [PATCH 03/42] Bug 1147296 - Part 1: Create |Modem| helper object (head.js). r=btseng --- dom/telephony/test/marionette/head.js | 180 +++++++++++------- .../test/marionette/test_modem_switch_tech.js | 4 +- 2 files changed, 117 insertions(+), 67 deletions(-) diff --git a/dom/telephony/test/marionette/head.js b/dom/telephony/test/marionette/head.js index a092585cce5..7536a249e2f 100644 --- a/dom/telephony/test/marionette/head.js +++ b/dom/telephony/test/marionette/head.js @@ -99,6 +99,121 @@ var emulator = (function() { }; }()); +/** + * Modem Helper + * + * TODO: Should select which modem here to support multi-SIM + */ + +function modemHelperGenerator() { + function Modem(aClientID) { + this.clientID = aClientID; + } + Modem.prototype = { + clientID: 0, + + voiceTypeToTech: function(aVoiceType) { + switch(aVoiceType) { + case "gsm": + case "gprs": + case "edge": + return "gsm"; + + case "umts": + case "hsdpa": + case "hsupa": + case "hspa": + case "hspa+": + return "wcdma"; + + case "is95a": + case "is95b": + case "1xrtt": + return "cdma"; + + case "evdo0": + case "evdoa": + case "evdob": + return "evdo"; + + case "ehrpd": + return "ehrpd"; + + case "lte": + return "lte"; + + default: + return null; + } + }, + + isCDMA: function() { + var mobileConn = navigator.mozMobileConnections[this.clientID]; + var tech = mobileConn && this.voiceTypeToTech(mobileConn.voice.type); + return tech === "cdma" || tech === "evdo" || tech == "ehrpd"; + }, + + isGSM: function() { + var mobileConn = navigator.mozMobileConnections[this.clientID]; + var tech = mobileConn && this.voiceTypeToTech(mobileConn.voice.type); + return tech === "gsm" || tech === "wcdma" || tech === "lte"; + }, + + /** + * @return Promise: + */ + changeTech: function(aTech, aMask) { + let target = navigator.mozMobileConnections[this.clientID]; + + let mask = aMask || { + gsm: "gsm", + wcdma: "gsm/wcdma", + cdma: "cdma", + evdo: "evdo0", + ehrpd: "ehrpd", + lte: "lte" + }[aTech]; + + let waitForExpectedTech = () => { + return new Promise((aResolve, aReject) => { + let listener = aEvent => { + log("MobileConnection[" + this.clientID + "] " + + "received event 'voicechange'"); + if (aTech === this.voiceTypeToTech(target.voice.type)) { + target.removeEventListener("voicechange", listener); + aResolve(); + } + }; + + target.addEventListener("voicechange", listener); + }); + }; + + // TODO: Should select a modem here to support multi-SIM + let changeToExpectedTech = () => { + return Promise.resolve() + .then(() => emulator.runCmd("modem tech " + aTech + " " + mask)) + .then(() => emulator.runCmd("modem tech")) + .then(result => is(result[0], aTech + " " + mask, + "Check modem 'tech/preferred mask'")); + } + + return aTech === this.voiceTypeToTech(target.voice.type) + ? Promise.resolve() + : Promise.all([waitForExpectedTech(), changeToExpectedTech()]); + } + }; + + let modems = []; + for (let i = 0; i < navigator.mozMobileConnections.length; ++i) { + modems.push(new Modem(i)); + } + return modems; +} + +let Modems = modemHelperGenerator(); +let Modem = Modems[0]; + /** * Telephony related helper functions. */ @@ -276,70 +391,6 @@ var emulator = (function() { }); } - /** - * @param aVoiceType - * The voice type of a mobileConnection, which can be obtained from - * |.voice.type|. - * @return A string with format of the emulator voice tech. - */ - function voiceTypeToTech(aVoiceType) { - switch(aVoiceType) { - case "gsm": - case "gprs": - case "edge": - return "gsm"; - - case "umts": - case "hsdpa": - case "hsupa": - case "hspa": - case "hspa+": - return "wcdma"; - - case "is95a": - case "is95b": - case "1xrtt": - return "cdma"; - - case "evdo0": - case "evdoa": - case "evdob": - return "evdo"; - - case "ehrpd": - case "lte": - return "lte"; - - default: - return null; - } - } - - /** - * @return Promise - */ - function changeModemTech(aTech, aPreferredMask) { - let mobileConn = navigator.mozMobileConnections[0]; - - function isTechMatched() { - return aTech === voiceTypeToTech(mobileConn.voice.type); - } - - let promise1 = isTechMatched() ? Promise.resolve() - : waitForEvent(mobileConn, - "voicechange", - isTechMatched); - - let promise2 = Promise.resolve() - .then(() => emulator.runCmd("modem tech " + aTech + " " + aPreferredMask)) - .then(() => emulator.runCmd("modem tech")) - .then(result => is(result[0], - aTech + " " + aPreferredMask, - "Check modem 'tech/preferred mask'")); - - return Promise.all([promise1, promise2]); - } - /** * @return Promise */ @@ -1216,7 +1267,6 @@ var emulator = (function() { this.gWaitForNamedStateEvent = waitForNamedStateEvent; this.gWaitForStateChangeEvent = waitForStateChangeEvent; this.gCheckInitialState = checkInitialState; - this.gChangeModemTech = changeModemTech; this.gClearCalls = clearCalls; this.gOutCallStrPool = outCallStrPool; this.gInCallStrPool = inCallStrPool; diff --git a/dom/telephony/test/marionette/test_modem_switch_tech.js b/dom/telephony/test/marionette/test_modem_switch_tech.js index 565f528ec5c..7af228cdae4 100644 --- a/dom/telephony/test/marionette/test_modem_switch_tech.js +++ b/dom/telephony/test/marionette/test_modem_switch_tech.js @@ -39,7 +39,7 @@ var settings = [ startTest(function() { let promise = settings.reduce((aPromise, aSetting) => { - return aPromise.then(() => gChangeModemTech(aSetting.tech, aSetting.mask)); + return aPromise.then(() => Modem.changeTech(aSetting.tech, aSetting.mask)); }, Promise.resolve()); return promise @@ -47,7 +47,7 @@ startTest(function() { .catch(error => ok(false, "Promise reject: " + error)) // Switch to the default modem tech - .then(() => gChangeModemTech("wcdma", "gsm/wcdma")) + .then(() => Modem.changeTech("wcdma", "gsm/wcdma")) .catch(error => ok(false, "Fetal Error: Promise reject: " + error)) .then(finish); From c3be13f27ffdc37af67128f37051f1093547fc1c Mon Sep 17 00:00:00 2001 From: Ben Hsu Date: Fri, 11 Sep 2015 03:07:00 +0800 Subject: [PATCH 04/42] Bug 1147296 - Part 2: Move to telephony command group and support CDMA operations (head.js). r=btseng --- dom/telephony/test/marionette/head.js | 59 +++++++++++++------ .../test/marionette/test_TelephonyUtils.js | 4 +- .../test/marionette/test_consecutive_hold.js | 6 +- .../marionette/test_outgoing_auto_hold.js | 6 +- .../test/marionette/test_outgoing_busy.js | 2 +- 5 files changed, 50 insertions(+), 27 deletions(-) diff --git a/dom/telephony/test/marionette/head.js b/dom/telephony/test/marionette/head.js index 7536a249e2f..189a8eaf335 100644 --- a/dom/telephony/test/marionette/head.js +++ b/dom/telephony/test/marionette/head.js @@ -412,7 +412,7 @@ let Modem = Modems[0]; return Promise.all(hangUpPromises) .then(() => { - return emulator.runCmd("gsm clear").then(waitForNoCall); + return emulator.runCmd("telephony clear").then(waitForNoCall); }) .then(waitForNoCall); } @@ -529,7 +529,7 @@ let Modem = Modems[0]; * @return Promise */ function checkEmulatorCallList(expectedCallList) { - return emulator.runCmd("gsm list").then(result => { + return emulator.runCmd("telephony list").then(result => { log("Call list is now: " + result); for (let i = 0; i < expectedCallList.length; ++i) { is(result[i], expectedCallList[i], "emulator calllist"); @@ -582,9 +582,9 @@ let Modem = Modems[0]; return checkEmulatorCallList(callList); } - /** - * Request utility functions. - */ + /**************************************************************************** + **** Request utility functions **** + ****************************************************************************/ /** * Make an outgoing call. @@ -609,7 +609,13 @@ let Modem = Modems[0]; is(outCall.state, "dialing"); is(outCall.serviceId, serviceId); }) - .then(() => waitForNamedStateEvent(outCall, "alerting")); + .then(() => { + // A CDMA call goes to connected state directly when the operator find + // its callee, which makes the "connected" state in CDMA calls behaves + // like the "alerting" state in GSM calls. + let state = Modems[serviceId].isGSM() ? "alerting" : "connected"; + return waitForNamedStateEvent(outCall, state); + }); } /** @@ -632,7 +638,13 @@ let Modem = Modems[0]; is(outCall.id.number, number); is(outCall.state, "dialing"); }) - .then(() => waitForNamedStateEvent(outCall, "alerting")) + .then(() => { + // Similar to function |dial|, a CDMA call directly goes to connected + // state when the operator find its callee. + let state = Modems[outCall.serviceId].isGSM() ? "alerting" + : "connected"; + return waitForNamedStateEvent(outCall, state); + }) .then(() => { is(outCall.emergency, true, "check emergency"); return outCall; @@ -702,19 +714,23 @@ let Modem = Modems[0]; /** * Hold a call. * - * @param call + * @param aCall * A TelephonyCall object. + * @param aWaitForEvent + * Decide whether to wait for the state event. * @return Promise */ - function hold(call) { + function hold(aCall, aWaitForEvent = true) { log("Putting the call on hold."); let promises = []; - promises.push(waitForNamedStateEvent(call, "held")); - promises.push(call.hold()); + if (aWaitForEvent) { + promises.push(waitForNamedStateEvent(aCall, "held")); + } + promises.push(aCall.hold()); - return Promise.all(promises).then(() => call); + return Promise.all(promises).then(() => aCall); } /** @@ -724,7 +740,7 @@ let Modem = Modems[0]; * A TelephonyCall object. * @return Promise */ - function resume(call) { + function resume(call, aWaitForEvent = true) { log("Resuming the held call."); let promises = []; @@ -772,8 +788,10 @@ let Modem = Modems[0]; numberPresentation = numberPresentation || ""; name = name || ""; namePresentation = namePresentation || ""; - emulator.runCmd("gsm call " + number + "," + numberPresentation + "," + name + - "," + namePresentation); + emulator.runCmd("telephony call " + number + + "," + numberPresentation + + "," + name + + "," + namePresentation); return waitForEvent(telephony, "incoming") .then(event => { @@ -798,9 +816,14 @@ let Modem = Modems[0]; function remoteAnswer(call) { log("Remote answering the call: " + call.id.number); - emulator.runCmd("gsm accept " + call.id.number); + emulator.runCmd("telephony accept " + call.id.number); - return waitForNamedStateEvent(call, "connected"); + // A CDMA call goes to connected state directly when the operator find its + // callee, which makes the "connected" state in CDMA calls behaves like the + // "alerting" state in GSM calls, so we don't have to wait for the call to + // change to "connected" state here for CDMA calls. + return Modem.isCDMA() ? Promise.resolve() + : waitForNamedStateEvent(call, "connected"); } /** @@ -813,7 +836,7 @@ let Modem = Modems[0]; function remoteHangUp(call) { log("Remote hanging up the call: " + call.id.number); - emulator.runCmd("gsm cancel " + call.id.number); + emulator.runCmd("telephony cancel " + call.id.number); return waitForNamedStateEvent(call, "disconnected"); } diff --git a/dom/telephony/test/marionette/test_TelephonyUtils.js b/dom/telephony/test/marionette/test_TelephonyUtils.js index 7cecd11b0b0..a0b5c3a0556 100644 --- a/dom/telephony/test/marionette/test_TelephonyUtils.js +++ b/dom/telephony/test/marionette/test_TelephonyUtils.js @@ -78,7 +78,7 @@ function test_oneCall() { let p = waitForStateChanged(aAllInfo => { return aAllInfo[0].callState === Ci.nsITelephonyService.CALL_STATE_CONNECTED; }); - emulator.runCmd("gsm accept " + number); + emulator.runCmd("telephony accept " + number); return p; }) .then(() => { @@ -87,7 +87,7 @@ function test_oneCall() { }) .then(() => { let p = TelephonyUtils.waitForNoCalls(); - emulator.runCmd("gsm cancel " + number); + emulator.runCmd("telephony cancel " + number); return p; }); } diff --git a/dom/telephony/test/marionette/test_consecutive_hold.js b/dom/telephony/test/marionette/test_consecutive_hold.js index c13f95a9b1b..c09c179fd1b 100644 --- a/dom/telephony/test/marionette/test_consecutive_hold.js +++ b/dom/telephony/test/marionette/test_consecutive_hold.js @@ -24,7 +24,7 @@ startTest(function() { // Disable the Hold function of the emulator, then hold the active call, // where the hold request will fail and the call will remain active. - .then(() => emulator.runCmd("gsm disable hold")) + .then(() => emulator.runCmd("telephony disable hold")) .then(() => gHold(inCall)) .then(() => ok(false, "This hold request should be rejected."), () => log("This hold request is rejected as expected.")) @@ -33,7 +33,7 @@ startTest(function() { // Enable the Hold function of the emulator, then hold the active call, // where the hold request should succeed and the call should become held. - .then(() => emulator.runCmd("gsm enable hold")) + .then(() => emulator.runCmd("telephony enable hold")) .then(() => gHold(inCall)) .then(() => log("This hold request is resolved as expected."), () => ok(false, "This hold request should be resolved.")) @@ -47,6 +47,6 @@ startTest(function() { // Clean Up .catch(error => ok(false, "Promise reject: " + error)) - .then(() => emulator.runCmd("gsm enable hold")) + .then(() => emulator.runCmd("telephony enable hold")) .then(finish); }); diff --git a/dom/telephony/test/marionette/test_outgoing_auto_hold.js b/dom/telephony/test/marionette/test_outgoing_auto_hold.js index af07835d306..7dca375920b 100644 --- a/dom/telephony/test/marionette/test_outgoing_auto_hold.js +++ b/dom/telephony/test/marionette/test_outgoing_auto_hold.js @@ -37,7 +37,7 @@ function testAutoHoldCallFailed() { const callNumber2 = "0900000012"; return Promise.resolve() - .then(() => emulator.runCmd("gsm disable hold")) + .then(() => emulator.runCmd("telephony disable hold")) .then(() => gDial(callNumber1)) .then(call => { outCall1 = call; }) .then(() => gRemoteAnswer(outCall1)) @@ -51,7 +51,7 @@ function testAutoHoldCallFailed() { return gRemoteHangUpCalls([outCall2]); }, () => log("The second |dial()| is rejected as expected.")) .then(() => gRemoteHangUpCalls([outCall1])) - .then(() => emulator.runCmd("gsm enable hold")); + .then(() => emulator.runCmd("telephony enable hold")); } function testAutoHoldConferenceCall() { @@ -87,7 +87,7 @@ startTest(function() { .then(() => testAutoHoldConferenceCall()) .catch(error => { ok(false, "Promise reject: " + error); - emulator.runCmd("gsm enable hold"); + emulator.runCmd("telephony enable hold"); }) .then(finish); }); diff --git a/dom/telephony/test/marionette/test_outgoing_busy.js b/dom/telephony/test/marionette/test_outgoing_busy.js index 5c48acda8b2..1a77316db23 100644 --- a/dom/telephony/test/marionette/test_outgoing_busy.js +++ b/dom/telephony/test/marionette/test_outgoing_busy.js @@ -19,7 +19,7 @@ startTest(function() { is(event.call.error.name, "BusyError"); is(event.call.disconnectedReason, "Busy"); }); - let p2 = emulator.runCmd("gsm busy " + outNumber); + let p2 = emulator.runCmd("telephony busy " + outNumber); return Promise.all([p1, p2]); }) .then(() => gCheckAll(null, [], "", [], [])) From ec6493757c0a71898bd65879b9655b063ba756b0 Mon Sep 17 00:00:00 2001 From: Ben Hsu Date: Sun, 4 Oct 2015 22:52:00 +0800 Subject: [PATCH 05/42] Bug 1147296 - Part 3: Introduce a new check function for both GSM and CDMA (head.js). r=btseng --- dom/telephony/test/marionette/head.js | 165 ++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/dom/telephony/test/marionette/head.js b/dom/telephony/test/marionette/head.js index 189a8eaf335..ceac61f65ca 100644 --- a/dom/telephony/test/marionette/head.js +++ b/dom/telephony/test/marionette/head.js @@ -474,6 +474,11 @@ let Modem = Modems[0]; checkState(null, [], "", []); } + + /**************************************************************************** + **** Check Functions **** + ****************************************************************************/ + /** * Convenient helper to compare two call lists (order is not important). */ @@ -582,6 +587,166 @@ let Modem = Modems[0]; return checkEmulatorCallList(callList); } + /** + * The factory function for creating an expected call. + * + * @param aReference + * The reference of the telephonyCall object. + * @param aNumber + * The call number. + * @param aConference + * Shows whether the call belongs to the conference. + * @param aDirection + * The direction of the call, "in" for inbound, and "out" for outbound. + * @param aState + * The expected state of the call. + * @param aEmulatorState + * The state logged in emulator now, may be different from aState. + * @param aDisconnectedReason + * The disconnected reason if the call becomed disconnected. + */ + function createExptectedCall(aReference, aNumber, aConference, aDirection, + aState, aEmulatorState, aDisconnectedReason) { + return { + reference: aReference, + number: aNumber, + conference: aConference, + direction: aDirection, + state: aState, + emulatorState: aEmulatorState, + disconnectedReason: aDisconnectedReason + }; + } + + /** + * Check telephony.active + * + * @param aExpectedCalls + * An array of expected calls. + * @param aExpectedCallsInConference + * An array of expected calls in the conference. + */ + function checkActive(aExpectedCalls, aExpectedCallsInConference) { + // Get the active call + let calls = aExpectedCalls && aExpectedCalls.filter(aExpectedCall => { + return aExpectedCall.state === "connected" || + aExpectedCall.state === "alerting" || + aExpectedCall.state === "dialing"; + }); + + ok(calls.length < 2, "Too many actives call in telephony.calls"); + let activeCall = calls.length ? calls[0].reference : null; + + // Get the active conference + let callsInConference = aExpectedCallsInConference || []; + let activeConference = callsInConference.length && + callsInConference[0].state === "connected" + ? navigator.mozTelephony.conferenceGroup + : null; + + // Check telephony.active + ok(!(activeCall && activeConference), + "An active call cannot coexist with an active conference call."); + is(telephony.active, activeCall || activeConference, "check Active"); + } + + /** + * Check whether the data in telephony and emulator meets our expectation. + * + * NOTE: Conference call is not supported in this function yet, so related + * checks are skipped. + * + * Fulfill params: + * { + * reference, -- the reference of the call object instance. + * number, -- the call number. + * conference, -- shows whether it belongs to the conference. + * direction, -- "in" for inbound, and "out" for outbound. + * state, -- the call state. + * emulatorState, -- the call state logged in emulator now. + * disconnectedReason, -- the disconnected reason of a disconnected call. + * } + * + * @param aExpectedCalls + * An array of call records. + * @return Promise + */ + function equals(aExpectedCalls) { + // Classify calls + let callsInTelephony = []; + let CallsInConference = []; + + aExpectedCalls.forEach(function(aCall) { + if (aCall.state === "disconnected") { + is(aCall.disconnectedReason, + aCall.reference.disconnectedReason, + "Check disconnectedReason"); + return; + } + + if (aCall.conference) { + CallsInConference.push(aCall); + return; + } + + callsInTelephony.push(aCall); + ok(!aCall.secondId, "For a telephony call, the secondId must be null"); + }); + + // Check the active connection + checkActive(callsInTelephony, CallsInConference); + + // Check telephony.calls + is(telephony.calls.length, + callsInTelephony.length, + "Check telephony.calls.length"); + + callsInTelephony.forEach(aExpectedCall => { + let number = aExpectedCall.number; + let call = telephony.calls.find(aCall => aCall.id.number === number); + if (!call) { + ok(false, "telephony.calls lost the call(number: " + number + ")"); + return; + } + + is(call, aExpectedCall.reference, + "Check the object reference of number:" + number); + + is(call.state, aExpectedCall.state, + "Check call.state of number:" + number); + }); + + // Check conference.calls + // NOTE: This function doesn't support conference call now, so the length of + // |CallsInConference| should be 0, and the conference state shoul be "". + is(conference.state, "", "Conference call is not supported yet."); + is(CallsInConference.length, 0, "Conference call is not supported yet."); + + // Check the emulator call list + // NOTE: Conference is not supported yet, so |CallsInConference| is ignored. + let strings = callsInTelephony.map(aCall => { + // The emulator doesn't have records for disconnected calls. + if (aCall.emulatorState === "disconnected") { + return null; + } + + let state = { + alerting: "ringing", + connected: "active", + held: "held", + incoming: "incoming" + }[aCall.state]; + + state = aCall.emulatorState || state; + let prefix = (aCall.direction === "in") ? "inbound from " + : "outbound to "; + + return state ? (prefix + aCall.number + " : " + state) : null; + }); + + return checkEmulatorCallList(strings.filter(aString => aString)); + } + /**************************************************************************** **** Request utility functions **** ****************************************************************************/ From 52561bb814c954147aba5654a72a61836dcfea25 Mon Sep 17 00:00:00 2001 From: Ben Hsu Date: Fri, 11 Sep 2015 03:09:00 +0800 Subject: [PATCH 06/42] Bug 1147296 - Part 4: Expose new functions (head.js). r=btseng --- dom/telephony/test/marionette/head.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dom/telephony/test/marionette/head.js b/dom/telephony/test/marionette/head.js index ceac61f65ca..b95ddf8c7e1 100644 --- a/dom/telephony/test/marionette/head.js +++ b/dom/telephony/test/marionette/head.js @@ -1482,6 +1482,25 @@ let Modem = Modems[0]; this.gSetupConference = setupConference; this.gSetRadioEnabled = setRadioEnabled; this.gSetRadioEnabledAll = setRadioEnabledAll; + + // Telephony helper + this.TelephonyHelper = { + dial: dial, + answer: answer, + hangUp: hangUp, + hold: hold, + resume: resume, + equals: equals, + createExptectedCall: createExptectedCall + }; + + // Remote Utils, TODO: This should be an array for multi-SIM scenarios + this.Remotes = [{ + dial: remoteDial, + answer: remoteAnswer, + hangUp: remoteHangUp + }]; + this.Remote = this.Remotes[0]; }()); function _startTest(permissions, test) { From 75a0450e1be097ea3bafb01ead2a082ec750c565 Mon Sep 17 00:00:00 2001 From: Ben Hsu Date: Fri, 25 Sep 2015 12:57:59 +0800 Subject: [PATCH 07/42] Bug 1147296 - Part 5: Replace two testcases (Testcase). r=btseng --- dom/telephony/test/marionette/manifest.ini | 5 +- ...test_gsm_cdma_incoming_basic_operations.js | 170 +++++++++++++++++ ...test_gsm_cdma_outgoing_basic_operations.js | 174 ++++++++++++++++++ .../test_incoming_basic_operations.js | 123 ------------- .../test_outgoing_basic_operations.js | 123 ------------- 5 files changed, 347 insertions(+), 248 deletions(-) create mode 100644 dom/telephony/test/marionette/test_gsm_cdma_incoming_basic_operations.js create mode 100644 dom/telephony/test/marionette/test_gsm_cdma_outgoing_basic_operations.js delete mode 100644 dom/telephony/test/marionette/test_incoming_basic_operations.js delete mode 100644 dom/telephony/test/marionette/test_outgoing_basic_operations.js diff --git a/dom/telephony/test/marionette/manifest.ini b/dom/telephony/test/marionette/manifest.ini index 228778623bc..7e83e675340 100644 --- a/dom/telephony/test/marionette/manifest.ini +++ b/dom/telephony/test/marionette/manifest.ini @@ -24,6 +24,8 @@ qemu = true [test_dtmf.js] [test_emergency.js] [test_emergency_label.js] +[test_gsm_cdma_incoming_basic_operations.js] +[test_gsm_cdma_outgoing_basic_operations.js] [test_incall_mmi_call_hold.js] [test_incall_mmi_call_waiting.js] [test_incall_mmi_conference.js] @@ -31,7 +33,6 @@ qemu = true [test_incoming_already_connected.js] [test_incoming_already_held.js] [test_incoming_answer_hangup_oncallschanged.js] -[test_incoming_basic_operations.js] [test_incoming_onstatechange.js] [test_mmi_call_barring.js] [test_mmi_call_forwarding.js] @@ -52,7 +53,6 @@ qemu = true [test_outgoing_answer_radio_off.js] [test_outgoing_auto_hold.js] [test_outgoing_badNumber.js] -[test_outgoing_basic_operations.js] [test_outgoing_busy.js] [test_outgoing_from_stk.js] [test_outgoing_onstatechange.js] @@ -64,3 +64,4 @@ qemu = true [test_system_message_telephony_call_ended.js] [test_TelephonyUtils.js] [test_temporary_clir.js] + diff --git a/dom/telephony/test/marionette/test_gsm_cdma_incoming_basic_operations.js b/dom/telephony/test/marionette/test_gsm_cdma_incoming_basic_operations.js new file mode 100644 index 00000000000..cf4fe6f60c9 --- /dev/null +++ b/dom/telephony/test/marionette/test_gsm_cdma_incoming_basic_operations.js @@ -0,0 +1,170 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +MARIONETTE_TIMEOUT = 90000; +MARIONETTE_HEAD_JS = 'head.js'; + +/****************************************************************************** + **** Basic Operations **** + ******************************************************************************/ + +const IncomingNumber = "1111110000"; + +function exptectedCall(aCall, aState, aEmulatorState = null) { + let disconnectedReason = aState === "disconnected" ? "NormalCallClearing" + : null; + + return TelephonyHelper.createExptectedCall(aCall, IncomingNumber, false, + "in", aState, aEmulatorState, + disconnectedReason); +} + +function incoming(aNumber) { + let ret; + return Remote.dial(aNumber) + .then(call => ret = call) + .then(() => TelephonyHelper.equals([exptectedCall(ret, "incoming")])) + .then(() => ret); +} + +function answer(aCall) { + let call = exptectedCall(aCall, "connected"); + return TelephonyHelper.answer(aCall) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function hold(aCall) { + // Since a CDMA call doesn't have any notification for its state changing to + // "held" state, a telephonyCall is still remains in "connected" state when + // the call actually goes to "held" state, and we shouldn't wait for the state + // change event here. + let state = Modem.isGSM() ? "held" : "connected"; + let call = exptectedCall(aCall, state,"held"); + return TelephonyHelper.hold(aCall, Modem.isGSM()) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function resume(aCall) { + // Similar to the hold case, there is no notification for a CDMA call's state + // change. Besides, a CDMA call still remains in "connected" state here, so we + // have to use |hold()| function here to resume the call. Otherwise, if we use + // |resume()| function, we'll get an invalid state error. + let call = exptectedCall(aCall, "connected"); + return Modem.isGSM() ? TelephonyHelper.resume(aCall) + : TelephonyHelper.hold(aCall, false) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function hangUp(aCall) { + let call = exptectedCall(aCall, "disconnected"); + return TelephonyHelper.hangUp(aCall) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function remoteHangUp(aCall) { + let call = exptectedCall(aCall, "disconnected"); + return Remote.hangUp(aCall) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +/****************************************************************************** + **** Testcases **** + ******************************************************************************/ + +function testIncomingReject() { + log("= testIncomingReject ="); + return incoming(IncomingNumber) + .then(call => hangUp(call)); +} + +function testIncomingCancel() { + log("= testIncomingCancel ="); + return incoming(IncomingNumber) + .then(call => remoteHangUp(call)); +} + +function testIncomingAnswerHangUp() { + log("= testIncomingAnswerHangUp ="); + return incoming(IncomingNumber) + .then(call => answer(call)) + .then(call => hangUp(call)); +} + +function testIncomingAnswerRemoteHangUp() { + log("= testIncomingAnswerRemoteHangUp ="); + return incoming(IncomingNumber) + .then(call => answer(call)) + .then(call => remoteHangUp(call)); +} + +function testIncomingAnswerHoldHangUp() { + log("= testIncomingAnswerHoldHangUp ="); + return incoming(IncomingNumber) + .then(call => answer(call)) + .then(call => hold(call)) + .then(call => hangUp(call)); +} + +function testIncomingAnswerHoldRemoteHangUp() { + log("= testIncomingAnswerHoldRemoteHangUp ="); + return incoming(IncomingNumber) + .then(call => answer(call)) + .then(call => hold(call)) + .then(call => remoteHangUp(call)); +} + +function testIncomingAnswerHoldResumeHangUp() { + log("= testIncomingAnswerHoldResumeHangUp ="); + return incoming(IncomingNumber) + .then(call => answer(call)) + .then(call => hold(call)) + .then(call => resume(call)) + .then(call => hangUp(call)); +} + +function testIncomingAnswerHoldResumeRemoteHangUp() { + log("= testIncomingAnswerHoldResumeRemoteHangUp ="); + return incoming(IncomingNumber) + .then(call => answer(call)) + .then(call => hold(call)) + .then(call => resume(call)) + .then(call => remoteHangUp(call)); +} + +/****************************************************************************** + **** Test Launcher **** + ******************************************************************************/ + +function runTestSuite(aTech, aTechMask) { + return Promise.resolve() + // Setup Environment + .then(() => Modem.changeTech(aTech, aTechMask)) + + // Tests + .then(() => testIncomingReject()) + .then(() => testIncomingCancel()) + .then(() => testIncomingAnswerHangUp()) + .then(() => testIncomingAnswerRemoteHangUp()) + .then(() => testIncomingAnswerHoldHangUp()) + .then(() => testIncomingAnswerHoldRemoteHangUp()) + .then(() => testIncomingAnswerHoldResumeHangUp()) + .then(() => testIncomingAnswerHoldResumeRemoteHangUp()) + + // Restore Environment + .then(() => Modem.changeTech("wcdma")); +} + +startTest(function() { + return Promise.resolve() + .then(() => runTestSuite("cdma")) + .then(() => runTestSuite("wcdma")) + + .catch(error => ok(false, "Promise reject: " + error)) + .then(finish); +}); + diff --git a/dom/telephony/test/marionette/test_gsm_cdma_outgoing_basic_operations.js b/dom/telephony/test/marionette/test_gsm_cdma_outgoing_basic_operations.js new file mode 100644 index 00000000000..b53f4478c4f --- /dev/null +++ b/dom/telephony/test/marionette/test_gsm_cdma_outgoing_basic_operations.js @@ -0,0 +1,174 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +MARIONETTE_TIMEOUT = 90000; +MARIONETTE_HEAD_JS = 'head.js'; + +/****************************************************************************** + **** Basic Operations **** + ******************************************************************************/ + +const OutgoingNumber = "5555551111"; + +function exptectedCall(aCall, aState, aEmulatorState = null) { + let disconnectedReason = aState === "disconnected" ? "NormalCallClearing" + : null; + + return TelephonyHelper.createExptectedCall(aCall, OutgoingNumber, false, + "out", aState, aEmulatorState, + disconnectedReason); +} + +function outgoing(aNumber) { + let ret; + + // Since a CDMA call doesn't have "alerting" state, it directly goes to + // "connected" state instead. + let state = Modem.isCDMA() ? "connected" : "alerting"; + return TelephonyHelper.dial(aNumber) + .then(call => ret = call) + .then(() => TelephonyHelper.equals([exptectedCall(ret, state)])) + .then(() => ret); +} + +function remoteAnswer(aCall) { + let call = exptectedCall(aCall, "connected"); + return Remote.answer(aCall) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function hold(aCall) { + // Since a CDMA call doesn't have any notification for its state changing to + // "held" state, a telephonyCall is still remains in "connected" state when + // the call actually goes to "held" state, and we shouldn't wait for the state + // change event here. + let state = Modem.isGSM() ? "held" : "connected"; + let call = exptectedCall(aCall, state, "held"); + return TelephonyHelper.hold(aCall, Modem.isGSM()) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function resume(aCall) { + // Similar to the hold case, there is no notification for a CDMA call's state + // change. Besides, a CDMA call still remains in "connected" state here, so we + // have to use |hold()| function here to resume the call. Otherwise, if we use + // |resume()| function, we'll get an invalid state error. + let call = exptectedCall(aCall, "connected"); + return Modem.isGSM() ? TelephonyHelper.resume(aCall) + : TelephonyHelper.hold(aCall, false) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function hangUp(aCall) { + let call = exptectedCall(aCall, "disconnected"); + return TelephonyHelper.hangUp(aCall) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +function remoteHangUp(aCall) { + let call = exptectedCall(aCall, "disconnected"); + return Remote.hangUp(aCall) + .then(() => TelephonyHelper.equals([call])) + .then(() => aCall); +} + +/****************************************************************************** + **** Testcases **** + ******************************************************************************/ + +function testOutgoingReject() { + log("= testOutgoingReject ="); + return outgoing(OutgoingNumber) + .then(call => remoteHangUp(call)); +} + +function testOutgoingCancel() { + log("= testOutgoingCancel ="); + return outgoing(OutgoingNumber) + .then(call => hangUp(call)); +} + +function testOutgoingAnswerHangUp() { + log("= testOutgoingAnswerHangUp ="); + return outgoing(OutgoingNumber) + .then(call => remoteAnswer(call)) + .then(call => hangUp(call)); +} + +function testOutgoingAnswerRemoteHangUp() { + log("= testOutgoingAnswerRemoteHangUp ="); + return outgoing(OutgoingNumber) + .then(call => remoteAnswer(call)) + .then(call => remoteHangUp(call)); +} + +function testOutgoingAnswerHoldHangUp() { + log("= testOutgoingAnswerHoldHangUp ="); + return outgoing(OutgoingNumber) + .then(call => remoteAnswer(call)) + .then(call => hold(call)) + .then(call => hangUp(call)); +} + +function testOutgoingAnswerHoldRemoteHangUp() { + log("= testOutgoingAnswerHoldRemoteHangUp ="); + return outgoing(OutgoingNumber) + .then(call => remoteAnswer(call)) + .then(call => hold(call)) + .then(call => remoteHangUp(call)); +} + +function testOutgoingAnswerHoldResumeHangUp() { + log("= testOutgoingAnswerHoldResumeHangUp ="); + return outgoing(OutgoingNumber) + .then(call => remoteAnswer(call)) + .then(call => hold(call)) + .then(call => resume(call)) + .then(call => hangUp(call)); +} + +function testOutgoingAnswerHoldResumeRemoteHangUp() { + log("= testOutgoingAnswerHoldResumeRemoteHangUp ="); + return outgoing(OutgoingNumber) + .then(call => remoteAnswer(call)) + .then(call => hold(call)) + .then(call => resume(call)) + .then(call => remoteHangUp(call)); +} + +/******************************************************************************/ +/*** Test Launcher ***/ +/******************************************************************************/ + +function runTestSuite(aTech, aTechMask) { + return Promise.resolve() + // Setup Environment + .then(() => Modem.changeTech(aTech, aTechMask)) + + // Tests + .then(() => testOutgoingReject()) + .then(() => testOutgoingCancel()) + .then(() => testOutgoingAnswerHangUp()) + .then(() => testOutgoingAnswerRemoteHangUp()) + .then(() => testOutgoingAnswerHoldHangUp()) + .then(() => testOutgoingAnswerHoldRemoteHangUp()) + .then(() => testOutgoingAnswerHoldResumeHangUp()) + .then(() => testOutgoingAnswerHoldResumeRemoteHangUp()) + + // Restore Environment + .then(() => Modem.changeTech("wcdma")); +} + +startTest(function() { + return Promise.resolve() + .then(() => runTestSuite("cdma")) + .then(() => runTestSuite("wcdma")) + + .catch(error => ok(false, "Promise reject: " + error)) + .then(finish); +}); + diff --git a/dom/telephony/test/marionette/test_incoming_basic_operations.js b/dom/telephony/test/marionette/test_incoming_basic_operations.js deleted file mode 100644 index 037df93f2d8..00000000000 --- a/dom/telephony/test/marionette/test_incoming_basic_operations.js +++ /dev/null @@ -1,123 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -MARIONETTE_TIMEOUT = 90000; -MARIONETTE_HEAD_JS = 'head.js'; - -const inNumber = "5555552222"; -const inInfo = gInCallStrPool(inNumber); -var inCall; - -function incoming() { - return gRemoteDial(inNumber) - .then(call => inCall = call) - .then(() => gCheckAll(null, [inCall], "", [], [inInfo.incoming])) - .then(() => is(inCall.disconnectedReason, null)); -} - -function answer() { - return gAnswer(inCall) - .then(() => gCheckAll(inCall, [inCall], "", [], [inInfo.active])) - .then(() => is(inCall.disconnectedReason, null)); -} - -function hold() { - return gHold(inCall) - .then(() => gCheckAll(null, [inCall], "", [], [inInfo.held])) - .then(() => is(inCall.disconnectedReason, null)); -} - -function resume() { - return gResume(inCall) - .then(() => gCheckAll(inCall, [inCall], "", [], [inInfo.active])) - .then(() => is(inCall.disconnectedReason, null)); -} - -function hangUp() { - return gHangUp(inCall) - .then(() => gCheckAll(null, [], "", [], [])) - .then(() => is(inCall.disconnectedReason, "NormalCallClearing")); -} - -function remoteHangUp() { - return gRemoteHangUp(inCall) - .then(() => gCheckAll(null, [], "", [], [])) - .then(() => is(inCall.disconnectedReason, "NormalCallClearing")); -} - -// Test cases. - -function testIncomingReject() { - log("= testIncomingReject ="); - return incoming() - .then(() => hangUp()); -} - -function testIncomingCancel() { - log("= testIncomingCancel ="); - return incoming() - .then(() => remoteHangUp()); -} - -function testIncomingAnswerHangUp() { - log("= testIncomingAnswerHangUp ="); - return incoming() - .then(() => answer()) - .then(() => hangUp()); -} - -function testIncomingAnswerRemoteHangUp() { - log("= testIncomingAnswerRemoteHangUp ="); - return incoming() - .then(() => answer()) - .then(() => remoteHangUp()); -} - -function testIncomingAnswerHoldHangUp() { - log("= testIncomingAnswerHoldHangUp ="); - return incoming() - .then(() => answer()) - .then(() => hold()) - .then(() => hangUp()); -} - -function testIncomingAnswerHoldRemoteHangUp() { - log("= testIncomingAnswerHoldRemoteHangUp ="); - return incoming() - .then(() => answer()) - .then(() => hold()) - .then(() => remoteHangUp()); -} - -function testIncomingAnswerHoldResumeHangUp() { - log("= testIncomingAnswerHoldResumeHangUp ="); - return incoming() - .then(() => answer()) - .then(() => hold()) - .then(() => resume()) - .then(() => hangUp()); -} - -function testIncomingAnswerHoldResumeRemoteHangUp() { - log("= testIncomingAnswerHoldResumeRemoteHangUp ="); - return incoming() - .then(() => answer()) - .then(() => hold()) - .then(() => resume()) - .then(() => remoteHangUp()); -} - -startTest(function() { - Promise.resolve() - .then(() => testIncomingReject()) - .then(() => testIncomingCancel()) - .then(() => testIncomingAnswerHangUp()) - .then(() => testIncomingAnswerRemoteHangUp()) - .then(() => testIncomingAnswerHoldHangUp()) - .then(() => testIncomingAnswerHoldRemoteHangUp()) - .then(() => testIncomingAnswerHoldResumeHangUp()) - .then(() => testIncomingAnswerHoldResumeRemoteHangUp()) - - .catch(error => ok(false, "Promise reject: " + error)) - .then(finish); -}); diff --git a/dom/telephony/test/marionette/test_outgoing_basic_operations.js b/dom/telephony/test/marionette/test_outgoing_basic_operations.js deleted file mode 100644 index 97ae31f669d..00000000000 --- a/dom/telephony/test/marionette/test_outgoing_basic_operations.js +++ /dev/null @@ -1,123 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -MARIONETTE_TIMEOUT = 90000; -MARIONETTE_HEAD_JS = 'head.js'; - -const outNumber = "5555551111"; -const outInfo = gOutCallStrPool(outNumber); -var outCall; - -function outgoing() { - return gDial(outNumber) - .then(call => outCall = call) - .then(() => gCheckAll(outCall, [outCall], "", [], [outInfo.ringing])) - .then(() => is(outCall.disconnectedReason, null)); -} - -function answer() { - return gRemoteAnswer(outCall) - .then(() => gCheckAll(outCall, [outCall], "", [], [outInfo.active])) - .then(() => is(outCall.disconnectedReason, null)); -} - -function hangUp() { - return gHangUp(outCall) - .then(() => gCheckAll(null, [], "", [], [])) - .then(() => is(outCall.disconnectedReason, "NormalCallClearing")); -} - -function remoteHangUp() { - return gRemoteHangUp(outCall) - .then(() => gCheckAll(null, [], "", [], [])) - .then(() => is(outCall.disconnectedReason, "NormalCallClearing")); -} - -function hold() { - return gHold(outCall) - .then(() => gCheckAll(null, [outCall], "", [], [outInfo.held])) - .then(() => is(outCall.disconnectedReason, null)); -} - -function resume() { - return gResume(outCall) - .then(() => gCheckAll(outCall, [outCall], "", [], [outInfo.active])) - .then(() => is(outCall.disconnectedReason, null)); -} - -// Test cases. - -function testOutgoingReject() { - log("= testOutgoingReject ="); - return outgoing() - .then(() => remoteHangUp()); -} - -function testOutgoingCancel() { - log("= testOutgoingCancel ="); - return outgoing() - .then(() => hangUp()); -} - -function testOutgoingAnswerHangUp() { - log("= testOutgoingAnswerHangUp ="); - return outgoing() - .then(() => answer()) - .then(() => hangUp()); -} - -function testOutgoingAnswerRemoteHangUp() { - log("= testOutgoingAnswerRemoteHangUp ="); - return outgoing() - .then(() => answer()) - .then(() => remoteHangUp()); -} - -function testOutgoingAnswerHoldHangUp() { - log("= testOutgoingAnswerHoldHangUp ="); - return outgoing() - .then(() => answer()) - .then(() => hold()) - .then(() => hangUp()); -} - -function testOutgoingAnswerHoldRemoteHangUp() { - log("= testOutgoingAnswerHoldRemoteHangUp ="); - return outgoing() - .then(() => answer()) - .then(() => hold()) - .then(() => remoteHangUp()); -} - -function testOutgoingAnswerHoldResumeHangUp() { - log("= testOutgoingAnswerHoldResumeHangUp ="); - return outgoing() - .then(() => answer()) - .then(() => hold()) - .then(() => resume()) - .then(() => hangUp()); -} - -function testOutgoingAnswerHoldResumeRemoteHangUp() { - log("= testOutgoingAnswerHoldResumeRemoteHangUp ="); - return outgoing() - .then(() => answer()) - .then(() => hold()) - .then(() => resume()) - .then(() => remoteHangUp()); -} - -startTest(function() { - Promise.resolve() - .then(() => testOutgoingReject()) - .then(() => testOutgoingCancel()) - .then(() => testOutgoingAnswerHangUp()) - .then(() => testOutgoingAnswerRemoteHangUp()) - .then(() => testOutgoingAnswerHoldHangUp()) - .then(() => testOutgoingAnswerHoldRemoteHangUp()) - .then(() => testOutgoingAnswerHoldResumeHangUp()) - .then(() => testOutgoingAnswerHoldResumeRemoteHangUp()) - - .catch(error => ok(false, "Promise reject: " + error)) - .then(finish); -}); From b19702c18e3fde4c7a91c363fba4eca9e36aa0fc Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Tue, 6 Oct 2015 00:59:53 -0700 Subject: [PATCH 08/42] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 4 ++-- b2g/config/emulator/sources.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 434079de15f..aa844989d7e 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -22,8 +22,8 @@ - - + + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 434079de15f..aa844989d7e 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -22,8 +22,8 @@ - - + + From ffaf0e5ed2689f6991b8176108a66a9cdc9a6a28 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:08:14 +0200 Subject: [PATCH 09/42] Bug 1209085: Add 6-argument operator () to |UnpackPDUInitOp|, r=joliu --- ipc/hal/DaemonSocketPDUHelpers.h | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/ipc/hal/DaemonSocketPDUHelpers.h b/ipc/hal/DaemonSocketPDUHelpers.h index 1d7a0ae8940..3bd28c4f21d 100644 --- a/ipc/hal/DaemonSocketPDUHelpers.h +++ b/ipc/hal/DaemonSocketPDUHelpers.h @@ -1023,6 +1023,41 @@ public: WarnAboutTrailingData(); return NS_OK; } + + template + nsresult operator () (T1& aArg1, T2& aArg2, T3& aArg3, T4& aArg4, + T5& aArg5, T6& aArg6) const + { + DaemonSocketPDU& pdu = GetPDU(); + + nsresult rv = UnpackPDU(pdu, aArg1); + if (NS_FAILED(rv)) { + return rv; + } + rv = UnpackPDU(pdu, aArg2); + if (NS_FAILED(rv)) { + return rv; + } + rv = UnpackPDU(pdu, aArg3); + if (NS_FAILED(rv)) { + return rv; + } + rv = UnpackPDU(pdu, aArg4); + if (NS_FAILED(rv)) { + return rv; + } + rv = UnpackPDU(pdu, aArg5); + if (NS_FAILED(rv)) { + return rv; + } + rv = UnpackPDU(pdu, aArg6); + if (NS_FAILED(rv)) { + return rv; + } + WarnAboutTrailingData(); + return NS_OK; + } }; } // namespace DaemonSocketPDUHelpers From ee809faffc135998a84c89697663e5e64e681665 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:08:14 +0200 Subject: [PATCH 10/42] Bug 1209085: Replace trivial init ops by |UnpackPDUInitOP| in Bluetooth A2DP backend, r=joliu --- .../BluetoothDaemonA2dpInterface.cpp | 104 +----------------- .../bluedroid/BluetoothDaemonA2dpInterface.h | 4 - 2 files changed, 3 insertions(+), 105 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.cpp b/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.cpp index d73b7344f74..c536bc31f9c 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.cpp +++ b/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.cpp @@ -170,129 +170,31 @@ public: } }; -// Init operator class for ConnectionStateNotification -class BluetoothDaemonA2dpModule::ConnectionStateInitOp final - : private PDUInitOp -{ -public: - ConnectionStateInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothA2dpConnectionState& aArg1, - BluetoothAddress& aArg2) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read state */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read address */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonA2dpModule::ConnectionStateNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { ConnectionStateNotification::Dispatch( &BluetoothA2dpNotificationHandler::ConnectionStateNotification, - ConnectionStateInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } -// Init operator class for AudioStateNotification -class BluetoothDaemonA2dpModule::AudioStateInitOp final - : private PDUInitOp -{ -public: - AudioStateInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothA2dpAudioState& aArg1, - BluetoothAddress& aArg2) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read state */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read address */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonA2dpModule::AudioStateNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { AudioStateNotification::Dispatch( &BluetoothA2dpNotificationHandler::AudioStateNotification, - AudioStateInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } -// Init operator class for AudioConfigNotification -class BluetoothDaemonA2dpModule::AudioConfigInitOp final - : private PDUInitOp -{ -public: - AudioConfigInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothAddress& aArg1, uint32_t aArg2, uint8_t aArg3) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read address */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read sample rate */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read channel count */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonA2dpModule::AudioConfigNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { AudioConfigNotification::Dispatch( &BluetoothA2dpNotificationHandler::AudioConfigNotification, - AudioConfigInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } void diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.h b/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.h index e1e1d648f73..2ddf1deaea1 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.h +++ b/dom/bluetooth/bluedroid/BluetoothDaemonA2dpInterface.h @@ -110,10 +110,6 @@ protected: const BluetoothAddress&, uint32_t, uint8_t> AudioConfigNotification; - class ConnectionStateInitOp; - class AudioStateInitOp; - class AudioConfigInitOp; - void ConnectionStateNtf(const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU); From 4f5045c2faf986e351adf916087d2d88d05cb310 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:08:14 +0200 Subject: [PATCH 11/42] Bug 1209085: Replace trivial init ops by |UnpackPDUInitOp| in Bluetooth AVRCP backend, r=joliu --- .../BluetoothDaemonAvrcpInterface.cpp | 29 +------------------ .../bluedroid/BluetoothDaemonAvrcpInterface.h | 3 +- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.cpp b/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.cpp index 1a12e82d08e..709fa44585d 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.cpp +++ b/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.cpp @@ -738,40 +738,13 @@ BluetoothDaemonAvrcpModule::VolumeChangeNtf( UnpackPDUInitOp(aPDU)); } -// Init operator class for PassthroughCmdNotification -class BluetoothDaemonAvrcpModule::PassthroughCmdInitOp final - : private PDUInitOp -{ -public: - PassthroughCmdInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (int& aArg1, int& aArg2) const - { - DaemonSocketPDU& pdu = GetPDU(); - - nsresult rv = UnpackPDU(pdu, UnpackConversion(aArg1)); - if (NS_FAILED(rv)) { - return rv; - } - rv = UnpackPDU(pdu, UnpackConversion(aArg2)); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonAvrcpModule::PassthroughCmdNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { PassthroughCmdNotification::Dispatch( &BluetoothAvrcpNotificationHandler::PassthroughCmdNotification, - PassthroughCmdInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } #endif diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.h b/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.h index 6327a75089f..f06ebc0cc84 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.h +++ b/dom/bluetooth/bluedroid/BluetoothDaemonAvrcpInterface.h @@ -243,14 +243,13 @@ protected: VolumeChangeNotification; typedef mozilla::ipc::DaemonNotificationRunnable2< - NotificationHandlerWrapper, void, int, int> + NotificationHandlerWrapper, void, uint8_t, uint8_t, int, int> PassthroughCmdNotification; class GetElementAttrInitOp; class GetPlayerAppAttrsTextInitOp; class GetPlayerAppValueInitOp; class GetPlayerAppValuesTextInitOp; - class PassthroughCmdInitOp; class RemoteFeatureInitOp; void RemoteFeatureNtf(const DaemonSocketPDUHeader& aHeader, From 04bffc79b031b1a1c182ed125ead46c8e3a61ee8 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:08:14 +0200 Subject: [PATCH 12/42] Bug 1209085: Replace simple init ops by |UnpackInitOp| in Bluetooth Core backend, r=joliu --- .../BluetoothDaemonCoreInterface.cpp | 169 +----------------- .../bluedroid/BluetoothDaemonCoreInterface.h | 4 - 2 files changed, 4 insertions(+), 169 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.cpp b/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.cpp index 986ef448ed6..a0402802e17 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.cpp +++ b/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.cpp @@ -945,201 +945,40 @@ BluetoothDaemonCoreModule::DiscoveryStateChangedNtf( UnpackPDUInitOp(aPDU)); } -// Init operator class for PinRequestNotification -class BluetoothDaemonCoreModule::PinRequestInitOp final - : private PDUInitOp -{ -public: - PinRequestInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothAddress& aArg1, BluetoothRemoteName& aArg2, - uint32_t& aArg3) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read remote address */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read remote name */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read CoD */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonCoreModule::PinRequestNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { PinRequestNotification::Dispatch( &BluetoothNotificationHandler::PinRequestNotification, - PinRequestInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } -// Init operator class for SspRequestNotification -class BluetoothDaemonCoreModule::SspRequestInitOp final - : private PDUInitOp -{ -public: - SspRequestInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothAddress& aArg1, BluetoothRemoteName& aArg2, - uint32_t& aArg3, BluetoothSspVariant& aArg4, - uint32_t& aArg5) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read remote address */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read remote name */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read CoD */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read pairing variant */ - rv = UnpackPDU(pdu, aArg4); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read passkey */ - rv = UnpackPDU(pdu, aArg5); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonCoreModule::SspRequestNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { SspRequestNotification::Dispatch( &BluetoothNotificationHandler::SspRequestNotification, - SspRequestInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } -// Init operator class for BondStateChangedNotification -class BluetoothDaemonCoreModule::BondStateChangedInitOp final - : private PDUInitOp -{ -public: - BondStateChangedInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothStatus& aArg1, BluetoothAddress& aArg2, - BluetoothBondState& aArg3) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read status */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read remote address */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read bond state */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonCoreModule::BondStateChangedNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { BondStateChangedNotification::Dispatch( &BluetoothNotificationHandler::BondStateChangedNotification, - BondStateChangedInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } -// Init operator class for AclStateChangedNotification -class BluetoothDaemonCoreModule::AclStateChangedInitOp final - : private PDUInitOp -{ -public: - AclStateChangedInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothStatus& aArg1, BluetoothAddress& aArg2, - BluetoothAclState& aArg3) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read status */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read remote address */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read ACL state */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonCoreModule::AclStateChangedNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { AclStateChangedNotification::Dispatch( &BluetoothNotificationHandler::AclStateChangedNotification, - AclStateChangedInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } // Init operator class for DutModeRecvNotification diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.h b/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.h index aa24f889628..f40506ca469 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.h +++ b/dom/bluetooth/bluedroid/BluetoothDaemonCoreInterface.h @@ -298,14 +298,10 @@ private: NotificationHandlerWrapper, void, BluetoothStatus, uint16_t> LeTestModeNotification; - class AclStateChangedInitOp; class AdapterPropertiesInitOp; - class BondStateChangedInitOp; class DeviceFoundInitOp; class DutModeRecvInitOp; - class PinRequestInitOp; class RemoteDevicePropertiesInitOp; - class SspRequestInitOp; void AdapterStateChangedNtf(const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU); From c5415bd67140baca50705710c48b2c838e0b4233 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:08:15 +0200 Subject: [PATCH 13/42] Bug 1209085: Replace simple init ops by |UnpackPDUInitOp| in Bluetooth GATT backend, r=joliu --- .../BluetoothDaemonGattInterface.cpp | 194 +----------------- .../bluedroid/BluetoothDaemonGattInterface.h | 6 +- 2 files changed, 6 insertions(+), 194 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.cpp b/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.cpp index 4cb694ade19..bccd546550c 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.cpp +++ b/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.cpp @@ -1568,56 +1568,13 @@ BluetoothDaemonGattModule::ClientScanResultNtf( ClientScanResultInitOp(aPDU)); } -// Init operator class for ClientConnect/DisconnectNotification -class BluetoothDaemonGattModule::ClientConnectDisconnectInitOp final - : private PDUInitOp -{ -public: - ClientConnectDisconnectInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (int& aArg1, - BluetoothGattStatus& aArg2, - int& aArg3, - BluetoothAddress& aArg4) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read connection ID */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - /* Read status */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - /* Read client interface */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - /* Read address */ - rv = UnpackPDU(pdu, aArg4); - if (NS_FAILED(rv)) { - return rv; - } - - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonGattModule::ClientConnectNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { ClientConnectNotification::Dispatch( &BluetoothGattNotificationHandler::ConnectNotification, - ClientConnectDisconnectInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } void @@ -1626,7 +1583,7 @@ BluetoothDaemonGattModule::ClientDisconnectNtf( { ClientDisconnectNotification::Dispatch( &BluetoothGattNotificationHandler::DisconnectNotification, - ClientConnectDisconnectInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } void @@ -1737,56 +1694,13 @@ BluetoothDaemonGattModule::ClientExecuteWriteNtf( UnpackPDUInitOp(aPDU)); } -// Init operator class for ClientReadRemoteRssiNotification -class BluetoothDaemonGattModule::ClientReadRemoteRssiInitOp final - : private PDUInitOp -{ -public: - ClientReadRemoteRssiInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (int& aArg1, - BluetoothAddress& aArg2, - int& aArg3, - BluetoothGattStatus& aArg4) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read client interface */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - /* Read address */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - /* Read RSSI */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - /* Read status */ - rv = UnpackPDU(pdu, aArg4); - if (NS_FAILED(rv)) { - return rv; - } - - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonGattModule::ClientReadRemoteRssiNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { ClientReadRemoteRssiNotification::Dispatch( &BluetoothGattNotificationHandler::ReadRemoteRssiNotification, - ClientReadRemoteRssiInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } void @@ -1922,68 +1836,13 @@ BluetoothDaemonGattModule::ServerServiceDeletedNtf( UnpackPDUInitOp(aPDU)); } -// Init operator class for ServerRequestReadNotification -class BluetoothDaemonGattModule::ServerRequestReadInitOp final - : private PDUInitOp -{ -public: - ServerRequestReadInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (int& aArg1, - int& aArg2, - BluetoothAddress& aArg3, - BluetoothAttributeHandle& aArg4, - int& aArg5, - bool& aArg6) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read connection ID */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - /* Read trans ID */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - /* Read address */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - /* Read attribute handle */ - rv = UnpackPDU(pdu, aArg4); - if (NS_FAILED(rv)) { - return rv; - } - /* Read offset */ - rv = UnpackPDU(pdu, aArg5); - if (NS_FAILED(rv)) { - return rv; - } - /* Read isLong */ - rv = UnpackPDU(pdu, aArg6); - if (NS_FAILED(rv)) { - return rv; - } - - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonGattModule::ServerRequestReadNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { ServerRequestReadNotification::Dispatch( &BluetoothGattNotificationHandler::RequestReadNotification, - ServerRequestReadInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } // Init operator class for ServerRequestWriteNotification @@ -2069,56 +1928,13 @@ BluetoothDaemonGattModule::ServerRequestWriteNtf( ServerRequestWriteInitOp(aPDU)); } -// Init operator class for ServerRequestExecuteWriteNotification -class BluetoothDaemonGattModule::ServerRequestExecuteWriteInitOp final - : private PDUInitOp -{ -public: - ServerRequestExecuteWriteInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (int& aArg1, - int& aArg2, - BluetoothAddress& aArg3, - bool& aArg4) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read connection ID */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - /* Read trans ID */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - /* Read address */ - rv = UnpackPDU(pdu, aArg3); - if (NS_FAILED(rv)) { - return rv; - } - /* Read execute write */ - rv = UnpackPDU(pdu, aArg4); - if (NS_FAILED(rv)) { - return rv; - } - - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonGattModule::ServerRequestExecuteWriteNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { ServerRequestExecuteWriteNotification::Dispatch( &BluetoothGattNotificationHandler::RequestExecuteWriteNotification, - ServerRequestExecuteWriteInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } void diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.h b/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.h index 7e106c2bb77..fc7183fd8af 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.h +++ b/dom/bluetooth/bluedroid/BluetoothDaemonGattInterface.h @@ -681,14 +681,10 @@ protected: BluetoothGattStatus, int> ServerResponseConfirmationNotification; - class ClientScanResultInitOp; - class ClientConnectDisconnectInitOp; - class ClientReadRemoteRssiInitOp; class ClientGetDeviceTypeInitOp; + class ClientScanResultInitOp; class ServerConnectionInitOp; - class ServerRequestReadInitOp; class ServerRequestWriteInitOp; - class ServerRequestExecuteWriteInitOp; void ClientRegisterNtf(const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU); From 8d082abbcb380639a5cdd179fe3030f1a2312797 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:08:15 +0200 Subject: [PATCH 14/42] Bug 1209085: Replace simple init ops by |UnpackPDUInitOp| in Blutooth HFP backend, r=joliu --- .../BluetoothDaemonHandsfreeInterface.cpp | 66 +------------------ .../BluetoothDaemonHandsfreeInterface.h | 2 - 2 files changed, 2 insertions(+), 66 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.cpp b/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.cpp index 05e3ccf54b1..1fafbce9582 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.cpp +++ b/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.cpp @@ -777,44 +777,13 @@ BluetoothDaemonHandsfreeModule::ConnectionStateNtf( ConnectionStateInitOp(aPDU)); } -// Init operator class for AudioStateNotification -class BluetoothDaemonHandsfreeModule::AudioStateInitOp final - : private PDUInitOp -{ -public: - AudioStateInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothHandsfreeAudioState& aArg1, - BluetoothAddress& aArg2) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read state */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read address */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonHandsfreeModule::AudioStateNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { AudioStateNotification::Dispatch( &BluetoothHandsfreeNotificationHandler::AudioStateNotification, - AudioStateInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } // Init operator class for VoiceRecognitionNotification @@ -1381,44 +1350,13 @@ BluetoothDaemonHandsfreeModule::KeyPressedNtf( KeyPressedInitOp(aPDU)); } -// Init operator class for WbsNotification -class BluetoothDaemonHandsfreeModule::WbsInitOp final - : private PDUInitOp -{ -public: - WbsInitOp(DaemonSocketPDU& aPDU) - : PDUInitOp(aPDU) - { } - - nsresult - operator () (BluetoothHandsfreeWbsConfig& aArg1, BluetoothAddress& aArg2) const - { - DaemonSocketPDU& pdu = GetPDU(); - - /* Read state */ - nsresult rv = UnpackPDU(pdu, aArg1); - if (NS_FAILED(rv)) { - return rv; - } - - /* Read address */ - rv = UnpackPDU(pdu, aArg2); - if (NS_FAILED(rv)) { - return rv; - } - - WarnAboutTrailingData(); - return NS_OK; - } -}; - void BluetoothDaemonHandsfreeModule::WbsNtf( const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU) { WbsNotification::Dispatch( &BluetoothHandsfreeNotificationHandler::WbsNotification, - WbsInitOp(aPDU)); + UnpackPDUInitOp(aPDU)); } void diff --git a/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.h b/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.h index 83f9d32e2fc..fe8345611fe 100644 --- a/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.h +++ b/dom/bluetooth/bluedroid/BluetoothDaemonHandsfreeInterface.h @@ -314,7 +314,6 @@ protected: WbsNotification; class ConnectionStateInitOp; - class AudioStateInitOp; class VoiceRecognitionInitOp; class AnswerCallInitOp; class HangupCallInitOp; @@ -330,7 +329,6 @@ protected: class VolumeInitOp; class UnknownAtInitOp; class KeyPressedInitOp; - class WbsInitOp; void ConnectionStateNtf(const DaemonSocketPDUHeader& aHeader, DaemonSocketPDU& aPDU); From 631c657aa93e420cc711691542d3d3a0c2335945 Mon Sep 17 00:00:00 2001 From: Ben Hsu Date: Tue, 15 Sep 2015 02:03:00 +0200 Subject: [PATCH 15/42] Bug 1204817 - Delete the child property of a parent call only when the parent call exists. r=btseng --- dom/telephony/gonk/TelephonyService.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/dom/telephony/gonk/TelephonyService.js b/dom/telephony/gonk/TelephonyService.js index d9f78b517f6..06c24f7174f 100644 --- a/dom/telephony/gonk/TelephonyService.js +++ b/dom/telephony/gonk/TelephonyService.js @@ -2211,10 +2211,9 @@ TelephonyService.prototype = { aFailCause = RIL.GECKO_CALL_ERROR_NORMAL_CALL_CLEARING) { if (DEBUG) debug("_disconnectCalls: " + JSON.stringify(aCalls)); - // Child cannot live without parent. Let's find all the calls that need to - // be disconnected. + // In addition to the disconnected call itself, its decedent calls should be + // treated as disconnected calls as well. let disconnectedCalls = aCalls.slice(); - for (let call in aCalls) { while (call.childId) { call = this._currentCalls[aClientId][call.childId]; @@ -2231,8 +2230,8 @@ TelephonyService.prototype = { call.state = nsITelephonyService.CALL_STATE_DISCONNECTED; call.disconnectedReason = aFailCause; - if (call.parentId) { - let parentCall = this._currentCalls[aClientId][call.parentId]; + let parentCall = this._currentCalls[aClientId][call.parentId]; + if (parentCall) { delete parentCall.childId; } From b230fad02ae2ff1a7b4034397b882cd5bfb337e3 Mon Sep 17 00:00:00 2001 From: Michael Henretty Date: Mon, 5 Oct 2015 17:18:52 +0200 Subject: [PATCH 16/42] Bug 1210740 - Expose tracking protection setting to Gaia, r=fabrice --- b2g/app/b2g.js | 2 +- b2g/chrome/content/settings.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/b2g/app/b2g.js b/b2g/app/b2g.js index 8295494dc0e..c4d260aadc8 100644 --- a/b2g/app/b2g.js +++ b/b2g/app/b2g.js @@ -385,7 +385,7 @@ pref("urlclassifier.gethash.timeout_ms", 5000); pref("urlclassifier.max-complete-age", 2700); // Tracking protection -pref("privacy.trackingprotection.enabled", true); +pref("privacy.trackingprotection.enabled", false); pref("privacy.trackingprotection.pbmode.enabled", false); #endif diff --git a/b2g/chrome/content/settings.js b/b2g/chrome/content/settings.js index 107544bd035..ab7074a4754 100644 --- a/b2g/chrome/content/settings.js +++ b/b2g/chrome/content/settings.js @@ -671,6 +671,7 @@ var settingsToObserve = { 'mms.debugging.enabled': false, 'network.debugging.enabled': false, 'privacy.donottrackheader.enabled': false, + 'privacy.trackingprotection.enabled': false, 'ril.debugging.enabled': false, 'ril.radio.disabled': false, 'ril.mms.requestReadReport.enabled': { From 3f6b1e08faf143238f5cfe4c82aade513f883d89 Mon Sep 17 00:00:00 2001 From: Kevin Grandon Date: Mon, 5 Oct 2015 08:36:00 +0200 Subject: [PATCH 17/42] Bug 1211481 - Expose screenX and screenY to context menu events. r=fabrice --- dom/browser-element/BrowserElementChildPreload.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dom/browser-element/BrowserElementChildPreload.js b/dom/browser-element/BrowserElementChildPreload.js index d4adc585a85..9eb20d888bf 100644 --- a/dom/browser-element/BrowserElementChildPreload.js +++ b/dom/browser-element/BrowserElementChildPreload.js @@ -916,6 +916,8 @@ BrowserElementChild.prototype = { // Pass along the position where the context menu should be located menuData.clientX = e.clientX; menuData.clientY = e.clientY; + menuData.screenX = e.screenX; + menuData.screenY = e.screenY; // The value returned by the contextmenu sync call is true if the embedder // called preventDefault() on its contextmenu event. From e9086c31c3ccaa69c67fd4a13fe2cf832a177f4d Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:12:38 +0200 Subject: [PATCH 18/42] Bug 1211435: Rename some internal classes of Bluetooth's A2DP manager, r=shuang --- .../bluedroid/BluetoothA2dpManager.cpp | 18 +++++++++--------- dom/bluetooth/bluedroid/BluetoothA2dpManager.h | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothA2dpManager.cpp b/dom/bluetooth/bluedroid/BluetoothA2dpManager.cpp index b9cabe1b641..3296823b83a 100644 --- a/dom/bluetooth/bluedroid/BluetoothA2dpManager.cpp +++ b/dom/bluetooth/bluedroid/BluetoothA2dpManager.cpp @@ -86,11 +86,11 @@ AvStatusToSinkString(BluetoothA2dpConnectionState aState, nsAString& aString) } } -class BluetoothA2dpManager::InitA2dpResultHandler final +class BluetoothA2dpManager::InitResultHandler final : public BluetoothA2dpResultHandler { public: - InitA2dpResultHandler(BluetoothProfileResultHandler* aRes) + InitResultHandler(BluetoothProfileResultHandler* aRes) : mRes(aRes) { } @@ -172,7 +172,7 @@ BluetoothA2dpManager::InitA2dpInterface(BluetoothProfileResultHandler* aRes) } BluetoothA2dpManager* a2dpManager = BluetoothA2dpManager::Get(); - sBtA2dpInterface->Init(a2dpManager, new InitA2dpResultHandler(aRes)); + sBtA2dpInterface->Init(a2dpManager, new InitResultHandler(aRes)); } BluetoothA2dpManager::~BluetoothA2dpManager() @@ -227,11 +227,11 @@ BluetoothA2dpManager::Get() return sBluetoothA2dpManager; } -class BluetoothA2dpManager::CleanupA2dpResultHandler final +class BluetoothA2dpManager::CleanupResultHandler final : public BluetoothA2dpResultHandler { public: - CleanupA2dpResultHandler(BluetoothProfileResultHandler* aRes) + CleanupResultHandler(BluetoothProfileResultHandler* aRes) : mRes(aRes) { } @@ -260,11 +260,11 @@ private: nsRefPtr mRes; }; -class BluetoothA2dpManager::CleanupA2dpResultHandlerRunnable final +class BluetoothA2dpManager::CleanupResultHandlerRunnable final : public nsRunnable { public: - CleanupA2dpResultHandlerRunnable(BluetoothProfileResultHandler* aRes) + CleanupResultHandlerRunnable(BluetoothProfileResultHandler* aRes) : mRes(aRes) { } @@ -289,11 +289,11 @@ BluetoothA2dpManager::DeinitA2dpInterface(BluetoothProfileResultHandler* aRes) MOZ_ASSERT(NS_IsMainThread()); if (sBtA2dpInterface) { - sBtA2dpInterface->Cleanup(new CleanupA2dpResultHandler(aRes)); + sBtA2dpInterface->Cleanup(new CleanupResultHandler(aRes)); } else if (aRes) { // We dispatch a runnable here to make the profile resource handler // behave as if A2DP was initialized. - nsRefPtr r = new CleanupA2dpResultHandlerRunnable(aRes); + nsRefPtr r = new CleanupResultHandlerRunnable(aRes); if (NS_FAILED(NS_DispatchToMainThread(r))) { BT_LOGR("Failed to dispatch cleanup-result-handler runnable"); } diff --git a/dom/bluetooth/bluedroid/BluetoothA2dpManager.h b/dom/bluetooth/bluedroid/BluetoothA2dpManager.h index f4ac3cd41d6..44a4bb35514 100644 --- a/dom/bluetooth/bluedroid/BluetoothA2dpManager.h +++ b/dom/bluetooth/bluedroid/BluetoothA2dpManager.h @@ -47,11 +47,11 @@ protected: virtual ~BluetoothA2dpManager(); private: - class CleanupA2dpResultHandler; - class CleanupA2dpResultHandlerRunnable; + class CleanupResultHandler; + class CleanupResultHandlerRunnable; class ConnectResultHandler; class DisconnectResultHandler; - class InitA2dpResultHandler; + class InitResultHandler; class OnErrorProfileResultHandlerRunnable; BluetoothA2dpManager(); From 86e6f2942733de924e1bcad7d0a40623bfd3b604 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:12:38 +0200 Subject: [PATCH 19/42] Bug 1211435: Rename some internal classes of Bluetooth's AVRCP manager, r=shuang --- .../bluedroid/BluetoothAvrcpManager.cpp | 34 ++++++++----------- .../bluedroid/BluetoothAvrcpManager.h | 6 ++-- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothAvrcpManager.cpp b/dom/bluetooth/bluedroid/BluetoothAvrcpManager.cpp index 7b36f29813d..461968cac8d 100644 --- a/dom/bluetooth/bluedroid/BluetoothAvrcpManager.cpp +++ b/dom/bluetooth/bluedroid/BluetoothAvrcpManager.cpp @@ -118,11 +118,11 @@ BluetoothAvrcpManager::Reset() mPlayStatus = ControlPlayStatus::PLAYSTATUS_STOPPED; } -class BluetoothAvrcpManager::InitAvrcpResultHandler final +class BluetoothAvrcpManager::InitResultHandler final : public BluetoothAvrcpResultHandler { public: - InitAvrcpResultHandler(BluetoothProfileResultHandler* aRes) + InitResultHandler(BluetoothProfileResultHandler* aRes) : mRes(aRes) { } @@ -209,7 +209,7 @@ BluetoothAvrcpManager::InitAvrcpInterface(BluetoothProfileResultHandler* aRes) } BluetoothAvrcpManager* avrcpManager = BluetoothAvrcpManager::Get(); - sBtAvrcpInterface->Init(avrcpManager, new InitAvrcpResultHandler(aRes)); + sBtAvrcpInterface->Init(avrcpManager, new InitResultHandler(aRes)); } BluetoothAvrcpManager::~BluetoothAvrcpManager() @@ -245,11 +245,11 @@ BluetoothAvrcpManager::Get() return sBluetoothAvrcpManager; } -class BluetoothAvrcpManager::CleanupAvrcpResultHandler final +class BluetoothAvrcpManager::CleanupResultHandler final : public BluetoothAvrcpResultHandler { public: - CleanupAvrcpResultHandler(BluetoothProfileResultHandler* aRes) + CleanupResultHandler(BluetoothProfileResultHandler* aRes) : mRes(aRes) { } @@ -285,25 +285,19 @@ private: nsRefPtr mRes; }; -class BluetoothAvrcpManager::CleanupAvrcpResultHandlerRunnable final +class BluetoothAvrcpManager::CleanupResultHandlerRunnable final : public nsRunnable { public: - CleanupAvrcpResultHandlerRunnable(BluetoothProfileResultHandler* aRes) + CleanupResultHandlerRunnable(BluetoothProfileResultHandler* aRes) : mRes(aRes) - { } + { + MOZ_ASSERT(mRes); + } NS_IMETHOD Run() override { - sBtAvrcpInterface = nullptr; - if (sBtAvrcpInterface) { - sBtAvrcpInterface->Cleanup(new CleanupAvrcpResultHandler(mRes)); - } else if (mRes) { - /* Not all backends support AVRCP. If it's not available - * we signal success from here. - */ - mRes->Deinit(); - } + mRes->Deinit(); return NS_OK; } @@ -319,11 +313,11 @@ BluetoothAvrcpManager::DeinitAvrcpInterface(BluetoothProfileResultHandler* aRes) MOZ_ASSERT(NS_IsMainThread()); if (sBtAvrcpInterface) { - sBtAvrcpInterface->Cleanup(new CleanupAvrcpResultHandler(aRes)); + sBtAvrcpInterface->Cleanup(new CleanupResultHandler(aRes)); } else if (aRes) { // We dispatch a runnable here to make the profile resource handler - // behave as if A2DP was initialized. - nsRefPtr r = new CleanupAvrcpResultHandlerRunnable(aRes); + // behave as if AVRCP was initialized. + nsRefPtr r = new CleanupResultHandlerRunnable(aRes); if (NS_FAILED(NS_DispatchToMainThread(r))) { BT_LOGR("Failed to dispatch cleanup-result-handler runnable"); } diff --git a/dom/bluetooth/bluedroid/BluetoothAvrcpManager.h b/dom/bluetooth/bluedroid/BluetoothAvrcpManager.h index 3be51ab1ddd..a4bc1913c29 100644 --- a/dom/bluetooth/bluedroid/BluetoothAvrcpManager.h +++ b/dom/bluetooth/bluedroid/BluetoothAvrcpManager.h @@ -60,11 +60,11 @@ protected: virtual ~BluetoothAvrcpManager(); private: - class CleanupAvrcpResultHandler; - class CleanupAvrcpResultHandlerRunnable; + class CleanupResultHandler; + class CleanupResultHandlerRunnable; class ConnectRunnable; class DisconnectRunnable; - class InitAvrcpResultHandler; + class InitResultHandler; class OnErrorProfileResultHandlerRunnable; BluetoothAvrcpManager(); From 459d1a1a79d873ff5603289c3336df244c585afd Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 6 Oct 2015 10:12:38 +0200 Subject: [PATCH 20/42] Bug 1211435: Cleanup AVRCP interfaces when Bluetooth adapter gets switched off, r=shuang Cleaning up AVRCP was forgotten in bug 1199110. --- dom/bluetooth/bluedroid/BluetoothServiceBluedroid.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.cpp b/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.cpp index 2e7ae85616b..ad42626a29a 100644 --- a/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.cpp +++ b/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.cpp @@ -1890,9 +1890,11 @@ BluetoothServiceBluedroid::AdapterStateChangedNotification(bool aState) if (!mEnabled) { static void (* const sDeinitManager[])(BluetoothProfileResultHandler*) = { - BluetoothHfpManager::DeinitHfpInterface, + // Cleanup interfaces in opposite order to initialization. + BluetoothGattManager::DeinitGattInterface, + BluetoothAvrcpManager::DeinitAvrcpInterface, BluetoothA2dpManager::DeinitA2dpInterface, - BluetoothGattManager::DeinitGattInterface + BluetoothHfpManager::DeinitHfpInterface }; // Return error if BluetoothService is unavailable From 93a2cda93ff29228f75788cc5a62e5679c2a4549 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Tue, 6 Oct 2015 02:10:19 -0700 Subject: [PATCH 21/42] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/7989af3dde0e Author: Johan Lorenzo Desc: Merge pull request #32235 from JohanLorenzo/bug-1187330-2 Bug 1187330 - You can't have engineering apps with the spark distro ======== https://hg.mozilla.org/integration/gaia-central/rev/ada3ce43329b Author: Johan Lorenzo Desc: Bug 1187330 - You can't have engineering apps with the spark distro --- b2g/config/gaia.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 5ddf2d08a8a..7291c05d078 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -1,9 +1,9 @@ { "git": { - "git_revision": "8c58d628dcccdfccd238d5f128dfce37795a981f", + "git_revision": "0f59a94987f15f87f0b0115d53bdad4cb6ace57e", "remote": "https://git.mozilla.org/releases/gaia.git", "branch": "" }, - "revision": "e83090296c16cd09dc5ed5bb2de157547beba4c9", + "revision": "7989af3dde0e654783c2084eec9393c4645bf506", "repo_path": "integration/gaia-central" } From d03f801bbfe13c1885206ecc4c14f51409622783 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Tue, 6 Oct 2015 02:13:46 -0700 Subject: [PATCH 22/42] Bumping manifests a=b2g-bump --- b2g/config/aries/sources.xml | 2 +- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator-l/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/nexus-4-kk/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/nexus-5-l/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/aries/sources.xml b/b2g/config/aries/sources.xml index f3ac2b4a847..0cfc4586cab 100644 --- a/b2g/config/aries/sources.xml +++ b/b2g/config/aries/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index c3a6f3fafc7..790f466a0e5 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index aa844989d7e..bb1284e6627 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 4eef3aa971e..562c50a3d5e 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 8f829599e9f..305e4701136 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator-l/sources.xml b/b2g/config/emulator-l/sources.xml index 335062e5849..b3b897baba7 100644 --- a/b2g/config/emulator-l/sources.xml +++ b/b2g/config/emulator-l/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index aa844989d7e..bb1284e6627 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ - + diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 7cd005a3fab..588a08e0861 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4-kk/sources.xml b/b2g/config/nexus-4-kk/sources.xml index edc3a358faa..44f6366bdd1 100644 --- a/b2g/config/nexus-4-kk/sources.xml +++ b/b2g/config/nexus-4-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 6f86326fd14..165e89f2e61 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -18,7 +18,7 @@ - + diff --git a/b2g/config/nexus-5-l/sources.xml b/b2g/config/nexus-5-l/sources.xml index e573739f338..5dfb044d0d9 100644 --- a/b2g/config/nexus-5-l/sources.xml +++ b/b2g/config/nexus-5-l/sources.xml @@ -15,7 +15,7 @@ - + From 46489ae11dc1e617e06e02795248dcd4922274fa Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Tue, 6 Oct 2015 02:54:45 -0700 Subject: [PATCH 23/42] Bumping manifests a=b2g-bump --- b2g/config/emulator-kk/sources.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 305e4701136..7aa6adb12d2 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -128,10 +128,10 @@ - + - + From c22674ecbfe806875680bdb3fcadbd3304f76962 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Tue, 6 Oct 2015 03:01:52 -0700 Subject: [PATCH 24/42] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/1867d89c3747 Author: Fabien Cazenave Desc: Merge pull request #32232 from fabi1cazenave/value_selector_bug1211421 Bug 1211421 -