diff --git a/b2g/components/SystemAppProxy.jsm b/b2g/components/SystemAppProxy.jsm
index 74abffddd31..c17b78c8ec5 100644
--- a/b2g/components/SystemAppProxy.jsm
+++ b/b2g/components/SystemAppProxy.jsm
@@ -99,9 +99,41 @@ let SystemAppProxy = {
},
dispatchKeyboardEvent: function systemApp_dispatchKeyboardEvent(type, details) {
- let content = this._frame ? this._frame.contentWindow : null;
- let e = new content.KeyboardEvent(type, details);
- content.dispatchEvent(e);
+ try {
+ let content = this._frame ? this._frame.contentWindow : null;
+ if (!content) {
+ throw new Error("no content window");
+ }
+
+ // If we don't already have a TextInputProcessor, create one now
+ if (!this.TIP) {
+ this.TIP = Cc["@mozilla.org/text-input-processor;1"]
+ .createInstance(Ci.nsITextInputProcessor);
+ if (!this.TIP) {
+ throw new Error("failed to create textInputProcessor");
+ }
+ }
+
+ if (!this.TIP.beginInputTransactionForTests(content)) {
+ this.TIP = null;
+ throw new Error("beginInputTransaction failed");
+ }
+
+ let e = new content.KeyboardEvent("", { key: details.key, });
+
+ if (type === 'keydown') {
+ this.TIP.keydown(e);
+ }
+ else if (type === 'keyup') {
+ this.TIP.keyup(e);
+ }
+ else {
+ throw new Error("unexpected event type: " + type);
+ }
+ }
+ catch(e) {
+ dump("dispatchKeyboardEvent: " + e + "\n");
+ }
},
// Listen for dom events on the system app
diff --git a/b2g/config/aries/sources.xml b/b2g/config/aries/sources.xml
index 2c0f6aebb44..3d1636ed348 100644
--- a/b2g/config/aries/sources.xml
+++ b/b2g/config/aries/sources.xml
@@ -15,7 +15,7 @@
{mozL10n.get("rooms_read_while_wait_offer")}
@@ -414,6 +437,8 @@ loop.standaloneRoomViews = (function(mozL10n) {
case ROOM_STATES.FAILED:
case ROOM_STATES.CLOSING:
+ case ROOM_STATES.FULL:
+ case ROOM_STATES.ENDED:
// the other person has shown up, so we don't want to show an avatar
return true;
@@ -519,6 +544,7 @@ loop.standaloneRoomViews = (function(mozL10n) {
return {
StandaloneRoomFooter: StandaloneRoomFooter,
StandaloneRoomHeader: StandaloneRoomHeader,
+ StandaloneRoomInfoArea: StandaloneRoomInfoArea,
StandaloneRoomView: StandaloneRoomView
};
})(navigator.mozL10n);
diff --git a/browser/components/loop/standalone/content/js/webapp.js b/browser/components/loop/standalone/content/js/webapp.js
index 13789b527ae..54d801fe589 100644
--- a/browser/components/loop/standalone/content/js/webapp.js
+++ b/browser/components/loop/standalone/content/js/webapp.js
@@ -93,7 +93,7 @@ loop.webapp = (function($, _, OT, mozL10n) {
render: function() {
if (this.props.isFirefox) {
- return React.createElement("div", null);
+ return null;
}
return (
React.createElement("div", {className: "promote-firefox"},
@@ -649,8 +649,8 @@ loop.webapp = (function($, _, OT, mozL10n) {
React.PropTypes.instanceOf(FxOSConversationModel)
]).isRequired,
dispatcher: React.PropTypes.instanceOf(loop.Dispatcher).isRequired,
- notifications: React.PropTypes.instanceOf(sharedModels.NotificationCollection)
- .isRequired,
+ isFirefox: React.PropTypes.bool.isRequired,
+ notifications: React.PropTypes.instanceOf(sharedModels.NotificationCollection).isRequired,
sdk: React.PropTypes.object.isRequired
},
@@ -738,7 +738,7 @@ loop.webapp = (function($, _, OT, mozL10n) {
}
case "expired": {
return (
- React.createElement(CallUrlExpiredView, null)
+ React.createElement(CallUrlExpiredView, {isFirefox: this.props.isFirefox})
);
}
default: {
@@ -986,6 +986,7 @@ loop.webapp = (function($, _, OT, mozL10n) {
client: this.props.client,
conversation: this.props.conversation,
dispatcher: this.props.dispatcher,
+ isFirefox: this.state.isFirefox,
notifications: this.props.notifications,
sdk: this.props.sdk})
);
diff --git a/browser/components/loop/standalone/content/js/webapp.jsx b/browser/components/loop/standalone/content/js/webapp.jsx
index f24fd4c1a9b..242aaed2799 100644
--- a/browser/components/loop/standalone/content/js/webapp.jsx
+++ b/browser/components/loop/standalone/content/js/webapp.jsx
@@ -93,7 +93,7 @@ loop.webapp = (function($, _, OT, mozL10n) {
render: function() {
if (this.props.isFirefox) {
- return ;
+ return null;
}
return (