From d29ade03b9b2a1ea9e3967be29836e75fae9a50f Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Fri, 27 Sep 2013 23:14:26 -0400 Subject: [PATCH] Backed out 2 changesets (bug 920840, bug 920831) for bustage. DONTBUILD Backed out changeset dac111df7fdf (bug 920840) Backed out changeset bfde80bc6826 (bug 920831) --- dom/base/Navigator.cpp | 11 ---------- dom/base/Navigator.h | 4 ---- dom/bindings/BindingUtils.cpp | 9 ++------- dom/inputmethod/MozKeyboard.js | 20 +++++++++++++++++++ .../mochitest/general/test_interfaces.html | 1 + dom/webidl/InputMethod.webidl | 2 +- 6 files changed, 24 insertions(+), 23 deletions(-) diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp index 4c9f615f216..d5a968e5a9a 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -1786,17 +1786,6 @@ bool Navigator::HasPushNotificationsSupport(JSContext* /* unused */, return win && Preferences::GetBool("services.push.enabled", false) && CheckPermission(win, "push"); } -#ifdef MOZ_B2G -/* static */ -bool Navigator::HasInputMethodSupport(JSContext* /* unused */, - JSObject* aGlobal) -{ - nsCOMPtr win = GetWindowFromGlobal(aGlobal); - return Preferences::GetBool("dom.mozInputMethod.testing", false) || - (win && CheckPermission(win, "keyboard")); -} -#endif - /* static */ already_AddRefed Navigator::GetWindowFromGlobal(JSObject* aGlobal) diff --git a/dom/base/Navigator.h b/dom/base/Navigator.h index 1ec9b3de778..d92cd52a009 100644 --- a/dom/base/Navigator.h +++ b/dom/base/Navigator.h @@ -300,10 +300,6 @@ public: static bool HasPushNotificationsSupport(JSContext* /* unused */, JSObject* aGlobal); -#ifdef MOZ_B2G - static bool HasInputMethodSupport(JSContext* /* unused */, JSObject* aGlobal); -#endif - nsPIDOMWindow* GetParentObject() const { return GetWindow(); diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp index cd9b2622cd3..043332062bd 100644 --- a/dom/bindings/BindingUtils.cpp +++ b/dom/bindings/BindingUtils.cpp @@ -2040,13 +2040,8 @@ ConstructJSImplementation(JSContext* aCx, const char* aContractId, aRv.Throw(rv); return nullptr; } - // With JS-implemented WebIDL, the return value of init() is not used to determine - // if init() failed, so init() should only return undefined. Any kind of permission - // or pref checking must happen by adding an attribute to the WebIDL interface. - if (!initReturn.isUndefined()) { - MOZ_ASSERT(false, "The init() method for JS-implemented WebIDL should not return anything"); - MOZ_CRASH(); - } + MOZ_ASSERT(initReturn.isUndefined(), + "nsIDOMGlobalPropertyInitializer should return undefined"); } // Extract the JS implementation from the XPCOM object. nsCOMPtr implWrapped = diff --git a/dom/inputmethod/MozKeyboard.js b/dom/inputmethod/MozKeyboard.js index c46fbf93b68..0462944a535 100644 --- a/dom/inputmethod/MozKeyboard.js +++ b/dom/inputmethod/MozKeyboard.js @@ -199,6 +199,8 @@ MozKeyboard.prototype = { } }; +const TESTING_ENABLED_PREF = "dom.mozInputMethod.testing"; + /* * A WeakMap to map input method iframe window to its active status. */ @@ -315,6 +317,24 @@ MozInputMethod.prototype = { }), init: function mozInputMethodInit(win) { + // Check if we're in testing mode. + let isTesting = false; + try { + isTesting = Services.prefs.getBoolPref(TESTING_ENABLED_PREF); + } catch (e) {} + + // Don't bypass the permission check if not in testing mode. + if (!isTesting) { + let principal = win.document.nodePrincipal; + let perm = Services.perms + .testExactPermissionFromPrincipal(principal, "keyboard"); + if (perm != Ci.nsIPermissionManager.ALLOW_ACTION) { + dump("No permission to use the keyboard API for " + + principal.origin + "\n"); + return; + } + } + this._window = win; this._mgmt = new MozInputMethodManager(win); this.innerWindowID = win.QueryInterface(Ci.nsIInterfaceRequestor) diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index 1b1ad04c5d4..f418a4b058a 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -324,6 +324,7 @@ var interfaceNamesInGlobalScope = {name: "MozEmergencyCbModeEvent", b2g: true}, {name: "MozIccManager", b2g: true}, {name: "MozInputContext", b2g: true}, + {name: "MozInputMethod", b2g: true}, {name: "MozInputMethodManager", b2g: true}, "MozMmsEvent", "MozMmsMessage", diff --git a/dom/webidl/InputMethod.webidl b/dom/webidl/InputMethod.webidl index 0f3befa1d94..c28b3d5e030 100644 --- a/dom/webidl/InputMethod.webidl +++ b/dom/webidl/InputMethod.webidl @@ -6,7 +6,7 @@ [JSImplementation="@mozilla.org/b2g-inputmethod;1", NavigatorProperty="mozInputMethod", - Func="Navigator::HasInputMethodSupport"] + Pref="dom.mozInputMethod.enabled"] interface MozInputMethod : EventTarget { // Input Method Manager contain a few global methods expose to apps readonly attribute MozInputMethodManager mgmt;