Message passing with cookies (app_tag, gssweb_bg_tag, etc.)
[gssweb.git] / chrome / app / navigator.gss.js
index d65b810..b011894 100644 (file)
@@ -2,32 +2,49 @@ console.log('Loading navigator.gss.js - #5');
 
 /* This file gets injected into the web page verbatim */
 
-navigator.gss_import_name = function(name, mech, nonce, callbackFn){
-    console.log("Name: " + name);
-    console.log("Mech: " + mech);
+navigator.gss_callbacks = {};
+
+/*
+navigator.generateNonce = function() {
+  // TODO: Make sure that we don't have a collision!
+  // Random integer in the range [0..(2^32-1)]
+  return Math.floor(Math.random() * ( 4294967295 )) ;
+}
+*/
+
+navigator.gss_import_name = function(name, mech, callbackFn, appTag){
+    var nonce = navigator.generateNonce();
+    navigator.gss_callbacks[nonce] = callbackFn;
     
     /* Listen for a message back from the content script */
     window.addEventListener(
       "message",
       function(event)
       {
-        var nonce;
+        var app_tag;
         var name;
+        var callback;
+        var nonce;
         
-        if (event.data.command != "gss_import_name" ||
+        if (event.data.method != "gss_import_name" ||
             (typeof(event.data.return_values) == "undefined") )
         {
           return;
         }
         
+        var nonce = event.data.cookies.navigator_gss_tag;
+        event.data.cookies.navigator_gss_tag = undefined;
+        callback = navigator.gss_callbacks[nonce];
+        navigator.gss_callbacks[nonce] = undefined;
+        
         // Extract the data from the returned JSON
         name = event.data.return_values.gss_name;
-        nonce = event.data.nonce;
+        app_tag = event.data.cookies.app_tag;
         major = event.data.return_values.major_status;
         minor = event.data.return_values.minor_status;
         
         // Invoke the callback with the extracted data
-        callbackFn(name, nonce, major, minor);
+        callback(name, major, minor, app_tag);
       }
     );
 
@@ -41,7 +58,11 @@ navigator.gss_import_name = function(name, mech, nonce, callbackFn){
            "input_name": name,
            "input_name_type": mech
        },
-        "nonce": nonce
+        "cookies":
+        {
+            "navigator_gss_tag": nonce,
+            "app_tag": appTag
+        }
     }, "*");
 
 };