From ebf4ea9383c6123bcdd2673828b32b2172d408b0 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 02:50:48 -0700 Subject: [PATCH 01/54] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/0cd10c42702f Author: Sergi Mansilla Desc: Merge pull request #24472 from arcturus/bug-1072723 Bug 1072723 - [NFC] Could not import contact via NFC ======== https://hg.mozilla.org/integration/gaia-central/rev/1e4b8d611a48 Author: Francisco Jordano Desc: Bug 1072723 - [NFC] Could not import contact via NFC --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 5527bd80b0d..e97b15f19f9 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "4c52c3164207370c4b9180608f73970dcc6bdb78", + "revision": "0cd10c42702faed74d5cdaa6e0f7fa5eaf7b0e22", "repo_path": "/integration/gaia-central" } From 6d320d2bd921b4935b8b1ee269e0ed96af6a3eb9 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 02:52:36 -0700 Subject: [PATCH 02/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 4f9f4a8fcc4..e07a5162580 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 52b270732a9..1f7704fbb7a 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 0669d05abe3..2098d67b949 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 b2ab92ff5f8..5a68b1aa74b 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/sources.xml b/b2g/config/emulator/sources.xml index 52b270732a9..1f7704fbb7a 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 f44aac12a27..09fbf26fdbc 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 6a07f499504..9789042d488 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index b44610f0f19..dab7b10daff 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index bc6e9e3ddef..7eed6b2302c 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 36cb5bc5273..dc83e72bcb3 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 8655f1a6fff..0b110c6ece7 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 2ec59f6b64fd49f2d4112bdd474cf211c0b8a360 Mon Sep 17 00:00:00 2001 From: Yoshi Huang Date: Wed, 24 Sep 2014 14:52:04 +0800 Subject: [PATCH 03/54] Bug 1069177 - B2G NFC: rename nsINFCPeerEventListener to nsINfcDOMEventTarget. r=dimi --- dom/nfc/NfcContentHelper.js | 15 +++++----- dom/nfc/gonk/Nfc.js | 50 +++++++++++++++++++++++++++------ dom/nfc/nsINfcContentHelper.idl | 12 ++++---- dom/nfc/nsNfc.js | 4 +-- 4 files changed, 58 insertions(+), 23 deletions(-) diff --git a/dom/nfc/NfcContentHelper.js b/dom/nfc/NfcContentHelper.js index bacec7ecaf3..be2207b060f 100644 --- a/dom/nfc/NfcContentHelper.js +++ b/dom/nfc/NfcContentHelper.js @@ -55,7 +55,7 @@ const NFC_IPC_MSG_NAMES = [ "NFC:ConnectResponse", "NFC:CloseResponse", "NFC:CheckP2PRegistrationResponse", - "NFC:PeerEvent", + "NFC:DOMEvent", "NFC:NotifySendFileStatusResponse", "NFC:ConfigResponse" ]; @@ -96,7 +96,7 @@ NfcContentHelper.prototype = { }), _requestMap: null, - peerEventListener: null, + eventTarget: null, encodeNDEFRecords: function encodeNDEFRecords(records) { let encodedRecords = []; @@ -257,8 +257,9 @@ NfcContentHelper.prototype = { }); }, - registerPeerEventListener: function registerPeerEventListener(listener) { - this.peerEventListener = listener; + registerEventTarget: function registerEventTarget(target) { + this.eventTarget = target; + cpmm.sendAsyncMessage("NFC:AddEventTarget"); }, registerTargetForPeerReady: function registerTargetForPeerReady(window, appId) { @@ -412,13 +413,13 @@ NfcContentHelper.prototype = { this.fireRequestSuccess(atob(result.requestId), result); } break; - case "NFC:PeerEvent": + case "NFC:DOMEvent": switch (result.event) { case NFC.NFC_PEER_EVENT_READY: - this.peerEventListener.notifyPeerReady(result.sessionToken); + this.eventTarget.notifyPeerReady(result.sessionToken); break; case NFC.NFC_PEER_EVENT_LOST: - this.peerEventListener.notifyPeerLost(result.sessionToken); + this.eventTarget.notifyPeerLost(result.sessionToken); break; } break; diff --git a/dom/nfc/gonk/Nfc.js b/dom/nfc/gonk/Nfc.js index c7c42d7e7ef..01f286c2f0e 100644 --- a/dom/nfc/gonk/Nfc.js +++ b/dom/nfc/gonk/Nfc.js @@ -47,6 +47,10 @@ const NFC_CONTRACTID = "@mozilla.org/nfc;1"; const NFC_CID = Components.ID("{2ff24790-5e74-11e1-b86c-0800200c9a66}"); +const NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES = [ + "NFC:AddEventTarget" +]; + const NFC_IPC_MSG_NAMES = [ "NFC:CheckSessionToken" ]; @@ -95,6 +99,8 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { peerTargets: {}, currentPeer: null, + eventTargets: [], + init: function init(nfc) { this.nfc = nfc; @@ -113,6 +119,10 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { _registerMessageListeners: function _registerMessageListeners() { ppmm.addMessageListener("child-process-shutdown", this); + for (let message of NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES) { + ppmm.addMessageListener(message, this); + } + for (let message of NFC_IPC_MSG_NAMES) { ppmm.addMessageListener(message, this); } @@ -133,6 +143,10 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { _unregisterMessageListeners: function _unregisterMessageListeners() { ppmm.removeMessageListener("child-process-shutdown", this); + for (let message of NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES) { + ppmm.removeMessageListener(message, this); + } + for (let message of NFC_IPC_MSG_NAMES) { ppmm.removeMessageListener(message, this); } @@ -175,16 +189,28 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { }); }, - notifyPeerEvent: function notifyPeerEvent(target, event, sessionToken) { + notifyDOMEvent: function notifyDOMEvent(target, options) { if (!target) { dump("invalid target"); return; } - target.sendAsyncMessage("NFC:PeerEvent", { - event: event, - sessionToken: sessionToken - }); + target.sendAsyncMessage("NFC:DOMEvent", options); + }, + + addEventTarget: function addEventTarget(target) { + if (this.eventTargets.indexOf(target) != -1) { + return; + } + + this.eventTargets.push(target); + }, + + removeEventTarget: function removeEventTarget(target) { + let index = this.eventTargets.indexOf(target); + if (index != -1) { + delete this.eventTargets[index]; + } }, checkP2PRegistration: function checkP2PRegistration(message) { @@ -210,7 +236,8 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { // Remember the target that receives onpeerready. this.currentPeer = target; - this.notifyPeerEvent(target, NFC.NFC_PEER_EVENT_READY, sessionToken); + this.notifyDOMEvent(target, {event: NFC.NFC_PEER_EVENT_READY, + sessionToken: sessionToken}); }, onPeerLost: function onPeerLost(sessionToken) { @@ -221,7 +248,8 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { // For peerlost, the message is delievered to the target which // onpeerready has been called before. - this.notifyPeerEvent(this.currentPeer, NFC.NFC_PEER_EVENT_LOST, sessionToken); + this.notifyDOMEvent(this.currentPeer, {event: NFC.NFC_PEER_EVENT_LOST, + sessionToken: sessionToken}); this.currentPeer = null; }, @@ -235,10 +263,12 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { if (message.name == "child-process-shutdown") { this.removePeerTarget(message.target); this.nfc.removeTarget(message.target); + this.removeEventTarget(msg.target); return null; } - if (NFC_IPC_MSG_NAMES.indexOf(message.name) != -1) { + if (NFC_IPC_MSG_NAMES.indexOf(message.name) != -1 || + NFC_IPC_ADD_EVENT_TARGET_MSG_NAMES.indexOf(message.name) != -1 ) { // Do nothing. } else if (NFC_IPC_READ_PERM_MSG_NAMES.indexOf(message.name) != -1) { if (!message.target.assertPermission("nfc-read")) { @@ -264,6 +294,9 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function () { } switch (message.name) { + case "NFC:AddEventTarget": + this.addEventTarget(message.target); + return null; case "NFC:CheckSessionToken": if (!SessionHelper.isValidToken(message.data.sessionToken)) { debug("Received invalid Session Token: " + message.data.sessionToken); @@ -472,6 +505,7 @@ Nfc.prototype = { // Update the upper layers with a session token (alias) message.sessionToken = SessionHelper.registerSession(message.sessionId, message.techList); + // Do not expose the actual session to the content delete message.sessionId; diff --git a/dom/nfc/nsINfcContentHelper.idl b/dom/nfc/nsINfcContentHelper.idl index 5f269473059..34d8d0776aa 100644 --- a/dom/nfc/nsINfcContentHelper.idl +++ b/dom/nfc/nsINfcContentHelper.idl @@ -7,8 +7,8 @@ interface nsIVariant; -[scriptable, uuid(57fc2998-1058-4fd5-8dd9-0e303218d5fd)] -interface nsINfcPeerEventListener : nsISupports +[scriptable, uuid(e81cc1ac-6f0b-4581-a9fb-7ee47ed0158e)] +interface nsINfcDOMEventTarget : nsISupports { /** * Callback function used to notify peerready. @@ -27,7 +27,7 @@ interface nsINfcPeerEventListener : nsISupports void notifyPeerLost(in DOMString sessionToken); }; -[scriptable, uuid(9a41d969-3375-4933-814e-2da781c8f691)] +[scriptable, uuid(7eaf4c31-e1d1-422e-aa55-181f4eb156b0)] interface nsINfcContentHelper : nsISupports { const long NFC_EVENT_PEER_READY = 0x01; @@ -65,11 +65,11 @@ interface nsINfcContentHelper : nsISupports in DOMString sessionToken); /** - * Register the peer event listener. + * Register the event target. * - * @param listener An instance of the nsINfcPeerEventListener. + * @param target An instance of the nsINfcDOMEventTarget. */ - void registerPeerEventListener(in nsINfcPeerEventListener listener); + void registerEventTarget(in nsINfcDOMEventTarget target); /** * Register the given application id with Chrome process diff --git a/dom/nfc/nsNfc.js b/dom/nfc/nsNfc.js index d49435f0c49..9eef5ea139d 100644 --- a/dom/nfc/nsNfc.js +++ b/dom/nfc/nsNfc.js @@ -138,7 +138,7 @@ function mozNfc() { debug("No NFC support.") } - this._nfcContentHelper.registerPeerEventListener(this); + this._nfcContentHelper.registerEventTarget(this); } mozNfc.prototype = { _nfcContentHelper: null, @@ -289,7 +289,7 @@ mozNfc.prototype = { contractID: "@mozilla.org/navigatorNfc;1", QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, Ci.nsIDOMGlobalPropertyInitializer, - Ci.nsINfcPeerEventListener]), + Ci.nsINfcDOMEventTarget]), }; this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MozNFCTag, MozNFCPeer, mozNfc]); From 273cdbbc1596fb9b2e8927bb6eaae8afa24eeb81 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 03:50:46 -0700 Subject: [PATCH 04/54] Bumping gaia.json for 4 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/9f5be4df18d2 Author: Cristian Rodriguez Desc: Merge pull request #24418 from crdlc/bug-1067772 Bug 1067772 - (app-grouping) Naming/renaming groups ======== https://hg.mozilla.org/integration/gaia-central/rev/c3d8706d7ea7 Author: crdlc Desc: Bug 1067772 - (app-grouping) Naming/renaming groups ======== https://hg.mozilla.org/integration/gaia-central/rev/add0f6a1bf43 Author: Arthur Chen Desc: Merge pull request #24502 from fjaguero/remove-simple-tiling-dev-panel Bug 1072834 - Remove simple tiling from developer panel r=arthurcc ======== https://hg.mozilla.org/integration/gaia-central/rev/c974e0105634 Author: Fernando Agüero Desc: Bug 1072834 - Remove simple tiling from developer panel --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index e97b15f19f9..5dbefcb8d7f 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "0cd10c42702faed74d5cdaa6e0f7fa5eaf7b0e22", + "revision": "9f5be4df18d2bdbc8ebc6916ad08a2e4deb352a5", "repo_path": "/integration/gaia-central" } From abc18c035f3128df398640237267681ff1ccc560 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 03:56:57 -0700 Subject: [PATCH 05/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index e07a5162580..343a9b90180 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 1f7704fbb7a..93dd790a875 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 2098d67b949..c793ea894ef 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 5a68b1aa74b..35afd84b8ef 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/sources.xml b/b2g/config/emulator/sources.xml index 1f7704fbb7a..93dd790a875 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 09fbf26fdbc..ab5746ae68a 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 9789042d488..64fc92299d7 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index dab7b10daff..27527c84051 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 7eed6b2302c..9d51487ea42 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index dc83e72bcb3..2c36cbd9126 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 0b110c6ece7..c3b551d0b62 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From f1cfcf064fe12be903ec62afcfe30707bae4c66d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 04:20:47 -0700 Subject: [PATCH 06/54] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/518c147231ee Author: Min-Zhong "John" Lu Desc: Merge pull request #24467 from mnjul/bug_1044525_kb_keep_dom_element_at_renderjs_with_unittest Bug 1044525 - Avoid poking with DOM elements in various modules aside from renderer by using a WeakMap to hold layout key objects, mapped from DOM elements. r=timdream. f=rudyl ======== https://hg.mozilla.org/integration/gaia-central/rev/a0da2261a00b Author: John Lu [:mnjul] Desc: Bug 1044525 - Avoid poking with DOM elements in various modules aside from renderer by using a WeakMap to hold layout key objects, mapped from DOM elements. - render.js's key properties normalization is now done in LayoutNormalizer. The normalization for static layouts takes place in layout loader, when the layout is loaded. Layout Manager's on-the-fly generated keys are pre-normalized in the hard-coded structures. - Also, removed parseInt() on keycodes where suitable as we now retreive "number" from the objects held by WeakMap. We have two WeakMaps, one maps DOM element to abstract target objects ("forward" map), and one maps inversely ("reverse" map) Policy of accessing those WeakMaps is: - IMERender and AltCharMenu(View) can set both forward and reverse maps by calling IMERender.setDomElemTargetObject, a small helper function. - Everyone can retrieve forward mapping (elem to obj) in layoutRenderingManager with LRM.getTargetObject. - Only IMERender and AltCharMenu(View) can retrieve reverse mapping (obj to elem) accessible through IMERender's reverse map (targetObjDomMap). -- currently we need to allow AltCharMenuManager to do so 'coz their responsibility and coupling aren't very clear. -- we probably need some refactoring work to reassign the responsibility and coupling such that targetObjDomMap isn't unnecessarily exposed. --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 5dbefcb8d7f..45b060f4ad5 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "9f5be4df18d2bdbc8ebc6916ad08a2e4deb352a5", + "revision": "518c147231eec3d653372c0d5db3e5ffa2975145", "repo_path": "/integration/gaia-central" } From 1df4e3848d6c47494edd9bebefd533e5674343c0 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 04:26:58 -0700 Subject: [PATCH 07/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 343a9b90180..12fb74ea0c5 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 93dd790a875..59df85302f4 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 c793ea894ef..293ebc60f53 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 35afd84b8ef..dbe94597acd 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/sources.xml b/b2g/config/emulator/sources.xml index 93dd790a875..59df85302f4 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 ab5746ae68a..153bc8d5479 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 64fc92299d7..42fcc7d0d3a 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 27527c84051..fbfa64c623a 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 9d51487ea42..2501e9a9320 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 2c36cbd9126..c3ede7d6c8a 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index c3b551d0b62..65e198f5247 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 67771434e4eb469e76074465f6f7759473e3a7f1 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 05:05:47 -0700 Subject: [PATCH 08/54] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/194fcb41d0f0 Author: Yuren Ju Desc: Merge pull request #24314 from sudheesh001/Patch_1061518 Fixes Bug 1061518 jshint errors in fake_update-checker.js r=yurenju ======== https://hg.mozilla.org/integration/gaia-central/rev/23369fad8684 Author: sudheesh001 Desc: Fixes Bug 1061518 jshint errors in fake_update-checker.js r=yurenju --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 45b060f4ad5..4a5a08f1f06 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "518c147231eec3d653372c0d5db3e5ffa2975145", + "revision": "194fcb41d0f04d7d4175e0154a90e4e9f35b589a", "repo_path": "/integration/gaia-central" } From eb93402e5bc520a24d201d7fd994cfdd6ff15bb9 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 05:11:57 -0700 Subject: [PATCH 09/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 12fb74ea0c5..488bf7a2f74 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 59df85302f4..f0e132375d6 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 293ebc60f53..2253da9b198 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 dbe94597acd..1672b393c30 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/sources.xml b/b2g/config/emulator/sources.xml index 59df85302f4..f0e132375d6 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 153bc8d5479..0270d4e1d46 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 42fcc7d0d3a..04e4d550236 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index fbfa64c623a..f0e86027e15 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 2501e9a9320..b03c05e4072 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index c3ede7d6c8a..6063930ea02 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 65e198f5247..1763754e302 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 1eae21e3b00af89a2d2f2aa2740df3fa47cf4933 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 05:50:46 -0700 Subject: [PATCH 10/54] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/559f40878cb1 Author: Ben Francis Desc: Merge pull request #24383 from benfrancis/1060577 Bug 1060577 - Adjust Rocketbar backdrop opacity on input r=kgrandon ======== https://hg.mozilla.org/integration/gaia-central/rev/86fd1bad48ee Author: Ben Francis Desc: Bug 1060577 - Adjust Rocketbar backdrop opacity when displaying results --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 4a5a08f1f06..0ace23604df 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "194fcb41d0f04d7d4175e0154a90e4e9f35b589a", + "revision": "559f40878cb1f47fc56004958e494076057a03e6", "repo_path": "/integration/gaia-central" } From a0579e1bd6afc6f9e957d9490be3053d6dacec25 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 05:56:58 -0700 Subject: [PATCH 11/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 488bf7a2f74..2f0a3824170 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 f0e132375d6..3c49cbe5788 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 2253da9b198..eb5ac7ed028 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 1672b393c30..802eda5d589 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/sources.xml b/b2g/config/emulator/sources.xml index f0e132375d6..3c49cbe5788 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 0270d4e1d46..e6aa849327c 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 04e4d550236..fde7ccd41ba 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index f0e86027e15..ebf0d19c44b 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index b03c05e4072..9f72b058910 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 6063930ea02..3760348313f 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 1763754e302..bbf42915045 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From ae439e45564f853c2b25084b09b055cd4fb76769 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:05:49 -0700 Subject: [PATCH 12/54] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/2dd9a2c9e499 Author: viorelaioia Desc: Merge pull request #24515 from bebef1987/email_frame Bug 1074144 - Fix Email app oauth2 authentication failure ======== https://hg.mozilla.org/integration/gaia-central/rev/5c8b36cf94fc Author: Bebe Desc: Bug 1074144 - Fix Email app oauth2 authentication failure --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 0ace23604df..d172bcfd9bb 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "559f40878cb1f47fc56004958e494076057a03e6", + "revision": "2dd9a2c9e49912cfb22e9075c5548f9894e97d95", "repo_path": "/integration/gaia-central" } From a55964788ed5eedc0d70f8eb5e489892ac831994 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:12:01 -0700 Subject: [PATCH 13/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 2f0a3824170..17e2cb7fc8c 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 3c49cbe5788..d943081efe4 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 eb5ac7ed028..d8662062691 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 802eda5d589..5b442520281 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/sources.xml b/b2g/config/emulator/sources.xml index 3c49cbe5788..d943081efe4 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 e6aa849327c..d5d91869b15 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index fde7ccd41ba..859fd4671ed 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index ebf0d19c44b..4e3859abf23 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 9f72b058910..b1a912f8ef0 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 3760348313f..0a7ee967fff 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index bbf42915045..a32ce3f079e 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From a55e94262c521d4435f908df6c06e9c4b4622a05 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:20:46 -0700 Subject: [PATCH 14/54] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/9da773cd6078 Author: Cristian Rodriguez Desc: Merge pull request #24348 from crdlc/bug-983766 Bug 983766 - [B2G][Dialer] Suggested phone numbers dont appear for Faceb... ======== https://hg.mozilla.org/integration/gaia-central/rev/c10b08c94ebd Author: crdlc Desc: Bug 983766 - [B2G][Dialer] Suggested phone numbers dont appear for Facebook contacts that have edited phone numbers --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index d172bcfd9bb..8d6b28758d5 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "2dd9a2c9e49912cfb22e9075c5548f9894e97d95", + "revision": "9da773cd6078809022fccdb7c46ac0ac6e55dd05", "repo_path": "/integration/gaia-central" } From 0d568b4948e408fd41b4f2b8d250335df6981986 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:26:55 -0700 Subject: [PATCH 15/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 17e2cb7fc8c..b17c854ba6a 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 d943081efe4..565904bcd5a 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 d8662062691..85495681717 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 5b442520281..01d5a6c2744 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/sources.xml b/b2g/config/emulator/sources.xml index d943081efe4..565904bcd5a 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 d5d91869b15..9bba42dfb9a 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 859fd4671ed..84203ec0519 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 4e3859abf23..5badd34d24e 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index b1a912f8ef0..a1f9feb1eb3 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 0a7ee967fff..d18b8797c9d 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index a32ce3f079e..d288459ef20 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From a8b2cf56ef54d6b9f5b31add7c7561ccd91230ce Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:32:32 -0700 Subject: [PATCH 16/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index b17c854ba6a..3c11c5b148d 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -23,7 +23,7 @@ - + diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 565904bcd5a..3b87d8bb720 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -25,7 +25,7 @@ - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 85495681717..fb2ed02b69c 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -20,7 +20,7 @@ - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 01d5a6c2744..ca169535fba 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -23,7 +23,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 565904bcd5a..3b87d8bb720 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -25,7 +25,7 @@ - + diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 9bba42dfb9a..82bc8d82356 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -23,7 +23,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 84203ec0519..a2cfc159a1e 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -20,7 +20,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 5badd34d24e..1db9a9b6b8b 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -22,7 +22,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index d18b8797c9d..c7a13544661 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -20,7 +20,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index d288459ef20..b2c79fdab0b 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -22,7 +22,7 @@ - + From d0a196c6b809d41c45cb574b850da230a377a2fb Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:35:49 -0700 Subject: [PATCH 17/54] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/3a342d6e4ec2 Author: Florin Strugariu Desc: Merge pull request #23140 from viorelaioia/bug-1055038 Bug 1055038 - False positive in test_lockscreen_unlock_to_camera ======== https://hg.mozilla.org/integration/gaia-central/rev/fae08970cef8 Author: Viorela Ioia Desc: Bug 1055038 - False positive in test_lockscreen_unlock_to_camera --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 8d6b28758d5..7c45a6044c9 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "9da773cd6078809022fccdb7c46ac0ac6e55dd05", + "revision": "3a342d6e4ec28ed96e0524a9f3d6d8c0d2be8ccb", "repo_path": "/integration/gaia-central" } From dfa5b58748cd5eaa0a6391c8458db3be07acbe7a Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:42:04 -0700 Subject: [PATCH 18/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 3c11c5b148d..0c5cb938515 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 3b87d8bb720..4d2171c74e8 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 fb2ed02b69c..782bba7003d 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 ca169535fba..3753226ddfe 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/sources.xml b/b2g/config/emulator/sources.xml index 3b87d8bb720..4d2171c74e8 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 82bc8d82356..2cbab2ffb7b 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index a2cfc159a1e..8f38256db8f 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 1db9a9b6b8b..d02c7338030 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index a1f9feb1eb3..4cb9bc50831 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index c7a13544661..e88b360d2ac 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index b2c79fdab0b..0e9dcaacd1e 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From ef5c579c892ff50b7952d94865382d9c70303b3b Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:47:51 -0700 Subject: [PATCH 19/54] Bumping manifests a=b2g-bump --- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 4d2171c74e8..1bf8bcd0baa 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -97,7 +97,7 @@ - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 4d2171c74e8..1bf8bcd0baa 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -97,7 +97,7 @@ - + From 80356534f382a87d093c1773df8a4c3aaf14d301 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:50:46 -0700 Subject: [PATCH 20/54] 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/5991ff136cef Author: Germán Toro del Valle Desc: Merge pull request #24468 from gtorodelvalle/emergency-call-bug-1060730-use-promise-all Bug 1060730 - Turn updateICEContacts() into a Promise.all() barrier ======== https://hg.mozilla.org/integration/gaia-central/rev/4e04a7b6e3b1 Author: German Toro del Valle Desc: Bug 1060730 - Turn updateICEContacts() into a Promise.all() barrier --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 7c45a6044c9..0b265693fe6 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "3a342d6e4ec28ed96e0524a9f3d6d8c0d2be8ccb", + "revision": "5991ff136cef676e4cee462536bb1b8d85e80cec", "repo_path": "/integration/gaia-central" } From f50e5cd6b993a7ff10de25da4efdd00781d8bedf Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot Date: Mon, 29 Sep 2014 06:56:58 -0700 Subject: [PATCH 21/54] Bumping manifests a=b2g-bump --- 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/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 0c5cb938515..d0539a23ea6 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 1bf8bcd0baa..aa6e009b87e 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 782bba7003d..4fe3da811f0 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 3753226ddfe..1142ee93501 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/sources.xml b/b2g/config/emulator/sources.xml index 1bf8bcd0baa..aa6e009b87e 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 2cbab2ffb7b..ab6729e9e0e 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 8f38256db8f..238e9db8733 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index d02c7338030..04ff463edd8 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 4cb9bc50831..01ecc131ca3 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ - + diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index e88b360d2ac..bf5e4a24214 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ - + diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 0e9dcaacd1e..a17e6934999 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ - + From 19387b872643f21077cae40af0058f6c662e26d7 Mon Sep 17 00:00:00 2001 From: Bevis Tseng Date: Wed, 13 Aug 2014 10:35:23 +0800 Subject: [PATCH 22/54] Bug 864484 - Part 1: Create new CellBroadcastService. r=vyang --HG-- extra : rebase_source : fa69884403c5b4187554660993044ee3c7a4706f --- b2g/installer/package-manifest.in | 2 + .../gonk/CellBroadcastService.js | 223 ++++++++++++++++++ .../gonk/CellBroadcastService.manifest | 6 + dom/cellbroadcast/interfaces/moz.build | 7 +- .../interfaces/nsICellBroadcastService.idl | 29 +++ .../nsIGonkCellBroadcastService.idl | 27 +++ dom/cellbroadcast/moz.build | 6 + 7 files changed, 299 insertions(+), 1 deletion(-) create mode 100644 dom/cellbroadcast/gonk/CellBroadcastService.js create mode 100644 dom/cellbroadcast/gonk/CellBroadcastService.manifest create mode 100644 dom/cellbroadcast/interfaces/nsICellBroadcastService.idl create mode 100644 dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl diff --git a/b2g/installer/package-manifest.in b/b2g/installer/package-manifest.in index e3745162d2b..30216346a92 100644 --- a/b2g/installer/package-manifest.in +++ b/b2g/installer/package-manifest.in @@ -437,6 +437,8 @@ ; RIL #if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL) +@BINPATH@/components/CellBroadcastService.js +@BINPATH@/components/CellBroadcastService.manifest @BINPATH@/components/MmsService.js @BINPATH@/components/MmsService.manifest @BINPATH@/components/MobileConnectionService.js diff --git a/dom/cellbroadcast/gonk/CellBroadcastService.js b/dom/cellbroadcast/gonk/CellBroadcastService.js new file mode 100644 index 00000000000..73de01e381f --- /dev/null +++ b/dom/cellbroadcast/gonk/CellBroadcastService.js @@ -0,0 +1,223 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +XPCOMUtils.defineLazyGetter(this, "RIL", function () { + let obj = {}; + Cu.import("resource://gre/modules/ril_consts.js", obj); + return obj; +}); + +const GONK_CELLBROADCAST_SERVICE_CONTRACTID = + "@mozilla.org/cellbroadcast/gonkservice;1"; +const GONK_CELLBROADCAST_SERVICE_CID = + Components.ID("{7ba407ce-21fd-11e4-a836-1bfdee377e5c}"); +const CELLBROADCASTMESSAGE_CID = + Components.ID("{29474c96-3099-486f-bb4a-3c9a1da834e4}"); +const CELLBROADCASTETWSINFO_CID = + Components.ID("{59f176ee-9dcd-4005-9d47-f6be0cd08e17}"); + +const NS_XPCOM_SHUTDOWN_OBSERVER_ID = "xpcom-shutdown"; + +let DEBUG; +function debug(s) { + dump("CellBroadcastService: " + s); +} + +function CellBroadcastMessage(aServiceId, + aGsmGeographicalScope, + aMessageCode, + aMessageId, + aLanguage, + aBody, + aMessageClass, + aTimestamp, + aCdmaServiceCategory, + aHasEtwsInfo, + aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup) { + this.serviceId = aServiceId; + this.gsmGeographicalScope = aGsmGeographicalScope; + this.messageCode = aMessageCode; + this.messageId = aMessageId; + this.language = aLanguage; + this.body = aBody; + this.messageClass = aMessageClass; + this.timestamp = aTimestamp; + + this.cdmaServiceCategory = aCdmaServiceCategory; + + if (aHasEtwsInfo) { + this.etws = new CellBroadcastEtwsInfo(aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup); + } +} +CellBroadcastMessage.prototype = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMMozCellBroadcastMessage]), + classID: CELLBROADCASTMESSAGE_CID, + classInfo: XPCOMUtils.generateCI({ + classID: CELLBROADCASTMESSAGE_CID, + classDescription: "CellBroadcastMessage", + flags: Ci.nsIClassInfo.DOM_OBJECT, + interfaces: [Ci.nsIDOMMozCellBroadcastMessage] + }), + + // nsIDOMMozCellBroadcastMessage + serviceId: -1, + + gsmGeographicalScope: null, + messageCode: null, + messageId: null, + language: null, + body: null, + messageClass: null, + timestamp: null, + + etws: null, + cdmaServiceCategory: null +}; + +function CellBroadcastEtwsInfo(aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup) { + this.warningType = aEtwsWarningType; + this.emergencyUserAlert = aEtwsEmergencyUserAlert; + this.popup = aEtwsPopup; +} +CellBroadcastEtwsInfo.prototype = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMMozCellBroadcastEtwsInfo]), + classID: CELLBROADCASTETWSINFO_CID, + classInfo: XPCOMUtils.generateCI({ + classID: CELLBROADCASTETWSINFO_CID, + classDescription: "CellBroadcastEtwsInfo", + flags: Ci.nsIClassInfo.DOM_OBJECT, + interfaces: [Ci.nsIDOMMozCellBroadcastEtwsInfo] + }), + + // nsIDOMMozCellBroadcastEtwsInfo + + warningType: null, + emergencyUserAlert: null, + popup: null +}; + +function CellBroadcastService() { + this._listeners = []; + + this._updateDebugFlag(); + + Services.obs.addObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false); +} +CellBroadcastService.prototype = { + classID: GONK_CELLBROADCAST_SERVICE_CID, + + classInfo: XPCOMUtils.generateCI({classID: GONK_CELLBROADCAST_SERVICE_CID, + contractID: GONK_CELLBROADCAST_SERVICE_CONTRACTID, + classDescription: "CellBroadcastService", + interfaces: [Ci.nsICellBroadcastService, + Ci.nsIGonkCellBroadcastService], + flags: Ci.nsIClassInfo.SINGLETON}), + + QueryInterface: XPCOMUtils.generateQI([Ci.nsICellBroadcastService, + Ci.nsIGonkCellBroadcastService, + Ci.nsIObserver]), + + // An array of nsICellBroadcastListener instances. + _listeners: null, + + _updateDebugFlag: function() { + try { + DEBUG = RIL.DEBUG_RIL || + Services.prefs.getBoolPref(kPrefRilDebuggingEnabled); + } catch (e) {} + }, + + /** + * nsICellBroadcastService interface + */ + registerListener: function(aListener) { + if (this._listeners.indexOf(aListener) >= 0) { + throw Cr.NS_ERROR_UNEXPECTED; + } + + this._listeners.push(aListener); + }, + + unregisterListener: function(aListener) { + let index = this._listeners.indexOf(aListener); + + if (index < 0) { + throw Cr.NS_ERROR_UNEXPECTED; + } + + this._listeners.splice(index, 1); + }, + + /** + * nsIGonkCellBroadcastService interface + */ + notifyMessageReceived: function(aServiceId, + aGsmGeographicalScope, + aMessageCode, + aMessageId, + aLanguage, + aBody, + aMessageClass, + aTimestamp, + aCdmaServiceCategory, + aHasEtwsInfo, + aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup) { + let message = new CellBroadcastMessage(aServiceId, + aGsmGeographicalScope, + aMessageCode, + aMessageId, + aLanguage, + aBody, + aMessageClass, + aTimestamp, + aCdmaServiceCategory, + aHasEtwsInfo, + aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup); + + for (let listener of this._listeners) { + try { + // TODO: + // Deflate 'message' object to multiple parameters by redefining + // nsICellBroadcastListener for IPC implementation. + listener.notifyMessageReceived(message); + } catch (e) { + debug("listener threw an exception: " + e); + } + } + }, + + /** + * nsIObserver interface. + */ + observe: function(aSubject, aTopic, aData) { + switch (aTopic) { + case NS_XPCOM_SHUTDOWN_OBSERVER_ID: + Services.obs.removeObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID); + + // Remove all listeners. + this._listeners = []; + break; + } + } +}; + +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([CellBroadcastService]); diff --git a/dom/cellbroadcast/gonk/CellBroadcastService.manifest b/dom/cellbroadcast/gonk/CellBroadcastService.manifest new file mode 100644 index 00000000000..53b9eb9a2fd --- /dev/null +++ b/dom/cellbroadcast/gonk/CellBroadcastService.manifest @@ -0,0 +1,6 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +component {7ba407ce-21fd-11e4-a836-1bfdee377e5c} CellBroadcastService.js +contract @mozilla.org/cellbroadcast/gonkservice;1 {7ba407ce-21fd-11e4-a836-1bfdee377e5c} diff --git a/dom/cellbroadcast/interfaces/moz.build b/dom/cellbroadcast/interfaces/moz.build index 7732990b335..2fba118cee5 100644 --- a/dom/cellbroadcast/interfaces/moz.build +++ b/dom/cellbroadcast/interfaces/moz.build @@ -6,8 +6,13 @@ XPIDL_SOURCES += [ 'nsICellBroadcastProvider.idl', + 'nsICellBroadcastService.idl', 'nsIDOMMozCellBroadcastMessage.idl', ] -XPIDL_MODULE = 'dom_cellbroadcast' +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']: + XPIDL_SOURCES += [ + 'nsIGonkCellBroadcastService.idl', + ] +XPIDL_MODULE = 'dom_cellbroadcast' diff --git a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl new file mode 100644 index 00000000000..5d71b7ff0a2 --- /dev/null +++ b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl @@ -0,0 +1,29 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" + +interface nsIDOMMozCellBroadcastMessage; +interface nsICellBroadcastListener; + +/** + * XPCOM component that provides the cell broadcast information. + */ +[scriptable, uuid(05099b34-21f7-11e4-b3b9-1b1b03487cab)] +interface nsICellBroadcastService : nsISupports +{ + /** + * Attribute CdmaServiceCategory is only valid in CDMA network. + * Set to CDMA_SERVICE_CATEGORY_INVALID if received from GSM/UMTS network. + */ + const unsigned long CDMA_SERVICE_CATEGORY_INVALID = 0xFFFFFFFF; + + /** + * Called to register receiving cellbroadcast messages. + * + * 'cellbroadcast' permission is required for registration/unregistration. + */ + void registerListener(in nsICellBroadcastListener listener); + void unregisterListener(in nsICellBroadcastListener listener); +}; \ No newline at end of file diff --git a/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl new file mode 100644 index 00000000000..2c5b7729c5c --- /dev/null +++ b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl @@ -0,0 +1,27 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "domstubs.idl" +#include "nsICellBroadcastService.idl" + +[scriptable, uuid(f72ced60-21f9-11e4-8896-6fdff2f5c909)] +interface nsIGonkCellBroadcastService : nsICellBroadcastService +{ + /** + * Called when a cellbroadcast message has been received by the network. + */ + void notifyMessageReceived(in unsigned long aServiceId, + in DOMString aGsmGeographicalScope, + in unsigned short aMessageCode, + in unsigned short aMessageId, + in DOMString aLanguage, + in DOMString aBody, + in DOMString aMessageClass, + in DOMTimeStamp aTimestamp, + in unsigned long aCdmaServiceCategory, + in boolean aHasEtwsInfo, + in DOMString aEtwsWarningType, + in boolean aEtwsEmergencyUserAlert, + in boolean aEtwsPopup); +}; diff --git a/dom/cellbroadcast/moz.build b/dom/cellbroadcast/moz.build index 2a359ed6ea1..e6a6c3f3803 100644 --- a/dom/cellbroadcast/moz.build +++ b/dom/cellbroadcast/moz.build @@ -14,6 +14,12 @@ SOURCES += [ 'CellBroadcast.cpp', ] +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']: + EXTRA_COMPONENTS += [ + 'gonk/CellBroadcastService.js', + 'gonk/CellBroadcastService.manifest', + ] + FAIL_ON_WARNINGS = True FINAL_LIBRARY = 'xul' From 343477777e63a6c0ffe30558abf01598b0fed5bd Mon Sep 17 00:00:00 2001 From: Bevis Tseng Date: Wed, 13 Aug 2014 18:28:34 +0800 Subject: [PATCH 23/54] Bug 864484 - Part 2: Replace CellBroadcastProvider with CellBroadcastService. r=vyang --HG-- extra : rebase_source : 3b5f5e3aab5a797aad88a1566a3e4eb17e0fa6bd --- dom/cellbroadcast/CellBroadcast.cpp | 27 +++-- dom/cellbroadcast/CellBroadcast.h | 7 +- dom/cellbroadcast/interfaces/moz.build | 1 - .../interfaces/nsICellBroadcastProvider.idl | 35 ------ .../interfaces/nsICellBroadcastService.idl | 13 ++- dom/system/gonk/RILContentHelper.js | 104 +----------------- dom/system/gonk/RadioInterfaceLayer.js | 63 ++++++----- 7 files changed, 64 insertions(+), 186 deletions(-) delete mode 100644 dom/cellbroadcast/interfaces/nsICellBroadcastProvider.idl diff --git a/dom/cellbroadcast/CellBroadcast.cpp b/dom/cellbroadcast/CellBroadcast.cpp index 2abfaad731b..36a0b19848a 100644 --- a/dom/cellbroadcast/CellBroadcast.cpp +++ b/dom/cellbroadcast/CellBroadcast.cpp @@ -9,7 +9,7 @@ #include "nsIDOMMozCellBroadcastMessage.h" #include "nsServiceManagerUtils.h" -#define NS_RILCONTENTHELPER_CONTRACTID "@mozilla.org/ril/content-helper;1" +#define NS_CELLBROADCASTSERVICE_CONTRACTID "@mozilla.org/cellbroadcast/gonkservice;1" using namespace mozilla::dom; @@ -58,34 +58,39 @@ CellBroadcast::Create(nsPIDOMWindow* aWindow, ErrorResult& aRv) MOZ_ASSERT(aWindow); MOZ_ASSERT(aWindow->IsInnerWindow()); - nsCOMPtr provider = - do_GetService(NS_RILCONTENTHELPER_CONTRACTID); - if (!provider) { + nsCOMPtr service = + do_GetService(NS_CELLBROADCASTSERVICE_CONTRACTID); + if (!service) { aRv.Throw(NS_ERROR_UNEXPECTED); return nullptr; } - nsRefPtr cb = new CellBroadcast(aWindow, provider); + nsRefPtr cb = new CellBroadcast(aWindow, service); return cb.forget(); } CellBroadcast::CellBroadcast(nsPIDOMWindow *aWindow, - nsICellBroadcastProvider *aProvider) + nsICellBroadcastService *aService) : DOMEventTargetHelper(aWindow) - , mProvider(aProvider) { mListener = new Listener(this); - DebugOnly rv = mProvider->RegisterCellBroadcastMsg(mListener); + DebugOnly rv = aService->RegisterListener(mListener); NS_WARN_IF_FALSE(NS_SUCCEEDED(rv), - "Failed registering Cell Broadcast callback with provider"); + "Failed registering Cell Broadcast callback"); } CellBroadcast::~CellBroadcast() { - MOZ_ASSERT(mProvider && mListener); + MOZ_ASSERT(mListener); mListener->Disconnect(); - mProvider->UnregisterCellBroadcastMsg(mListener); + nsCOMPtr service = + do_GetService(NS_CELLBROADCASTSERVICE_CONTRACTID); + if (service) { + service->UnregisterListener(mListener); + } + + mListener = nullptr; } NS_IMPL_ISUPPORTS_INHERITED0(CellBroadcast, DOMEventTargetHelper) diff --git a/dom/cellbroadcast/CellBroadcast.h b/dom/cellbroadcast/CellBroadcast.h index 8515020fe8a..51283c789a1 100644 --- a/dom/cellbroadcast/CellBroadcast.h +++ b/dom/cellbroadcast/CellBroadcast.h @@ -9,7 +9,7 @@ #include "mozilla/Attributes.h" #include "mozilla/DOMEventTargetHelper.h" #include "mozilla/ErrorResult.h" -#include "nsICellBroadcastProvider.h" +#include "nsICellBroadcastService.h" #include "js/TypeDecls.h" class nsPIDOMWindow; @@ -23,7 +23,7 @@ class CellBroadcast MOZ_FINAL : public DOMEventTargetHelper, /** * Class CellBroadcast doesn't actually expose nsICellBroadcastListener. * Instead, it owns an nsICellBroadcastListener derived instance mListener - * and passes it to nsICellBroadcastProvider. The onreceived events are first + * and passes it to nsICellBroadcastService. The onreceived events are first * delivered to mListener and then forwarded to its owner, CellBroadcast. See * also bug 775997 comment #51. */ @@ -43,7 +43,7 @@ public: CellBroadcast() MOZ_DELETE; CellBroadcast(nsPIDOMWindow *aWindow, - nsICellBroadcastProvider* aProvider); + nsICellBroadcastService* aService); nsPIDOMWindow* GetParentObject() const { return GetOwner(); } @@ -54,7 +54,6 @@ public: IMPL_EVENT_HANDLER(received) private: - nsCOMPtr mProvider; nsRefPtr mListener; }; diff --git a/dom/cellbroadcast/interfaces/moz.build b/dom/cellbroadcast/interfaces/moz.build index 2fba118cee5..a7a9a79a5f7 100644 --- a/dom/cellbroadcast/interfaces/moz.build +++ b/dom/cellbroadcast/interfaces/moz.build @@ -5,7 +5,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. XPIDL_SOURCES += [ - 'nsICellBroadcastProvider.idl', 'nsICellBroadcastService.idl', 'nsIDOMMozCellBroadcastMessage.idl', ] diff --git a/dom/cellbroadcast/interfaces/nsICellBroadcastProvider.idl b/dom/cellbroadcast/interfaces/nsICellBroadcastProvider.idl deleted file mode 100644 index d05a14bb630..00000000000 --- a/dom/cellbroadcast/interfaces/nsICellBroadcastProvider.idl +++ /dev/null @@ -1,35 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "nsISupports.idl" - -interface nsIDOMMozCellBroadcastMessage; - -[scriptable, uuid(4c6fb794-31bd-4ed7-b21a-34b82aa3efbe)] -interface nsICellBroadcastListener : nsISupports -{ - /** - * Called when a Cell Broadcast message has been received by the network. - * - * @param message - * The received Cell Broadcast Message. - */ - void notifyMessageReceived(in nsIDOMMozCellBroadcastMessage message); -}; - -/** - * XPCOM component (in the content process) that provides the cell broadcast - * information. - */ -[scriptable, uuid(e6c01d18-829e-4d5a-9611-60fca36e6b46)] -interface nsICellBroadcastProvider : nsISupports -{ - /** - * Called when a content process registers receiving unsolicited messages from - * RadioInterfaceLayer in the chrome process. Only a content process that has - * the 'cellbroadcast' permission is allowed to register. - */ - void registerCellBroadcastMsg(in nsICellBroadcastListener listener); - void unregisterCellBroadcastMsg(in nsICellBroadcastListener listener); -}; diff --git a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl index 5d71b7ff0a2..d9fb99dad4c 100644 --- a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl +++ b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl @@ -5,7 +5,18 @@ #include "nsISupports.idl" interface nsIDOMMozCellBroadcastMessage; -interface nsICellBroadcastListener; + +[scriptable, uuid(e70bb4cc-2297-11e4-aecd-9f8fb3d2b646)] +interface nsICellBroadcastListener : nsISupports +{ + /** + * Called when a Cell Broadcast message has been received by the network. + * + * @param message + * The received Cell Broadcast Message. + */ + void notifyMessageReceived(in nsIDOMMozCellBroadcastMessage message); +}; /** * XPCOM component that provides the cell broadcast information. diff --git a/dom/system/gonk/RILContentHelper.js b/dom/system/gonk/RILContentHelper.js index db821dcc24b..0861ccbc7f5 100644 --- a/dom/system/gonk/RILContentHelper.js +++ b/dom/system/gonk/RILContentHelper.js @@ -47,10 +47,6 @@ const GSMICCINFO_CID = Components.ID("{e0fa785b-ad3f-46ed-bc56-fcb0d6fe4fa8}"); const CDMAICCINFO_CID = Components.ID("{3d1f844f-9ec5-48fb-8907-aed2e5421709}"); -const CELLBROADCASTMESSAGE_CID = - Components.ID("{29474c96-3099-486f-bb4a-3c9a1da834e4}"); -const CELLBROADCASTETWSINFO_CID = - Components.ID("{59f176ee-9dcd-4005-9d47-f6be0cd08e17}"); const ICCCARDLOCKERROR_CID = Components.ID("{08a71987-408c-44ff-93fd-177c0a85c3dd}"); @@ -61,7 +57,6 @@ const RIL_IPC_MSG_NAMES = [ "RIL:CardLockRetryCount", "RIL:StkCommand", "RIL:StkSessionEnd", - "RIL:CellBroadcastReceived", "RIL:IccOpenChannel", "RIL:IccCloseChannel", "RIL:IccExchangeAPDU", @@ -168,71 +163,6 @@ CdmaIccInfo.prototype = { prlVersion: 0 }; -function CellBroadcastMessage(clientId, pdu) { - this.serviceId = clientId; - this.gsmGeographicalScope = RIL.CB_GSM_GEOGRAPHICAL_SCOPE_NAMES[pdu.geographicalScope]; - this.messageCode = pdu.messageCode; - this.messageId = pdu.messageId; - this.language = pdu.language; - this.body = pdu.fullBody; - this.messageClass = pdu.messageClass; - this.timestamp = pdu.timestamp; - - if (pdu.etws != null) { - this.etws = new CellBroadcastEtwsInfo(pdu.etws); - } - - this.cdmaServiceCategory = pdu.serviceCategory; -} -CellBroadcastMessage.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMMozCellBroadcastMessage]), - classID: CELLBROADCASTMESSAGE_CID, - classInfo: XPCOMUtils.generateCI({ - classID: CELLBROADCASTMESSAGE_CID, - classDescription: "CellBroadcastMessage", - flags: Ci.nsIClassInfo.DOM_OBJECT, - interfaces: [Ci.nsIDOMMozCellBroadcastMessage] - }), - - // nsIDOMMozCellBroadcastMessage - serviceId: -1, - - gsmGeographicalScope: null, - messageCode: null, - messageId: null, - language: null, - body: null, - messageClass: null, - timestamp: null, - - etws: null, - cdmaServiceCategory: null -}; - -function CellBroadcastEtwsInfo(etwsInfo) { - if (etwsInfo.warningType != null) { - this.warningType = RIL.CB_ETWS_WARNING_TYPE_NAMES[etwsInfo.warningType]; - } - this.emergencyUserAlert = etwsInfo.emergencyUserAlert; - this.popup = etwsInfo.popup; -} -CellBroadcastEtwsInfo.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMMozCellBroadcastEtwsInfo]), - classID: CELLBROADCASTETWSINFO_CID, - classInfo: XPCOMUtils.generateCI({ - classID: CELLBROADCASTETWSINFO_CID, - classDescription: "CellBroadcastEtwsInfo", - flags: Ci.nsIClassInfo.DOM_OBJECT, - interfaces: [Ci.nsIDOMMozCellBroadcastEtwsInfo] - }), - - // nsIDOMMozCellBroadcastEtwsInfo - - warningType: null, - emergencyUserAlert: null, - popup: null -}; - function IccCardLockError() { } IccCardLockError.prototype = { @@ -263,7 +193,6 @@ function RILContentHelper() { this.initDOMRequestHelper(/* aWindow */ null, RIL_IPC_MSG_NAMES); this._windowsMap = []; - this._cellBroadcastListeners = []; this._iccListeners = []; Services.obs.addObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false); @@ -274,15 +203,13 @@ function RILContentHelper() { RILContentHelper.prototype = { __proto__: DOMRequestIpcHelper.prototype, - QueryInterface: XPCOMUtils.generateQI([Ci.nsICellBroadcastProvider, - Ci.nsIIccProvider, + QueryInterface: XPCOMUtils.generateQI([Ci.nsIIccProvider, Ci.nsIObserver, Ci.nsISupportsWeakReference]), classID: RILCONTENTHELPER_CID, classInfo: XPCOMUtils.generateCI({classID: RILCONTENTHELPER_CID, classDescription: "RILContentHelper", - interfaces: [Ci.nsICellBroadcastProvider, - Ci.nsIIccProvider]}), + interfaces: [Ci.nsIIccProvider]}), updateDebugFlag: function() { try { @@ -638,7 +565,6 @@ RILContentHelper.prototype = { return request; }, - _cellBroadcastListeners: null, _iccListeners: null, registerListener: function(listenerType, clientId, listener) { @@ -674,22 +600,6 @@ RILContentHelper.prototype = { } }, - registerCellBroadcastMsg: function(listener) { - if (DEBUG) debug("Registering for Cell Broadcast related messages"); - // Instead of registering multiple listeners for Multi-SIM, we reuse - // clientId 0 to route all CBS messages to single listener and provide the - // |clientId| info by |CellBroadcastMessage.serviceId|. - this.registerListener("_cellBroadcastListeners", 0, listener); - cpmm.sendAsyncMessage("RIL:RegisterCellBroadcastMsg"); - }, - - unregisterCellBroadcastMsg: function(listener) { - // Instead of unregistering multiple listeners for Multi-SIM, we reuse - // clientId 0 to route all CBS messages to single listener and provide the - // |clientId| info by |CellBroadcastMessage.serviceId|. - this.unregisterListener("_cellBroadcastListeners", 0, listener); - }, - registerIccMsg: function(clientId, listener) { if (DEBUG) debug("Registering for ICC related messages"); this.registerListener("_iccListeners", clientId, listener); @@ -860,16 +770,6 @@ RILContentHelper.prototype = { case "RIL:MatchMvno": this.handleSimpleRequest(data.requestId, data.errorMsg, data.result); break; - case "RIL:CellBroadcastReceived": { - // All CBS messages are to routed the listener for clientId 0 and - // provide the |clientId| info by |CellBroadcastMessage.serviceId|. - let message = new CellBroadcastMessage(clientId, data); - this._deliverEvent(0, // route to clientId 0. - "_cellBroadcastListeners", - "notifyMessageReceived", - [message]); - break; - } } }, diff --git a/dom/system/gonk/RadioInterfaceLayer.js b/dom/system/gonk/RadioInterfaceLayer.js index 3e066a7fc5f..579afe324ab 100644 --- a/dom/system/gonk/RadioInterfaceLayer.js +++ b/dom/system/gonk/RadioInterfaceLayer.js @@ -127,10 +127,6 @@ const RIL_IPC_ICCMANAGER_MSG_NAMES = [ "RIL:MatchMvno" ]; -const RIL_IPC_CELLBROADCAST_MSG_NAMES = [ - "RIL:RegisterCellBroadcastMsg" -]; - // set to true in ril_consts.js to see debug messages var DEBUG = RIL.DEBUG_RIL; @@ -198,6 +194,10 @@ XPCOMUtils.defineLazyServiceGetter(this, "gMobileConnectionService", "@mozilla.org/mobileconnection/mobileconnectionservice;1", "nsIGonkMobileConnectionService"); +XPCOMUtils.defineLazyServiceGetter(this, "gCellBroadcastService", + "@mozilla.org/cellbroadcast/gonkservice;1", + "nsIGonkCellBroadcastService"); + XPCOMUtils.defineLazyGetter(this, "WAP", function() { let wap = {}; Cu.import("resource://gre/modules/WapPushManager.js", wap); @@ -245,9 +245,6 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function() { for (let msgName of RIL_IPC_ICCMANAGER_MSG_NAMES) { ppmm.addMessageListener(msgName, this); } - for (let msgname of RIL_IPC_CELLBROADCAST_MSG_NAMES) { - ppmm.addMessageListener(msgname, this); - } }, _unregisterMessageListeners: function() { @@ -255,9 +252,6 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function() { for (let msgName of RIL_IPC_ICCMANAGER_MSG_NAMES) { ppmm.removeMessageListener(msgName, this); } - for (let msgname of RIL_IPC_CELLBROADCAST_MSG_NAMES) { - ppmm.removeMessageListener(msgname, this); - } ppmm = null; }, @@ -373,14 +367,6 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function() { } return null; } - } else if (RIL_IPC_CELLBROADCAST_MSG_NAMES.indexOf(msg.name) != -1) { - if (!msg.target.assertPermission("cellbroadcast")) { - if (DEBUG) { - debug("Cell Broadcast message " + msg.name + - " from a content process with no 'cellbroadcast' privileges."); - } - return null; - } } else { if (DEBUG) debug("Ignoring unknown message type: " + msg.name); return null; @@ -390,9 +376,6 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function() { case "RIL:RegisterIccMsg": this._registerMessageTarget("icc", msg.target); return null; - case "RIL:RegisterCellBroadcastMsg": - this._registerMessageTarget("cellbroadcast", msg.target); - return null; } let clientId = msg.json.clientId || 0; @@ -428,13 +411,6 @@ XPCOMUtils.defineLazyGetter(this, "gMessageManager", function() { }); }, - sendCellBroadcastMessage: function(message, clientId, data) { - this._sendTargetMessage("cellbroadcast", message, { - clientId: clientId, - data: data - }); - }, - sendIccMessage: function(message, clientId, data) { this._sendTargetMessage("icc", message, { clientId: clientId, @@ -2130,8 +2106,7 @@ RadioInterface.prototype = { case "cellbroadcast-received": message.timestamp = Date.now(); this.broadcastCbsSystemMessage(message); - gMessageManager.sendCellBroadcastMessage("RIL:CellBroadcastReceived", - this.clientId, message); + this.handleCellbroadcastMessageReceived(message); break; case "nitzTime": this.handleNitzTime(message); @@ -2661,8 +2636,7 @@ RadioInterface.prototype = { if (DEBUG) this.debug("handleSmsReceived: " + JSON.stringify(message)); if (message.messageType == RIL.PDU_CDMA_MSG_TYPE_BROADCAST) { - gMessageManager.sendCellBroadcastMessage("RIL:CellBroadcastReceived", - this.clientId, message); + this.handleCellbroadcastMessageReceived(message); return true; } @@ -3013,6 +2987,31 @@ RadioInterface.prototype = { gMessageManager.sendIccMessage("RIL:StkCommand", this.clientId, message); }, + handleCellbroadcastMessageReceived: function(aMessage) { + let etwsInfo = aMessage.etws; + let hasEtwsInfo = etwsInfo != null; + let serviceCategory = (aMessage.serviceCategory) + ? aMessage.serviceCategory + : Ci.nsICellBroadcastService.CDMA_SERVICE_CATEGORY_INVALID; + + gCellBroadcastService + .notifyMessageReceived(this.clientId, + RIL.CB_GSM_GEOGRAPHICAL_SCOPE_NAMES[aMessage.geographicalScope], + aMessage.messageCode, + aMessage.messageId, + aMessage.language, + aMessage.fullBody, + aMessage.messageClass, + aMessage.timestamp, + serviceCategory, + hasEtwsInfo, + (hasEtwsInfo && etwsInfo.warningType != null) + ? RIL.CB_ETWS_WARNING_TYPE_NAMES[etwsInfo.warningType] + : null, + hasEtwsInfo ? etwsInfo.emergencyUserAlert : false, + hasEtwsInfo ? etwsInfo.popup : false); + }, + // nsIObserver observe: function(subject, topic, data) { From 7d338ea936061623f1b5267ac39f82c052d0d3a4 Mon Sep 17 00:00:00 2001 From: Bevis Tseng Date: Fri, 15 Aug 2014 13:13:05 +0800 Subject: [PATCH 24/54] Bug 864484 - Part 3: Move MozCellBroadcastMessage to webidl implementation. r=vyang, r=smaug --HG-- rename : dom/cellbroadcast/interfaces/nsIDOMMozCellBroadcastMessage.idl => dom/webidl/MozCellBroadcastMessage.webidl extra : rebase_source : 1fe6072c1db53fc4751e9a931adadb31a246f247 --- dom/bindings/Bindings.conf | 9 ++ dom/cellbroadcast/CellBroadcast.cpp | 35 ++++- dom/cellbroadcast/CellBroadcastMessage.cpp | 135 +++++++++++++++++ dom/cellbroadcast/CellBroadcastMessage.h | 136 ++++++++++++++++++ .../gonk/CellBroadcastService.js | 110 ++------------ dom/cellbroadcast/interfaces/moz.build | 1 - .../interfaces/nsICellBroadcastService.idl | 22 ++- .../nsIGonkCellBroadcastService.idl | 1 - dom/cellbroadcast/moz.build | 2 + .../marionette/test_cellbroadcast_etws.js | 4 +- .../marionette/test_cellbroadcast_gsm.js | 19 +-- .../marionette/test_cellbroadcast_umts.js | 4 +- .../mochitest/general/test_interfaces.html | 4 + dom/webidl/MozCellBroadcastEvent.webidl | 1 - .../MozCellBroadcastMessage.webidl} | 43 +++--- dom/webidl/moz.build | 1 + 16 files changed, 373 insertions(+), 154 deletions(-) create mode 100644 dom/cellbroadcast/CellBroadcastMessage.cpp create mode 100644 dom/cellbroadcast/CellBroadcastMessage.h rename dom/{cellbroadcast/interfaces/nsIDOMMozCellBroadcastMessage.idl => webidl/MozCellBroadcastMessage.webidl} (65%) diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf index 1a973e50e29..a749bd60ef8 100644 --- a/dom/bindings/Bindings.conf +++ b/dom/bindings/Bindings.conf @@ -702,6 +702,15 @@ DOMInterfaces = { 'nativeType': 'mozilla::dom::CellBroadcast', }, +'MozCellBroadcastEtwsInfo': { + 'nativeType': 'mozilla::dom::CellBroadcastEtwsInfo', + 'headerFile': 'CellBroadcastMessage.h' +}, + +'MozCellBroadcastMessage': { + 'nativeType': 'mozilla::dom::CellBroadcastMessage', +}, + 'MozIcc': { 'nativeType': 'mozilla::dom::Icc', }, diff --git a/dom/cellbroadcast/CellBroadcast.cpp b/dom/cellbroadcast/CellBroadcast.cpp index 36a0b19848a..46606e9784e 100644 --- a/dom/cellbroadcast/CellBroadcast.cpp +++ b/dom/cellbroadcast/CellBroadcast.cpp @@ -3,15 +3,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "CellBroadcast.h" +#include "mozilla/dom/CellBroadcast.h" +#include "mozilla/dom/CellBroadcastMessage.h" #include "mozilla/dom/MozCellBroadcastBinding.h" #include "mozilla/dom/MozCellBroadcastEvent.h" -#include "nsIDOMMozCellBroadcastMessage.h" #include "nsServiceManagerUtils.h" #define NS_CELLBROADCASTSERVICE_CONTRACTID "@mozilla.org/cellbroadcast/gonkservice;1" using namespace mozilla::dom; +using mozilla::ErrorResult; /** * CellBroadcast::Listener Implementation. @@ -104,12 +105,36 @@ CellBroadcast::WrapObject(JSContext* aCx) // Forwarded nsICellBroadcastListener methods NS_IMETHODIMP -CellBroadcast::NotifyMessageReceived(nsIDOMMozCellBroadcastMessage* aMessage) -{ +CellBroadcast::NotifyMessageReceived(uint32_t aServiceId, + const nsAString& aGsmGeographicalScope, + uint16_t aMessageCode, + uint16_t aMessageId, + const nsAString& aLanguage, + const nsAString& aBody, + const nsAString& aMessageClass, + DOMTimeStamp aTimestamp, + uint32_t aCdmaServiceCategory, + bool aHasEtwsInfo, + const nsAString& aEtwsWarningType, + bool aEtwsEmergencyUserAlert, + bool aEtwsPopup) { MozCellBroadcastEventInit init; init.mBubbles = true; init.mCancelable = false; - init.mMessage = aMessage; + init.mMessage = new CellBroadcastMessage(GetOwner(), + aServiceId, + aGsmGeographicalScope, + aMessageCode, + aMessageId, + aLanguage, + aBody, + aMessageClass, + aTimestamp, + aCdmaServiceCategory, + aHasEtwsInfo, + aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup); nsRefPtr event = MozCellBroadcastEvent::Constructor(this, NS_LITERAL_STRING("received"), init); diff --git a/dom/cellbroadcast/CellBroadcastMessage.cpp b/dom/cellbroadcast/CellBroadcastMessage.cpp new file mode 100644 index 00000000000..50ef98ad0d6 --- /dev/null +++ b/dom/cellbroadcast/CellBroadcastMessage.cpp @@ -0,0 +1,135 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "CellBroadcastMessage.h" +#include "mozilla/dom/MozCellBroadcastMessageBinding.h" +#include "nsPIDOMWindow.h" + +#define CONVERT_STRING_TO_NULLABLE_ENUM(_string, _enumType, _enum) \ +{ \ + _enum.SetNull(); \ + \ + uint32_t i = 0; \ + for (const EnumEntry* entry = _enumType##Values::strings; \ + entry->value; \ + ++entry, ++i) { \ + if (_string.EqualsASCII(entry->value)) { \ + _enum.SetValue(static_cast<_enumType>(i)); \ + } \ + } \ +} + +namespace mozilla { +namespace dom { + +/** + * CellBroadcastMessage Implementation. + */ + +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(CellBroadcastMessage, mWindow, mEtwsInfo) + +NS_IMPL_CYCLE_COLLECTING_ADDREF(CellBroadcastMessage) +NS_IMPL_CYCLE_COLLECTING_RELEASE(CellBroadcastMessage) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(CellBroadcastMessage) + NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY + NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +CellBroadcastMessage::CellBroadcastMessage(nsPIDOMWindow* aWindow, + uint32_t aServiceId, + const nsAString& aGsmGeographicalScope, + uint16_t aMessageCode, + uint16_t aMessageId, + const nsAString& aLanguage, + const nsAString& aBody, + const nsAString& aMessageClass, + uint64_t aTimestamp, + uint32_t aCdmaServiceCategory, + bool aHasEtwsInfo, + const nsAString& aEtwsWarningType, + bool aEtwsEmergencyUserAlert, + bool aEtwsPopup) + : mWindow(aWindow) + , mServiceId(aServiceId) + , mMessageCode(aMessageCode) + , mMessageId(aMessageId) + , mLanguage(aLanguage) + , mBody(aBody) + , mTimestamp(aTimestamp) + , mEtwsInfo(aHasEtwsInfo ? new CellBroadcastEtwsInfo(aWindow, + aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup) + : nullptr) +{ + CONVERT_STRING_TO_NULLABLE_ENUM(aGsmGeographicalScope, + CellBroadcastGsmGeographicalScope, + mGsmGeographicalScope) + + CONVERT_STRING_TO_NULLABLE_ENUM(aMessageClass, + CellBroadcastMessageClass, + mMessageClass) + + // CdmaServiceCategory represents a 16bit unsigned value. + if (aCdmaServiceCategory > 0xFFFFU) { + mCdmaServiceCategory.SetNull(); + } else { + mCdmaServiceCategory.SetValue(static_cast(aCdmaServiceCategory)); + } + + SetIsDOMBinding(); +} + +JSObject* +CellBroadcastMessage::WrapObject(JSContext* aCx) +{ + return MozCellBroadcastMessageBinding::Wrap(aCx, this); +} + +already_AddRefed +CellBroadcastMessage::GetEtws() const +{ + nsRefPtr etwsInfo = mEtwsInfo; + return etwsInfo.forget(); +} + +/** + * CellBroadcastEtwsInfo Implementation. + */ + +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(CellBroadcastEtwsInfo, mWindow) + +NS_IMPL_CYCLE_COLLECTING_ADDREF(CellBroadcastEtwsInfo) +NS_IMPL_CYCLE_COLLECTING_RELEASE(CellBroadcastEtwsInfo) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(CellBroadcastEtwsInfo) + NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY + NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +CellBroadcastEtwsInfo::CellBroadcastEtwsInfo(nsPIDOMWindow* aWindow, + const nsAString& aWarningType, + bool aEmergencyUserAlert, + bool aPopup) + : mWindow(aWindow) + , mEmergencyUserAlert(aEmergencyUserAlert) + , mPopup(aPopup) +{ + CONVERT_STRING_TO_NULLABLE_ENUM(aWarningType, + CellBroadcastEtwsWarningType, + mWarningType) + + SetIsDOMBinding(); +} + +JSObject* +CellBroadcastEtwsInfo::WrapObject(JSContext* aCx) +{ + return MozCellBroadcastEtwsInfoBinding::Wrap(aCx, this); +} + +} // namespace dom +} // namespace mozilla diff --git a/dom/cellbroadcast/CellBroadcastMessage.h b/dom/cellbroadcast/CellBroadcastMessage.h new file mode 100644 index 00000000000..5d9a5c4851b --- /dev/null +++ b/dom/cellbroadcast/CellBroadcastMessage.h @@ -0,0 +1,136 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_cellbroadcast_CellBroadcastMessage_h +#define mozilla_dom_cellbroadcast_CellBroadcastMessage_h + +#include "mozilla/dom/MozCellBroadcastMessageBinding.h" +#include "nsAutoPtr.h" +#include "nsCOMPtr.h" +#include "nsString.h" +#include "nsWrapperCache.h" + +class nsPIDOMWindow; + +namespace mozilla { +namespace dom { + +class CellBroadcastEtwsInfo; + +class CellBroadcastMessage MOZ_FINAL : public nsISupports + , public nsWrapperCache +{ +public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CellBroadcastMessage) + + CellBroadcastMessage(nsPIDOMWindow* aWindow, + uint32_t aServiceId, + const nsAString& aGsmGeographicalScope, + uint16_t aMessageCode, + uint16_t aMessageId, + const nsAString& aLanguage, + const nsAString& aBody, + const nsAString& aMessageClass, + uint64_t aTimestamp, + uint32_t aCdmaServiceCategory, + bool aHasEtwsInfo, + const nsAString& aEtwsWarningType, + bool aEtwsEmergencyUserAlert, + bool aEtwsPopup); + + nsPIDOMWindow* + GetParentObject() const { return mWindow; } + + virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE; + + // WebIDL interface + + uint32_t ServiceId() const { return mServiceId; } + + const Nullable& + GetGsmGeographicalScope() { return mGsmGeographicalScope; } + + uint16_t MessageCode() const { return mMessageCode; } + + uint16_t MessageId() const { return mMessageId; } + + void GetLanguage(nsString& aLanguage) const { aLanguage = mLanguage; } + + void GetBody(nsString& aBody) const { aBody = mBody; } + + const Nullable& + GetMessageClass() { return mMessageClass; } + + uint64_t Timestamp() const { return mTimestamp; } + + // Mark this as resultNotAddRefed to return raw pointers + already_AddRefed GetEtws() const; + + const Nullable& GetCdmaServiceCategory() { return mCdmaServiceCategory; }; + +private: + // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor + ~CellBroadcastMessage() {}; + + // Don't try to use the default constructor. + CellBroadcastMessage(); + + nsCOMPtr mWindow; + uint32_t mServiceId; + Nullable mGsmGeographicalScope; + uint16_t mMessageCode; + uint16_t mMessageId; + nsString mLanguage; + nsString mBody; + Nullable mMessageClass; + uint64_t mTimestamp; + Nullable mCdmaServiceCategory; + nsRefPtr mEtwsInfo; +}; + +class CellBroadcastEtwsInfo MOZ_FINAL : public nsISupports + , public nsWrapperCache +{ +public: + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CellBroadcastEtwsInfo) + + CellBroadcastEtwsInfo(nsPIDOMWindow* aWindow, + const nsAString& aWarningType, + bool aEmergencyUserAlert, + bool aPopup); + + nsPIDOMWindow* + GetParentObject() const { return mWindow; } + + virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE; + + // WebIDL interface + + const Nullable& + GetWarningType() { return mWarningType; } + + bool EmergencyUserAlert() const { return mEmergencyUserAlert; } + + bool Popup() const { return mPopup; } + +private: + // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor + ~CellBroadcastEtwsInfo() {}; + + // Don't try to use the default constructor. + CellBroadcastEtwsInfo(); + + nsCOMPtr mWindow; + Nullable mWarningType; + bool mEmergencyUserAlert; + bool mPopup; +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_cellbroadcast_CellBroadcastMessage_h diff --git a/dom/cellbroadcast/gonk/CellBroadcastService.js b/dom/cellbroadcast/gonk/CellBroadcastService.js index 73de01e381f..70ecad70c4f 100644 --- a/dom/cellbroadcast/gonk/CellBroadcastService.js +++ b/dom/cellbroadcast/gonk/CellBroadcastService.js @@ -32,85 +32,6 @@ function debug(s) { dump("CellBroadcastService: " + s); } -function CellBroadcastMessage(aServiceId, - aGsmGeographicalScope, - aMessageCode, - aMessageId, - aLanguage, - aBody, - aMessageClass, - aTimestamp, - aCdmaServiceCategory, - aHasEtwsInfo, - aEtwsWarningType, - aEtwsEmergencyUserAlert, - aEtwsPopup) { - this.serviceId = aServiceId; - this.gsmGeographicalScope = aGsmGeographicalScope; - this.messageCode = aMessageCode; - this.messageId = aMessageId; - this.language = aLanguage; - this.body = aBody; - this.messageClass = aMessageClass; - this.timestamp = aTimestamp; - - this.cdmaServiceCategory = aCdmaServiceCategory; - - if (aHasEtwsInfo) { - this.etws = new CellBroadcastEtwsInfo(aEtwsWarningType, - aEtwsEmergencyUserAlert, - aEtwsPopup); - } -} -CellBroadcastMessage.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMMozCellBroadcastMessage]), - classID: CELLBROADCASTMESSAGE_CID, - classInfo: XPCOMUtils.generateCI({ - classID: CELLBROADCASTMESSAGE_CID, - classDescription: "CellBroadcastMessage", - flags: Ci.nsIClassInfo.DOM_OBJECT, - interfaces: [Ci.nsIDOMMozCellBroadcastMessage] - }), - - // nsIDOMMozCellBroadcastMessage - serviceId: -1, - - gsmGeographicalScope: null, - messageCode: null, - messageId: null, - language: null, - body: null, - messageClass: null, - timestamp: null, - - etws: null, - cdmaServiceCategory: null -}; - -function CellBroadcastEtwsInfo(aEtwsWarningType, - aEtwsEmergencyUserAlert, - aEtwsPopup) { - this.warningType = aEtwsWarningType; - this.emergencyUserAlert = aEtwsEmergencyUserAlert; - this.popup = aEtwsPopup; -} -CellBroadcastEtwsInfo.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMMozCellBroadcastEtwsInfo]), - classID: CELLBROADCASTETWSINFO_CID, - classInfo: XPCOMUtils.generateCI({ - classID: CELLBROADCASTETWSINFO_CID, - classDescription: "CellBroadcastEtwsInfo", - flags: Ci.nsIClassInfo.DOM_OBJECT, - interfaces: [Ci.nsIDOMMozCellBroadcastEtwsInfo] - }), - - // nsIDOMMozCellBroadcastEtwsInfo - - warningType: null, - emergencyUserAlert: null, - popup: null -}; - function CellBroadcastService() { this._listeners = []; @@ -179,26 +100,21 @@ CellBroadcastService.prototype = { aEtwsWarningType, aEtwsEmergencyUserAlert, aEtwsPopup) { - let message = new CellBroadcastMessage(aServiceId, - aGsmGeographicalScope, - aMessageCode, - aMessageId, - aLanguage, - aBody, - aMessageClass, - aTimestamp, - aCdmaServiceCategory, - aHasEtwsInfo, - aEtwsWarningType, - aEtwsEmergencyUserAlert, - aEtwsPopup); - for (let listener of this._listeners) { try { - // TODO: - // Deflate 'message' object to multiple parameters by redefining - // nsICellBroadcastListener for IPC implementation. - listener.notifyMessageReceived(message); + listener.notifyMessageReceived(aServiceId, + aGsmGeographicalScope, + aMessageCode, + aMessageId, + aLanguage, + aBody, + aMessageClass, + aTimestamp, + aCdmaServiceCategory, + aHasEtwsInfo, + aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup); } catch (e) { debug("listener threw an exception: " + e); } diff --git a/dom/cellbroadcast/interfaces/moz.build b/dom/cellbroadcast/interfaces/moz.build index a7a9a79a5f7..bfef8e925a5 100644 --- a/dom/cellbroadcast/interfaces/moz.build +++ b/dom/cellbroadcast/interfaces/moz.build @@ -6,7 +6,6 @@ XPIDL_SOURCES += [ 'nsICellBroadcastService.idl', - 'nsIDOMMozCellBroadcastMessage.idl', ] if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']: diff --git a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl index d9fb99dad4c..645eb3bbb02 100644 --- a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl +++ b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl @@ -2,20 +2,28 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "domstubs.idl" #include "nsISupports.idl" -interface nsIDOMMozCellBroadcastMessage; - -[scriptable, uuid(e70bb4cc-2297-11e4-aecd-9f8fb3d2b646)] +[scriptable, uuid(fd1f9efa-3d6c-11e4-a7be-e3b99e7f903b)] interface nsICellBroadcastListener : nsISupports { /** * Called when a Cell Broadcast message has been received by the network. - * - * @param message - * The received Cell Broadcast Message. */ - void notifyMessageReceived(in nsIDOMMozCellBroadcastMessage message); + void notifyMessageReceived(in unsigned long aServiceId, + in DOMString aGsmGeographicalScope, + in unsigned short aMessageCode, + in unsigned short aMessageId, + in DOMString aLanguage, + in DOMString aBody, + in DOMString aMessageClass, + in DOMTimeStamp aTimestamp, + in unsigned long aCdmaServiceCategory, + in boolean aHasEtwsInfo, + in DOMString aEtwsWarningType, + in boolean aEtwsEmergencyUserAlert, + in boolean aEtwsPopup); }; /** diff --git a/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl index 2c5b7729c5c..2ccc9075c00 100644 --- a/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl +++ b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl @@ -2,7 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "domstubs.idl" #include "nsICellBroadcastService.idl" [scriptable, uuid(f72ced60-21f9-11e4-8896-6fdff2f5c909)] diff --git a/dom/cellbroadcast/moz.build b/dom/cellbroadcast/moz.build index e6a6c3f3803..1e23e558a51 100644 --- a/dom/cellbroadcast/moz.build +++ b/dom/cellbroadcast/moz.build @@ -8,10 +8,12 @@ DIRS += ['interfaces'] EXPORTS.mozilla.dom += [ 'CellBroadcast.h', + 'CellBroadcastMessage.h', ] SOURCES += [ 'CellBroadcast.cpp', + 'CellBroadcastMessage.cpp', ] if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']: diff --git a/dom/cellbroadcast/tests/marionette/test_cellbroadcast_etws.js b/dom/cellbroadcast/tests/marionette/test_cellbroadcast_etws.js index c1e62441a56..557bcbc08bc 100644 --- a/dom/cellbroadcast/tests/marionette/test_cellbroadcast_etws.js +++ b/dom/cellbroadcast/tests/marionette/test_cellbroadcast_etws.js @@ -23,7 +23,9 @@ function testReceiving_ETWS_MessageAttributes() { ok(aMessage.etws.emergencyUserAlert != null, "aMessage.etws.emergencyUserAlert"); ok(aMessage.etws.popup != null, "aMessage.etws.popup"); - ok(aMessage.cdmaServiceCategory != null, "aMessage.cdmaServiceCategory"); + + // cdmaServiceCategory shall always be unavailable in GMS/UMTS CB message. + ok(aMessage.cdmaServiceCategory == null, "aMessage.cdmaServiceCategory"); }; // Here we use a simple ETWS message for test. diff --git a/dom/cellbroadcast/tests/marionette/test_cellbroadcast_gsm.js b/dom/cellbroadcast/tests/marionette/test_cellbroadcast_gsm.js index 213122c1dac..97d826f2ae4 100644 --- a/dom/cellbroadcast/tests/marionette/test_cellbroadcast_gsm.js +++ b/dom/cellbroadcast/tests/marionette/test_cellbroadcast_gsm.js @@ -22,7 +22,9 @@ function testReceiving_GSM_MessageAttributes() { ok(aMessage.etws.emergencyUserAlert != null, "aMessage.etws.emergencyUserAlert"); ok(aMessage.etws.popup != null, "aMessage.etws.popup"); } - ok(aMessage.cdmaServiceCategory != null, "aMessage.cdmaServiceCategory"); + + // cdmaServiceCategory shall always be unavailable in GMS/UMTS CB message. + ok(aMessage.cdmaServiceCategory == null, "aMessage.cdmaServiceCategory"); }; // Here we use a simple GSM message for test. @@ -296,20 +298,6 @@ function testReceiving_GSM_Multipart() { return promise; } -function testReceiving_GSM_ServiceCategory() { - log("Test receiving GSM Cell Broadcast - Service Category"); - - let verifyCBMessage = (aMessage) => { - // Bug 910091 - // "Service Category" is not defined in GSM. We should always get '0' here. - is(aMessage.cdmaServiceCategory, 0, "aMessage.cdmaServiceCategory"); - }; - - let pdu = buildHexStr(0, CB_MESSAGE_SIZE_GSM * 2); - return sendMultipleRawCbsToEmulatorAndWait([pdu]) - .then((aMessage) => verifyCBMessage(aMessage)); -} - function testReceiving_GSM_PaddingCharacters() { log("Test receiving GSM Cell Broadcast - Padding Characters "); @@ -369,6 +357,5 @@ startTestCommon(function testCaseMain() { .then(() => testReceiving_GSM_EmergencyUserAlert()) .then(() => testReceiving_GSM_Popup()) .then(() => testReceiving_GSM_Multipart()) - .then(() => testReceiving_GSM_ServiceCategory()) .then(() => testReceiving_GSM_PaddingCharacters()); }); diff --git a/dom/cellbroadcast/tests/marionette/test_cellbroadcast_umts.js b/dom/cellbroadcast/tests/marionette/test_cellbroadcast_umts.js index c0daf399ca9..d08a565ba33 100644 --- a/dom/cellbroadcast/tests/marionette/test_cellbroadcast_umts.js +++ b/dom/cellbroadcast/tests/marionette/test_cellbroadcast_umts.js @@ -20,7 +20,9 @@ function testReceiving_UMTS_MessageAttributes() { ok(aMessage.etws.emergencyUserAlert != null, "aMessage.etws.emergencyUserAlert"); ok(aMessage.etws.popup != null, "aMessage.etws.popup"); } - ok(aMessage.cdmaServiceCategory != null, "aMessage.cdmaServiceCategory"); + + // cdmaServiceCategory shall always be unavailable in GMS/UMTS CB message. + ok(aMessage.cdmaServiceCategory == null, "aMessage.cdmaServiceCategory"); }; // Here we use a single UMTS message for test. diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index f57aff30021..31b5477f980 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -676,6 +676,10 @@ var interfaceNamesInGlobalScope = {name: "MozCellBroadcast", b2g: true, pref: "dom.cellbroadcast.enabled"}, // IMPORTANT: Do not change this list without review from a DOM peer! {name: "MozCellBroadcastEvent", b2g: true, pref: "dom.cellbroadcast.enabled"}, +// IMPORTANT: Do not change this list without review from a DOM peer! + {name: "MozCellBroadcastEtwsInfo", b2g: true, pref: "dom.cellbroadcast.enabled"}, +// IMPORTANT: Do not change this list without review from a DOM peer! + {name: "MozCellBroadcastMessage", b2g: true, pref: "dom.cellbroadcast.enabled"}, // IMPORTANT: Do not change this list without review from a DOM peer! {name: "MozClirModeEvent", b2g: true, pref: "dom.mobileconnection.enabled"}, // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/webidl/MozCellBroadcastEvent.webidl b/dom/webidl/MozCellBroadcastEvent.webidl index de94c62987f..e86c3cfea04 100644 --- a/dom/webidl/MozCellBroadcastEvent.webidl +++ b/dom/webidl/MozCellBroadcastEvent.webidl @@ -3,7 +3,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -interface MozCellBroadcastMessage; [Constructor(DOMString type, optional MozCellBroadcastEventInit eventInitDict), Pref="dom.cellbroadcast.enabled"] interface MozCellBroadcastEvent : Event diff --git a/dom/cellbroadcast/interfaces/nsIDOMMozCellBroadcastMessage.idl b/dom/webidl/MozCellBroadcastMessage.webidl similarity index 65% rename from dom/cellbroadcast/interfaces/nsIDOMMozCellBroadcastMessage.idl rename to dom/webidl/MozCellBroadcastMessage.webidl index ad2cb83d14c..3ca1b1fb424 100644 --- a/dom/cellbroadcast/interfaces/nsIDOMMozCellBroadcastMessage.idl +++ b/dom/webidl/MozCellBroadcastMessage.webidl @@ -1,18 +1,18 @@ +/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */ +/* vim: set ts=2 et sw=2 tw=40: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "domstubs.idl" -#include "nsISupports.idl" +enum CellBroadcastGsmGeographicalScope {"cell-immediate", "plmn", + "location-area", "cell"}; +enum CellBroadcastMessageClass {"normal", "class-0", "class-1", "class-2", + "class-3", "user-1", "user-2"}; +enum CellBroadcastEtwsWarningType {"earthquake", "tsunami", + "earthquake-tsunami", "test", "other"}; -interface nsIDOMMozCellBroadcastEtwsInfo; - -/** - * MozCellBroadcastMessage encapsulates Cell Broadcast short message service - * (CBS) messages. - */ -[scriptable, uuid(dc729df4-f1d8-11e3-b00d-d3332542c557)] -interface nsIDOMMozCellBroadcastMessage : nsISupports +[Pref="dom.cellbroadcast.enabled"] +interface MozCellBroadcastMessage { /** * The Service Id in the device where the message is received from. @@ -25,7 +25,7 @@ interface nsIDOMMozCellBroadcastMessage : nsISupports * * Possible values are: "cell-immediate", "plmn", "location-area" and "cell". */ - readonly attribute DOMString gsmGeographicalScope; + readonly attribute CellBroadcastGsmGeographicalScope? gsmGeographicalScope; /** * The Message Code differentiates between messages from the same source and @@ -43,18 +43,18 @@ interface nsIDOMMozCellBroadcastMessage : nsISupports /** * ISO-639-1 language code for this message. Null if unspecified. */ - readonly attribute DOMString language; + readonly attribute DOMString? language; /** * Text message carried by the message. */ - readonly attribute DOMString body; + readonly attribute DOMString? body; /** * Possible values are "normal", "class-0", "class-1", "class-2", "class-3", * "user-1", and "user-2". */ - readonly attribute DOMString messageClass; + readonly attribute CellBroadcastMessageClass? messageClass; /** * System time stamp at receival. @@ -64,26 +64,22 @@ interface nsIDOMMozCellBroadcastMessage : nsISupports /** * Additional ETWS-specific info. */ - readonly attribute nsIDOMMozCellBroadcastEtwsInfo etws; + readonly attribute MozCellBroadcastEtwsInfo? etws; /** * Service Category. */ - readonly attribute long cdmaServiceCategory; + readonly attribute unsigned short? cdmaServiceCategory; }; -/** - * ETWS (Earthquake and Tsunami Warning service) Primary Notification message - * specific information. - */ -[scriptable, uuid(af009d9a-f5e8-4573-a6ee-a85118465bed)] -interface nsIDOMMozCellBroadcastEtwsInfo : nsISupports +[Pref="dom.cellbroadcast.enabled"] +interface MozCellBroadcastEtwsInfo { /** * Warning type. Possible values are "earthquake", "tsunami", * "earthquake-tsunami", "test" and "other". */ - readonly attribute ACString warningType; + readonly attribute CellBroadcastEtwsWarningType? warningType; /** * Emergency user alert indication. It is used to command mobile terminals to @@ -98,4 +94,3 @@ interface nsIDOMMozCellBroadcastEtwsInfo : nsISupports */ readonly attribute boolean popup; }; - diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index b603b4f040d..6fb286d36f9 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -264,6 +264,7 @@ WEBIDL_FILES = [ 'MouseEvent.webidl', 'MouseScrollEvent.webidl', 'MozActivity.webidl', + 'MozCellBroadcastMessage.webidl', 'MozMmsMessage.webidl', 'MozMobileCellInfo.webidl', 'MozMobileConnection.webidl', From 2df83d424f78e75d80cf54bf4eb6d594b25bc88c Mon Sep 17 00:00:00 2001 From: Bevis Tseng Date: Mon, 18 Aug 2014 17:06:11 +0800 Subject: [PATCH 25/54] Bug 864484 - Part 4: Add IPDL Protocol Implementation for CellBroadcast. r=vyang --HG-- extra : rebase_source : 2493220fabd331274df8d91d2bc4480baf9cf8ed --- dom/cellbroadcast/CellBroadcast.cpp | 27 ++++- .../interfaces/nsICellBroadcastService.idl | 16 ++- .../nsIGonkCellBroadcastService.idl | 5 + .../ipc/CellBroadcastIPCService.cpp | 110 ++++++++++++++++++ .../ipc/CellBroadcastIPCService.h | 58 +++++++++ dom/cellbroadcast/ipc/CellBroadcastParent.cpp | 74 ++++++++++++ dom/cellbroadcast/ipc/CellBroadcastParent.h | 38 ++++++ dom/cellbroadcast/ipc/PCellBroadcast.ipdl | 41 +++++++ dom/cellbroadcast/moz.build | 13 +++ dom/ipc/ContentChild.cpp | 28 ++++- dom/ipc/ContentChild.h | 4 + dom/ipc/ContentParent.cpp | 37 +++++- dom/ipc/ContentParent.h | 6 +- dom/ipc/PContent.ipdl | 19 ++- layout/build/nsLayoutModule.cpp | 6 + 15 files changed, 466 insertions(+), 16 deletions(-) create mode 100644 dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp create mode 100644 dom/cellbroadcast/ipc/CellBroadcastIPCService.h create mode 100644 dom/cellbroadcast/ipc/CellBroadcastParent.cpp create mode 100644 dom/cellbroadcast/ipc/CellBroadcastParent.h create mode 100644 dom/cellbroadcast/ipc/PCellBroadcast.ipdl diff --git a/dom/cellbroadcast/CellBroadcast.cpp b/dom/cellbroadcast/CellBroadcast.cpp index 46606e9784e..26314e39e2e 100644 --- a/dom/cellbroadcast/CellBroadcast.cpp +++ b/dom/cellbroadcast/CellBroadcast.cpp @@ -9,7 +9,12 @@ #include "mozilla/dom/MozCellBroadcastEvent.h" #include "nsServiceManagerUtils.h" -#define NS_CELLBROADCASTSERVICE_CONTRACTID "@mozilla.org/cellbroadcast/gonkservice;1" +// Service instantiation +#include "ipc/CellBroadcastIPCService.h" +#if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL) +#include "nsIGonkCellBroadcastService.h" +#endif +#include "nsXULAppAPI.h" // For XRE_GetProcessType() using namespace mozilla::dom; using mozilla::ErrorResult; @@ -60,7 +65,7 @@ CellBroadcast::Create(nsPIDOMWindow* aWindow, ErrorResult& aRv) MOZ_ASSERT(aWindow->IsInnerWindow()); nsCOMPtr service = - do_GetService(NS_CELLBROADCASTSERVICE_CONTRACTID); + do_GetService(CELLBROADCAST_SERVICE_CONTRACTID); if (!service) { aRv.Throw(NS_ERROR_UNEXPECTED); return nullptr; @@ -86,7 +91,7 @@ CellBroadcast::~CellBroadcast() mListener->Disconnect(); nsCOMPtr service = - do_GetService(NS_CELLBROADCASTSERVICE_CONTRACTID); + do_GetService(CELLBROADCAST_SERVICE_CONTRACTID); if (service) { service->UnregisterListener(mListener); } @@ -140,3 +145,19 @@ CellBroadcast::NotifyMessageReceived(uint32_t aServiceId, MozCellBroadcastEvent::Constructor(this, NS_LITERAL_STRING("received"), init); return DispatchTrustedEvent(event); } + +already_AddRefed +NS_CreateCellBroadcastService() +{ + nsCOMPtr service; + + if (XRE_GetProcessType() == GeckoProcessType_Content) { + service = new mozilla::dom::cellbroadcast::CellBroadcastIPCService(); +#if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL) + } else { + service = do_GetService(GONK_CELLBROADCAST_SERVICE_CONTRACTID); +#endif + } + + return service.forget(); +} diff --git a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl index 645eb3bbb02..33a2e796969 100644 --- a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl +++ b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl @@ -26,6 +26,13 @@ interface nsICellBroadcastListener : nsISupports in boolean aEtwsPopup); }; +%{C++ +#define CELLBROADCAST_SERVICE_CID \ + { 0xc870bdca, 0x277c, 0x11e4, { 0xac, 0xa3, 0x33, 0x73, 0xa1, 0xef, 0x48, 0xf8 } } +#define CELLBROADCAST_SERVICE_CONTRACTID \ + "@mozilla.org/cellbroadcast/cellbroadcastservice;1" +%} + /** * XPCOM component that provides the cell broadcast information. */ @@ -45,4 +52,11 @@ interface nsICellBroadcastService : nsISupports */ void registerListener(in nsICellBroadcastListener listener); void unregisterListener(in nsICellBroadcastListener listener); -}; \ No newline at end of file +}; + +%{C++ +template struct already_AddRefed; + +already_AddRefed +NS_CreateCellBroadcastService(); +%} diff --git a/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl index 2ccc9075c00..8db7a6ecb87 100644 --- a/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl +++ b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl @@ -4,6 +4,11 @@ #include "nsICellBroadcastService.idl" +%{C++ +#define GONK_CELLBROADCAST_SERVICE_CONTRACTID \ + "@mozilla.org/cellbroadcast/gonkservice;1" +%} + [scriptable, uuid(f72ced60-21f9-11e4-8896-6fdff2f5c909)] interface nsIGonkCellBroadcastService : nsICellBroadcastService { diff --git a/dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp b/dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp new file mode 100644 index 00000000000..4f3bebbd5bd --- /dev/null +++ b/dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "CellBroadcastIPCService.h" +#include "mozilla/dom/ContentChild.h" + +namespace mozilla { +namespace dom { +namespace cellbroadcast { + +NS_IMPL_ISUPPORTS(CellBroadcastIPCService, nsICellBroadcastService) + +CellBroadcastIPCService::CellBroadcastIPCService() + : mActorDestroyed(false) +{ + ContentChild::GetSingleton()->SendPCellBroadcastConstructor(this); +} + +CellBroadcastIPCService::~CellBroadcastIPCService() +{ + if (!mActorDestroyed) { + Send__delete__(this); + } + + mListeners.Clear(); +} + +/* + * Implementation of nsICellBroadcastService. + */ + +NS_IMETHODIMP +CellBroadcastIPCService::RegisterListener(nsICellBroadcastListener* aListener) +{ + MOZ_ASSERT(!mListeners.Contains(aListener)); + + NS_ENSURE_TRUE(!mActorDestroyed, NS_ERROR_UNEXPECTED); + + // nsTArray doesn't fail. + mListeners.AppendElement(aListener); + + return NS_OK; +} + +NS_IMETHODIMP +CellBroadcastIPCService::UnregisterListener(nsICellBroadcastListener* aListener) +{ + MOZ_ASSERT(mListeners.Contains(aListener)); + + NS_ENSURE_TRUE(!mActorDestroyed, NS_ERROR_UNEXPECTED); + + // We always have the element here, so it can't fail. + mListeners.RemoveElement(aListener); + + return NS_OK; +} + +/* + * Implementation of PCellBroadcastChild. + */ + +bool +CellBroadcastIPCService::RecvNotifyReceivedMessage(const uint32_t& aServiceId, + const nsString& aGsmGeographicalScope, + const uint16_t& aMessageCode, + const uint16_t& aMessageId, + const nsString& aLanguage, + const nsString& aBody, + const nsString& aMessageClass, + const uint64_t& aTimestamp, + const uint32_t& aCdmaServiceCategory, + const bool& aHasEtwsInfo, + const nsString& aEtwsWarningType, + const bool& aEtwsEmergencyUserAlert, + const bool& aEtwsPopup) +{ + // UnregisterListener() could be triggered in + // nsICellBroadcastListener::NotifyMessageReceived(). + // Make a immutable copy for notifying the event. + nsTArray> immutableListeners(mListeners); + for (uint32_t i = 0; i < immutableListeners.Length(); i++) { + immutableListeners[i]->NotifyMessageReceived(aServiceId, + aGsmGeographicalScope, + aMessageCode, + aMessageId, + aLanguage, + aBody, + aMessageClass, + aTimestamp, + aCdmaServiceCategory, + aHasEtwsInfo, + aEtwsWarningType, + aEtwsEmergencyUserAlert, + aEtwsPopup); + } + + return true; +} + +void +CellBroadcastIPCService::ActorDestroy(ActorDestroyReason aWhy) +{ + mActorDestroyed = true; +} + +} // namespace cellbroadcast +} // namespace dom +} // namespace mozilla diff --git a/dom/cellbroadcast/ipc/CellBroadcastIPCService.h b/dom/cellbroadcast/ipc/CellBroadcastIPCService.h new file mode 100644 index 00000000000..63034fef5b3 --- /dev/null +++ b/dom/cellbroadcast/ipc/CellBroadcastIPCService.h @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_cellbroadcast_CellBroadcastIPCService_h +#define mozilla_dom_cellbroadcast_CellBroadcastIPCService_h + +#include "mozilla/dom/cellbroadcast/PCellBroadcastChild.h" +#include "nsICellBroadcastService.h" +#include "nsCOMPtr.h" +#include "nsTArray.h" + +namespace mozilla { +namespace dom { +namespace cellbroadcast { + +class CellBroadcastIPCService MOZ_FINAL : public PCellBroadcastChild + , public nsICellBroadcastService + +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSICELLBROADCASTSERVICE + + CellBroadcastIPCService(); + + // PCellBroadcastChild interface + virtual bool + RecvNotifyReceivedMessage(const uint32_t& aServiceId, + const nsString& aGsmGeographicalScope, + const uint16_t& aMessageCode, + const uint16_t& aMessageId, + const nsString& aLanguage, + const nsString& aBody, + const nsString& aMessageClass, + const uint64_t& aTimestamp, + const uint32_t& aCdmaServiceCategory, + const bool& aHasEtwsInfo, + const nsString& aEtwsWarningType, + const bool& aEtwsEmergencyUserAlert, + const bool& aEtwsPopup) MOZ_OVERRIDE; + + virtual void ActorDestroy(ActorDestroyReason aWhy) MOZ_OVERRIDE; + +private: + // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor + ~CellBroadcastIPCService(); + + bool mActorDestroyed; + nsTArray> mListeners; +}; + +} // namespace cellbroadcast +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_cellbroadcast_CellBroadcastIPCService_h \ No newline at end of file diff --git a/dom/cellbroadcast/ipc/CellBroadcastParent.cpp b/dom/cellbroadcast/ipc/CellBroadcastParent.cpp new file mode 100644 index 00000000000..17f9138a227 --- /dev/null +++ b/dom/cellbroadcast/ipc/CellBroadcastParent.cpp @@ -0,0 +1,74 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/dom/cellbroadcast/CellBroadcastParent.h" +#include "nsServiceManagerUtils.h" + +namespace mozilla { +namespace dom { +namespace cellbroadcast { + +NS_IMPL_ISUPPORTS(CellBroadcastParent, nsICellBroadcastListener) + +bool +CellBroadcastParent::Init() +{ + nsCOMPtr service = + do_GetService(CELLBROADCAST_SERVICE_CONTRACTID); + + if (service) { + return NS_SUCCEEDED(service->RegisterListener(this)); + } + + return false; +} + +void +CellBroadcastParent::ActorDestroy(ActorDestroyReason aWhy) +{ + nsCOMPtr service = + do_GetService(CELLBROADCAST_SERVICE_CONTRACTID); + if (service) { + service->UnregisterListener(this); + } +} + +/* + * nsICellBroadcastListener + */ +NS_IMETHODIMP +CellBroadcastParent::NotifyMessageReceived(uint32_t aServiceId, + const nsAString& aGsmGeographicalScope, + uint16_t aMessageCode, + uint16_t aMessageId, + const nsAString& aLanguage, + const nsAString& aBody, + const nsAString& aMessageClass, + DOMTimeStamp aTimestamp, + uint32_t aCdmaServiceCategory, + bool aHasEtwsInfo, + const nsAString& aEtwsWarningType, + bool aEtwsEmergencyUserAlert, + bool aEtwsPopup) +{ + return SendNotifyReceivedMessage(aServiceId, + nsString(aGsmGeographicalScope), + aMessageCode, + aMessageId, + nsString(aLanguage), + nsString(aBody), + nsString(aMessageClass), + aTimestamp, + aCdmaServiceCategory, + aHasEtwsInfo, + nsString(aEtwsWarningType), + aEtwsEmergencyUserAlert, + aEtwsPopup) ? NS_OK : NS_ERROR_FAILURE; +} + +} // namespace cellbroadcast +} // namespace dom +} // namespace mozilla \ No newline at end of file diff --git a/dom/cellbroadcast/ipc/CellBroadcastParent.h b/dom/cellbroadcast/ipc/CellBroadcastParent.h new file mode 100644 index 00000000000..b201566a01c --- /dev/null +++ b/dom/cellbroadcast/ipc/CellBroadcastParent.h @@ -0,0 +1,38 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +#ifndef mozilla_dom_cellbroadcast_CellBroadcastParent_h +#define mozilla_dom_cellbroadcast_CellBroadcastParent_h + +#include "mozilla/dom/cellbroadcast/PCellBroadcastParent.h" +#include "nsICellBroadcastService.h" + +namespace mozilla { +namespace dom { +namespace cellbroadcast { + +class CellBroadcastParent MOZ_FINAL : public PCellBroadcastParent + , public nsICellBroadcastListener +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSICELLBROADCASTLISTENER + + bool Init(); + +private: + // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor + ~CellBroadcastParent() {}; + + virtual void ActorDestroy(ActorDestroyReason aWhy); +}; + +} // namespace cellbroadcast +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_cellbroadcast_CellBroadcastParent_h \ No newline at end of file diff --git a/dom/cellbroadcast/ipc/PCellBroadcast.ipdl b/dom/cellbroadcast/ipc/PCellBroadcast.ipdl new file mode 100644 index 00000000000..eb95362d16c --- /dev/null +++ b/dom/cellbroadcast/ipc/PCellBroadcast.ipdl @@ -0,0 +1,41 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set sw=2 ts=8 et ft=cpp : */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +include protocol PContent; + +namespace mozilla { +namespace dom { +namespace cellbroadcast { + +sync protocol PCellBroadcast { + manager PContent; + +child: + NotifyReceivedMessage(uint32_t aServiceId, + nsString aGsmGeographicalScope, + uint16_t aMessageCode, + uint16_t aMessageId, + nsString aLanguage, + nsString aBody, + nsString aMessageClass, + uint64_t aTimestamp, + uint32_t aCdmaServiceCategory, + bool aHasEtwsInfo, + nsString aEtwsWarningType, + bool aEtwsEmergencyUserAlert, + bool aEtwsPopup); + +parent: + /** + * Sent when the child no longer needs to use cellbroadcast. + */ + __delete__(); + +}; + +} // namespace mobilemessage +} // namespace dom +} // namespace cellbroadcast \ No newline at end of file diff --git a/dom/cellbroadcast/moz.build b/dom/cellbroadcast/moz.build index 1e23e558a51..7ec56b547da 100644 --- a/dom/cellbroadcast/moz.build +++ b/dom/cellbroadcast/moz.build @@ -14,6 +14,8 @@ EXPORTS.mozilla.dom += [ SOURCES += [ 'CellBroadcast.cpp', 'CellBroadcastMessage.cpp', + 'ipc/CellBroadcastIPCService.cpp', + 'ipc/CellBroadcastParent.cpp', ] if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']: @@ -22,6 +24,17 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']: 'gonk/CellBroadcastService.manifest', ] +EXPORTS.mozilla.dom.cellbroadcast += [ + 'ipc/CellBroadcastIPCService.h', + 'ipc/CellBroadcastParent.h', +] + +IPDL_SOURCES += [ + 'ipc/PCellBroadcast.ipdl', +] + +include('/ipc/chromium/chromium-config.mozbuild') + FAIL_ON_WARNINGS = True FINAL_LIBRARY = 'xul' diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp index 2233241d1a5..b5ab830b989 100644 --- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -126,6 +126,7 @@ #include "ipc/Nuwa.h" #endif +#include "mozilla/dom/cellbroadcast/CellBroadcastIPCService.h" #include "mozilla/dom/indexedDB/PIndexedDBChild.h" #include "mozilla/dom/mobileconnection/MobileConnectionChild.h" #include "mozilla/dom/mobilemessage/SmsChild.h" @@ -161,6 +162,7 @@ using namespace base; using namespace mozilla; using namespace mozilla::docshell; using namespace mozilla::dom::bluetooth; +using namespace mozilla::dom::cellbroadcast; using namespace mozilla::dom::devicestorage; using namespace mozilla::dom::ipc; using namespace mozilla::dom::mobileconnection; @@ -388,7 +390,7 @@ ConsoleListener::Observe(nsIConsoleMessage* aMessage) { if (!mChild) return NS_OK; - + nsCOMPtr scriptError = do_QueryInterface(aMessage); if (scriptError) { nsString msg, sourceName, sourceLine; @@ -1392,6 +1394,30 @@ ContentChild::DeallocPExternalHelperAppChild(PExternalHelperAppChild* aService) return true; } +PCellBroadcastChild* +ContentChild::AllocPCellBroadcastChild() +{ + MOZ_CRASH("No one should be allocating PCellBroadcastChild actors"); +} + +PCellBroadcastChild* +ContentChild::SendPCellBroadcastConstructor(PCellBroadcastChild* aActor) +{ + aActor = PContentChild::SendPCellBroadcastConstructor(aActor); + if (aActor) { + static_cast(aActor)->AddRef(); + } + + return aActor; +} + +bool +ContentChild::DeallocPCellBroadcastChild(PCellBroadcastChild* aActor) +{ + static_cast(aActor)->Release(); + return true; +} + PSmsChild* ContentChild::AllocPSmsChild() { diff --git a/dom/ipc/ContentChild.h b/dom/ipc/ContentChild.h index ff5c0464b50..49bf35ab0ac 100644 --- a/dom/ipc/ContentChild.h +++ b/dom/ipc/ContentChild.h @@ -227,6 +227,10 @@ public: PBrowserChild* aBrowser) MOZ_OVERRIDE; virtual bool DeallocPExternalHelperAppChild(PExternalHelperAppChild *aService) MOZ_OVERRIDE; + virtual PCellBroadcastChild* AllocPCellBroadcastChild() MOZ_OVERRIDE; + PCellBroadcastChild* SendPCellBroadcastConstructor(PCellBroadcastChild* aActor); + virtual bool DeallocPCellBroadcastChild(PCellBroadcastChild* aActor) MOZ_OVERRIDE; + virtual PSmsChild* AllocPSmsChild() MOZ_OVERRIDE; virtual bool DeallocPSmsChild(PSmsChild*) MOZ_OVERRIDE; diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index 89923b6f301..98c3c22ddfc 100755 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -49,6 +49,7 @@ #include "mozilla/dom/FileSystemRequestParent.h" #include "mozilla/dom/GeolocationBinding.h" #include "mozilla/dom/FileDescriptorSetParent.h" +#include "mozilla/dom/cellbroadcast/CellBroadcastParent.h" #include "mozilla/dom/mobileconnection/MobileConnectionParent.h" #include "mozilla/dom/mobilemessage/SmsParent.h" #include "mozilla/dom/telephony/TelephonyParent.h" @@ -191,6 +192,7 @@ static const char* sClipboardTextFlavors[] = { kUnicodeMime }; using base::ChildPrivileges; using base::KillProcess; using namespace mozilla::dom::bluetooth; +using namespace mozilla::dom::cellbroadcast; using namespace mozilla::dom::devicestorage; using namespace mozilla::dom::indexedDB; using namespace mozilla::dom::power; @@ -2864,7 +2866,7 @@ ContentParent::KillHard() FROM_HERE, NewRunnableFunction(&ProcessWatcher::EnsureProcessTerminated, OtherProcess(), /*force=*/true)); - //We do clean-up here + //We do clean-up here MessageLoop::current()->PostDelayedTask( FROM_HERE, NewRunnableMethod(this, &ContentParent::ShutDownProcess, @@ -3105,13 +3107,13 @@ ContentParent::AllocPExternalHelperAppParent(const OptionalURIParams& uri, { ExternalHelperAppParent *parent = new ExternalHelperAppParent(uri, aContentLength); parent->AddRef(); - parent->Init(this, - aMimeContentType, + parent->Init(this, + aMimeContentType, aContentDisposition, aContentDispositionHint, aContentDispositionFilename, - aForceSave, - aReferrer, + aForceSave, + aReferrer, aBrowser); return parent; } @@ -3124,6 +3126,31 @@ ContentParent::DeallocPExternalHelperAppParent(PExternalHelperAppParent* aServic return true; } +PCellBroadcastParent* +ContentParent::AllocPCellBroadcastParent() +{ + if (!AssertAppProcessPermission(this, "cellbroadcast")) { + return nullptr; + } + + CellBroadcastParent* actor = new CellBroadcastParent(); + actor->AddRef(); + return actor; +} + +bool +ContentParent::DeallocPCellBroadcastParent(PCellBroadcastParent* aActor) +{ + static_cast(aActor)->Release(); + return true; +} + +bool +ContentParent::RecvPCellBroadcastConstructor(PCellBroadcastParent* aActor) +{ + return static_cast(aActor)->Init(); +} + PSmsParent* ContentParent::AllocPSmsParent() { diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h index 22d61459382..79f95d25801 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -474,13 +474,17 @@ private: const nsCString& aMimeContentType, const nsCString& aContentDisposition, const uint32_t& aContentDispositionHint, - const nsString& aContentDispositionFilename, + const nsString& aContentDispositionFilename, const bool& aForceSave, const int64_t& aContentLength, const OptionalURIParams& aReferrer, PBrowserParent* aBrowser) MOZ_OVERRIDE; virtual bool DeallocPExternalHelperAppParent(PExternalHelperAppParent* aService) MOZ_OVERRIDE; + virtual PCellBroadcastParent* AllocPCellBroadcastParent() MOZ_OVERRIDE; + virtual bool DeallocPCellBroadcastParent(PCellBroadcastParent*) MOZ_OVERRIDE; + virtual bool RecvPCellBroadcastConstructor(PCellBroadcastParent* aActor) MOZ_OVERRIDE; + virtual PSmsParent* AllocPSmsParent() MOZ_OVERRIDE; virtual bool DeallocPSmsParent(PSmsParent*) MOZ_OVERRIDE; diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl index 01bcbadc30a..96efbaa1b4a 100644 --- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -9,6 +9,7 @@ include protocol PBackground; include protocol PBlob; include protocol PBluetooth; include protocol PBrowser; +include protocol PCellBroadcast; include protocol PCompositor; include protocol PContentBridge; include protocol PCycleCollectWithLogs; @@ -41,6 +42,11 @@ include PTabContext; include URIParams; include ProtocolTypes; +// Workaround to prevent error if PContentChild.cpp & PContentBridgeParent.cpp +// are put into different UnifiedProtocolsXX.cpp files. +// XXX Remove this once bug 1069073 is fixed +include "mozilla/dom/PContentBridgeParent.h"; + using GeoPosition from "nsGeoPositionIPCSerialiser.h"; using struct ChromePackage from "mozilla/chrome/RegistryMessageUtils.h"; @@ -321,6 +327,7 @@ intr protocol PContent manages PBlob; manages PBluetooth; manages PBrowser; + manages PCellBroadcast; manages PCrashReporter; manages PCycleCollectWithLogs; manages PDeviceStorageRequest; @@ -533,6 +540,8 @@ parent: float systemDefaultScale, bool success); + PCellBroadcast(); + PSms(); PSpeechSynthesis(); @@ -583,11 +592,11 @@ parent: CloseAlert(nsString name, Principal principal); - PExternalHelperApp(OptionalURIParams uri, + PExternalHelperApp(OptionalURIParams uri, nsCString aMimeContentType, - nsCString aContentDisposition, - uint32_t aContentDispositionHint, - nsString aContentDispositionFilename, + nsCString aContentDisposition, + uint32_t aContentDispositionHint, + nsString aContentDispositionFilename, bool aForceSave, int64_t aContentLength, OptionalURIParams aReferrer, @@ -600,7 +609,7 @@ parent: ConsoleMessage(nsString message); ScriptError(nsString message, nsString sourceName, nsString sourceLine, uint32_t lineNumber, uint32_t colNumber, uint32_t flags, - nsCString category); + nsCString category); // nsIPermissionManager messages sync ReadPermissions() returns (Permission[] permissions); diff --git a/layout/build/nsLayoutModule.cpp b/layout/build/nsLayoutModule.cpp index c8f163caa79..e0ad0f35c1e 100644 --- a/layout/build/nsLayoutModule.cpp +++ b/layout/build/nsLayoutModule.cpp @@ -214,6 +214,7 @@ static void Shutdown(); #endif #include "nsCSPService.h" #include "nsCSPContext.h" +#include "nsICellBroadcastService.h" #include "nsISmsService.h" #include "nsIMmsService.h" #include "nsIMobileConnectionService.h" @@ -318,6 +319,8 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsHapticFeedback) #endif #endif NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(ThirdPartyUtil, Init) +NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsICellBroadcastService, + NS_CreateCellBroadcastService) NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsISmsService, NS_CreateSmsService) NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMmsService, NS_CreateMmsService) NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMobileMessageService, @@ -764,6 +767,7 @@ NS_DEFINE_NAMED_CID(NS_DEVICE_SENSORS_CID); NS_DEFINE_NAMED_CID(NS_HAPTICFEEDBACK_CID); #endif #endif +NS_DEFINE_NAMED_CID(CELLBROADCAST_SERVICE_CID); NS_DEFINE_NAMED_CID(SMS_SERVICE_CID); NS_DEFINE_NAMED_CID(MMS_SERVICE_CID); NS_DEFINE_NAMED_CID(MOBILE_MESSAGE_SERVICE_CID); @@ -1057,6 +1061,7 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = { #endif { &kTHIRDPARTYUTIL_CID, false, nullptr, ThirdPartyUtilConstructor }, { &kNS_STRUCTUREDCLONECONTAINER_CID, false, nullptr, nsStructuredCloneContainerConstructor }, + { &kCELLBROADCAST_SERVICE_CID, false, nullptr, nsICellBroadcastServiceConstructor }, { &kSMS_SERVICE_CID, false, nullptr, nsISmsServiceConstructor }, { &kMMS_SERVICE_CID, false, nullptr, nsIMmsServiceConstructor }, { &kMOBILE_MESSAGE_SERVICE_CID, false, nullptr, nsIMobileMessageServiceConstructor }, @@ -1215,6 +1220,7 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = { #endif { THIRDPARTYUTIL_CONTRACTID, &kTHIRDPARTYUTIL_CID }, { NS_STRUCTUREDCLONECONTAINER_CONTRACTID, &kNS_STRUCTUREDCLONECONTAINER_CID }, + { CELLBROADCAST_SERVICE_CONTRACTID, &kCELLBROADCAST_SERVICE_CID }, { SMS_SERVICE_CONTRACTID, &kSMS_SERVICE_CID }, { MMS_SERVICE_CONTRACTID, &kMMS_SERVICE_CID }, { MOBILE_MESSAGE_SERVICE_CONTRACTID, &kMOBILE_MESSAGE_SERVICE_CID }, From b255c35e528076e3c6880a9cc8468f86f1f400ed Mon Sep 17 00:00:00 2001 From: Bevis Tseng Date: Mon, 25 Aug 2014 17:24:03 +0800 Subject: [PATCH 26/54] Bug 864484 - Part 5: Build CellBroadcast by default. r=vyang, r=smaug, r=ted --HG-- extra : rebase_source : 73dcc868004c3e34c51806a34f88d25fc6c4c7c6 --- b2g/installer/package-manifest.in | 2 +- browser/installer/package-manifest.in | 1 + dom/base/Navigator.cpp | 18 +++++++++--------- dom/base/Navigator.h | 6 +++--- dom/moz.build | 2 +- dom/webidl/moz.build | 8 ++------ 6 files changed, 17 insertions(+), 20 deletions(-) diff --git a/b2g/installer/package-manifest.in b/b2g/installer/package-manifest.in index 30216346a92..c08bf458505 100644 --- a/b2g/installer/package-manifest.in +++ b/b2g/installer/package-manifest.in @@ -160,7 +160,6 @@ #endif #ifdef MOZ_B2G_RIL @BINPATH@/components/dom_icc.xpt -@BINPATH@/components/dom_cellbroadcast.xpt @BINPATH@/components/dom_wappush.xpt @BINPATH@/components/dom_mobileconnection.xpt #endif @@ -192,6 +191,7 @@ @BINPATH@/components/dom_settings.xpt @BINPATH@/components/dom_permissionsettings.xpt @BINPATH@/components/dom_sidebar.xpt +@BINPATH@/components/dom_cellbroadcast.xpt @BINPATH@/components/dom_mobilemessage.xpt @BINPATH@/components/dom_storage.xpt @BINPATH@/components/dom_stylesheets.xpt diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index 5f6bb76cc76..ab98809b6c9 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -206,6 +206,7 @@ @BINPATH@/components/dom_settings.xpt @BINPATH@/components/dom_permissionsettings.xpt @BINPATH@/components/dom_sidebar.xpt +@BINPATH@/components/dom_cellbroadcast.xpt @BINPATH@/components/dom_mobilemessage.xpt @BINPATH@/components/dom_storage.xpt @BINPATH@/components/dom_stylesheets.xpt diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp index c9c260fe90a..7d8d3da6f95 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -33,6 +33,7 @@ #include "mozilla/dom/PowerManager.h" #include "mozilla/dom/WakeLock.h" #include "mozilla/dom/power/PowerManagerService.h" +#include "mozilla/dom/CellBroadcast.h" #include "mozilla/dom/MobileMessageManager.h" #include "mozilla/dom/ServiceWorkerContainer.h" #include "mozilla/dom/Telephony.h" @@ -49,7 +50,6 @@ #endif #ifdef MOZ_B2G_RIL #include "mozilla/dom/IccManager.h" -#include "mozilla/dom/CellBroadcast.h" #include "mozilla/dom/MobileConnectionArray.h" #endif #include "nsIIdleObserver.h" @@ -173,13 +173,13 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Navigator) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mNotification) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBatteryManager) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPowerManager) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCellBroadcast) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMobileMessageManager) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTelephony) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mVoicemail) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mConnection) #ifdef MOZ_B2G_RIL NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMobileConnections) - NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCellBroadcast) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIccManager) #endif #ifdef MOZ_B2G_BT @@ -242,6 +242,10 @@ Navigator::Invalidate() mPowerManager = nullptr; } + if (mCellBroadcast) { + mCellBroadcast = nullptr; + } + if (mMobileMessageManager) { mMobileMessageManager->Shutdown(); mMobileMessageManager = nullptr; @@ -266,10 +270,6 @@ Navigator::Invalidate() mMobileConnections = nullptr; } - if (mCellBroadcast) { - mCellBroadcast = nullptr; - } - if (mIccManager) { mIccManager->Shutdown(); mIccManager = nullptr; @@ -1495,7 +1495,7 @@ Navigator::HasFeature(const nsAString& aName, ErrorResult& aRv) p->MaybeResolve(true); return p.forget(); } -#endif +#endif if (featureName.EqualsLiteral("XMLHttpRequest.mozSystem")) { p->MaybeResolve(true); @@ -1638,6 +1638,8 @@ Navigator::GetMozMobileConnections(ErrorResult& aRv) return mMobileConnections; } +#endif // MOZ_B2G_RIL + CellBroadcast* Navigator::GetMozCellBroadcast(ErrorResult& aRv) { @@ -1652,8 +1654,6 @@ Navigator::GetMozCellBroadcast(ErrorResult& aRv) return mCellBroadcast; } -#endif // MOZ_B2G_RIL - Voicemail* Navigator::GetMozVoicemail(ErrorResult& aRv) { diff --git a/dom/base/Navigator.h b/dom/base/Navigator.h index 496d6db8124..9cc8364a441 100644 --- a/dom/base/Navigator.h +++ b/dom/base/Navigator.h @@ -85,12 +85,12 @@ class BluetoothManager; #endif // MOZ_B2G_BT #ifdef MOZ_B2G_RIL -class CellBroadcast; class IccManager; class MobileConnectionArray; #endif class PowerManager; +class CellBroadcast; class Telephony; class Voicemail; @@ -219,6 +219,7 @@ public: nsTArray >& aStores, ErrorResult& aRv); DesktopNotificationCenter* GetMozNotification(ErrorResult& aRv); + CellBroadcast* GetMozCellBroadcast(ErrorResult& aRv); MobileMessageManager* GetMozMobileMessage(); Telephony* GetMozTelephony(ErrorResult& aRv); Voicemail* GetMozVoicemail(ErrorResult& aRv); @@ -234,7 +235,6 @@ public: #endif #ifdef MOZ_B2G_RIL MobileConnectionArray* GetMozMobileConnections(ErrorResult& aRv); - CellBroadcast* GetMozCellBroadcast(ErrorResult& aRv); IccManager* GetMozIccManager(ErrorResult& aRv); #endif // MOZ_B2G_RIL #ifdef MOZ_GAMEPAD @@ -329,13 +329,13 @@ private: nsRefPtr mFMRadio; #endif nsRefPtr mPowerManager; + nsRefPtr mCellBroadcast; nsRefPtr mMobileMessageManager; nsRefPtr mTelephony; nsRefPtr mVoicemail; nsRefPtr mConnection; #ifdef MOZ_B2G_RIL nsRefPtr mMobileConnections; - nsRefPtr mCellBroadcast; nsRefPtr mIccManager; #endif #ifdef MOZ_B2G_BT diff --git a/dom/moz.build b/dom/moz.build index a5181d0b14e..d132aab1a02 100644 --- a/dom/moz.build +++ b/dom/moz.build @@ -46,6 +46,7 @@ DIRS += [ 'battery', 'browser-element', 'canvas', + 'cellbroadcast', 'contacts', 'crypto', 'phonenumberutils', @@ -112,7 +113,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': if CONFIG['MOZ_B2G_RIL']: DIRS += [ 'icc', - 'cellbroadcast', 'wappush', ] diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index 6fb286d36f9..b9cd7726dd9 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -264,6 +264,7 @@ WEBIDL_FILES = [ 'MouseEvent.webidl', 'MouseScrollEvent.webidl', 'MozActivity.webidl', + 'MozCellBroadcast.webidl', 'MozCellBroadcastMessage.webidl', 'MozMmsMessage.webidl', 'MozMobileCellInfo.webidl', @@ -605,7 +606,6 @@ if CONFIG['MOZ_B2G_BT']: if CONFIG['MOZ_B2G_RIL']: WEBIDL_FILES += [ 'IccCardLockError.webidl', - 'MozCellBroadcast.webidl', 'MozIcc.webidl', 'MozIccManager.webidl', ] @@ -662,6 +662,7 @@ GENERATED_EVENTS_WEBIDL_FILES = [ 'MediaStreamEvent.webidl', 'MediaStreamTrackEvent.webidl', 'MozApplicationEvent.webidl', + 'MozCellBroadcastEvent.webidl', 'MozClirModeEvent.webidl', 'MozContactChangeEvent.webidl', 'MozEmergencyCbModeEvent.webidl', @@ -724,11 +725,6 @@ if CONFIG['MOZ_B2G_BT']: 'BluetoothStatusChangedEvent.webidl', ] -if CONFIG['MOZ_B2G_RIL']: - GENERATED_EVENTS_WEBIDL_FILES += [ - 'MozCellBroadcastEvent.webidl', - ] - if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': GENERATED_EVENTS_WEBIDL_FILES += [ 'MozWifiConnectionInfoEvent.webidl', From 30f83fb75fdccb64d472fa1be7bc565011e5591b Mon Sep 17 00:00:00 2001 From: Bevis Tseng Date: Mon, 15 Sep 2014 17:44:46 +0800 Subject: [PATCH 27/54] Bug 864484 - Part 6: Move broadcastCbsSystemMessage() From RadioInterfaceLayer to CellBroadcastService. r=vyang --HG-- extra : rebase_source : 9d77590199e2b94a9dad50a97e7a3f3e488694f3 --- .../gonk/CellBroadcastService.js | 39 ++++++++++++++++ dom/system/gonk/RadioInterfaceLayer.js | 46 +------------------ 2 files changed, 40 insertions(+), 45 deletions(-) diff --git a/dom/cellbroadcast/gonk/CellBroadcastService.js b/dom/cellbroadcast/gonk/CellBroadcastService.js index 70ecad70c4f..baff4201c01 100644 --- a/dom/cellbroadcast/gonk/CellBroadcastService.js +++ b/dom/cellbroadcast/gonk/CellBroadcastService.js @@ -16,6 +16,10 @@ XPCOMUtils.defineLazyGetter(this, "RIL", function () { return obj; }); +XPCOMUtils.defineLazyServiceGetter(this, "gSystemMessenger", + "@mozilla.org/system-message-internal;1", + "nsISystemMessagesInternal"); + const GONK_CELLBROADCAST_SERVICE_CONTRACTID = "@mozilla.org/cellbroadcast/gonkservice;1"; const GONK_CELLBROADCAST_SERVICE_CID = @@ -100,6 +104,41 @@ CellBroadcastService.prototype = { aEtwsWarningType, aEtwsEmergencyUserAlert, aEtwsPopup) { + // Broadcast CBS System message + // Align the same layout to MozCellBroadcastMessage + let systemMessage = { + serviceId: aServiceId, + gsmGeographicalScope: aGsmGeographicalScope, + messageCode: aMessageCode, + messageId: aMessageId, + language: aLanguage, + body: aBody, + messageClass: aMessageClass, + timestamp: aTimestamp, + cdmaServiceCategory: null, + etws: null + }; + + if (aHasEtwsInfo) { + systemMessage.etws = { + warningType: aEtwsWarningType, + emergencyUserAlert: aEtwsEmergencyUserAlert, + popup: aEtwsPopup + }; + } + + if (aCdmaServiceCategory != + Ci.nsICellBroadcastService.CDMA_SERVICE_CATEGORY_INVALID) { + systemMessage.cdmaServiceCategory = aCdmaServiceCategory; + } + + if (DEBUG) { + debug("CBS system message to be broadcasted: " + JSON.stringify(systemMessage)); + } + + gSystemMessenger.broadcastMessage("cellbroadcast-received", systemMessage); + + // Notify received message to registered listener for (let listener of this._listeners) { try { listener.notifyMessageReceived(aServiceId, diff --git a/dom/system/gonk/RadioInterfaceLayer.js b/dom/system/gonk/RadioInterfaceLayer.js index 579afe324ab..549ad035e95 100644 --- a/dom/system/gonk/RadioInterfaceLayer.js +++ b/dom/system/gonk/RadioInterfaceLayer.js @@ -2104,8 +2104,6 @@ RadioInterface.prototype = { this.handleSmsMultipart(message); break; case "cellbroadcast-received": - message.timestamp = Date.now(); - this.broadcastCbsSystemMessage(message); this.handleCellbroadcastMessageReceived(message); break; case "nitzTime": @@ -2778,48 +2776,6 @@ RadioInterface.prototype = { }, - /** - * A helper to broadcast the system message to launch registered apps - * like CMAS app and etc. - * - * @param aName - * The system message name. - * @param aMessage - * The Cellbroadcast message received from ril_worker. - */ - broadcastCbsSystemMessage: function(aMessage) { - // Create system message with the same structure of nsIDOMMozCellBroadcastMessage - // and nsIDOMMozCellBroadcastEtwsInfo. - let etws = (aMessage.etws != null) - ? { - warningType: (aMessage.etws.warningType != null) - ? RIL.CB_ETWS_WARNING_TYPE_NAMES[aMessage.etws.warningType] - : null, - emergencyUserAlert: aMessage.etws.emergencyUserAlert, - popup: aMessage.etws.popup - } - : null; - - let systemMessage = { - serviceId: this.clientId, - gsmGeographicalScope: RIL.CB_GSM_GEOGRAPHICAL_SCOPE_NAMES[aMessage.geographicalScope], - messageCode: aMessage.messageCode, - messageId: aMessage.messageId, - language: aMessage.language, - body: aMessage.fullBody, - messageClass: aMessage.messageClass, - timestamp: aMessage.timestamp, - etws: etws, - cdmaServiceCategory: aMessage.serviceCategory - }; - - if (DEBUG) { - this.debug("CBS system message to be broadcasted: " + JSON.stringify(systemMessage)); - } - - gSystemMessenger.broadcastMessage("cellbroadcast-received", systemMessage); - }, - /** * Set the setting value of "time.clock.automatic-update.available". */ @@ -3002,7 +2958,7 @@ RadioInterface.prototype = { aMessage.language, aMessage.fullBody, aMessage.messageClass, - aMessage.timestamp, + Date.now(), serviceCategory, hasEtwsInfo, (hasEtwsInfo && etwsInfo.warningType != null) From bd9ab9083c0ec0beb6bc7c77e15e696f7a8a50df Mon Sep 17 00:00:00 2001 From: Bevis Tseng Date: Tue, 23 Sep 2014 18:27:03 +0800 Subject: [PATCH 28/54] Bug 864484 - Part 7: Narrow down the DOMString values to predefined constants in .idl. r=vyang, r=smaug --HG-- extra : rebase_source : 0038e0d9ba6a45f19ea7552202d9db9d165c6c88 extra : amend_source : 7ac906a928fe14fbcac03cd470da78f433a9f192 --- dom/cellbroadcast/CellBroadcast.cpp | 6 +- dom/cellbroadcast/CellBroadcastMessage.cpp | 79 ++++++++++++------- dom/cellbroadcast/CellBroadcastMessage.h | 8 +- .../gonk/CellBroadcastService.js | 24 +++++- .../interfaces/nsICellBroadcastService.idl | 44 +++++++++-- .../nsIGonkCellBroadcastService.idl | 8 +- .../ipc/CellBroadcastIPCService.cpp | 6 +- .../ipc/CellBroadcastIPCService.h | 6 +- dom/cellbroadcast/ipc/CellBroadcastParent.cpp | 12 +-- dom/cellbroadcast/ipc/PCellBroadcast.ipdl | 6 +- dom/system/gonk/RadioInterfaceLayer.js | 29 +++++-- dom/system/gonk/ril_consts.js | 7 +- dom/webidl/MozCellBroadcastMessage.webidl | 4 +- 13 files changed, 165 insertions(+), 74 deletions(-) diff --git a/dom/cellbroadcast/CellBroadcast.cpp b/dom/cellbroadcast/CellBroadcast.cpp index 26314e39e2e..0e0134b4a2e 100644 --- a/dom/cellbroadcast/CellBroadcast.cpp +++ b/dom/cellbroadcast/CellBroadcast.cpp @@ -111,16 +111,16 @@ CellBroadcast::WrapObject(JSContext* aCx) NS_IMETHODIMP CellBroadcast::NotifyMessageReceived(uint32_t aServiceId, - const nsAString& aGsmGeographicalScope, + uint32_t aGsmGeographicalScope, uint16_t aMessageCode, uint16_t aMessageId, const nsAString& aLanguage, const nsAString& aBody, - const nsAString& aMessageClass, + uint32_t aMessageClass, DOMTimeStamp aTimestamp, uint32_t aCdmaServiceCategory, bool aHasEtwsInfo, - const nsAString& aEtwsWarningType, + uint32_t aEtwsWarningType, bool aEtwsEmergencyUserAlert, bool aEtwsPopup) { MozCellBroadcastEventInit init; diff --git a/dom/cellbroadcast/CellBroadcastMessage.cpp b/dom/cellbroadcast/CellBroadcastMessage.cpp index 50ef98ad0d6..261b64b0ba3 100644 --- a/dom/cellbroadcast/CellBroadcastMessage.cpp +++ b/dom/cellbroadcast/CellBroadcastMessage.cpp @@ -6,24 +6,42 @@ #include "CellBroadcastMessage.h" #include "mozilla/dom/MozCellBroadcastMessageBinding.h" #include "nsPIDOMWindow.h" - -#define CONVERT_STRING_TO_NULLABLE_ENUM(_string, _enumType, _enum) \ -{ \ - _enum.SetNull(); \ - \ - uint32_t i = 0; \ - for (const EnumEntry* entry = _enumType##Values::strings; \ - entry->value; \ - ++entry, ++i) { \ - if (_string.EqualsASCII(entry->value)) { \ - _enum.SetValue(static_cast<_enumType>(i)); \ - } \ - } \ -} +#include "nsICellBroadcastService.h" namespace mozilla { namespace dom { +/** + * Converter for XPIDL Constants to WebIDL Enumerations + */ + +template struct EnumConverter {}; + +template +struct StaticEnumConverter +{ + typedef T WebidlEnumType; + typedef uint32_t XpidlEnumType; + + static MOZ_CONSTEXPR WebidlEnumType + x2w(XpidlEnumType aXpidlEnum) { return static_cast(aXpidlEnum); } +}; + +template +MOZ_CONSTEXPR T +ToWebidlEnum(uint32_t aXpidlEnum) { return EnumConverter::x2w(aXpidlEnum); } + +// Declare converters here: +template <> +struct EnumConverter : + public StaticEnumConverter {}; +template <> +struct EnumConverter : + public StaticEnumConverter {}; +template <> +struct EnumConverter : + public StaticEnumConverter {}; + /** * CellBroadcastMessage Implementation. */ @@ -40,16 +58,16 @@ NS_INTERFACE_MAP_END CellBroadcastMessage::CellBroadcastMessage(nsPIDOMWindow* aWindow, uint32_t aServiceId, - const nsAString& aGsmGeographicalScope, + uint32_t aGsmGeographicalScope, uint16_t aMessageCode, uint16_t aMessageId, const nsAString& aLanguage, const nsAString& aBody, - const nsAString& aMessageClass, + uint32_t aMessageClass, uint64_t aTimestamp, uint32_t aCdmaServiceCategory, bool aHasEtwsInfo, - const nsAString& aEtwsWarningType, + uint32_t aEtwsWarningType, bool aEtwsEmergencyUserAlert, bool aEtwsPopup) : mWindow(aWindow) @@ -65,18 +83,18 @@ CellBroadcastMessage::CellBroadcastMessage(nsPIDOMWindow* aWindow, aEtwsPopup) : nullptr) { - CONVERT_STRING_TO_NULLABLE_ENUM(aGsmGeographicalScope, - CellBroadcastGsmGeographicalScope, - mGsmGeographicalScope) + if (aGsmGeographicalScope < nsICellBroadcastService::GSM_GEOGRAPHICAL_SCOPE_INVALID) { + mGsmGeographicalScope.SetValue( + ToWebidlEnum(aGsmGeographicalScope)); + } - CONVERT_STRING_TO_NULLABLE_ENUM(aMessageClass, - CellBroadcastMessageClass, - mMessageClass) + if (aMessageClass < nsICellBroadcastService::GSM_MESSAGE_CLASS_INVALID) { + mMessageClass.SetValue( + ToWebidlEnum(aMessageClass)); + } // CdmaServiceCategory represents a 16bit unsigned value. - if (aCdmaServiceCategory > 0xFFFFU) { - mCdmaServiceCategory.SetNull(); - } else { + if (aCdmaServiceCategory <= 0xFFFFU) { mCdmaServiceCategory.SetValue(static_cast(aCdmaServiceCategory)); } @@ -111,16 +129,17 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(CellBroadcastEtwsInfo) NS_INTERFACE_MAP_END CellBroadcastEtwsInfo::CellBroadcastEtwsInfo(nsPIDOMWindow* aWindow, - const nsAString& aWarningType, + uint32_t aWarningType, bool aEmergencyUserAlert, bool aPopup) : mWindow(aWindow) , mEmergencyUserAlert(aEmergencyUserAlert) , mPopup(aPopup) { - CONVERT_STRING_TO_NULLABLE_ENUM(aWarningType, - CellBroadcastEtwsWarningType, - mWarningType) + if (aWarningType < nsICellBroadcastService::GSM_ETWS_WARNING_INVALID) { + mWarningType.SetValue( + ToWebidlEnum(aWarningType)); + } SetIsDOMBinding(); } diff --git a/dom/cellbroadcast/CellBroadcastMessage.h b/dom/cellbroadcast/CellBroadcastMessage.h index 5d9a5c4851b..032f32c19c8 100644 --- a/dom/cellbroadcast/CellBroadcastMessage.h +++ b/dom/cellbroadcast/CellBroadcastMessage.h @@ -28,16 +28,16 @@ public: CellBroadcastMessage(nsPIDOMWindow* aWindow, uint32_t aServiceId, - const nsAString& aGsmGeographicalScope, + uint32_t aGsmGeographicalScope, uint16_t aMessageCode, uint16_t aMessageId, const nsAString& aLanguage, const nsAString& aBody, - const nsAString& aMessageClass, + uint32_t aMessageClass, uint64_t aTimestamp, uint32_t aCdmaServiceCategory, bool aHasEtwsInfo, - const nsAString& aEtwsWarningType, + uint32_t aEtwsWarningType, bool aEtwsEmergencyUserAlert, bool aEtwsPopup); @@ -99,7 +99,7 @@ public: NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CellBroadcastEtwsInfo) CellBroadcastEtwsInfo(nsPIDOMWindow* aWindow, - const nsAString& aWarningType, + uint32_t aWarningType, bool aEmergencyUserAlert, bool aPopup); diff --git a/dom/cellbroadcast/gonk/CellBroadcastService.js b/dom/cellbroadcast/gonk/CellBroadcastService.js index baff4201c01..9f9713aed31 100644 --- a/dom/cellbroadcast/gonk/CellBroadcastService.js +++ b/dom/cellbroadcast/gonk/CellBroadcastService.js @@ -67,6 +67,24 @@ CellBroadcastService.prototype = { } catch (e) {} }, + _convertCbGsmGeographicalScope: function(aGeographicalScope) { + return (aGeographicalScope >= Ci.nsICellBroadcastService.GSM_GEOGRAPHICAL_SCOPE_INVALID) + ? null + : RIL.CB_GSM_GEOGRAPHICAL_SCOPE_NAMES[aGeographicalScope]; + }, + + _convertCbMessageClass: function(aMessageClass) { + return (aMessageClass >= Ci.nsICellBroadcastService.GSM_MESSAGE_CLASS) + ? null + : RIL.GECKO_SMS_MESSAGE_CLASSES[aMessageClass]; + }, + + _convertCbEtwsWarningType: function(aWarningType) { + return (aWarningType >= Ci.nsICellBroadcastService.GSM_ETWS_WARNING_INVALID) + ? null + : RIL.CB_ETWS_WARNING_TYPE_NAMES[aWarningType]; + }, + /** * nsICellBroadcastService interface */ @@ -108,12 +126,12 @@ CellBroadcastService.prototype = { // Align the same layout to MozCellBroadcastMessage let systemMessage = { serviceId: aServiceId, - gsmGeographicalScope: aGsmGeographicalScope, + gsmGeographicalScope: this._convertCbGsmGeographicalScope(aGsmGeographicalScope), messageCode: aMessageCode, messageId: aMessageId, language: aLanguage, body: aBody, - messageClass: aMessageClass, + messageClass: this._convertCbMessageClass(aMessageClass), timestamp: aTimestamp, cdmaServiceCategory: null, etws: null @@ -121,7 +139,7 @@ CellBroadcastService.prototype = { if (aHasEtwsInfo) { systemMessage.etws = { - warningType: aEtwsWarningType, + warningType: this._convertCbEtwsWarningType(aEtwsWarningType), emergencyUserAlert: aEtwsEmergencyUserAlert, popup: aEtwsPopup }; diff --git a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl index 33a2e796969..8b04739eed7 100644 --- a/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl +++ b/dom/cellbroadcast/interfaces/nsICellBroadcastService.idl @@ -5,23 +5,23 @@ #include "domstubs.idl" #include "nsISupports.idl" -[scriptable, uuid(fd1f9efa-3d6c-11e4-a7be-e3b99e7f903b)] +[scriptable, uuid(56f66190-44a0-11e4-aa32-636783cc014a)] interface nsICellBroadcastListener : nsISupports { /** * Called when a Cell Broadcast message has been received by the network. */ void notifyMessageReceived(in unsigned long aServiceId, - in DOMString aGsmGeographicalScope, + in unsigned long aGsmGeographicalScope, in unsigned short aMessageCode, in unsigned short aMessageId, in DOMString aLanguage, in DOMString aBody, - in DOMString aMessageClass, + in unsigned long aMessageClass, in DOMTimeStamp aTimestamp, in unsigned long aCdmaServiceCategory, in boolean aHasEtwsInfo, - in DOMString aEtwsWarningType, + in unsigned long aEtwsWarningType, in boolean aEtwsEmergencyUserAlert, in boolean aEtwsPopup); }; @@ -36,9 +36,43 @@ interface nsICellBroadcastListener : nsISupports /** * XPCOM component that provides the cell broadcast information. */ -[scriptable, uuid(05099b34-21f7-11e4-b3b9-1b1b03487cab)] +[scriptable, uuid(eed283f6-44a8-11e4-b364-afb894b7a283)] interface nsICellBroadcastService : nsISupports { + /** + * Constant definitions of predefined GSM Geographic Scope + * See 3GPP TS 23.041 clause 9.4.1.2.1 Serial Number + */ + const unsigned short GSM_GEOGRAPHICAL_SCOPE_CELL_IMMEDIATE = 0; + const unsigned short GSM_GEOGRAPHICAL_SCOPE_PLMN = 1; + const unsigned short GSM_GEOGRAPHICAL_SCOPE_LOCATION_AREA = 2; + const unsigned short GSM_GEOGRAPHICAL_SCOPE_CELL = 3; + const unsigned short GSM_GEOGRAPHICAL_SCOPE_INVALID = 4; + + /** + * Constant definitions of predefined GSM Message Class + * See 3GPP TS 23.038 clause 5 CBS Data Coding Scheme + */ + const unsigned short GSM_MESSAGE_CLASS_0 = 0; + const unsigned short GSM_MESSAGE_CLASS_1 = 1; + const unsigned short GSM_MESSAGE_CLASS_2 = 2; + const unsigned short GSM_MESSAGE_CLASS_3 = 3; + const unsigned short GSM_MESSAGE_CLASS_USER_1 = 4; + const unsigned short GSM_MESSAGE_CLASS_USER_2 = 5; + const unsigned short GSM_MESSAGE_CLASS_NORMAL = 6; + const unsigned short GSM_MESSAGE_CLASS_INVALID = 7; + + /** + * Constant definitions of predefined GSM ETWS Warning Types + * see 3GPP TS 23.041 clause 9.3.24 Warning-Type + */ + const unsigned short GSM_ETWS_WARNING_EARTHQUAKE = 0; + const unsigned short GSM_ETWS_WARNING_TSUNAMI = 1; + const unsigned short GSM_ETWS_WARNING_EARTHQUAKE_TSUNAMI = 2; + const unsigned short GSM_ETWS_WARNING_TEST = 3; + const unsigned short GSM_ETWS_WARNING_OTHER = 4; + const unsigned short GSM_ETWS_WARNING_INVALID = 5; + /** * Attribute CdmaServiceCategory is only valid in CDMA network. * Set to CDMA_SERVICE_CATEGORY_INVALID if received from GSM/UMTS network. diff --git a/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl index 8db7a6ecb87..88a9fbbf9b0 100644 --- a/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl +++ b/dom/cellbroadcast/interfaces/nsIGonkCellBroadcastService.idl @@ -9,23 +9,23 @@ "@mozilla.org/cellbroadcast/gonkservice;1" %} -[scriptable, uuid(f72ced60-21f9-11e4-8896-6fdff2f5c909)] +[scriptable, uuid(7cac92aa-42f8-11e4-96f3-7f490e355277)] interface nsIGonkCellBroadcastService : nsICellBroadcastService { /** * Called when a cellbroadcast message has been received by the network. */ void notifyMessageReceived(in unsigned long aServiceId, - in DOMString aGsmGeographicalScope, + in unsigned long aGsmGeographicalScope, in unsigned short aMessageCode, in unsigned short aMessageId, in DOMString aLanguage, in DOMString aBody, - in DOMString aMessageClass, + in unsigned long aMessageClass, in DOMTimeStamp aTimestamp, in unsigned long aCdmaServiceCategory, in boolean aHasEtwsInfo, - in DOMString aEtwsWarningType, + in unsigned long aEtwsWarningType, in boolean aEtwsEmergencyUserAlert, in boolean aEtwsPopup); }; diff --git a/dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp b/dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp index 4f3bebbd5bd..95bfd44b7ff 100644 --- a/dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp +++ b/dom/cellbroadcast/ipc/CellBroadcastIPCService.cpp @@ -63,16 +63,16 @@ CellBroadcastIPCService::UnregisterListener(nsICellBroadcastListener* aListener) bool CellBroadcastIPCService::RecvNotifyReceivedMessage(const uint32_t& aServiceId, - const nsString& aGsmGeographicalScope, + const uint32_t& aGsmGeographicalScope, const uint16_t& aMessageCode, const uint16_t& aMessageId, const nsString& aLanguage, const nsString& aBody, - const nsString& aMessageClass, + const uint32_t& aMessageClass, const uint64_t& aTimestamp, const uint32_t& aCdmaServiceCategory, const bool& aHasEtwsInfo, - const nsString& aEtwsWarningType, + const uint32_t& aEtwsWarningType, const bool& aEtwsEmergencyUserAlert, const bool& aEtwsPopup) { diff --git a/dom/cellbroadcast/ipc/CellBroadcastIPCService.h b/dom/cellbroadcast/ipc/CellBroadcastIPCService.h index 63034fef5b3..8f7d7d5a39d 100644 --- a/dom/cellbroadcast/ipc/CellBroadcastIPCService.h +++ b/dom/cellbroadcast/ipc/CellBroadcastIPCService.h @@ -28,16 +28,16 @@ public: // PCellBroadcastChild interface virtual bool RecvNotifyReceivedMessage(const uint32_t& aServiceId, - const nsString& aGsmGeographicalScope, + const uint32_t& aGsmGeographicalScope, const uint16_t& aMessageCode, const uint16_t& aMessageId, const nsString& aLanguage, const nsString& aBody, - const nsString& aMessageClass, + const uint32_t& aMessageClass, const uint64_t& aTimestamp, const uint32_t& aCdmaServiceCategory, const bool& aHasEtwsInfo, - const nsString& aEtwsWarningType, + const uint32_t& aEtwsWarningType, const bool& aEtwsEmergencyUserAlert, const bool& aEtwsPopup) MOZ_OVERRIDE; diff --git a/dom/cellbroadcast/ipc/CellBroadcastParent.cpp b/dom/cellbroadcast/ipc/CellBroadcastParent.cpp index 17f9138a227..7a6668a589e 100644 --- a/dom/cellbroadcast/ipc/CellBroadcastParent.cpp +++ b/dom/cellbroadcast/ipc/CellBroadcastParent.cpp @@ -41,30 +41,30 @@ CellBroadcastParent::ActorDestroy(ActorDestroyReason aWhy) */ NS_IMETHODIMP CellBroadcastParent::NotifyMessageReceived(uint32_t aServiceId, - const nsAString& aGsmGeographicalScope, + uint32_t aGsmGeographicalScope, uint16_t aMessageCode, uint16_t aMessageId, const nsAString& aLanguage, const nsAString& aBody, - const nsAString& aMessageClass, + uint32_t aMessageClass, DOMTimeStamp aTimestamp, uint32_t aCdmaServiceCategory, bool aHasEtwsInfo, - const nsAString& aEtwsWarningType, + uint32_t aEtwsWarningType, bool aEtwsEmergencyUserAlert, bool aEtwsPopup) { return SendNotifyReceivedMessage(aServiceId, - nsString(aGsmGeographicalScope), + aGsmGeographicalScope, aMessageCode, aMessageId, nsString(aLanguage), nsString(aBody), - nsString(aMessageClass), + aMessageClass, aTimestamp, aCdmaServiceCategory, aHasEtwsInfo, - nsString(aEtwsWarningType), + aEtwsWarningType, aEtwsEmergencyUserAlert, aEtwsPopup) ? NS_OK : NS_ERROR_FAILURE; } diff --git a/dom/cellbroadcast/ipc/PCellBroadcast.ipdl b/dom/cellbroadcast/ipc/PCellBroadcast.ipdl index eb95362d16c..9a6aa4e612f 100644 --- a/dom/cellbroadcast/ipc/PCellBroadcast.ipdl +++ b/dom/cellbroadcast/ipc/PCellBroadcast.ipdl @@ -15,16 +15,16 @@ sync protocol PCellBroadcast { child: NotifyReceivedMessage(uint32_t aServiceId, - nsString aGsmGeographicalScope, + uint32_t aGsmGeographicalScope, uint16_t aMessageCode, uint16_t aMessageId, nsString aLanguage, nsString aBody, - nsString aMessageClass, + uint32_t aMessageClass, uint64_t aTimestamp, uint32_t aCdmaServiceCategory, bool aHasEtwsInfo, - nsString aEtwsWarningType, + uint32_t aEtwsWarningType, bool aEtwsEmergencyUserAlert, bool aEtwsPopup); diff --git a/dom/system/gonk/RadioInterfaceLayer.js b/dom/system/gonk/RadioInterfaceLayer.js index 549ad035e95..cf78179d549 100644 --- a/dom/system/gonk/RadioInterfaceLayer.js +++ b/dom/system/gonk/RadioInterfaceLayer.js @@ -2943,6 +2943,25 @@ RadioInterface.prototype = { gMessageManager.sendIccMessage("RIL:StkCommand", this.clientId, message); }, + _convertCbGsmGeographicalScope: function(aGeographicalScope) { + return (aGeographicalScope != null) + ? aGeographicalScope + : Ci.nsICellBroadcastService.GSM_GEOGRAPHICAL_SCOPE_INVALID; + }, + + _convertCbMessageClass: function(aMessageClass) { + let index = RIL.GECKO_SMS_MESSAGE_CLASSES.indexOf(aMessageClass); + return (index != -1) + ? index + : Ci.nsICellBroadcastService.GSM_MESSAGE_CLASS_INVALID; + }, + + _convertCbEtwsWarningType: function(aWarningType) { + return (aWarningType != null) + ? aWarningType + : Ci.nsICellBroadcastService.GSM_ETWS_WARNING_INVALID; + }, + handleCellbroadcastMessageReceived: function(aMessage) { let etwsInfo = aMessage.etws; let hasEtwsInfo = etwsInfo != null; @@ -2952,18 +2971,18 @@ RadioInterface.prototype = { gCellBroadcastService .notifyMessageReceived(this.clientId, - RIL.CB_GSM_GEOGRAPHICAL_SCOPE_NAMES[aMessage.geographicalScope], + this._convertCbGsmGeographicalScope(aMessage.geographicalScope), aMessage.messageCode, aMessage.messageId, aMessage.language, aMessage.fullBody, - aMessage.messageClass, + this._convertCbMessageClass(aMessage.messageClass), Date.now(), serviceCategory, hasEtwsInfo, - (hasEtwsInfo && etwsInfo.warningType != null) - ? RIL.CB_ETWS_WARNING_TYPE_NAMES[etwsInfo.warningType] - : null, + (hasEtwsInfo) + ? this._convertCbEtwsWarningType(etwsInfo.warningType) + : Ci.nsICellBroadcastService.GSM_ETWS_WARNING_INVALID, hasEtwsInfo ? etwsInfo.emergencyUserAlert : false, hasEtwsInfo ? etwsInfo.popup : false); }, diff --git a/dom/system/gonk/ril_consts.js b/dom/system/gonk/ril_consts.js index ce04406939e..7c61a28cc5a 100644 --- a/dom/system/gonk/ril_consts.js +++ b/dom/system/gonk/ril_consts.js @@ -1571,13 +1571,13 @@ this.PDU_PID_USIM_DATA_DOWNLOAD = 0x7F; this.PDU_DCS_MSG_CODING_7BITS_ALPHABET = 0x00; this.PDU_DCS_MSG_CODING_8BITS_ALPHABET = 0x04; this.PDU_DCS_MSG_CODING_16BITS_ALPHABET = 0x08; -this.PDU_DCS_MSG_CLASS_NORMAL = 0xFF; this.PDU_DCS_MSG_CLASS_0 = 0x00; this.PDU_DCS_MSG_CLASS_1 = 0x01; this.PDU_DCS_MSG_CLASS_2 = 0x02; this.PDU_DCS_MSG_CLASS_3 = 0x03; this.PDU_DCS_MSG_CLASS_USER_1 = 0x04; this.PDU_DCS_MSG_CLASS_USER_2 = 0x05; +this.PDU_DCS_MSG_CLASS_NORMAL = 0x06; this.PDU_DCS_CODING_GROUP_BITS = 0xF0; this.PDU_DCS_MSG_CLASS_BITS = 0x03; this.PDU_DCS_MWI_ACTIVE_BITS = 0x08; @@ -1588,14 +1588,15 @@ this.PDU_DCS_MWI_TYPE_FAX = 0x01; this.PDU_DCS_MWI_TYPE_EMAIL = 0x02; this.PDU_DCS_MWI_TYPE_OTHER = 0x03; -this.GECKO_SMS_MESSAGE_CLASSES = {}; -GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL] = "normal"; +// Set as Array instead of Object for reversed-mapping with Array.indexOf(). +this.GECKO_SMS_MESSAGE_CLASSES = []; GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_0] = "class-0"; GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_1] = "class-1"; GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_2] = "class-2"; GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_3] = "class-3"; GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_USER_1] = "user-1"; GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_USER_2] = "user-2"; +GECKO_SMS_MESSAGE_CLASSES[PDU_DCS_MSG_CLASS_NORMAL] = "normal"; // Because service center timestamp omit the century. Yay. this.PDU_TIMESTAMP_YEAR_OFFSET = 2000; diff --git a/dom/webidl/MozCellBroadcastMessage.webidl b/dom/webidl/MozCellBroadcastMessage.webidl index 3ca1b1fb424..3a0cf771688 100644 --- a/dom/webidl/MozCellBroadcastMessage.webidl +++ b/dom/webidl/MozCellBroadcastMessage.webidl @@ -6,8 +6,8 @@ enum CellBroadcastGsmGeographicalScope {"cell-immediate", "plmn", "location-area", "cell"}; -enum CellBroadcastMessageClass {"normal", "class-0", "class-1", "class-2", - "class-3", "user-1", "user-2"}; +enum CellBroadcastMessageClass {"class-0", "class-1", "class-2", + "class-3", "user-1", "user-2", "normal"}; enum CellBroadcastEtwsWarningType {"earthquake", "tsunami", "earthquake-tsunami", "test", "other"}; From 4c4fa7a34f84acb5dcfa67a07aadfe995611f5e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Ko=C5=82odziejski?= Date: Fri, 26 Sep 2014 09:37:00 +0200 Subject: [PATCH 29/54] Bug 1032324 - about:newtab can't switch search engine if icon/logo/image is not available. r=adw --- browser/base/content/newtab/newTab.css | 12 +- browser/base/content/newtab/search.js | 33 +- browser/base/content/test/newtab/browser.ini | 1 + .../test/newtab/browser_newtab_search.js | 281 +++++++++--------- browser/base/content/test/newtab/head.js | 24 +- .../test/newtab/searchEngine1x2xLogo.xml | 6 +- .../test/newtab/searchEngine1xLogo.xml | 3 +- .../test/newtab/searchEngine2xLogo.xml | 3 +- .../test/newtab/searchEngineFavicon.xml | 6 + browser/modules/ContentSearch.jsm | 2 + browser/modules/test/browser_ContentSearch.js | 88 ++++-- 11 files changed, 269 insertions(+), 190 deletions(-) create mode 100644 browser/base/content/test/newtab/searchEngineFavicon.xml diff --git a/browser/base/content/newtab/newTab.css b/browser/base/content/newtab/newTab.css index d652394d0a2..43f9162624d 100644 --- a/browser/base/content/newtab/newTab.css +++ b/browser/base/content/newtab/newTab.css @@ -331,13 +331,23 @@ input[type=button] { #newtab-search-logo { display: -moz-box; - width: 77px; /* 65 image width + 6 left "padding" + 6 right "padding" */ + width: 38px; height: 38px; /* 26 image height + 6 top "padding" + 6 bottom "padding" */ border: 1px solid transparent; -moz-margin-end: 8px; background-repeat: no-repeat; background-position: center; + background-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon); + background-size: 26px 26px; +} + +#newtab-search-logo[type="logo"] { background-size: 65px 26px; + width: 77px; /* 65 image width + 6 left "padding" + 6 right "padding" */ +} + +#newtab-search-logo[type="favicon"] { + background-size: 16px 16px; } #newtab-search-logo[hidden] { diff --git a/browser/base/content/newtab/search.js b/browser/base/content/newtab/search.js index 40598140269..643bbc52cea 100644 --- a/browser/base/content/newtab/search.js +++ b/browser/base/content/newtab/search.js @@ -160,6 +160,14 @@ let gSearch = { } }, + // Converts favicon array buffer into data URI of the right size and dpi. + _getFaviconURIFromBuffer: function (buffer) { + let blob = new Blob([buffer]); + let dpiSize = Math.round(16 * window.devicePixelRatio); + let sizeStr = dpiSize + "," + dpiSize; + return URL.createObjectURL(blob) + "#-moz-resolution=" + sizeStr; + }, + _makePanelEngine: function (panel, engine) { let box = document.createElementNS(XUL_NAMESPACE, "hbox"); box.className = "newtab-search-panel-engine"; @@ -173,10 +181,7 @@ let gSearch = { let image = document.createElementNS(XUL_NAMESPACE, "image"); if (engine.iconBuffer) { - let blob = new Blob([engine.iconBuffer]); - let size = Math.round(16 * window.devicePixelRatio); - let sizeStr = size + "," + size; - let uri = URL.createObjectURL(blob) + "#-moz-resolution=" + sizeStr; + let uri = this._getFaviconURIFromBuffer(engine.iconBuffer); image.setAttribute("src", uri); } box.appendChild(image); @@ -191,17 +196,27 @@ let gSearch = { _setCurrentEngine: function (engine) { this.currentEngineName = engine.name; - // Set the logo. - let logoBuf = window.devicePixelRatio == 2 ? engine.logo2xBuffer : + let type = ""; + let uri; + let logoBuf = window.devicePixelRatio >= 2 ? + engine.logo2xBuffer || engine.logoBuffer : engine.logoBuffer || engine.logo2xBuffer; if (logoBuf) { - this._nodes.logo.hidden = false; - let uri = URL.createObjectURL(new Blob([logoBuf])); + uri = URL.createObjectURL(new Blob([logoBuf])); + type = "logo"; + } + else if (engine.iconBuffer) { + uri = this._getFaviconURIFromBuffer(engine.iconBuffer); + type = "favicon"; + } + this._nodes.logo.setAttribute("type", type); + + if (uri) { this._nodes.logo.style.backgroundImage = "url(" + uri + ")"; this._nodes.text.placeholder = ""; } else { - this._nodes.logo.hidden = true; + this._nodes.logo.style.backgroundImage = ""; this._nodes.text.placeholder = engine.name; } diff --git a/browser/base/content/test/newtab/browser.ini b/browser/base/content/test/newtab/browser.ini index a32d269ba4f..c52dad9625e 100644 --- a/browser/base/content/test/newtab/browser.ini +++ b/browser/base/content/test/newtab/browser.ini @@ -35,6 +35,7 @@ support-files = [browser_newtab_search.js] support-files = searchEngineNoLogo.xml + searchEngineFavicon.xml searchEngine1xLogo.xml searchEngine2xLogo.xml searchEngine1x2xLogo.xml diff --git a/browser/base/content/test/newtab/browser_newtab_search.js b/browser/base/content/test/newtab/browser_newtab_search.js index edf3d55e350..d18987836f6 100644 --- a/browser/base/content/test/newtab/browser_newtab_search.js +++ b/browser/base/content/test/newtab/browser_newtab_search.js @@ -4,11 +4,45 @@ // See browser/components/search/test/browser_*_behavior.js for tests of actual // searches. -const ENGINE_NO_LOGO = "searchEngineNoLogo.xml"; -const ENGINE_1X_LOGO = "searchEngine1xLogo.xml"; -const ENGINE_2X_LOGO = "searchEngine2xLogo.xml"; -const ENGINE_1X_2X_LOGO = "searchEngine1x2xLogo.xml"; -const ENGINE_SUGGESTIONS = "searchSuggestionEngine.xml"; +Cu.import("resource://gre/modules/Task.jsm"); + +const ENGINE_NO_LOGO = { + name: "searchEngineNoLogo.xml", + numLogos: 0, +}; + +const ENGINE_FAVICON = { + name: "searchEngineFavicon.xml", + logoPrefix1x: "data:image/png;base64,AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsA", + numLogos: 1, +}; +ENGINE_FAVICON.logoPrefix2x = ENGINE_FAVICON.logoPrefix1x; + +const ENGINE_1X_LOGO = { + name: "searchEngine1xLogo.xml", + logoPrefix1x: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAIAAABn3KYmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADEw", + numLogos: 1, +}; +ENGINE_1X_LOGO.logoPrefix2x = ENGINE_1X_LOGO.logoPrefix1x; + +const ENGINE_2X_LOGO = { + name: "searchEngine2xLogo.xml", + logoPrefix2x: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAIAAADJ8nfCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADMU", + numLogos: 1, +}; +ENGINE_2X_LOGO.logoPrefix1x = ENGINE_2X_LOGO.logoPrefix2x; + +const ENGINE_1X_2X_LOGO = { + name: "searchEngine1x2xLogo.xml", + logoPrefix1x: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAIAAABn3KYmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADIG", + logoPrefix2x: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAIAAADJ8nfCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADMo", + numLogos: 2, +}; + +const ENGINE_SUGGESTIONS = { + name: "searchSuggestionEngine.xml", + numLogos: 0, +}; const SERVICE_EVENT_NAME = "ContentSearchService"; @@ -28,9 +62,14 @@ var gExpectedSearchEventQueue = []; var gNewEngines = []; function runTests() { + runTaskifiedTests().then(TestRunner.next, TestRunner.next); + yield; +} + +let runTaskifiedTests = Task.async(function* () { let oldCurrentEngine = Services.search.currentEngine; - yield addNewTabPageTab(); + yield addNewTabPageTabPromise(); // The tab is removed at the end of the test, so there's no need to remove // this listener at the end of the test. @@ -45,66 +84,40 @@ function runTests() { panel.setAttribute("animate", "false"); // Add the engine without any logos and switch to it. - let noLogoEngine = null; - yield promiseNewSearchEngine(ENGINE_NO_LOGO, 0).then(engine => { - noLogoEngine = engine; - TestRunner.next(); - }); - ok(!noLogoEngine.getIconURLBySize(...LOGO_1X_DPI_SIZE), - "Sanity check: engine should not have 1x logo"); - ok(!noLogoEngine.getIconURLBySize(...LOGO_2X_DPI_SIZE), - "Sanity check: engine should not have 2x logo"); + let noLogoEngine = yield promiseNewSearchEngine(ENGINE_NO_LOGO); Services.search.currentEngine = noLogoEngine; - yield promiseSearchEvents(["CurrentEngine"]).then(TestRunner.next); - yield checkCurrentEngine(ENGINE_NO_LOGO, false, false); + yield promiseSearchEvents(["CurrentEngine"]); + yield checkCurrentEngine(ENGINE_NO_LOGO); + + // Add the engine with favicon and switch to it. + let faviconEngine = yield promiseNewSearchEngine(ENGINE_FAVICON); + Services.search.currentEngine = faviconEngine; + yield promiseSearchEvents(["CurrentEngine"]); + yield checkCurrentEngine(ENGINE_FAVICON); // Add the engine with a 1x-DPI logo and switch to it. - let logo1xEngine = null; - yield promiseNewSearchEngine(ENGINE_1X_LOGO, 1).then(engine => { - logo1xEngine = engine; - TestRunner.next(); - }); - ok(!!logo1xEngine.getIconURLBySize(...LOGO_1X_DPI_SIZE), - "Sanity check: engine should have 1x logo"); - ok(!logo1xEngine.getIconURLBySize(...LOGO_2X_DPI_SIZE), - "Sanity check: engine should not have 2x logo"); + let logo1xEngine = yield promiseNewSearchEngine(ENGINE_1X_LOGO); Services.search.currentEngine = logo1xEngine; - yield promiseSearchEvents(["CurrentEngine"]).then(TestRunner.next); - yield checkCurrentEngine(ENGINE_1X_LOGO, true, false); + yield promiseSearchEvents(["CurrentEngine"]); + yield checkCurrentEngine(ENGINE_1X_LOGO); // Add the engine with a 2x-DPI logo and switch to it. - let logo2xEngine = null; - yield promiseNewSearchEngine(ENGINE_2X_LOGO, 1).then(engine => { - logo2xEngine = engine; - TestRunner.next(); - }); - ok(!logo2xEngine.getIconURLBySize(...LOGO_1X_DPI_SIZE), - "Sanity check: engine should not have 1x logo"); - ok(!!logo2xEngine.getIconURLBySize(...LOGO_2X_DPI_SIZE), - "Sanity check: engine should have 2x logo"); + let logo2xEngine = yield promiseNewSearchEngine(ENGINE_2X_LOGO); Services.search.currentEngine = logo2xEngine; - yield promiseSearchEvents(["CurrentEngine"]).then(TestRunner.next); - yield checkCurrentEngine(ENGINE_2X_LOGO, false, true); + yield promiseSearchEvents(["CurrentEngine"]); + yield checkCurrentEngine(ENGINE_2X_LOGO); // Add the engine with 1x- and 2x-DPI logos and switch to it. - let logo1x2xEngine = null; - yield promiseNewSearchEngine(ENGINE_1X_2X_LOGO, 2).then(engine => { - logo1x2xEngine = engine; - TestRunner.next(); - }); - ok(!!logo1x2xEngine.getIconURLBySize(...LOGO_1X_DPI_SIZE), - "Sanity check: engine should have 1x logo"); - ok(!!logo1x2xEngine.getIconURLBySize(...LOGO_2X_DPI_SIZE), - "Sanity check: engine should have 2x logo"); + let logo1x2xEngine = yield promiseNewSearchEngine(ENGINE_1X_2X_LOGO); Services.search.currentEngine = logo1x2xEngine; - yield promiseSearchEvents(["CurrentEngine"]).then(TestRunner.next); - yield checkCurrentEngine(ENGINE_1X_2X_LOGO, true, true); + yield promiseSearchEvents(["CurrentEngine"]); + yield checkCurrentEngine(ENGINE_1X_2X_LOGO); // Click the logo to open the search panel. yield Promise.all([ promisePanelShown(panel), promiseClick(logoImg()), - ]).then(TestRunner.next); + ]); // In the search panel, click the no-logo engine. It should become the // current engine. @@ -119,20 +132,20 @@ function runTests() { yield Promise.all([ promiseSearchEvents(["CurrentEngine"]), promiseClick(noLogoBox), - ]).then(TestRunner.next); + ]); - yield checkCurrentEngine(ENGINE_NO_LOGO, false, false); + yield checkCurrentEngine(ENGINE_NO_LOGO); // Switch back to the 1x-and-2x logo engine. Services.search.currentEngine = logo1x2xEngine; - yield promiseSearchEvents(["CurrentEngine"]).then(TestRunner.next); - yield checkCurrentEngine(ENGINE_1X_2X_LOGO, true, true); + yield promiseSearchEvents(["CurrentEngine"]); + yield checkCurrentEngine(ENGINE_1X_2X_LOGO); // Open the panel again. yield Promise.all([ promisePanelShown(panel), promiseClick(logoImg()), - ]).then(TestRunner.next); + ]); // In the search panel, click the Manage Engines box. let manageBox = $("manage"); @@ -140,17 +153,13 @@ function runTests() { yield Promise.all([ promiseManagerOpen(), promiseClick(manageBox), - ]).then(TestRunner.next); + ]); // Add the engine that provides search suggestions and switch to it. - let suggestionEngine = null; - yield promiseNewSearchEngine(ENGINE_SUGGESTIONS, 0).then(engine => { - suggestionEngine = engine; - TestRunner.next(); - }); + let suggestionEngine = yield promiseNewSearchEngine(ENGINE_SUGGESTIONS); Services.search.currentEngine = suggestionEngine; - yield promiseSearchEvents(["CurrentEngine"]).then(TestRunner.next); - yield checkCurrentEngine(ENGINE_SUGGESTIONS, false, false); + yield promiseSearchEvents(["CurrentEngine"]); + yield checkCurrentEngine(ENGINE_SUGGESTIONS); // Avoid intermittent failures. gSearch()._suggestionController.remoteTimeout = 5000; @@ -165,21 +174,22 @@ function runTests() { // Wait for the search suggestions to become visible and for the Suggestions // message. + let suggestionsUnhiddenDefer = Promise.defer(); let table = getContentDocument().getElementById("searchSuggestionTable"); info("Waiting for suggestions table to open"); let observer = new MutationObserver(() => { if (input.getAttribute("aria-expanded") == "true") { observer.disconnect(); ok(!table.hidden, "Search suggestion table unhidden"); - TestRunner.next(); + suggestionsUnhiddenDefer.resolve(); } }); observer.observe(input, { attributes: true, attributeFilter: ["aria-expanded"], }); - yield undefined; - yield suggestionsPromise.then(TestRunner.next); + yield suggestionsUnhiddenDefer.promise; + yield suggestionsPromise; // Empty the search input, causing the suggestions to be hidden. EventUtils.synthesizeKey("a", { accelKey: true }); @@ -190,12 +200,12 @@ function runTests() { CustomizableUI.removeWidgetFromArea("search-container"); // Focus a different element than the search input from the page. let btn = getContentDocument().getElementById("newtab-customize-button"); - yield promiseClick(btn).then(TestRunner.next); + yield promiseClick(btn); isnot(input, getContentDocument().activeElement, "Search input should not be focused"); // Test that Ctrl/Cmd + K will focus the input field from the page. EventUtils.synthesizeKey("k", { accelKey: true }); - yield promiseSearchEvents(["FocusInput"]).then(TestRunner.next); + yield promiseSearchEvents(["FocusInput"]); is(input, getContentDocument().activeElement, "Search input should be focused"); // Reset changes made to toolbar CustomizableUI.reset(); @@ -207,13 +217,13 @@ function runTests() { // Test that Ctrl/Cmd + K will focus the search bar from a new about:home page if // the newtab is disabled from `NewTabUtils.allPages.enabled`. - yield addNewTabPageTab(); + yield addNewTabPageTabPromise(); // Remove the search bar from toolbar CustomizableUI.removeWidgetFromArea("search-container"); NewTabUtils.allPages.enabled = false; EventUtils.synthesizeKey("k", { accelKey: true }); let waitEvent = "AboutHomeLoadSnippetsCompleted"; - yield promiseTabLoadEvent(gWindow.gBrowser.selectedTab, "about:home", waitEvent).then(TestRunner.next); + yield promiseTabLoadEvent(gWindow.gBrowser.selectedTab, "about:home", waitEvent); is(getContentDocument().documentURI.toLowerCase(), "about:home", "New tab's uri should be about:home"); let searchInput = getContentDocument().getElementById("searchText"); @@ -225,38 +235,29 @@ function runTests() { // Done. Revert the current engine and remove the new engines. Services.search.currentEngine = oldCurrentEngine; - yield promiseSearchEvents(["CurrentEngine"]).then(TestRunner.next); + yield promiseSearchEvents(["CurrentEngine"]); let events = []; for (let engine of gNewEngines) { Services.search.removeEngine(engine); events.push("CurrentState"); } - yield promiseSearchEvents(events).then(TestRunner.next); -} + yield promiseSearchEvents(events); +}); function searchEventListener(event) { info("Got search event " + event.detail.type); - let passed = false; let nonempty = gExpectedSearchEventQueue.length > 0; ok(nonempty, "Expected search event queue should be nonempty"); if (nonempty) { let { type, deferred } = gExpectedSearchEventQueue.shift(); is(event.detail.type, type, "Got expected search event " + type); if (event.detail.type == type) { - passed = true; - // Let gSearch respond to the event before continuing. - executeSoon(() => deferred.resolve()); + deferred.resolve(); + } else { + deferred.reject(); } } - if (!passed) { - info("Didn't get expected event, stopping the test"); - getContentWindow().removeEventListener(SERVICE_EVENT_NAME, - searchEventListener); - // Set next() to a no-op so the test really does stop. - TestRunner.next = function () {}; - TestRunner.finish(); - } } function $(idSuffix) { @@ -270,7 +271,7 @@ function promiseSearchEvents(events) { return Promise.all(events.map(e => e.deferred.promise)); } -function promiseNewSearchEngine(basename, numLogos) { +function promiseNewSearchEngine({name: basename, numLogos}) { info("Waiting for engine to be added: " + basename); // Wait for the search events triggered by adding the new engine. @@ -297,19 +298,40 @@ function promiseNewSearchEngine(basename, numLogos) { }, }); - // Make a new promise that wraps the previous promises. The only point of - // this is to pass the new engine to the yielder via deferred.resolve(), - // which is a little nicer than passing an array whose first element is the - // new engine. - let deferred = Promise.defer(); - Promise.all([addDeferred.promise, eventPromise]).then(values => { - let newEngine = values[0]; - deferred.resolve(newEngine); - }, () => deferred.reject()); - return deferred.promise; + return Promise.all([addDeferred.promise, eventPromise]).then(([newEngine, _]) => { + return newEngine; + }); } -function checkCurrentEngine(basename, has1xLogo, has2xLogo) { +function objectURLToBlob(url) { + return new Promise(function (resolve, reject) { + let xhr = new XMLHttpRequest(); + xhr.open("get", url, true); + xhr.responseType = "blob"; + xhr.overrideMimeType("image/png"); + xhr.onload = function(e) { + if (this.status == 200) { + return resolve(this.response); + } + reject("Failed to get logo, xhr returned status: " + this.status); + }; + xhr.onerror = reject; + xhr.send(); + }); +} + +function blobToBase64(blob) { + return new Promise(function (resolve, reject) { + var reader = new FileReader(); + reader.onload = function() { + resolve(reader.result); + } + reader.onerror = reject; + reader.readAsDataURL(blob); + }); +} + +let checkCurrentEngine = Task.async(function* ({name: basename, logoPrefix1x, logoPrefix2x}) { let engine = Services.search.currentEngine; ok(engine.name.contains(basename), "Sanity check: current engine: engine.name=" + engine.name + @@ -319,41 +341,23 @@ function checkCurrentEngine(basename, has1xLogo, has2xLogo) { is(gSearch().currentEngineName, engine.name, "currentEngineName: " + engine.name); - // search bar logo - let logoURI = null; - if (window.devicePixelRatio == 2) { - if (has2xLogo) { - logoURI = engine.getIconURLBySize(...LOGO_2X_DPI_SIZE); - ok(!!logoURI, "Sanity check: engine should have 2x logo"); - } - } - else { - if (has1xLogo) { - logoURI = engine.getIconURLBySize(...LOGO_1X_DPI_SIZE); - ok(!!logoURI, "Sanity check: engine should have 1x logo"); - } - else if (has2xLogo) { - logoURI = engine.getIconURLBySize(...LOGO_2X_DPI_SIZE); - ok(!!logoURI, "Sanity check: engine should have 2x logo"); - } - } + let expectedLogoPrefix = window.devicePixelRatio >= 2 ? logoPrefix2x : logoPrefix1x; + + // Check that the right logo is set. let logo = logoImg(); - is(logo.hidden, !logoURI, - "Logo should be visible iff engine has a logo: " + engine.name); - if (logoURI) { - // The URLs of blobs created with the same ArrayBuffer are different, so - // just check that the URI is a blob URI. - ok(/^url\("blob:/.test(logo.style.backgroundImage), "Logo URI"); //" - } + if (expectedLogoPrefix) { + let objectURL = logo.style.backgroundImage.match(/^url\("([^"]*)"\)$/)[1]; + ok(objectURL, "ObjectURL should be there."); - if (logo.hidden) { - executeSoon(TestRunner.next); - return; - } + let blob = yield objectURLToBlob(objectURL); + let base64 = yield blobToBase64(blob); + + ok(base64.startsWith(expectedLogoPrefix), "Checking image prefix."); + + let panel = searchPanel(); + panel.openPopup(logo); + yield promisePanelShown(panel); - // "selected" attributes of engines in the panel - let panel = searchPanel(); - promisePanelShown(panel).then(() => { panel.hidePopup(); for (let engineBox of panel.childNodes) { let engineName = engineBox.getAttribute("engine"); @@ -368,10 +372,11 @@ function checkCurrentEngine(basename, has1xLogo, has2xLogo) { "non-selected engine: " + engineName); } } - TestRunner.next(); - }); - panel.openPopup(logo); -} + } + else { + is(logo.style.backgroundImage, "", "backgroundImage should be empty"); + } +}); function promisePanelShown(panel) { let deferred = Promise.defer(); @@ -379,7 +384,7 @@ function promisePanelShown(panel) { panel.addEventListener("popupshown", function onEvent() { panel.removeEventListener("popupshown", onEvent); is(panel.state, "open", "Panel state"); - executeSoon(() => deferred.resolve()); + deferred.resolve(); }); return deferred.promise; } @@ -410,10 +415,8 @@ function promiseManagerOpen() { is(subj.opener, gWindow, "Search engine manager opener should be the chrome browser " + "window containing the newtab page"); - executeSoon(() => { - subj.close(); - deferred.resolve(); - }); + subj.close(); + deferred.resolve(); } }); } diff --git a/browser/base/content/test/newtab/head.js b/browser/base/content/test/newtab/head.js index 2b4bdb4e647..bb0f7ae6ace 100644 --- a/browser/base/content/test/newtab/head.js +++ b/browser/base/content/test/newtab/head.js @@ -327,6 +327,12 @@ function restore() { * Creates a new tab containing 'about:newtab'. */ function addNewTabPageTab() { + addNewTabPageTabPromise().then(TestRunner.next); +} + +function addNewTabPageTabPromise() { + let deferred = Promise.defer(); + let tab = gWindow.gBrowser.selectedTab = gWindow.gBrowser.addTab("about:newtab"); let browser = tab.linkedBrowser; @@ -334,20 +340,17 @@ function addNewTabPageTab() { if (NewTabUtils.allPages.enabled) { // Continue when the link cache has been populated. NewTabUtils.links.populateCache(function () { - whenSearchInitDone(); + deferred.resolve(whenSearchInitDone()); }); } else { - // It's important that we call next() asynchronously. - // 'yield addNewTabPageTab()' would fail if next() is called - // synchronously because the iterator is already executing. - executeSoon(TestRunner.next); + deferred.resolve(); } } // The new tab page might have been preloaded in the background. if (browser.contentDocument.readyState == "complete") { whenNewTabLoaded(); - return; + return deferred.promise; } // Wait for the new tab page to be loaded. @@ -355,6 +358,8 @@ function addNewTabPageTab() { browser.removeEventListener("load", onLoad, true); whenNewTabLoaded(); }, true); + + return deferred.promise; } /** @@ -637,15 +642,16 @@ function whenPagesUpdated(aCallback, aOnlyIfHidden=false) { * Waits for the response to the page's initial search state request. */ function whenSearchInitDone() { + let deferred = Promise.defer(); if (getContentWindow().gSearch._initialStateReceived) { - executeSoon(TestRunner.next); - return; + return Promise.resolve(); } let eventName = "ContentSearchService"; getContentWindow().addEventListener(eventName, function onEvent(event) { if (event.detail.type == "State") { getContentWindow().removeEventListener(eventName, onEvent); - TestRunner.next(); + deferred.resolve(); } }); + return deferred.promise; } diff --git a/browser/base/content/test/newtab/searchEngine1x2xLogo.xml b/browser/base/content/test/newtab/searchEngine1x2xLogo.xml index 4413cc5ac72..c8b6749b35e 100644 --- a/browser/base/content/test/newtab/searchEngine1x2xLogo.xml +++ b/browser/base/content/test/newtab/searchEngine1x2xLogo.xml @@ -2,6 +2,8 @@ browser_newtab_search searchEngine1x2xLogo.xml -data:image/png;base64,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 -data:image/png;base64,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 + +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAIAAABn3KYmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADIGr0+8uwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAL0lEQVRYw+3PAREAAAQEsKd/Z3I4W4NVJtd14uDg4ODg4ODg4ODg4ODg4ODg8Pqw7M0BM+n9I0oAAAAASUVORK5CYII= + +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAIAAADJ8nfCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADMoaoKANQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAYklEQVR42u3RQQ0AAAjEMMC/58MECZ9OwtqVlL4bCzAIAwZhwCAMGIQBgzBgEAYMwoBBGDAIAwZhwCAMGIQBgzBgEAYMwoBBGIQBgzBgEAYMwoBBGDAIAwZhwCAMGIQBg+5ar7sCZiri9VUAAAAASUVORK5CYII= diff --git a/browser/base/content/test/newtab/searchEngine1xLogo.xml b/browser/base/content/test/newtab/searchEngine1xLogo.xml index 73ff048c4a4..19ac03f48b4 100644 --- a/browser/base/content/test/newtab/searchEngine1xLogo.xml +++ b/browser/base/content/test/newtab/searchEngine1xLogo.xml @@ -2,5 +2,6 @@ browser_newtab_search searchEngine1xLogo.xml -data:image/png;base64,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 + +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAIAAABn3KYmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADEwS9h64QAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAL0lEQVRYw+3PAREAAAQEsKd/Z3I4W4PV5LyOg4ODg4ODg4ODg4ODg4ODg4PD78MC7cwBM02qquMAAAAASUVORK5CYII= diff --git a/browser/base/content/test/newtab/searchEngine2xLogo.xml b/browser/base/content/test/newtab/searchEngine2xLogo.xml index e4cae7b4a1c..941bf040dcf 100644 --- a/browser/base/content/test/newtab/searchEngine2xLogo.xml +++ b/browser/base/content/test/newtab/searchEngine2xLogo.xml @@ -2,5 +2,6 @@ browser_newtab_search searchEngine2xLogo.xml -data:image/png;base64,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 + +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAIAAADJ8nfCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gkTADMURe38sgAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAYklEQVR42u3RQQ0AAAjEsAP/nsEECZ9OwlrJRN+1BRiEAYMwYBAGDMKAQRgwCAMGYcAgDBiEAYMwYBAGDMKAQRgwCAMGYcAgDMKAQRgwCAMGYcAgDBiEAYMwYBAGDMKAQXctkIQBZ/1YP3YAAAAASUVORK5CYII= diff --git a/browser/base/content/test/newtab/searchEngineFavicon.xml b/browser/base/content/test/newtab/searchEngineFavicon.xml new file mode 100644 index 00000000000..6f2a970f569 --- /dev/null +++ b/browser/base/content/test/newtab/searchEngineFavicon.xml @@ -0,0 +1,6 @@ + + +browser_newtab_search searchEngineFavicon.xml + +data:application/ico;base64,AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAATCwAAEwsAAAAAAAAAAAAA/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAABAAAEwsAABMLAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + diff --git a/browser/modules/ContentSearch.jsm b/browser/modules/ContentSearch.jsm index b14a34414b4..95554789141 100644 --- a/browser/modules/ContentSearch.jsm +++ b/browser/modules/ContentSearch.jsm @@ -386,10 +386,12 @@ this.ContentSearch = { _currentEngineObj: Task.async(function* () { let engine = Services.search.currentEngine; + let favicon = engine.getIconURLBySize(16, 16); let uri1x = engine.getIconURLBySize(65, 26); let uri2x = engine.getIconURLBySize(130, 52); let obj = { name: engine.name, + iconBuffer: yield this._arrayBufferFromDataURI(favicon), logoBuffer: yield this._arrayBufferFromDataURI(uri1x), logo2xBuffer: yield this._arrayBufferFromDataURI(uri2x), }; diff --git a/browser/modules/test/browser_ContentSearch.js b/browser/modules/test/browser_ContentSearch.js index eea890af130..49f017263a5 100644 --- a/browser/modules/test/browser_ContentSearch.js +++ b/browser/modules/test/browser_ContentSearch.js @@ -258,9 +258,43 @@ add_task(function* GetSuggestions_AddFormHistoryEntry_RemoveFormHistoryEntry() { yield waitForTestMsg("CurrentState"); }); +function buffersEqual(actualArrayBuffer, expectedArrayBuffer) { + let expectedView = new Int8Array(expectedArrayBuffer); + let actualView = new Int8Array(actualArrayBuffer); + for (let i = 0; i < expectedView.length; i++) { + if (actualView[i] != expectedView[i]) { + return false; + } + } + return true; +} + +function arrayBufferEqual(actualArrayBuffer, expectedArrayBuffer) { + ok(actualArrayBuffer instanceof ArrayBuffer, "Actual value is ArrayBuffer."); + ok(expectedArrayBuffer instanceof ArrayBuffer, "Expected value is ArrayBuffer."); + Assert.equal(actualArrayBuffer.byteLength, expectedArrayBuffer.byteLength, + "Array buffers have the same length."); + ok(buffersEqual(actualArrayBuffer, expectedArrayBuffer), "Buffers are equal."); +} + +function checkArrayBuffers(actual, expected) { + if (actual instanceof ArrayBuffer) { + arrayBufferEqual(actual, expected); + } + if (typeof actual == "object") { + for (let i in actual) { + checkArrayBuffers(actual[i], expected[i]); + } + } +} function checkMsg(actualMsg, expectedMsgData) { + let actualMsgData = actualMsg.data; SimpleTest.isDeeply(actualMsg.data, expectedMsgData, "Checking message"); + + // Engines contain ArrayBuffers which we have to compare byte by byte and + // not as Objects (like SimpleTest.isDeeply does). + checkArrayBuffers(actualMsgData, expectedMsgData); } function waitForMsg(name, type) { @@ -330,35 +364,33 @@ function addTab() { return deferred.promise; } -function currentStateObj() { - return Task.spawn(function* () { - let state = { - engines: [], - currentEngine: yield currentEngineObj(), - }; - for (let engine of Services.search.getVisibleEngines()) { - let uri = engine.getIconURLBySize(16, 16); - state.engines.push({ - name: engine.name, - iconBuffer: yield arrayBufferFromDataURI(uri), - }); - } - return state; - }.bind(this)); -} - -function currentEngineObj() { - return Task.spawn(function* () { - let engine = Services.search.currentEngine; - let uri1x = engine.getIconURLBySize(65, 26); - let uri2x = engine.getIconURLBySize(130, 52); - return { +let currentStateObj = Task.async(function* () { + let state = { + engines: [], + currentEngine: yield currentEngineObj(), + }; + for (let engine of Services.search.getVisibleEngines()) { + let uri = engine.getIconURLBySize(16, 16); + state.engines.push({ name: engine.name, - logoBuffer: yield arrayBufferFromDataURI(uri1x), - logo2xBuffer: yield arrayBufferFromDataURI(uri2x), - }; - }.bind(this)); -} + iconBuffer: yield arrayBufferFromDataURI(uri), + }); + } + return state; +}); + +let currentEngineObj = Task.async(function* () { + let engine = Services.search.currentEngine; + let uri1x = engine.getIconURLBySize(65, 26); + let uri2x = engine.getIconURLBySize(130, 52); + let uriFavicon = engine.getIconURLBySize(16, 16); + return { + name: engine.name, + logoBuffer: yield arrayBufferFromDataURI(uri1x), + logo2xBuffer: yield arrayBufferFromDataURI(uri2x), + iconBuffer: yield arrayBufferFromDataURI(uriFavicon), + }; +}); function arrayBufferFromDataURI(uri) { if (!uri) { From ed7c3723b17c1e20ddd4b08c30dc1ad80c76efba Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 26 Sep 2014 09:35:00 +0200 Subject: [PATCH 30/54] Bug 1073522 - Better error when front has no actor. r=dcamp --- toolkit/devtools/server/protocol.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/toolkit/devtools/server/protocol.js b/toolkit/devtools/server/protocol.js index 4b7631f6900..b9e9f9b7f66 100644 --- a/toolkit/devtools/server/protocol.js +++ b/toolkit/devtools/server/protocol.js @@ -1061,6 +1061,14 @@ let Front = Class({ this.actorID = null; }, + manage: function(front) { + if (!front.actorID) { + throw new Error("Can't manage front without an actor ID.\n" + + "Ensure server supports " + front.typeName + "."); + } + return Pool.prototype.manage.call(this, front); + }, + /** * @returns a promise that will resolve to the actorID this front * represents. From b3b8fce5820af7a9356340d1c7db36e1a270c01e Mon Sep 17 00:00:00 2001 From: Alex Bardas Date: Sat, 27 Sep 2014 16:58:00 +0200 Subject: [PATCH 31/54] Bug 1071164 - Display magnifying glass for search results in awesomebar (follow-up of bug 1040725). r=Unfocused --- browser/base/content/test/general/browser.ini | 1 + .../test/general/browser_search_favicon.js | 121 ++++++++++++++++++ toolkit/content/widgets/autocomplete.xml | 7 +- 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 browser/base/content/test/general/browser_search_favicon.js diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index ad9cdc511e9..778a68f1322 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -109,6 +109,7 @@ skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliabil skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux [browser_addKeywordSearch.js] skip-if = e10s +[browser_search_favicon.js] [browser_alltabslistener.js] skip-if = os == "linux" || e10s # Linux: Intermittent failures, bug 951680; e10s: Bug ?????? - notifications don't work correctly. [browser_autocomplete_a11y_label.js] diff --git a/browser/base/content/test/general/browser_search_favicon.js b/browser/base/content/test/general/browser_search_favicon.js new file mode 100644 index 00000000000..ebaacb92d41 --- /dev/null +++ b/browser/base/content/test/general/browser_search_favicon.js @@ -0,0 +1,121 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +let gOriginalEngine; +let gEngine; +let gUnifiedCompletePref = "browser.urlbar.unifiedcomplete"; + +/** + * Asynchronously adds visits to a page. + * + * @param aPlaceInfo + * Can be an nsIURI, in such a case a single LINK visit will be added. + * Otherwise can be an object describing the visit to add, or an array + * of these objects: + * { uri: nsIURI of the page, + * transition: one of the TRANSITION_* from nsINavHistoryService, + * [optional] title: title of the page, + * [optional] visitDate: visit date in microseconds from the epoch + * [optional] referrer: nsIURI of the referrer for this visit + * } + * + * @return {Promise} + * @resolves When all visits have been added successfully. + * @rejects JavaScript exception. + */ +function promiseAddVisits(aPlaceInfo) { + return new Promise((resolve, reject) => { + let places = []; + if (aPlaceInfo instanceof Ci.nsIURI) { + places.push({ uri: aPlaceInfo }); + } + else if (Array.isArray(aPlaceInfo)) { + places = places.concat(aPlaceInfo); + } else { + places.push(aPlaceInfo) + } + + // Create mozIVisitInfo for each entry. + let now = Date.now(); + for (let i = 0, len = places.length; i < len; ++i) { + if (!places[i].title) { + places[i].title = "test visit for " + places[i].uri.spec; + } + places[i].visits = [{ + transitionType: places[i].transition === undefined ? Ci.nsINavHistoryService.TRANSITION_LINK + : places[i].transition, + visitDate: places[i].visitDate || (now++) * 1000, + referrerURI: places[i].referrer + }]; + } + + PlacesUtils.asyncHistory.updatePlaces( + places, + { + handleError: function AAV_handleError(aResultCode, aPlaceInfo) { + let ex = new Components.Exception("Unexpected error in adding visits.", + aResultCode); + reject(ex); + }, + handleResult: function () {}, + handleCompletion: function UP_handleCompletion() { + resolve(); + } + } + ); + }); +} + +function* promiseAutocompleteResultPopup(inputText) { + gURLBar.focus(); + gURLBar.value = inputText.slice(0, -1); + EventUtils.synthesizeKey(inputText.slice(-1) , {}); + yield promiseSearchComplete(); + + return gURLBar.popup.richlistbox.children; +} + +registerCleanupFunction(() => { + Services.prefs.clearUserPref(gUnifiedCompletePref); + Services.search.currentEngine = gOriginalEngine; + Services.search.removeEngine(gEngine); + return promiseClearHistory(); +}); + +add_task(function*() { + Services.prefs.setBoolPref(gUnifiedCompletePref, true); +}); + +add_task(function*() { + + Services.search.addEngineWithDetails("SearchEngine", "", "", "", + "GET", "http://s.example.com/search"); + gEngine = Services.search.getEngineByName("SearchEngine"); + gEngine.addParam("q", "{searchTerms}", null); + gOriginalEngine = Services.search.currentEngine; + Services.search.currentEngine = gEngine; + + let uri = NetUtil.newURI("http://s.example.com/search?q=foo&client=1"); + yield promiseAddVisits({ uri: uri, title: "Foo - SearchEngine Search" }); + + // The first autocomplete result has the action searchengine, while + // the second result is the "search favicon" element. + let result = yield promiseAutocompleteResultPopup("foo"); + result = result[1]; + + isnot(result, null, "Expect a search result"); + is(result.getAttribute("type"), "search favicon", "Expect correct `type` attribute"); + + is_element_visible(result._title, "Title element should be visible"); + is_element_visible(result._extraBox, "Extra box element should be visible"); + + is(result._extraBox.pack, "start", "Extra box element should start after the title"); + let iconElem = result._extraBox.nextSibling; + is_element_visible(iconElem, + "The element containing the magnifying glass icon should be visible"); + ok(iconElem.classList.contains("ac-result-type-keyword"), + "That icon should have the same class use for `keyword` results"); + + is_element_visible(result._url, "URL element should be visible"); + is(result._url.textContent, "Search with SearchEngine"); +}); diff --git a/toolkit/content/widgets/autocomplete.xml b/toolkit/content/widgets/autocomplete.xml index ae3de4278fc..5dd03a2a093 100644 --- a/toolkit/content/widgets/autocomplete.xml +++ b/toolkit/content/widgets/autocomplete.xml @@ -1567,6 +1567,7 @@ extends="chrome://global/content/bindings/popup.xml#popup"> this._titleOverflowEllipsis.hidden = false; let types = new Set(type.split(/\s+/)); + let initialTypes = new Set(types); // If the type includes an action, set up the item appropriately. if (types.has("action")) { @@ -1655,7 +1656,8 @@ extends="chrome://global/content/bindings/popup.xml#popup"> type = "bookmark"; // keyword and favicon type results for search engines // have an extra magnifying glass icon after them - } else if (type == "keyword" || type == "search favicon") { + } else if (type == "keyword" || (initialTypes.has("search") && + initialTypes.has("favicon"))) { // Configure the extra box for keyword display this._extraBox.hidden = false; this._extraBox.childNodes[0].hidden = true; @@ -1680,6 +1682,9 @@ extends="chrome://global/content/bindings/popup.xml#popup"> // Don't emphasize keyword searches in the title or url this.setAttribute("text", ""); + } else { + // Don't show any description for non keyword types. + this._setUpDescription(this._extra, "", true); } // If the result has the type favicon and a known search provider, // customize it the same way as a keyword result. From a8ed4971b44650ced6ad987efd77a499c6d2c3f1 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Mon, 29 Sep 2014 02:21:49 -0700 Subject: [PATCH 32/54] Backed out changeset c9ef2c9434b5 (bug 1071164) --- browser/base/content/test/general/browser.ini | 1 - .../test/general/browser_search_favicon.js | 121 ------------------ toolkit/content/widgets/autocomplete.xml | 7 +- 3 files changed, 1 insertion(+), 128 deletions(-) delete mode 100644 browser/base/content/test/general/browser_search_favicon.js diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index 778a68f1322..ad9cdc511e9 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -109,7 +109,6 @@ skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliabil skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux [browser_addKeywordSearch.js] skip-if = e10s -[browser_search_favicon.js] [browser_alltabslistener.js] skip-if = os == "linux" || e10s # Linux: Intermittent failures, bug 951680; e10s: Bug ?????? - notifications don't work correctly. [browser_autocomplete_a11y_label.js] diff --git a/browser/base/content/test/general/browser_search_favicon.js b/browser/base/content/test/general/browser_search_favicon.js deleted file mode 100644 index ebaacb92d41..00000000000 --- a/browser/base/content/test/general/browser_search_favicon.js +++ /dev/null @@ -1,121 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -let gOriginalEngine; -let gEngine; -let gUnifiedCompletePref = "browser.urlbar.unifiedcomplete"; - -/** - * Asynchronously adds visits to a page. - * - * @param aPlaceInfo - * Can be an nsIURI, in such a case a single LINK visit will be added. - * Otherwise can be an object describing the visit to add, or an array - * of these objects: - * { uri: nsIURI of the page, - * transition: one of the TRANSITION_* from nsINavHistoryService, - * [optional] title: title of the page, - * [optional] visitDate: visit date in microseconds from the epoch - * [optional] referrer: nsIURI of the referrer for this visit - * } - * - * @return {Promise} - * @resolves When all visits have been added successfully. - * @rejects JavaScript exception. - */ -function promiseAddVisits(aPlaceInfo) { - return new Promise((resolve, reject) => { - let places = []; - if (aPlaceInfo instanceof Ci.nsIURI) { - places.push({ uri: aPlaceInfo }); - } - else if (Array.isArray(aPlaceInfo)) { - places = places.concat(aPlaceInfo); - } else { - places.push(aPlaceInfo) - } - - // Create mozIVisitInfo for each entry. - let now = Date.now(); - for (let i = 0, len = places.length; i < len; ++i) { - if (!places[i].title) { - places[i].title = "test visit for " + places[i].uri.spec; - } - places[i].visits = [{ - transitionType: places[i].transition === undefined ? Ci.nsINavHistoryService.TRANSITION_LINK - : places[i].transition, - visitDate: places[i].visitDate || (now++) * 1000, - referrerURI: places[i].referrer - }]; - } - - PlacesUtils.asyncHistory.updatePlaces( - places, - { - handleError: function AAV_handleError(aResultCode, aPlaceInfo) { - let ex = new Components.Exception("Unexpected error in adding visits.", - aResultCode); - reject(ex); - }, - handleResult: function () {}, - handleCompletion: function UP_handleCompletion() { - resolve(); - } - } - ); - }); -} - -function* promiseAutocompleteResultPopup(inputText) { - gURLBar.focus(); - gURLBar.value = inputText.slice(0, -1); - EventUtils.synthesizeKey(inputText.slice(-1) , {}); - yield promiseSearchComplete(); - - return gURLBar.popup.richlistbox.children; -} - -registerCleanupFunction(() => { - Services.prefs.clearUserPref(gUnifiedCompletePref); - Services.search.currentEngine = gOriginalEngine; - Services.search.removeEngine(gEngine); - return promiseClearHistory(); -}); - -add_task(function*() { - Services.prefs.setBoolPref(gUnifiedCompletePref, true); -}); - -add_task(function*() { - - Services.search.addEngineWithDetails("SearchEngine", "", "", "", - "GET", "http://s.example.com/search"); - gEngine = Services.search.getEngineByName("SearchEngine"); - gEngine.addParam("q", "{searchTerms}", null); - gOriginalEngine = Services.search.currentEngine; - Services.search.currentEngine = gEngine; - - let uri = NetUtil.newURI("http://s.example.com/search?q=foo&client=1"); - yield promiseAddVisits({ uri: uri, title: "Foo - SearchEngine Search" }); - - // The first autocomplete result has the action searchengine, while - // the second result is the "search favicon" element. - let result = yield promiseAutocompleteResultPopup("foo"); - result = result[1]; - - isnot(result, null, "Expect a search result"); - is(result.getAttribute("type"), "search favicon", "Expect correct `type` attribute"); - - is_element_visible(result._title, "Title element should be visible"); - is_element_visible(result._extraBox, "Extra box element should be visible"); - - is(result._extraBox.pack, "start", "Extra box element should start after the title"); - let iconElem = result._extraBox.nextSibling; - is_element_visible(iconElem, - "The element containing the magnifying glass icon should be visible"); - ok(iconElem.classList.contains("ac-result-type-keyword"), - "That icon should have the same class use for `keyword` results"); - - is_element_visible(result._url, "URL element should be visible"); - is(result._url.textContent, "Search with SearchEngine"); -}); diff --git a/toolkit/content/widgets/autocomplete.xml b/toolkit/content/widgets/autocomplete.xml index 5dd03a2a093..ae3de4278fc 100644 --- a/toolkit/content/widgets/autocomplete.xml +++ b/toolkit/content/widgets/autocomplete.xml @@ -1567,7 +1567,6 @@ extends="chrome://global/content/bindings/popup.xml#popup"> this._titleOverflowEllipsis.hidden = false; let types = new Set(type.split(/\s+/)); - let initialTypes = new Set(types); // If the type includes an action, set up the item appropriately. if (types.has("action")) { @@ -1656,8 +1655,7 @@ extends="chrome://global/content/bindings/popup.xml#popup"> type = "bookmark"; // keyword and favicon type results for search engines // have an extra magnifying glass icon after them - } else if (type == "keyword" || (initialTypes.has("search") && - initialTypes.has("favicon"))) { + } else if (type == "keyword" || type == "search favicon") { // Configure the extra box for keyword display this._extraBox.hidden = false; this._extraBox.childNodes[0].hidden = true; @@ -1682,9 +1680,6 @@ extends="chrome://global/content/bindings/popup.xml#popup"> // Don't emphasize keyword searches in the title or url this.setAttribute("text", ""); - } else { - // Don't show any description for non keyword types. - this._setUpDescription(this._extra, "", true); } // If the result has the type favicon and a known search provider, // customize it the same way as a keyword result. From 150dfea66ede739dd05145666dd4ef4488444787 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 25 Sep 2014 12:17:00 +0200 Subject: [PATCH 33/54] Bug 1073502 - Restore closed windows even when there are no open windows on startup r=yoric --- .../components/sessionstore/SessionStore.jsm | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/browser/components/sessionstore/SessionStore.jsm b/browser/components/sessionstore/SessionStore.jsm index 4d5069ecd65..9336b827c4c 100644 --- a/browser/components/sessionstore/SessionStore.jsm +++ b/browser/components/sessionstore/SessionStore.jsm @@ -2202,12 +2202,9 @@ let SessionStoreInternal = { if (aWindow && (!aWindow.__SSi || !this._windows[aWindow.__SSi])) this.onLoad(aWindow); + let root; try { - var root = typeof aState == "string" ? JSON.parse(aState) : aState; - if (!root.windows[0]) { - this._sendRestoreCompletedNotifications(); - return; // nothing to restore - } + root = (typeof aState == "string") ? JSON.parse(aState) : aState; } catch (ex) { // invalid state object - don't restore anything debug(ex); @@ -2215,15 +2212,23 @@ let SessionStoreInternal = { return; } + // Restore closed windows if any. + if (root._closedWindows) { + this._closedWindows = root._closedWindows; + } + + // We're done here if there are no windows. + if (!root.windows || !root.windows.length) { + this._sendRestoreCompletedNotifications(); + return; + } + TelemetryStopwatch.start("FX_SESSION_RESTORE_RESTORE_WINDOW_MS"); // We're not returning from this before we end up calling restoreTabs // for this window, so make sure we send the SSWindowStateBusy event. this._setWindowStateBusy(aWindow); - if (root._closedWindows) - this._closedWindows = root._closedWindows; - var winData; if (!root.selectedWindow || root.selectedWindow > root.windows.length) { root.selectedWindow = 0; From 931abd5311369640988f30ad759ffe0a2c3aa1db Mon Sep 17 00:00:00 2001 From: Alex Bardas Date: Sat, 27 Sep 2014 16:58:00 +0200 Subject: [PATCH 34/54] Bug 1071164 - Display magnifying glass for search results in awesomebar (follow-up of bug 1040725). r=Unfocused --- browser/base/content/test/general/browser.ini | 2 + .../test/general/browser_search_favicon.js | 121 ++++++++++++++++++ toolkit/content/widgets/autocomplete.xml | 7 +- 3 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 browser/base/content/test/general/browser_search_favicon.js diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index ad9cdc511e9..53eaa2e6d09 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -109,6 +109,8 @@ skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliabil skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux [browser_addKeywordSearch.js] skip-if = e10s +[browser_search_favicon.js] +skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux [browser_alltabslistener.js] skip-if = os == "linux" || e10s # Linux: Intermittent failures, bug 951680; e10s: Bug ?????? - notifications don't work correctly. [browser_autocomplete_a11y_label.js] diff --git a/browser/base/content/test/general/browser_search_favicon.js b/browser/base/content/test/general/browser_search_favicon.js new file mode 100644 index 00000000000..ebaacb92d41 --- /dev/null +++ b/browser/base/content/test/general/browser_search_favicon.js @@ -0,0 +1,121 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +let gOriginalEngine; +let gEngine; +let gUnifiedCompletePref = "browser.urlbar.unifiedcomplete"; + +/** + * Asynchronously adds visits to a page. + * + * @param aPlaceInfo + * Can be an nsIURI, in such a case a single LINK visit will be added. + * Otherwise can be an object describing the visit to add, or an array + * of these objects: + * { uri: nsIURI of the page, + * transition: one of the TRANSITION_* from nsINavHistoryService, + * [optional] title: title of the page, + * [optional] visitDate: visit date in microseconds from the epoch + * [optional] referrer: nsIURI of the referrer for this visit + * } + * + * @return {Promise} + * @resolves When all visits have been added successfully. + * @rejects JavaScript exception. + */ +function promiseAddVisits(aPlaceInfo) { + return new Promise((resolve, reject) => { + let places = []; + if (aPlaceInfo instanceof Ci.nsIURI) { + places.push({ uri: aPlaceInfo }); + } + else if (Array.isArray(aPlaceInfo)) { + places = places.concat(aPlaceInfo); + } else { + places.push(aPlaceInfo) + } + + // Create mozIVisitInfo for each entry. + let now = Date.now(); + for (let i = 0, len = places.length; i < len; ++i) { + if (!places[i].title) { + places[i].title = "test visit for " + places[i].uri.spec; + } + places[i].visits = [{ + transitionType: places[i].transition === undefined ? Ci.nsINavHistoryService.TRANSITION_LINK + : places[i].transition, + visitDate: places[i].visitDate || (now++) * 1000, + referrerURI: places[i].referrer + }]; + } + + PlacesUtils.asyncHistory.updatePlaces( + places, + { + handleError: function AAV_handleError(aResultCode, aPlaceInfo) { + let ex = new Components.Exception("Unexpected error in adding visits.", + aResultCode); + reject(ex); + }, + handleResult: function () {}, + handleCompletion: function UP_handleCompletion() { + resolve(); + } + } + ); + }); +} + +function* promiseAutocompleteResultPopup(inputText) { + gURLBar.focus(); + gURLBar.value = inputText.slice(0, -1); + EventUtils.synthesizeKey(inputText.slice(-1) , {}); + yield promiseSearchComplete(); + + return gURLBar.popup.richlistbox.children; +} + +registerCleanupFunction(() => { + Services.prefs.clearUserPref(gUnifiedCompletePref); + Services.search.currentEngine = gOriginalEngine; + Services.search.removeEngine(gEngine); + return promiseClearHistory(); +}); + +add_task(function*() { + Services.prefs.setBoolPref(gUnifiedCompletePref, true); +}); + +add_task(function*() { + + Services.search.addEngineWithDetails("SearchEngine", "", "", "", + "GET", "http://s.example.com/search"); + gEngine = Services.search.getEngineByName("SearchEngine"); + gEngine.addParam("q", "{searchTerms}", null); + gOriginalEngine = Services.search.currentEngine; + Services.search.currentEngine = gEngine; + + let uri = NetUtil.newURI("http://s.example.com/search?q=foo&client=1"); + yield promiseAddVisits({ uri: uri, title: "Foo - SearchEngine Search" }); + + // The first autocomplete result has the action searchengine, while + // the second result is the "search favicon" element. + let result = yield promiseAutocompleteResultPopup("foo"); + result = result[1]; + + isnot(result, null, "Expect a search result"); + is(result.getAttribute("type"), "search favicon", "Expect correct `type` attribute"); + + is_element_visible(result._title, "Title element should be visible"); + is_element_visible(result._extraBox, "Extra box element should be visible"); + + is(result._extraBox.pack, "start", "Extra box element should start after the title"); + let iconElem = result._extraBox.nextSibling; + is_element_visible(iconElem, + "The element containing the magnifying glass icon should be visible"); + ok(iconElem.classList.contains("ac-result-type-keyword"), + "That icon should have the same class use for `keyword` results"); + + is_element_visible(result._url, "URL element should be visible"); + is(result._url.textContent, "Search with SearchEngine"); +}); diff --git a/toolkit/content/widgets/autocomplete.xml b/toolkit/content/widgets/autocomplete.xml index ae3de4278fc..5dd03a2a093 100644 --- a/toolkit/content/widgets/autocomplete.xml +++ b/toolkit/content/widgets/autocomplete.xml @@ -1567,6 +1567,7 @@ extends="chrome://global/content/bindings/popup.xml#popup"> this._titleOverflowEllipsis.hidden = false; let types = new Set(type.split(/\s+/)); + let initialTypes = new Set(types); // If the type includes an action, set up the item appropriately. if (types.has("action")) { @@ -1655,7 +1656,8 @@ extends="chrome://global/content/bindings/popup.xml#popup"> type = "bookmark"; // keyword and favicon type results for search engines // have an extra magnifying glass icon after them - } else if (type == "keyword" || type == "search favicon") { + } else if (type == "keyword" || (initialTypes.has("search") && + initialTypes.has("favicon"))) { // Configure the extra box for keyword display this._extraBox.hidden = false; this._extraBox.childNodes[0].hidden = true; @@ -1680,6 +1682,9 @@ extends="chrome://global/content/bindings/popup.xml#popup"> // Don't emphasize keyword searches in the title or url this.setAttribute("text", ""); + } else { + // Don't show any description for non keyword types. + this._setUpDescription(this._extra, "", true); } // If the result has the type favicon and a known search provider, // customize it the same way as a keyword result. From 8fe7812caf3bfb6ede3719a34b44744c8af5f44a Mon Sep 17 00:00:00 2001 From: Blair McBride Date: Tue, 30 Sep 2014 01:49:52 +1300 Subject: [PATCH 35/54] Bug 1070778 - Selecting a moz-action: result then typing more can result in "Search X for moz-action:..." item. r=mak --HG-- extra : transplant_source : %2C%E3F%B4%B9%A9%3A%AD1s%1C%E3Y%C1S%DC%A1%99%DF%C2 --- browser/base/content/test/general/browser.ini | 2 + .../test/general/browser_bug1070778.js | 66 +++++++++++++++++++ browser/base/content/urlbarBindings.xml | 19 ++---- toolkit/content/widgets/autocomplete.xml | 5 -- 4 files changed, 72 insertions(+), 20 deletions(-) create mode 100644 browser/base/content/test/general/browser_bug1070778.js diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index 53eaa2e6d09..1f5b4f667eb 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -295,6 +295,8 @@ skip-if = e10s # Bug ?????? - test directly manipulates content (directly gets e [browser_bug1015721.js] skip-if = os == 'win' || e10s # Bug 1056146 - FullZoomHelper uses promiseTabLoadEvent() which isn't e10s friendly [browser_bug1064280_changeUrlInPinnedTab.js] +[browser_bug1070778.js] +skip-if = os == "linux" # Bug 1073339 - Investigate autocomplete test unreliability on Linux [browser_canonizeURL.js] skip-if = e10s # Bug ?????? - [JavaScript Error: "Error in AboutHome.sendAboutHomeData TypeError: target.messageManager is undefined" {file: "resource:///modules/AboutHome.jsm" line: 208}] [browser_contentAreaClick.js] diff --git a/browser/base/content/test/general/browser_bug1070778.js b/browser/base/content/test/general/browser_bug1070778.js new file mode 100644 index 00000000000..31ee7b19551 --- /dev/null +++ b/browser/base/content/test/general/browser_bug1070778.js @@ -0,0 +1,66 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function* promiseAutoComplete(inputText) { + gURLBar.focus(); + gURLBar.value = inputText.slice(0, -1); + EventUtils.synthesizeKey(inputText.slice(-1) , {}); + yield promiseSearchComplete(); +} + +function is_selected(index) { + is(gURLBar.popup.richlistbox.selectedIndex, index, `Item ${index + 1} should be selected`); +} + +add_task(function*() { + // This test is only relevant if UnifiedComplete is enabled. + if (!Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete")) + return; + + let itemIds = []; + registerCleanupFunction(() => { + itemIds.forEach(PlacesUtils.bookmarks.removeItem); + }); + + let itemId = + PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId, + NetUtil.newURI("http://example.com/?q=%s"), + PlacesUtils.bookmarks.DEFAULT_INDEX, + "test"); + PlacesUtils.bookmarks.setKeywordForBookmark(itemId, "keyword"); + itemIds.push(itemId); + + // This item only needed so we can select the keyword item, select something + // else, then select the keyword item again. + itemId = + PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId, + NetUtil.newURI("http://example.com/keyword"), + PlacesUtils.bookmarks.DEFAULT_INDEX, + "keyword abc"); + itemIds.push(itemId); + + yield promiseAutoComplete("keyword a"); + + // Select keyword item + EventUtils.synthesizeKey("VK_DOWN", {}); + is_selected(0); + // Select next one (important!) + EventUtils.synthesizeKey("VK_DOWN", {}); + is_selected(1); + // Re-select keyword item + EventUtils.synthesizeKey("VK_UP", {}); + is_selected(0); + + EventUtils.synthesizeKey("b", {}); + yield promiseSearchComplete(); + + is(gURLBar.value, "keyword ab", "urlbar should have expected input"); + + let result = gURLBar.popup.richlistbox.firstChild; + isnot(result, null, "Should have first item"); + let uri = NetUtil.newURI(result.getAttribute("url")); + is(uri.spec, makeActionURI("keyword", {url: "http://example.com/?q=ab", input: "keyword ab"}).spec, "Expect correct url"); + + EventUtils.synthesizeKey("VK_ESCAPE", {}); + yield promisePopupHidden(gURLBar.popup); +}); diff --git a/browser/base/content/urlbarBindings.xml b/browser/base/content/urlbarBindings.xml index a5feea220f4..24acdd622ed 100644 --- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -125,19 +125,6 @@ "" - - - - - + + + +