Index: tests/prebuilt/nacl_js_lib.js |
=================================================================== |
--- tests/prebuilt/nacl_js_lib.js (revision 0) |
+++ tests/prebuilt/nacl_js_lib.js (revision 0) |
@@ -0,0 +1,149 @@ |
+// JavaScript Library for Nacl Tests and Demos |
+ |
+function NaclLib(embed_name, status_id, num_retries) { |
+ this.embed_name_ = embed_name; |
+ this.statusfield_ = document.getElementById(status_id); |
+ this.status_ = "WAIT"; |
+ this.message_ = ""; |
+ this.handler_ = null; |
+ this.retries_ = num_retries; |
+}; |
+ |
+ |
+NaclLib.prototype.getStatus = function() { |
+ return this.status_; |
+}; |
+ |
+ |
+NaclLib.prototype.getMessage = function() { |
+ return this.message_; |
+}; |
+ |
+ |
+NaclLib.prototype.cleanUp = function() { |
+ if (this.handler_) { |
+ clearInterval(this._handler); |
+ this.handler_ = null; |
+ } |
+}; |
+ |
+ |
+NaclLib.prototype.setStatus = function() { |
+ this.statusfield_.innerHTML = |
+ this.status_ + ": " + this.message_; |
+}; |
+ |
+ |
+NaclLib.prototype.setStatusWait = function(message) { |
+ this.status_ = "WAIT"; |
+ this.message_ = "" + this.retries_ + " " + message; |
+ this.setStatus() |
+}; |
+ |
+ |
+NaclLib.prototype.setStatusError = function(message) { |
+ this.status_ = "ERROR"; |
+ this.message_ = message; |
+ this.setStatus() |
+}; |
+ |
+ |
+NaclLib.prototype.setStatusSuccess = function(message) { |
+ this.status_ = "SUCCESS"; |
+ this.message_ = message; |
+ this.setStatus() |
+}; |
+ |
+ |
+NaclLib.prototype.numModulesReady = function(modules) { |
+ var count = 0; |
+ for (var i = 0; i < modules.length; i++) { |
+ if (modules[i].__moduleReady == 1) { |
+ count += 1; |
+ } |
+ } |
+ return count; |
+}; |
+ |
+ |
+NaclLib.prototype.areTherePluginProblems = function(modules) { |
+ for (var i = 0; i < modules.length; i++) { |
+ if (modules[i].__moduleReady == undefined) return 1; |
+ } |
+ return 0; |
+}; |
+ |
+ |
+NaclLib.prototype.checkModuleReadiness = function() { |
+ // Work around bug that does not disable the handler. |
+ if (!this.handler_) |
+ return; |
+ |
+ if (this.retries_ == 0) { |
+ this.cleanUp(); |
+ this.setStatusError("The Native Client modules are loading too slowly"); |
+ return; |
+ } |
+ this.retries_ -= 1; |
+ |
+ // Find all elements with name "this.embed_name_". This should be the list |
+ // of all NaCl modules on the page. Note that passing in such a list at |
+ // initialization time would sometimes pass the list of scriptable objects |
+ // (as desired) but would sometimes pass the list of embed tags, depending |
+ // on a start-up race condition. As such, pass the "name" attribute of the |
+ // <embed> tags and then gather the list of all of those scriptable objects |
+ // each time this method is invoked. |
+ var module_list = document.getElementsByName(this.embed_name_); |
+ var num_ready = this.numModulesReady(module_list); |
+ |
+ if (module_list.length == num_ready) { |
+ if (this.wait) { |
+ var result = this.wait(); |
+ if (result) { |
+ this.setStatusWait(result); |
+ return; |
+ } |
+ } |
+ |
+ this.cleanUp(); |
+ |
+ var result; |
+ try { |
+ result = this.test(); |
+ } catch(e) { |
+ this.setStatusError(e); |
+ return; |
+ } |
+ |
+ if (result == "") { |
+ this.setStatusSuccess(""); |
+ } else { |
+ this.setStatusError(result); |
+ } |
+ |
+ return; |
+ } |
+ |
+ this.setStatusWait("Loaded " + num_ready + "/" + module_list.length + |
+ " modules"); |
+ |
+ if (this.areTherePluginProblems(module_list)) { |
+ this.cleanUp(); |
+ this.setStatusError("The Native Client plugin was unable to load"); |
+ return; |
+ } |
+}; |
+ |
+ |
+// Workaround for JS inconsistent scoping behavior |
+function wrapperForCheckModuleReadiness(that) { |
+ that.checkModuleReadiness(); |
+} |
+ |
+ |
+NaclLib.prototype.waitForModulesAndRunTests = function() { |
+ // avoid regsitering two handlers |
+ if (!this.handler_) { |
+ this.handler_ = setInterval(wrapperForCheckModuleReadiness, 100, this); |
+ } |
+}; |
Property changes on: tests\prebuilt\nacl_js_lib.js |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |