Advertisement
Guest User

Untitled

a guest
Mar 29th, 2014
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var config = {
  2.   uuid: "[redacted]"
  3. };
  4. var pageWorker = require("page-worker");
  5. var pageMod = require("page-mod");
  6. var data = require("self").data;
  7. var request = require("request");
  8. var notif = require("notifications");
  9. var ss = require("simple-storage");
  10. if (!ss.storage || !ss.storage.prefs) {
  11.   ss.storage.prefs = {}
  12. }
  13. var button;
  14. var workers = [];
  15. var background;
  16. var addWorker = function (a) {
  17.   workers.push(a)
  18. };
  19. var removeWorker = function (b) {
  20.   var a = workers.indexOf(b);
  21.   if (a != -1) {
  22.     workers.splice(a, 1)
  23.   }
  24. };
  25. var attachWorker = function (a) {
  26.   addWorker(a);
  27.   a.on("detach", function () {
  28.     removeWorker(this)
  29.   });
  30.   a.on("message", handleNonPrivCall)
  31. };
  32. var handleNonPrivCall = function (c) {
  33.   var a = this;
  34.   var b = function (d) {
  35.     return function (g) {
  36.       var f = {
  37.         callid: c.callid,
  38.         status: d,
  39.         content: g
  40.       };
  41.       try {
  42.         a.postMessage(f)
  43.       } catch (h) {}
  44.     }
  45.   };
  46.   call(c.method, c.params, a, b("success"), b("error"))
  47. };
  48. var nullFn = function () {};
  49. var call = function (j, c, b, k, h) {
  50.   var l = "parameters could not be stringified";
  51.   try {
  52.     l = JSON.stringify(c)
  53.   } catch (g) {}
  54.   apiImpl.logging.log({
  55.     message: "Received call to " + j + " with parameters: " + l,
  56.     level: 10
  57.   }, nullFn, nullFn);
  58.   if (!k) {
  59.     k = nullFn
  60.   }
  61.   if (!h) {
  62.     h = nullFn
  63.   }
  64.   try {
  65.     var f = j.split("."),
  66.       a = apiImpl;
  67.     for (var d = 0; d < f.length; d++) {
  68.       a = a[f[d]]
  69.     }
  70.     if (typeof (a) !== "function") {
  71.       h({
  72.         message: j + " does not exist",
  73.         type: "UNAVAILABLE"
  74.       })
  75.     }
  76.     a.call(b, c, function () {
  77.       var m = "arguments could not be stringified";
  78.       try {
  79.         m = JSON.stringify(arguments)
  80.       } catch (i) {}
  81.       apiImpl.logging.log({
  82.         message: "Call to " + j + "(" + l + ") succeeded: " + m,
  83.         level: 10
  84.       }, nullFn, nullFn);
  85.       k.apply(this, arguments)
  86.     }, function () {
  87.       var m = "arguments could not be stringified";
  88.       try {
  89.         m = JSON.stringify(arguments)
  90.       } catch (i) {}
  91.       apiImpl.logging.log({
  92.         message: "Call to " + j + "(" + l + ") failed: " + m,
  93.         level: 30
  94.       }, nullFn, nullFn);
  95.       h.apply(this, arguments)
  96.     })
  97.   } catch (g) {
  98.     h({
  99.       message: "Unknown error: " + g,
  100.       type: "UNEXPECTED_FAILURE"
  101.     })
  102.   }
  103. };
  104. var apiImpl = {
  105.   message: function (b) {
  106.     var a = {
  107.       event: b.event,
  108.       data: b.data,
  109.       type: "message"
  110.     };
  111.     if (b.event == "toFocussed") {
  112.       a.event = "broadcast"
  113.     }
  114.     background.postMessage(a);
  115.     workers.forEach(function (d) {
  116.       if (b.event !== "toFocussed" || d.tab === require("tabs").activeTab) {
  117.         try {
  118.           d.postMessage(a)
  119.         } catch (c) {}
  120.       }
  121.     })
  122.   },
  123.   button: {
  124.     setIcon: function (b, c, a) {
  125.       if (button) {
  126.         button.update({
  127.           icon: b
  128.         });
  129.         c()
  130.       } else {
  131.         a({
  132.           message: "Button does not exist",
  133.           type: "UNAVAILABLE"
  134.         })
  135.       }
  136.     },
  137.     setURL: function (b, c, a) {
  138.       if (button) {
  139.         if (b && b.indexOf("http://") !== 0 && b.indexOf("https://") !== 0) {
  140.           b = require("self").data.url("src" + (b.substring(0, 1) == "/" ? "" : "/") + b)
  141.         }
  142.         button.update({
  143.           url: b
  144.         });
  145.         c()
  146.       } else {
  147.         a({
  148.           message: "Button does not exist",
  149.           type: "UNAVAILABLE"
  150.         })
  151.       }
  152.     },
  153.     setTitle: function (c, b, a) {
  154.       if (button) {
  155.         button.update({
  156.           title: c
  157.         });
  158.         b()
  159.       } else {
  160.         a({
  161.           message: "Button does not exist",
  162.           type: "UNAVAILABLE"
  163.         })
  164.       }
  165.     },
  166.     setBadge: function (b, c, a) {
  167.       if (button) {
  168.         button.update({
  169.           badgeText: b
  170.         });
  171.         c()
  172.       } else {
  173.         a({
  174.           message: "Button does not exist",
  175.           type: "UNAVAILABLE"
  176.         })
  177.       }
  178.     },
  179.     setBadgeBackgroundColor: function (a, c, b) {
  180.       if (button) {
  181.         button.update({
  182.           badgeBGColor: a
  183.         });
  184.         c()
  185.       } else {
  186.         b({
  187.           message: "Button does not exist",
  188.           type: "UNAVAILABLE"
  189.         })
  190.       }
  191.     },
  192.     onClicked: {
  193.       addListener: function (b, c, a) {
  194.         if (button) {
  195.           button.addListener(c);
  196.           apiImpl.button.setURL("")
  197.         } else {
  198.           a({
  199.             message: "Button does not exist",
  200.             type: "UNAVAILABLE"
  201.           })
  202.         }
  203.       }
  204.     }
  205.   },
  206.   logging: {
  207.     log: function (c, b, a) {
  208.       if (typeof console !== "undefined") {
  209.         switch (c.level) {
  210.         case 10:
  211.           if (console.debug !== undefined && !(console.debug.toString && console.debug.toString().match("alert"))) {
  212.             console.debug(c.message)
  213.           }
  214.           break;
  215.         case 30:
  216.           if (console.warn !== undefined && !(console.warn.toString && console.warn.toString().match("alert"))) {
  217.             console.warn(c.message)
  218.           }
  219.           break;
  220.         case 40:
  221.         case 50:
  222.           if (console.error !== undefined && !(console.error.toString && console.error.toString().match("alert"))) {
  223.             console.error(c.message)
  224.           }
  225.           break;
  226.         default:
  227.         case 20:
  228.           if (console.info !== undefined && !(console.info.toString && console.info.toString().match("alert"))) {
  229.             console.info(c.message)
  230.           }
  231.           break
  232.         }
  233.         b()
  234.       }
  235.     }
  236.   },
  237.   tools: {
  238.     getURL: function (c, b, a) {
  239.       name = c.name.toString();
  240.       if (name.indexOf("http://") === 0 || name.indexOf("https://") === 0) {
  241.         b(name)
  242.       } else {
  243.         b(data.url("src" + (name.substring(0, 1) == "/" ? "" : "/") + name))
  244.       }
  245.     }
  246.   },
  247.   notification: {
  248.     create: function (c, b, a) {
  249.       require("notifications").notify({
  250.         title: c.title,
  251.         text: c.text
  252.       });
  253.       b()
  254.     }
  255.   },
  256.   tabs: {
  257.     open: function (c, b, a) {
  258.       require("tabs").open({
  259.         url: c.url,
  260.         inBackground: c.keepFocus,
  261.         onOpen: function () {
  262.           b()
  263.         }
  264.       })
  265.     },
  266.     closeCurrent: function () {
  267.       this.tab.close()
  268.     }
  269.   },
  270.   request: {
  271.     ajax: function (e, d, b) {
  272.      
  273.       var a = false;
  274.       var f = require("timers").setTimeout(function () {
  275.         if (a) {
  276.           return
  277.         }
  278.         a = true;
  279.         b && b({
  280.           message: "Request timed out",
  281.           type: "EXPECTED_FAILURE"
  282.         })
  283.       }, e.timeout ? e.timeout : 60000);
  284.       var c = request.Request({
  285.         url: e.url,
  286.  
  287.  
  288.         onComplete: function (g) {
  289.           require("timers").clearTimeout(f);
  290.           if (a) {
  291.             return
  292.           }
  293.           a = true;
  294.           if (g.status >= 200 && g.status < 400) {
  295.             d(g.text)
  296.           } else {
  297.             b({
  298.               message: "HTTP error code received from server: " + g.status,
  299.               statusCode: g.status,
  300.               type: "EXPECTED_FAILURE"
  301.             })
  302.           }
  303.         },
  304.  
  305.  
  306.         content: e.data,
  307.         headers: e.headers
  308.       });
  309.       if (e.type == "POST") {
  310.         c.post()
  311.       } else {
  312.         c.get()
  313.       }
  314.     }
  315.   },
  316.   prefs: {
  317.     get: function (c, b, a) {
  318.       b(ss.storage.prefs[c.key] === undefined ? "undefined" : ss.storage.prefs[c.key])
  319.     },
  320.     set: function (c, b, a) {
  321.       ss.storage.prefs[c.key] = c.value;
  322.       b()
  323.     },
  324.     keys: function (c, b, a) {
  325.       b(Object.keys(ss.storage.prefs))
  326.     },
  327.     all: function (c, b, a) {
  328.       b(ss.storage.prefs)
  329.     },
  330.     clear: function (c, b, a) {
  331.       delete ss.storage.prefs[c.key];
  332.       b()
  333.     },
  334.     clearAll: function (c, b, a) {
  335.       b(ss.storage.prefs = {})
  336.     }
  337.   },
  338.   file: {
  339.     string: function (b, c, a) {
  340.       c(data.load(b.uri.substring(data.url("").length)))
  341.     }
  342.   }
  343. };
  344. exports.main = function (b, c) {
  345.   background = pageWorker.Page({
  346.     contentURL: data.url("forge.html"),
  347.     contentScriptFile: data.url("forge/api-firefox-proxy.js"),
  348.     contentScriptWhen: "start",
  349.     onMessage: handleNonPrivCall
  350.   });
  351.   var a = function (j) {
  352.     if (j == "<all_urls>") {
  353.       j = "*://*"
  354.     }
  355.     j = j.split("://");
  356.     var f = j[0];
  357.     var h, i;
  358.     if (j[1].indexOf("/") === -1) {
  359.       h = j[1];
  360.       i = ""
  361.     } else {
  362.       h = j[1].substring(0, j[1].indexOf("/"));
  363.       i = j[1].substring(j[1].indexOf("/"))
  364.     }
  365.     var g = "";
  366.     if (f == "*") {
  367.       g += "(http|https|file|ftp)://"
  368.     } else {
  369.       if (["http", "https", "file", "ftp"].indexOf(f) !== -1) {
  370.         g += f + "://"
  371.       } else {
  372.         return new RegExp("^$")
  373.       }
  374.     } if (h == "*") {
  375.       g += ".*"
  376.     } else {
  377.       if (h.indexOf("*.") === 0) {
  378.         g += "(.+.)?" + h.substring(2)
  379.       } else {
  380.         g += h
  381.       }
  382.     }
  383.     g += i.replace(/\*/g, ".*");
  384.     return new RegExp(g)
  385.   };
  386.   var d = function (f) {
  387.     if (f.map) {
  388.       return f.map(a)
  389.     } else {
  390.       return a(f)
  391.     }
  392.   };
  393.   var e = function (f) {
  394.     if (f.map) {
  395.       return f.map(data.url)
  396.     } else {
  397.       return data.url(f)
  398.     }
  399.   };
  400.   pageMod.PageMod({
  401.     include: d(["http://*/*", "https://*/*"]),
  402.     contentScriptFile: e(["forge/app_config.js", "forge/all.js", "src/js/test_content_script.js"]),
  403.     contentScriptWhen: "start",
  404.     onAttach: function (h) {
  405.       attachWorker(h);
  406.       var g = [];
  407.       for (var f in g) {
  408.         g[f] = data.load(g[f])
  409.       }
  410.       h.postMessage({
  411.         type: "css",
  412.         files: g
  413.       })
  414.     }
  415.   });
  416.   pageMod.PageMod({
  417.     include: data.url("") + "*",
  418.     contentScriptFile: data.url("forge/api-firefox-proxy.js"),
  419.     contentScriptWhen: "start",
  420.     onAttach: attachWorker
  421.   })
  422. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement