Return-Path: X-Original-To: apmail-cordova-commits-archive@www.apache.org Delivered-To: apmail-cordova-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D9B53FAA7 for ; Wed, 20 Mar 2013 15:58:14 +0000 (UTC) Received: (qmail 91961 invoked by uid 500); 20 Mar 2013 15:56:12 -0000 Delivered-To: apmail-cordova-commits-archive@cordova.apache.org Received: (qmail 87141 invoked by uid 500); 20 Mar 2013 15:56:05 -0000 Mailing-List: contact commits-help@cordova.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: callback-dev@cordova.apache.org Delivered-To: mailing list commits@cordova.apache.org Received: (qmail 71292 invoked by uid 99); 20 Mar 2013 15:48:45 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 Mar 2013 15:48:45 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 72EE63DC85; Wed, 20 Mar 2013 15:48:45 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: agrieve@apache.org To: commits@cordova.apache.org Date: Wed, 20 Mar 2013 15:48:49 -0000 Message-Id: <2d82ef851eba468ba92041b9dee44f9e@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [05/40] js commit: [2526] Ensure navigator keeps "this" object for native functions [2526] Ensure navigator keeps "this" object for native functions Project: http://git-wip-us.apache.org/repos/asf/cordova-js/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-js/commit/efefa97d Tree: http://git-wip-us.apache.org/repos/asf/cordova-js/tree/efefa97d Diff: http://git-wip-us.apache.org/repos/asf/cordova-js/diff/efefa97d Branch: refs/heads/cb2227 Commit: efefa97dfe97a05aaad7d2d283b672ebf313a8f7 Parents: 6abe4c9 Author: Andrew Grieve Authored: Fri Feb 22 14:01:40 2013 -0500 Committer: Andrew Grieve Committed: Fri Feb 22 14:01:40 2013 -0500 ---------------------------------------------------------------------- lib/scripts/bootstrap.js | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-js/blob/efefa97d/lib/scripts/bootstrap.js ---------------------------------------------------------------------- diff --git a/lib/scripts/bootstrap.js b/lib/scripts/bootstrap.js index 437604d..6213165 100644 --- a/lib/scripts/bootstrap.js +++ b/lib/scripts/bootstrap.js @@ -22,10 +22,23 @@ (function (context) { // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. - if (context.navigator) { + function replaceNavigator(origNavigator) { var CordovaNavigator = function() {}; - CordovaNavigator.prototype = context.navigator; - context.navigator = new CordovaNavigator(); + CordovaNavigator.prototype = origNavigator; + var newNavigator = new CordovaNavigator(); + // This work-around really only applies to new APIs that are newer than Function.bind. + // Without it, APIs such as getGamepads() break. + if (CordovaNavigator.bind) { + for (var key in origNavigator) { + if (typeof origNavigator[key] == 'function') { + newNavigator[key] = origNavigator[key].bind(origNavigator); + } + } + } + return newNavigator; + } + if (context.navigator) { + context.navigator = replaceNavigator(context.navigator); } var channel = require("cordova/channel");