incubator-callback-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jimmy Jarvis (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (CB-1318) Cordova Callback Logic Not Implemented Correctly - Native Asynchronous Completion Can Call Wrong Logic in Javascript - Requires Non-recurring Unique ID as Outlined
Date Thu, 13 Sep 2012 20:03:08 GMT

    [ https://issues.apache.org/jira/browse/CB-1318?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13455186#comment-13455186
] 

Jimmy Jarvis edited comment on CB-1318 at 9/14/12 7:02 AM:
-----------------------------------------------------------

My pleasure and thank you for fixing it. When the patch is release we'll pull our pseudo-GUID
out in favor of your patch. Could you please include the Date().getTime() integer (e.g. +
1347566429801) as part of your random number string? To you point, a random number is unlikely
to repeat, but this would make it failsafe, completely removing the possibility of a phantom
callback. Again, thanks so much for fixing this!
                
      was (Author: jiminyjarvis):
    My pleasure and thank you for fixing it. When the patch is release we'll pull our pseudo-GUID
out in favor of your patch. Could you please include the Date().getTime() integer (e.g. +
1347566429801) as part of your random number string? To you point, a random number is unlikely
to repeat, but this would make it failsafe, completely removing to possibility of a phantom
callback. Again, thanks so much for fixing this!
                  
> Cordova Callback Logic Not Implemented Correctly -  Native Asynchronous Completion Can
Call Wrong Logic in Javascript - Requires Non-recurring Unique ID as Outlined
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CB-1318
>                 URL: https://issues.apache.org/jira/browse/CB-1318
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Android, iOS
>    Affects Versions: 2.0.0
>            Reporter: Jimmy Jarvis
>            Assignee: Braden Shepherdson
>            Priority: Critical
>             Fix For: 2.2.0
>
>
> This bug creates very difficult to find execution anomalies for any asynchronous callback
that occurs when the calling context has changed.
> PROBLEM: Cordova callback logic can trigger the callback function of an unrelated call
from a different context. When a call from Javascript is made, Cordova generates a new callbackId,
adds it to the cordova.callbacks array, and passes it along to the native code. Some time
later, when the native code completes the request, it injects javascript to call the callbackSuccess
or callbackError function. The respective callback handler looks up the callback attributes
from the cordova.callbacks array and executes the original caller's completion function. The
problem is each page, or reload of a page, resets the callbackId counter to zero and new calls
end up reusing the same callbackId, even though the native code haS not yet completed the
prior request. This can occur upon a new page load or reload upon an empty href in an anchor
tag. A call to native code from page1.html could trigger the completion routine on page2.html
because the native code has no context of the change on the other side of the bridge.
> SOLUTION: Replace the incrementing callbackId with a unique identifier to insure only
the caller's completion logic will be called. I have done this with a Pseudo-GUID generator.
Fix outlined below:
> // REPLACE THIS LINE in both cordova.2.0.0.js and cordova.ios.js
>         callbackId = service + cordova.callbackId++;    // BUG: incrementing Id's can
call unrelated callback logic
> // WITH THIS LINE
>         callbackId = service + ":" + 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
function(c) {var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8;return v.toString(16);});
// Generate unique callbackID with Pseudo-GUID
> This fix insures no code will execute if the caller's context has changed and is a more
well formatted callbackId.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message