From 44d50b3f25c6df98ea9f10d3c5483ad69903722a Mon Sep 17 00:00:00 2001 From: Isaac Smith Date: Tue, 14 Feb 2023 13:52:15 +0000 Subject: [PATCH 1/3] Update extension to manifest v3 --- .vs/Extention/v17/.suo | Bin 29696 -> 30208 bytes .vs/slnx.sqlite | Bin 90112 -> 90112 bytes manifest.json | 19 +- scripts/background.js | 670 +++-------------------------------------- 4 files changed, 49 insertions(+), 640 deletions(-) diff --git a/.vs/Extention/v17/.suo b/.vs/Extention/v17/.suo index 81bbe48e8c1c15efc7e8f4573fc6c689a35d80da..151ba1d82008fa313603784c14ebfe53bebb8223 100644 GIT binary patch delta 1441 zcmb`HO-vI(6o6;83oLa?3sk8Qp+fnwP||J}x`oyhwh*Ewg>d0oC?+PF5ZFe864rPj zN{s9rJX;gbm^~OTh6HYs$kBsG4<7JV5;5`Ty@e%>hzH|rzMZ#kX5Qbt*7!_~J-TsQ z@XS8C{_*VxdXW&4@$w~MiKh6z@Sb@=aTfRqgV%dPo(Oy_3h;ta%cSOE0Gh!)IL^TL`eZ;w7p*`LxCHnBTo1wA0dxXgKsRt12m?uAeNr{u zA`gn*8DX4GU^hNXmk_Q0Gi zo$U(D2^`gjTCbn}qZ4^tIy8S&R9!Y`H{X}1B)oFR1MT9)_+ztSo1vzra;2T`H>}Vh zUTn-U@wafUMx1QV~CeQi651%WBR~C*J>#!l$r%IJT3()PS6fs3_qkV`9b&{!{D(W9CL8e z`r5NY`L-*{%aJv{nU$n;;B`9r=}i@X;EkH2nHNTgnjz!Vr54T7dJW3Agjm%Dur2X} zrfbXv686TiC(JT1Az@b^>(F~ZqGo6I5810Hv$x7Bqa|5170pAj@3EMUHLfcYcH!|y z=_u{O^DS4*(g$*OjMW$!BmA4^Dr*K2o7UOQ^}*c}?a1|^XQCEOD3&+%yn01}{rAW) zk;xbtB?+RyJ4Pa8#FpbA#o)=3C`iNh+Av5_c!mKD{wAVu5+9Ak$uj991#*W>5uN18 z0=$c4p5y=>{GQ2&j>KrE`xMCS6b*@zOK zQzEJ?Cn9Pxk&hRmNhO&~@Gm2|nw#^BeH4D4TUweMngREmF|!8GjBftro=aoC(sXla GLHGrLJIr+e delta 1235 zcmbVMK~ED=5boP<=~7;|1qw_g>7k@Ey20;6P*a68;vT{epM2r|1zhD37ayuoW=b#A=KGCn8A96| zdamH<-@z)ZK1tAjJNoK&Zv3;j*2M3NRhcL$6s9 zHb=^wx_H;&F~o5ah<3rQx2nt zvT*3c-yX~`n4E2xks_yIr{NMM!H86#CF#(PRQL!woV_!Hm^Hd+`g*ONNiD9g J*1+m{_%B87&)Wb1 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index 90c0daaffb83196d2ba3d6773232c5292f038632..4afe2d1d9686784442489683d775124e9596f679 100644 GIT binary patch delta 22 dcmZoTz}j$tb%Hdb^h6nFM(M_ctqF_^;sI8I2UGw6 delta 22 dcmZoTz}j$tb%Hdb", "storage", "contextMenus", "tabs" ], - "browser_action": { - "default_popup": "popup/popup.html" + "host_permissions": [ + "*://*.*.*/*.zip" + ], + "background": { + "service_worker": "background.js" }, - "background":{ - "scripts": ["scripts/background.js"] + "action": { + "default_popup": "popup/popup.html" } } \ No newline at end of file diff --git a/scripts/background.js b/scripts/background.js index e926d48..8e02e14 100644 --- a/scripts/background.js +++ b/scripts/background.js @@ -1,638 +1,44 @@ -chrome.contextMenus.create({ - "title": "Download with Download Manager", - "contexts": ["link"], - "onclick": function(info, tab) { - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + info.linkUrl + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - }); - } -}); - -chrome.webRequest.onHeadersReceived.addListener( - // ... your code that checks whether the request should be blocked ... - // (omitted for brevity) +// This file must be placed on the same directory to "manifest.json" +// since below code works as a service worker. - function(details) { - // return {cancel: true}; - - chrome.storage.local.get(['extToggle'], function(result) { - window.toggleExt = result.extToggle; - }); +const ruleId = 1; - if(window.toggleExt == null){ - console.error("Could not determine extension toggle state.\nDefaulting to disabled."); - } - else{ - if(window.toggleExt == true){ - if(details.url.indexOf("www.bing.com/vs/ec/stop.mp3") >= 0 || - details.url.indexOf("www.bing.com/vs/ec/start.mp3") >= 0 || - details.url.indexOf("mp3+") >= 0 || - details.url.indexOf("mp3&") >= 0 || - details.url.indexOf("upload.") >= 0 || - details.url.indexOf("partner.microsoft.com") >= 0 || - details.url.indexOf("adfoc.us") >= 0 || - details.url.indexOf("adloadx") >= 0 || - details.url.indexOf(".pipe.") >= 0 || - details.url.indexOf("chrome-extension://") >= 0 || - details.url.indexOf("exef") >= 0) { - console.warn("Could not download. Download url is in URL blacklist."); - return {cancel: false}; - } - else{ - if(details.url.indexOf('.zip') >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".7z") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".rar") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".iso") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if (details.url.indexOf(".img") >= 0) { - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".exe") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if (details.url.indexOf(".jar") >= 0) { - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".msi") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".aif") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".cda") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".mid") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".midi") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".mp3") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".mpa") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".ogg") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".wav") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".wma") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".wpl") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".mp4") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".vsix") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".py") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".txt") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".log") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".tar") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".rbxl") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".rbxm") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".doc") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".docx") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".ppt") >=0){ - console.log("Blocking request."); - return {cancel: true}; - } - else if(details.url.indexOf(".bin") >=0){ - if(details.url.indexOf(".bing") >=0){ - console.warn("URLs containing .bin like .bing will be picked up as a download. If this happens please file a bug report."); - } - else{ - console.log("Blocking request."); - return {cancel: true}; - } - } - else{ - console.log("Request does not contain any download type so has not been blocked."); - return {cancel: false}; - } - } - } - else { - console.log("Extention is disabled. Request has not been blocked."); - return {cancel: false}; - } +const rules = { + removeRuleIds: [ruleId], + addRules: [{ + id: ruleId, + priority: 1, + condition: { + domains: ["*.*.*/*.zip"], + resourceTypes: ["main_frame", "xmlhttprequest"], + }, + action: { + type: "modifyHeaders", + requestHeaders: [{ + header: "X-DeclarativeNetRequest-Sample", + operation: "set", + value: "request" + }], + responseHeaders: [{ + header: "X-DeclarativeNetRequest-Sample", + operation: "set", + value: "response" + }], } - }, - {urls: [""]}, - ["responseHeaders", "blocking"]); + }], +}; - /* - - else{ - console.log("Request does not contain any download type so has not been blocked."); - } - } +chrome.declarativeNetRequest.updateDynamicRules(rules, () => { + if (chrome.runtime.lastError) { + console.error(chrome.runtime.lastError); + } else { + chrome.declarativeNetRequest.getDynamicRules(rules => console.log(rules)); } - else{ - console.log("Extention is disabled. Request has not been blocked."); - } - }); -}, { - urls: [""], - types: ["main_frame", "sub_frame"] -},*/ - -chrome.webRequest.onBeforeRequest.addListener( - function(details) - { - console.log (details.url); - chrome.storage.local.get(['extToggle'], function(result) { - if(result.extToggle == true){ - if (details.url.indexOf("www.bing.com/vs/ec/stop.mp3") >= 0 || - details.url.indexOf("www.bing.com/vs/ec/start.mp3") >= 0 || - details.url.indexOf("mp3+") >= 0 || - details.url.indexOf("mp3&") >= 0 || - details.url.indexOf("upload.") >= 0 || - details.url.indexOf("partner.microsoft.com") >= 0 || - details.url.indexOf("adfoc.us") >= 0 || - details.url.indexOf("adloadx") >= 0 || - details.url.indexOf(".pipe.") >= 0 || - details.url.indexOf("chrome-extension://") >= 0 || - details.url.indexOf("exef") >= 0) { - console.warn("Could not download " + details.url + ". Download url is in URL blacklist."); - } - else{ - if(details.url.indexOf(".zip") >=0){ - console.log("Request url contains .zip which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.includes(".7z")){ - console.log("Request url contains .7z which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".rar") >=0){ - console.log("Request url contains .rar which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".iso") >=0){ - console.log("Request url contains .iso which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if (details.url.indexOf(".img") >= 0) { - console.log("Request url contains .iso which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".exe") >=0){ - console.log("Request url contains .exe which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if (details.url.indexOf(".jar") >= 0) { - console.log("Request url contains .jar which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".msi") >=0){ - console.log("Request url contains .msi which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".aif") >=0){ - console.log("Request url contains .aif which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".cda") >=0){ - console.log("Request url contains .cda which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".mid") >=0){ - console.log("Request url contains .mid which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".midi") >=0){ - console.log("Request url contains .midi which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".mp3") >=0){ - console.log("Request url contains .mp3 which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".mpa") >=0){ - console.log("Request url contains .mpa which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".ogg") >=0){ - console.log("Request url contains .ogg which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".wav") >=0){ - console.log("Request url contains .wav which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".wma") >=0){ - console.log("Request url contains .wma which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".wpl") >=0){ - console.log("Request url contains .wpl which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".mp4") >=0){ - console.log("Request url contains .mp4 which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".vsix") >=0){ - console.log("Request url contains .visx which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".py") >=0){ - console.log("Request url contains .py which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".txt") >=0){ - console.log("Request url contains .txt which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".log") >=0){ - console.log("Request url contains .log which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".tar") >=0){ - console.log("Request url contains .tar which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".doc") >=0){ - console.log("Request url contains .doc which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".docx") >=0){ - console.log("Request url contains .docx which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".ppt") >=0){ - console.log("Request url contains .ppt which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".rbxl") >=0){ - console.log("Request url contains .rbxl which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".rbxm") >=0){ - console.log("Request url contains .rbxm which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - else if(details.url.indexOf(".bin") >=0){ - if(details.url.indexOf(".bing") >=0){ - console.warn("URLs containing .bin like .bing will be picked up as a download. If this happens please file a bug report."); - } - else{ - console.log("Request url contains .bin which is a download type. Sending to Download Manager."); - chrome.storage.local.get(['port'], function(result) { - try{ - httpGet('http://localhost:' + result.port + '/?url="' + details.url + '"'); - } - catch(err){ - console.error(err); - alert("Failed to send download request to internal server.\nCheck that Download Manager is running and try again."); - } - console.log('Server port value is ' + result.port); - }); - } - } - } - } - else{ - console.log("Extention is disabled. Not sending to Download Manager."); - } - }); - }, - - {urls: [""]}, - - ["blocking"] -); +}); -function httpGet(theUrl) -{ - var xmlHttp = new XMLHttpRequest(); - xmlHttp.open( "GET", theUrl, false ); // false for synchronous request - xmlHttp.send( null ); - return xmlHttp.responseText; -} \ No newline at end of file +// You can use `chrome.declarativeNetRequest.updateSessionRules` instead of `updateDynamicRules`. +// If you use it, the rules are not persisted across browser sessions. +// ==> https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/#method-updateSessionRules +// +// Use `getSessionRules` in order to get session-scoped rules. +// ==> https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/#method-getSessionRules From 0305f31164dd6d3ee67a810ad3191db19a8d00f8 Mon Sep 17 00:00:00 2001 From: Isaac Smith Date: Thu, 22 Jun 2023 23:44:13 +0100 Subject: [PATCH 2/3] Update .gitignore --- .gitignore | 10 ++++++++++ .../10121bdc-6315-4f6e-94ac-fd1a46abeb7f.vsidx | Bin 48789 -> 0 bytes .../55fe423a-ecf3-4840-ab4e-afdab2848472.vsidx | Bin 2360 -> 0 bytes .../723f158e-1cf4-42c2-aa54-e36f7b80a1e1.vsidx | Bin 3691 -> 0 bytes .../f52f8634-b0ca-4955-83a4-e0d437f71198.vsidx | Bin 127 -> 0 bytes .vs/slnx.sqlite | Bin 90112 -> 0 bytes 6 files changed, 10 insertions(+) create mode 100644 .gitignore delete mode 100644 .vs/Extention/FileContentIndex/10121bdc-6315-4f6e-94ac-fd1a46abeb7f.vsidx delete mode 100644 .vs/Extention/FileContentIndex/55fe423a-ecf3-4840-ab4e-afdab2848472.vsidx delete mode 100644 .vs/Extention/FileContentIndex/723f158e-1cf4-42c2-aa54-e36f7b80a1e1.vsidx delete mode 100644 .vs/Extention/FileContentIndex/f52f8634-b0ca-4955-83a4-e0d437f71198.vsidx delete mode 100644 .vs/slnx.sqlite diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c69427e --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +################################################################################ +# This .gitignore file was automatically created by Microsoft(R) Visual Studio. +################################################################################ + +/.vs/Extention/FileContentIndex/10121bdc-6315-4f6e-94ac-fd1a46abeb7f.vsidx +/.vs/Extention/FileContentIndex/10c93d41-d82c-482f-a617-105e967bc9de.vsidx +/.vs/Extention/FileContentIndex/55fe423a-ecf3-4840-ab4e-afdab2848472.vsidx +/.vs/Extention/FileContentIndex/723f158e-1cf4-42c2-aa54-e36f7b80a1e1.vsidx +/.vs/Extention/FileContentIndex/f52f8634-b0ca-4955-83a4-e0d437f71198.vsidx +/.vs/slnx.sqlite diff --git a/.vs/Extention/FileContentIndex/10121bdc-6315-4f6e-94ac-fd1a46abeb7f.vsidx b/.vs/Extention/FileContentIndex/10121bdc-6315-4f6e-94ac-fd1a46abeb7f.vsidx deleted file mode 100644 index 55300f62cc38e3b644b7739efbafa9170a0e518f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48789 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 diff --git a/.vs/Extention/FileContentIndex/723f158e-1cf4-42c2-aa54-e36f7b80a1e1.vsidx b/.vs/Extention/FileContentIndex/723f158e-1cf4-42c2-aa54-e36f7b80a1e1.vsidx deleted file mode 100644 index 64cefb3a1f499d70c7cd29caed88ce2c1998b1b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3691 zcmeH~L5}4_42B;9BwzstVE4pgT9Y?D>LnZGR5>X(Rd!^%US4j^T{r-^dV1y*iGJBh zN^$JZE-6WQ{r+;f{Pk;?IDYuzF5iX!XDq}q-1TX?f?Z8Mq^A#FZuq!0cozNq^78We z1!jV|!Yq&+@(or5YCsH?pjK!A9Lm5Be1Ib83QC{~>R<+r-~`=gs`D$(HAJ)AXY<)% z?w*iSfkcpMs3+khTkyuYC|>D9nH`jz2F`3vEjoPstfrdbrD?@7o|mI@qOvK9Mg)S7SFF} zYw=Z~KrO%pv|uh6)(csYTBH@xBE7f;xL`z4|J*4dy_G~62{WP5a?o0+B2}U`Q46~f zr%@R%#49n8Fxiz1BQ_b48JUvh2Qme5ydtm0#E}qJVMY!k&i3aU=1-&l z9=wTN*$;s%vr8gLT`~nqsaYa}HVKDvR5k*z3A=10+aYSAE{5VooTR(lQSKyrh&Rv; zbtBv=ZK9jlrnsqWecrlm$FvxRUSS$JFQ7KG!~5&)75d3cX=hj>@`W_fWYb-zo2)d%?W~6^=Cb z2*CBR>BI3*`ntz|j(z>dFJp&aEV;3RMoI0<|s@b$a#$8UEo ZmvR2v`}Obd{@?fi#{b^^$M=8B{{ezs9*6({ diff --git a/.vs/Extention/FileContentIndex/f52f8634-b0ca-4955-83a4-e0d437f71198.vsidx b/.vs/Extention/FileContentIndex/f52f8634-b0ca-4955-83a4-e0d437f71198.vsidx deleted file mode 100644 index 7c6fa3dd0258e023a151e9f882aa0387162e187d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmZ>Eac5>=U8UU;V B0viAT diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index 4afe2d1d9686784442489683d775124e9596f679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 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 From 946c8270ff4458b15b71a4829803495bbdda59f1 Mon Sep 17 00:00:00 2001 From: Isaac Smith Date: Thu, 22 Jun 2023 23:44:33 +0100 Subject: [PATCH 3/3] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c69427e..dc342ce 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /.vs/Extention/FileContentIndex/723f158e-1cf4-42c2-aa54-e36f7b80a1e1.vsidx /.vs/Extention/FileContentIndex/f52f8634-b0ca-4955-83a4-e0d437f71198.vsidx /.vs/slnx.sqlite +*.vsidx