aboutsummaryrefslogtreecommitdiffstats
path: root/modules/libDLImage.js
blob: a3d0d3f9eb514f49ac7fb0c7c24219403f2aa3ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//
// libDLImage.js
//
//   libDLImage.js is code for download image data.
//   libDLImage.js is ran on ChromeWorker thread.
//
//
//   accept message:
//     {
//       'imageUrl'  :string,
//       'savePath'  :string,
//       'refererUrl':string,
//       'cookie'    :string
//     }
//
//     imageUrl   : remote image URL
//     savePath   : full path on local strage
//     refererUrl : referer string (optional)
//     cookie     : cookie string (optional)
//
//
//   send message:
//     {
//       'status'  :string,
//       'message' :JSObject,
//       'savePath':string
//     }
//
//     status   : 'normarl' or 'error'
//     message  : error message (string) or image data (binary)
//     savePath : full path on local strage
//                ( only success and same savePath on the accept message )
//
var JSONMessage;
var xhrImg;

function trueImage(){
  var instream=xhrImg.responseText;
  self.postMessage(
    {'status':'normal','message':instream,'savePath':JSONMessage.savePath}
  );
  return;
};

function falseImage(){
  self.postMessage({'status':'error','message':'IMAGE FILE ACCEPT ERROR!!'});
  return false;
};

function downloadImage(){
  xhrImg=new XMLHttpRequest();
  xhrImg.addEventListener("load",trueImage,false);
  xhrImg.addEventListener("error",falseImage,false);
  xhrImg.open("GET",JSONMessage.imageUrl,false);
  xhrImg.overrideMimeType('text/plain;charset=x-user-defined');
  if(0<JSONMessage.refererUrl.length){
    xhrImg.setRequestHeader('Referer',JSONMessage.refererUrl);
  };
  if(0<JSONMessage.cookie.length){
    xhrImg.setRequestHeader('Cookie',JSONMessage.cookie);
  };
  xhrImg.send(null);
};

