// ==UserScript==
// @name        自动显示所有禁止盗链的图片
// @description    自动显示所有禁止盗链的图片
// @include     main
// @include     chrome://browser/content/browser.xul
// ==/UserScript==

fakeReferer:{

let Cc = Components.classes;
let Ci = Components.interfaces;
let list = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator).getEnumerator('navigator:browser');
while(list.hasMoreElements()){
    if(list.getNext() != window)
        break fakeReferer;
}

var sites = {
    'photo3.bababian.com' : '@FORGE',
    'photo2.bababian.com' : '@FORGE',
    'photo1.bababian.com' : '@FORGE',
	'pconline.com.cn' : '@FORGE',
	'mofile.com' : '@FORGE',
	'pcgames.com.cn' : '@FORGE',
	'zol.com.cn' : '@FORGE',
	'pp.sohu.com' : '@FORGE',
	'pp.sohu.cn' : '@FORGE',
	'bbs.nju.edu.cn' : '@FORGE',
	'hiphotos.baidu.com' : '@FORGE',
	'dm.e-teng.com' : '@FORGE',
	'dm123.cn' : '@FORGE',
	'files.xici.net' : '@FORGE',
	'files.xici.net':'@FORGE',
    'haibao.cn' : '@FORGE',
//	'album.sina.com.cn' : '@FORGE',
    'img1.appinn.com' : '@FORGE',
    'img2.appinn.com' : '@FORGE',
    'img3.appinn.com' : '@FORGE',
	'bbs.kafan.cn' : '@FORGE',
	'image.hjbbs.com' : '@FORGE',
    'image.itmedia.co.jp' : '@FORGE',
    '2ch.net' : '@FORGE',
    'imepita.jp' : '@ORIGINAL',
    'images.blogcn.com' : '@FORGE',
    'imgsrc.baidu.com' : '@FORGE',
    'parandroid.com' : '@FORGE',
    'pcgames.com.cn' : '@FORGE',
    'pconline.com.cn' : '@FORGE',
    'photo.56.com' : '@FORGE',
    'photo.qingdaonews.com' : '@FORGE',
//    'photo.sina.com.cn' : '@FORGE',
    'photobucket.com' : '@FORGE',
    'pic.bahamut.com.tw' : '@FORGE',
    'pic.hongdou.gxnews.com.cn' : '@FORGE',
    'pictures.aol.com' : '@FORGE',
    'qingdaonews.com' : '@FORGE',
    'qq.com' : '@FORGE',
    'ragbear.com' : '@FORGE',
    'tech.cybernetnews.com' : '@FORGE',
    'tianya.cn' : '@FORGE',
    'u148.net' : '@FORGE',
    'www.chnywx.com' : '@FORGE',
    'www.jumpc.com' : '@FORGE',
    'yahoofs.com' : '@FORGE',
    'yourour.com' : '@FORGE',
    'yupoo.com' : '@FORGE',
    'zhuoku.com' : '@FORGE',
    '163.com' : '@ORIGINAL',
    'img.cnbeta.com' : '@ORIGINAL',
	'photo.yupoo.com' : '@FORGE',
	'9lala.com' : '@NORMAL',
	'19disk.com' : '@NORMAL', 
	'rakuten.co.jp': '@NORMAL',
	'api.e-map.ne.jp': '@NORMAL',
	'fc2.com' : '@BLOCK',
	'blogs.yahoo.co.jp' : '@BLOCK',
	'hentaiverse.net': '@BLOCK',
	'rakuten-static.com': '@NORMAL',
	'image.itmedia.co.jp' : '@FORGE',
	'2ch.net' : '@FORGE',
	'imepita.jp' : '@ORIGINAL',
	'tumblr.com' : '@FORGE',
		
};

// @NORMAL：默认值
// @FORGE：发送站点根目录
// @ORIGINAL：从其他站点链入时执行
// 無指定：開こうとしているサーバが別サーバだとそのサーバのルートに
//　　(以下「別サーバーに飛ぶときリファラをそのサーバのルートに書き換え」
//　　以下2行的「//」删除功能)

var adjustRef = function (http, site) {
try {
    var sRef;
    var refAction = sites[site];
    if (refAction == undefined)
        return false;
    if (refAction.charAt(0) == '@'){
        switch (refAction){
            case '@NORMAL':
                return true;
            case '@FORGE':
                sRef = http.URI.scheme + "://" + http.URI.hostPort + "/";
                break;
            case '@ORIGINAL':
                sRef = window.content.document.location.href;
                //window.alert(sRef);
                break;
            default:
                return false;
        }
    }
    http.setRequestHeader("Referer", sRef, false);
    if (http.referrer)
        http.referrer.spec = sRef;
    return true;
} catch (e) {}
return false;
}

Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService).addObserver({
observe: function(subject,topic,data){
    if(topic != 'http-on-modify-request')
        return;
    var http = subject.QueryInterface(Ci.nsIHttpChannel);
    for (var s = http.URI.host; s != ""; s = s.replace(/^.*?(\.|$)/, "")){
        if (adjustRef(http, s))
            return;
    }
    // 別サーバーに飛ぶときリファラをそのサーバのルートに書き換え
    //if(http.referrer && http.referrer.host != http.originalURI.host)
        //http.setRequestHeader('Referer', http.originalURI.spec.replace(/[^/]+$/,''), false);
}
},'http-on-modify-request',false);

}
