);
}
@@ -454,10 +458,11 @@ loop.webapp = (function($, _, OT, mozL10n) {
var privacyNoticeName = mozL10n.get("privacy_notice_link_text");
var tosHTML = mozL10n.get("legal_text_and_links", {
- "terms_of_use_url": "" +
+ "terms_of_use_url": "" +
tosLinkName + "",
"privacy_notice_url": "" + privacyNoticeName + ""
+ mozL10n.get("privacy_website") + "'>" + privacyNoticeName + ""
});
var tosClasses = React.addons.classSet({
@@ -909,6 +914,7 @@ loop.webapp = (function($, _, OT, mozL10n) {
// Set the 'lang' and 'dir' attributes to when the page is translated
document.documentElement.lang = mozL10n.language.code;
document.documentElement.dir = mozL10n.language.direction;
+ document.title = mozL10n.get("clientShortname2");
}
return {
diff --git a/browser/components/loop/standalone/content/l10n/loop.en-US.properties b/browser/components/loop/standalone/content/l10n/loop.en-US.properties
index e3d221ee95bd..188981770726 100644
--- a/browser/components/loop/standalone/content/l10n/loop.en-US.properties
+++ b/browser/components/loop/standalone/content/l10n/loop.en-US.properties
@@ -49,6 +49,14 @@ brandShortname=Firefox
## LOCALIZATION NOTE(clientShortname2): This should not be localized and
## should remain "Firefox Hello" for all locales.
clientShortname2=Firefox Hello
+## LOCALIZATION NOTE(vendorShortname): This should not be localized and
+## should remain "Mozilla" for all locales.
+vendorShortname=Mozilla
+
+## LOCALIZATION NOTE(client_alttext): {{clientShortname}} will be replaced with the
+## value of the clientShortname2 string above.
+client_alttext={{clientShortname}} logo
+vendor_alttext={{vendorShortname}} logo
## LOCALIZATION NOTE (call_url_creation_date_label): Example output: (from May 26, 2014)
call_url_creation_date_label=(from {{call_url_creation_date}})
@@ -107,3 +115,7 @@ rooms_room_full_call_to_action_nonFx_label=Download {{brandShortname}} to start
rooms_room_full_call_to_action_label=Learn more about {{clientShortname}} ยป
rooms_room_joined_label=Someone has joined the conversation!
rooms_room_join_label=Join the conversation
+
+brand_website=https://www.mozilla.org/firefox/
+privacy_website=https://www.mozilla.org/privacy/
+legal_website=/legal/terms/
diff --git a/browser/components/loop/standalone/content/legal/terms/index.html b/browser/components/loop/standalone/content/legal/terms/index.html
index b908acfa7b8d..94f9038115d1 100644
--- a/browser/components/loop/standalone/content/legal/terms/index.html
+++ b/browser/components/loop/standalone/content/legal/terms/index.html
@@ -7,7 +7,7 @@
- WebRTC: Terms of Service
+ Firefox Hello: Terms of Service
@@ -21,7 +21,7 @@
You are using an outdated browser. Please upgrade your browser to improve your experience.
-
WebRTC
+
Firefox Hello
Terms of Service
diff --git a/dom/system/gonk/RadioInterfaceLayer.js b/dom/system/gonk/RadioInterfaceLayer.js
index d3fb3cbce5b8..65578af7cafe 100644
--- a/dom/system/gonk/RadioInterfaceLayer.js
+++ b/dom/system/gonk/RadioInterfaceLayer.js
@@ -1160,17 +1160,25 @@ DataConnectionHandler.prototype = {
}
},
+ _compareDataCallOptions: function(dataCall, newDataCall) {
+ return dataCall.apnProfile.apn == newDataCall.apn &&
+ dataCall.apnProfile.user == newDataCall.user &&
+ dataCall.apnProfile.password == newDataCall.password &&
+ dataCall.chappap == newDataCall.chappap &&
+ dataCall.pdptype == newDataCall.pdptype;
+ },
+
_deliverDataCallMessage: function(name, args) {
for (let i = 0; i < this._dataCalls.length; i++) {
let datacall = this._dataCalls[i];
- // Send message only to the DataCall that matches apn.
+ // Send message only to the DataCall that matches the data call options.
// Currently, args always contain only one datacall info.
- if (!args[0].apn || args[0].apn != datacall.apnProfile.apn) {
+ if (!this._compareDataCallOptions(datacall, args[0])) {
continue;
}
// Do not deliver message to DataCall that contains cid but mistmaches
// with the cid in the current message.
- if (args[0].cid && datacall.linkInfo.cid &&
+ if (args[0].cid !== undefined && datacall.linkInfo.cid != null &&
args[0].cid != datacall.linkInfo.cid) {
continue;
}
@@ -1486,9 +1494,17 @@ DataConnectionHandler.prototype = {
// Notify data call error only for data APN
let networkInterface = this.dataNetworkInterfaces.get("default");
if (networkInterface && networkInterface.enabled) {
- let apnSetting = networkInterface.apnSetting;
- if (message.apn == apnSetting.apn) {
- gMobileConnectionService.notifyDataError(this.clientId, message);
+ let dataCall = networkInterface.dataCall;
+ // If there is a cid, compare cid; otherwise it is probably an error on
+ // data call setup.
+ if (message.cid !== undefined) {
+ if (message.cid == dataCall.linkInfo.cid) {
+ gMobileConnectionService.notifyDataError(this.clientId, message);
+ }
+ } else {
+ if (this._compareDataCallOptions(dataCall, message)) {
+ gMobileConnectionService.notifyDataError(this.clientId, message);
+ }
}
}
@@ -3894,6 +3910,12 @@ DataCall.prototype = {
// Array to hold RILNetworkInterfaces that requested this DataCall.
requestedNetworkIfaces: null,
+ // Holds the pdp type sent to ril worker.
+ pdptype: null,
+
+ // Holds the authentication type sent to ril worker.
+ chappap: null,
+
dataCallError: function(message) {
if (DEBUG) this.debug("Data call error on APN: " + message.apn);
this.state = RIL.GECKO_NETWORK_STATE_DISCONNECTED;
@@ -4012,10 +4034,18 @@ DataCall.prototype = {
},
canHandleApn: function(apnSetting) {
- // TODO: compare authtype?
- return (this.apnProfile.apn == apnSetting.apn &&
- (this.apnProfile.user || '') == (apnSetting.user || '') &&
- (this.apnProfile.password || '') == (apnSetting.password || ''));
+ let isIdentical = this.apnProfile.apn == apnSetting.apn &&
+ (this.apnProfile.user || '') == (apnSetting.user || '') &&
+ (this.apnProfile.password || '') == (apnSetting.password || '') &&
+ (this.apnProfile.authType || '') == (apnSetting.authtype || '');
+
+ if (RILQUIRKS_HAVE_IPV6) {
+ isIdentical = isIdentical &&
+ (this.apnProfile.protocol || '') == (apnSetting.protocol || '') &&
+ (this.apnProfile.roaming_protocol || '') == (apnSetting.roaming_protocol || '');
+ }
+
+ return isIdentical;
},
reset: function() {
@@ -4027,6 +4057,9 @@ DataCall.prototype = {
this.linkInfo.gateways = [];
this.state = RIL.GECKO_NETWORK_STATE_UNKNOWN;
+
+ this.chappap = null;
+ this.pdptype = null;
},
connect: function(networkInterface) {
@@ -4079,7 +4112,7 @@ DataCall.prototype = {
let radioTechType = dataInfo.type;
let radioTechnology = RIL.GECKO_RADIO_TECH.indexOf(radioTechType);
- let authType = RIL.RIL_DATACALL_AUTH_TO_GECKO.indexOf(this.apnProfile.authtype);
+ let authType = RIL.RIL_DATACALL_AUTH_TO_GECKO.indexOf(this.apnProfile.authType);
// Use the default authType if the value in database is invalid.
// For the case that user might not select the authentication type.
if (authType == -1) {
@@ -4088,6 +4121,8 @@ DataCall.prototype = {
}
authType = RIL.RIL_DATACALL_AUTH_TO_GECKO.indexOf(RIL.GECKO_DATACALL_AUTH_DEFAULT);
}
+ this.chappap = authType;
+
let pdpType = RIL.GECKO_DATACALL_PDP_TYPE_IP;
if (RILQUIRKS_HAVE_IPV6) {
pdpType = !dataInfo.roaming
@@ -4101,6 +4136,7 @@ DataCall.prototype = {
pdpType = RIL.GECKO_DATACALL_PDP_TYPE_DEFAULT;
}
}
+ this.pdptype = pdpType;
let radioInterface = this.gRIL.getRadioInterface(this.clientId);
radioInterface.sendWorkerMessage("setupDataCall", {
diff --git a/dom/system/gonk/ril_worker.js b/dom/system/gonk/ril_worker.js
index 1b5294f10b35..455ec31c4148 100644
--- a/dom/system/gonk/ril_worker.js
+++ b/dom/system/gonk/ril_worker.js
@@ -4128,10 +4128,8 @@ RilObject.prototype = {
// can be removed if is the same as the current one.
for each (let newDataCall in datacalls) {
if (newDataCall.status != DATACALL_FAIL_NONE) {
- if (newDataCallOptions) {
- newDataCall.apn = newDataCallOptions.apn;
- }
- this._sendDataCallError(newDataCall, newDataCall.status);
+ this._sendDataCallError(newDataCallOptions || newDataCall,
+ newDataCall.status);
}
}