From fe1b5435aacf4b3c757fa7908abaa260006c6745 Mon Sep 17 00:00:00 2001
From: lilia <liliakai@gmail.com>
Date: Fri, 14 Mar 2014 00:47:13 -0700
Subject: [PATCH] Add FakeWhisperAPI for serverless development

When included after api.js, fake_api.js inits a FakeWhisperAPI.

FakeWhisperAPI inherits the methods of API, overrides a few, and
then usurps its place as the one true API.

Single device mode successfully "registers" against FakeAPI. Sadly,
multidevice mode has a recursive loop somewhere that makes the callstack
asplode.
---
 background.html |  1 +
 js/fake_api.js  | 27 +++++++++++++++++++++++++++
 options.html    |  1 +
 popup.html      |  1 +
 4 files changed, 30 insertions(+)
 create mode 100644 js/fake_api.js

diff --git a/background.html b/background.html
index f03238f96..d4a7773a9 100644
--- a/background.html
+++ b/background.html
@@ -17,6 +17,7 @@
 	<script type="text/javascript" src="js-deps/ProtoBuf.min.js"></script>
 	<script type="text/javascript" src="js/helpers.js"></script>
 	<script type="text/javascript" src="js/api.js"></script>
+	<script type="text/javascript" src="js/fake_api.js"></script>
 	<script type="text/javascript" src="js/background.js"></script>
 </head>
 <body data-name="curve25519" data-tools="pnacl" data-configs="Debug Release" data-path="pnacl/{config}">
diff --git a/js/fake_api.js b/js/fake_api.js
new file mode 100644
index 000000000..8d1e099a0
--- /dev/null
+++ b/js/fake_api.js
@@ -0,0 +1,27 @@
+var FakeWhisperAPI = function() {
+
+  this.doAjax = function(param) {
+    if (param.success_callback) {
+      setTimeout(param.success_callback, 100, param.response);
+    }
+  }
+
+  this.getKeysForNumber = function(number, success_callback, error_callback) {
+    this.doAjax({ success_callback: success_callback,
+                  response        : [{ identityKey: 1,
+                                       deviceId   : 1,
+                                       publicKey  : 1,
+                                       keyId      : 1 }]
+    });
+  }
+
+  this.sendMessages = function(jsonData, success_callback, error_callback) {
+    this.doAjax({ success_callback: success_callback,
+                  response        : { missingDeviceIds: [] }
+    });
+  }
+};
+
+FakeWhisperAPI.prototype = API;
+API = new FakeWhisperAPI();
+
diff --git a/options.html b/options.html
index fad6e53cc..b5d34b2db 100644
--- a/options.html
+++ b/options.html
@@ -41,6 +41,7 @@
 	<script type="text/javascript" src="js-deps/ByteBuffer.min.js"></script>
 	<script type="text/javascript" src="js-deps/ProtoBuf.min.js"></script>
 	<script type="text/javascript" src="js/api.js"></script>
+	<script type="text/javascript" src="js/fake_api.js"></script>
 	<script type="text/javascript" src="js/helpers.js"></script>
 	<script type="text/javascript" src="js/options.js"></script>
 </body>
diff --git a/popup.html b/popup.html
index 6c2d39d87..da4b9b72b 100644
--- a/popup.html
+++ b/popup.html
@@ -30,6 +30,7 @@
 	<script type="text/javascript" src="js-deps/ProtoBuf.min.js"></script>
 	<script type="text/javascript" src="js/helpers.js"></script>
 	<script type="text/javascript" src="js/api.js"></script>
+	<script type="text/javascript" src="js/fake_api.js"></script>
 	<script type="text/javascript" src="js/popup.js"></script>
 </body>
 </html>