home *** CD-ROM | disk | FTP | other *** search
/ Minami 83 / MINAMI83.iso / Extra / DivXInstaller.exe / $PLUGINSDIR / GoogleToolbarFirefox.msi / xpi / amulet-jslib / sandbox.js < prev    next >
Text File  |  2006-08-07  |  4KB  |  132 lines

  1. function PROT_SandboxManager(iterator, listWarden, tableName) {
  2. this.debugZone = "sandboxMgr";
  3. this.iterator_ = iterator;
  4. this.dataImportedAtLeastOnce_ = false;
  5. var table = new PROT_TRTable(tableName);
  6. this.populateSandbox({ 'table': table });
  7. this.listWarden_ = listWarden;
  8. listWarden.registerSandboxUpdate(tableName,
  9. BindToObject(this.populateSandbox, this));
  10. listWarden.enableSandboxUpdates();
  11. }
  12. PROT_SandboxManager.prototype.shutdown = function() {
  13. this.listWarden_.disableSandboxUpdates();
  14. this.listWarden_ = null;
  15. }
  16. PROT_SandboxManager.prototype.checkHandler_ = function(handler) {
  17. if (!(handler instanceof Array)) {
  18. G_Debug(this, "handler isn't array");
  19. return false;
  20. }
  21. if (handler.length != 3) {
  22. G_Debug(this, "handler doesn't have 3 elements");
  23. return false;
  24. }
  25. if (typeof handler[0] != "string") {
  26. G_Debug(this, "callback isn't a string");
  27. return false;
  28. }
  29. if (typeof handler[1] != "string") {
  30. G_Debug(this, "eventType isn't a string");
  31. return false;
  32. }
  33. if (!(handler[2] instanceof Array)) {
  34. G_Debug(this, "attrs isn't an array");
  35. return false;
  36. }
  37. for (var i = 0; i < handler[2].length; i++) {
  38. if (typeof handler[2][i] != "string") {
  39. G_Debug(this, "attr " + handler[2][i] + " isn't a string");
  40. return false;
  41. }
  42. }
  43. return true;
  44. }
  45. PROT_SandboxManager.prototype.checkHandlers_ = function(handlers) {
  46. if (!(handlers instanceof Array))
  47. return false;
  48. for (var i = 0; i < handlers.length; i++) {
  49. if (!this.checkHandler_(handlers[i]))
  50. return false;
  51. }
  52. return true;
  53. }
  54. PROT_SandboxManager.prototype.registerHandlers_ = function() {
  55. var handlers = null;
  56. try {
  57. handlers = this.copyFromSandbox_(
  58. Components.utils.evalInSandbox("getHandlers();", this.sandbox_));
  59. } catch(e) {
  60. G_Debug(this, "Couldn't call getHandlers in sandbox " +
  61. "because of exception: " + e);
  62. return false;
  63. }
  64. if (!this.checkHandlers_(handlers)) {
  65. G_Debug(this, "checkHandlers failed! aborting");
  66. return false;
  67. }
  68. for (var i = 0; i < handlers.length; i++) {
  69. this.registerHandler_(handlers[i]);
  70. }
  71. return true;
  72. }
  73. PROT_SandboxManager.prototype.registerHandler_ = function(handler) {
  74. var F = this.createWrapper_(handler[0]);
  75. this.iterator_.registerEvent(handler[1], handler[2]);
  76. this.iterator_.registerHandler(handler[1], F);
  77. }
  78. PROT_SandboxManager.prototype.createWrapper_ = function(callback) {
  79. var F = function(e) {
  80. var evalString = null;
  81. var results = null;
  82. try {
  83. evalString = callback + uneval(e) + ';';
  84. results = this.copyFromSandbox_(
  85. Components.utils.evalInSandbox(evalString,
  86. this.sandbox_));
  87. } catch(e) {
  88. G_Debug(this, "Couldn't call " + evalString +
  89. " in sandbox because of exception " + e);
  90. return; // Don't call e.callback
  91. }
  92. if (!!e.callback && typeof e.callback == "function") {
  93. e.callback(results);
  94. }
  95. }
  96. return BindToObject(F, this);
  97. }
  98. PROT_SandboxManager.prototype.copyToSandbox_ = function(name, e) {
  99. var s = name + "=" + uneval(e);
  100. Components.utils.evalInSandbox(s, this.sandbox_);
  101. }
  102. PROT_SandboxManager.prototype.copyFromSandbox_ = function(e) {
  103. return eval(uneval(e));
  104. }
  105. PROT_SandboxManager.prototype.hasData = function() {
  106. return this.dataImportedAtLeastOnce_;
  107. }
  108. PROT_SandboxManager.prototype.populateSandbox = function(e) {
  109. if (!e.table) {
  110. G_Debug(this, "No data with which to populate sandbox!");
  111. return false;
  112. }
  113. this.iterator_.removeHandlers();
  114. this.sandbox_ = new Components.utils.Sandbox("http://example.com");
  115. e.table.find("sandbox", BindToObject(this.populateSandboxCallback,
  116. this));
  117. }
  118. PROT_SandboxManager.prototype.populateSandboxCallback = function(sandboxText) {
  119. if (!sandboxText) {
  120. G_Debug(this, "Bad value for sandbox key in sandbox table: " + sandboxText);
  121. return;
  122. }
  123. sandboxText = decodeURIComponent(sandboxText);
  124. try {
  125. Components.utils.evalInSandbox(sandboxText, this.sandbox_);
  126. } catch(e) {
  127. G_Debug(this, "Couldn't load sandbox file, as a result of exception: " + e);
  128. return;
  129. }
  130. this.dataImportedAtLeastOnce_ = this.registerHandlers_();
  131. }
  132.