addEventListener("message",function(event){
  JSONMessage=JSON.parse(event.data);
  if(JSONMessage.imageUrl===undefined||JSONMessage.savePath===undefined){
    self.postMessage({'status':'error','message':'PARAMETA ERROR!!'});
    return false;
  }
  downloadImage();
}, false);
> <description>Manage Cookies (list, remove, add/remove permission)</description> <author mail="teramako@gmail.com" homepage="http://vimperator.g.hatena.ne.jp/teramako/">teramako</author> <version>1.1</version> <license>MPL 1.1/GPL 2.0/LGPL 2.1</license> <minVersion>2.0pre</minVersion> <maxVersion>2.0</maxVersion> <updateURL>https://github.com/vimpr/vimperator-plugins/raw/master/cookieManager.js</updateURL> <detail lang="ja"><![CDATA[ Cookie の管理をするプラグイン == Command == -permオプションの有無で2種類に分かれる === Cookieのパーミッション === :cookiem[anager] list {hostname and path}: {hostname and path}のCookieを表示 :cookiem[anager] remove {hostname and path}: {hostname and path}のCookieを削除 === 現在保存されているCookie === :cookiem[anager] -p[erm] list {hostname}: {hostname}のCookieのパーミッションを表示 :cookiem[anager] -p[erm] add {hostname} {capability}: {hostname}のCookieのパーミッションを設定 :cookiem[anager] -p[erm] list {hostname}: {hostname}のCookieのパーミッションを削除 == pageinfo == :pageinfo c で現在開いているホストのCookieを表示 == どうでも良いこと == 補完機能を存分にお楽しみください :) ]]></detail> </VimperatorPlugin>; liberator.plugins.cookieManager = (function(){ const CM = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2); const PM = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager); const I_CPM = Ci.nsICookiePermission; const PERM_TYPE = "cookie"; function getIterator(_enum, interface){ while (_enum.hasMoreElements()){ let obj = _enum.getNext().QueryInterface(interface); yield obj; } } function cookieIterator() getIterator(CM.enumerator, Ci.nsICookie2); function cookiePermissionIterator(){ for (let perm in getIterator(PM.enumerator, Ci.nsIPermission)){ if (perm.type = PERM_TYPE) yield perm; } } function capabilityToString(capability){ switch (capability){ case I_CPM.ACCESS_ALLOW: // 1 return "ALLOW"; case I_CPM.ACCESS_DENY: // 2 return "DENY"; case I_CPM.ACCESS_SESSION: // 8 return "ONLY_SESSION"; default: return "DEFAULT"; } } function stringToCapability(str){ switch (str){ case "ALLOW": return I_CPM.ACCESS_ALLOW; case "DENY": return I_CPM.ACCESS_DENY; case "ONLY_SESSION": return I_CPM.ACCESS_SESSION; default: return I_CPM.ACCESS_DEFAULT; } } function getHost(){ var host; try { host = content.document.location.host; } catch (e){} return host; } // -------------------------------------------------------- // PageInfo // -------------------------------------------------------- buffer.addPageInfoSection("c", "Cookies", function(verbose){ var hostname; try { hostname = content.window.location.host; } catch (e){ return []; } return [[c.rawHost + c.path, c.name + " = " + c.value] for (c in cManager.stored.getByHostAndPath(hostname))]; }); // -------------------------------------------------------- // Command // -----------------------------------------------------{{{ commands.addUserCommand(["cookiem[anager]"], "Cookie Management", function(args){ if (args["-perm"]){ switch (args[0]){ case "list": let list = cManager.permission.list(args[1]); liberator.echo(template.table("Cookie Permission", list)); break; case "remove": if (cManager.permission.remove(args[1])){ liberator.echo("Removed permission: `" + args[1] + "'"); } else { liberator.echo("Failed to removed permission: `" + args[1] + "'"); } break; case "add": cManager.permission.add(args[1], args[2]); break; default: liberator.echoerr("Invalid sub-command."); } return; } var host = args[1] || getHost(); if (!host) return; switch (args[0]){ case "list": let xml = <></>; let tree = cManager.stored.getTree(host); for (let name in tree){ xml += template.table(name, [[c.name, c.value] for each(c in tree[name])]); } liberator.echo(xml, true); break; case "remove": cManager.stored.remove(host); break; default: liberator.echoerr("Invalid sub-command."); } }, { options: [ [["-perm", "-p"], commands.OPTION_NOARG] ], completer: function(context, args){ if (args["-perm"]){ plugins.cookieManager.permission.completer(context, args); } else { plugins.cookieManager.stored.completer(context, args); } }, }, true); // Command End }}} var cManager = { stored: { // {{{ getByHostAndPath: function(hostAndPath){ for (let cookie in cookieIterator()){ if (!hostAndPath || (cookie.rawHost + cookie.path).indexOf(hostAndPath) == 0) yield cookie; } }, remove: function(hostAndPath){ if (!hostAndPath) return false; for (let cookie in this.getByHostAndPath(hostAndPath)){ CM.remove(cookie.host, cookie.name, cookie.path, false); } return true; }, getTree: function(hostAndPath){ var tree = {}; function getTree(name){ if (name in tree) return tree[name]; tree[name] = []; return tree[name]; } for (let cookie in this.getByHostAndPath(hostAndPath)){ getTree(cookie.rawHost + cookie.path).push(cookie); } return tree; }, subcommands: [ ["list", "list cookie permission"], ["remove", "remove cookie premission"] ], completer: function(context, args){ if (args.length == 1){ context.title = ["SubCommand", "Description"]; context.completions = context.filter ? this.subcommands.filter(function(c) c[0].indexOf(context.filter) >= 0) : this.subcommands; } else if (args.length == 2){ let list = util.Array.uniq([c.rawHost + c.path for (c in this.getByHostAndPath())]).map(function(host) [host, "-"]); context.title = ["Host and Path"]; context.completions = context.filter ? list.filter(function(c) c[0].indexOf(context.filter) >= 0) : list; } }, }, // }}} permission: { // {{{ getByHost: function(hostname){ for (let permission in cookiePermissionIterator()){ if (permission.host == hostname) return permission; } return null; }, add: function(hostname, capability, force){ var uri = util.newURI("http://" + hostname); var perm = this.getByHost(hostname); switch (typeof capability){ case "string": capability = stringToCapability(capability); break; case "number": break; default: throw "Invalid capability"; } if (perm && force){ this.remove(hostname); } PM.add(uri, PERM_TYPE, capability); }, remove: function(hostname){ if (this.getByHost(hostname)){ PM.remove(hostname, PERM_TYPE); return true; } return false; }, list: function(filterReg){ if (filterReg && !(filterReg instanceof RegExp)){ filterReg = new RegExp(filterReg.toString()); } else if (!filterReg){ filterReg = new RegExp(""); } return [[p.host, capabilityToString(p.capability)] for (p in cookiePermissionIterator())].filter(function($_) filterReg.test($_[0])); }, subcommands: [ ["list", "list cookie permission"], ["add", "add cookie permission"], ["remove", "remove cookie premission"] ], capabilityList: [ ["ALLOW", "-"], ["DENY", "-"], ["ONLY_SESSION", "-"] ], completer: function(context, args){ if (args.length == 1){ context.title = ["SubCommand", "Description"]; context.completions = context.filter ? this.subcommands.filter(function(c) c[0].indexOf(context.filter) >= 0) : this.subcommands; } else { let suggestion = []; switch (args[0]){ case "add": if (args.length == 3){ context.title = ["Capability"]; context.completions = context.filter ? this.capabilityList.filter(function($_) $_[0].toLowerCase().indexOf(context.filter.toLowerCase()) == 0) : this.capabilityList; } else if (args.length == 2){ let host = getHost(); if (host){ let hosts = []; host.split(".").reduceRight(function(p, c){ let domain = c + "." + p; hosts.push([domain, "-"]); return domain; }); suggestion = hosts.reverse(); context.title = ["Current Host"]; context.completions = context.filter ? suggestion.filter(function($_) $_[0].indexOf(context.filter) >= 0) : suggestion; return; } } case "list": case "remove": if (args.length > 2) return; context.title = ["Host", "Capability"]; let list = this.list(); context.completions = context.filter ? list.filter(function($_) $_[0].indexOf(context.filter) >= 0) : list; } } }, }, // }}} }; return cManager; })(); // vim: sw=4 ts=4 et fdm=marker: