1818 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1919 */
2020
21+ // TODO: Firefox on Windows needs the native messaging app manifest path to be in the registry:
22+ // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging
23+ // TODO: LocalStorage support for Firefox (how does this work here?)
24+
2125var interruptDownloads = true ;
2226var ugetWrapperNotFound = true ;
23- var interruptDownload = false ;
2427var disposition = '' ;
2528var hostName = 'com.javahelps.ugetchromewrapper' ;
2629var ugetChromeWrapperVersion ;
2730var ugetVersion ;
2831var chromeVersion ;
32+ var firefoxVersion ;
2933var filter = [ ] ;
3034var keywords = [ ] ;
3135var requestList = [ {
4751} catch ( ex ) {
4852 chromeVersion = 33 ;
4953}
54+ try {
55+ browser . runtime . getBrowserInfo ( ) . then (
56+ function ( info ) {
57+ if ( info . name === 'Firefox' ) {
58+ firefoxVersion = info . version . replace ( / [ a b ] \d + / , '' ) ;
59+ }
60+ }
61+ ) ;
62+ } catch ( ex ) {
63+ firefoxVersion = 0 ;
64+ }
65+
5066chromeVersion = parseInt ( chromeVersion ) ;
5167sendMessageToHost ( {
5268 version : "2.0.3"
@@ -77,7 +93,7 @@ var message = {
7793} ;
7894
7995// Listen to the key press
80- chrome . extension . onRequest . addListener ( function ( request , sender , sendResponse ) {
96+ browser . runtime . onMessage . addListener ( function ( request , sender , sendResponse ) {
8197 var msg = request . message ;
8298 if ( msg === 'enable' ) {
8399 // Temporarily enable
@@ -93,7 +109,7 @@ chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
93109
94110// Send message to the uget-chrome-wrapper
95111function sendMessageToHost ( message ) {
96- chrome . runtime . sendNativeMessage ( hostName , message , function ( response ) {
112+ browser . runtime . sendNativeMessage ( hostName , message , function ( response ) {
97113 ugetWrapperNotFound = ( response == null ) ;
98114 if ( ! ugetWrapperNotFound && ! ugetChromeWrapperVersion ) {
99115 ugetChromeWrapperVersion = response . version ;
@@ -130,13 +146,13 @@ function postParams(source) {
130146}
131147
132148// Add to Chrome context menu
133- chrome . contextMenus . create ( {
149+ browser . contextMenus . create ( {
134150 title : 'Download with uGet' ,
135151 id : "download_with_uget" ,
136152 contexts : [ 'link' ]
137153} ) ;
138154
139- chrome . contextMenus . onClicked . addListener ( function ( info , tab ) {
155+ browser . contextMenus . onClicked . addListener ( function ( info , tab ) {
140156 "use strict" ;
141157 if ( info . menuItemId === "download_with_uget" ) {
142158 clearMessage ( ) ;
@@ -147,8 +163,8 @@ chrome.contextMenus.onClicked.addListener(function(info, tab) {
147163 }
148164} ) ;
149165
150- // Interrupt Google Chrome download
151- chrome . downloads . onCreated . addListener ( function ( downloadItem ) {
166+ // Interrupt downloads on creation
167+ browser . downloads . onCreated . addListener ( function ( downloadItem ) {
152168
153169 if ( ugetWrapperNotFound || ! interruptDownloads ) { // uget-chrome-wrapper not installed
154170 return ;
@@ -175,10 +191,13 @@ chrome.downloads.onCreated.addListener(function(downloadItem) {
175191 return ;
176192 }
177193
178- chrome . downloads . cancel ( downloadItem . id ) ; // Cancel the download
179- chrome . downloads . erase ( {
180- id : downloadItem . id
181- } ) ; // Erase the download from list
194+ // Cancel the download
195+ browser . downloads . cancel ( downloadItem . id ) . then (
196+ function ( ) {
197+ // Erase the download from list
198+ browser . downloads . erase ( { id : downloadItem . id } ) ; // ignore callbacks
199+ }
200+ ) ;
182201
183202 clearMessage ( ) ;
184203 message . url = url ;
@@ -188,8 +207,8 @@ chrome.downloads.onCreated.addListener(function(downloadItem) {
188207 sendMessageToHost ( message ) ;
189208} ) ;
190209
191- chrome . webRequest . onBeforeRequest . addListener ( function ( details ) {
192- if ( details . method == 'POST' ) {
210+ browser . webRequest . onBeforeRequest . addListener ( function ( details ) {
211+ if ( details . method === 'POST' ) {
193212 message . postdata = postParams ( details . requestBody . formData ) ;
194213 }
195214 return {
@@ -207,7 +226,7 @@ chrome.webRequest.onBeforeRequest.addListener(function(details) {
207226 'blocking' ,
208227 'requestBody'
209228] ) ;
210- chrome . webRequest . onBeforeSendHeaders . addListener ( function ( details ) {
229+ browser . webRequest . onBeforeSendHeaders . addListener ( function ( details ) {
211230 clearMessage ( ) ;
212231 currRequest ++ ;
213232 if ( currRequest > 2 )
@@ -238,7 +257,7 @@ chrome.webRequest.onBeforeSendHeaders.addListener(function(details) {
238257 'blocking' ,
239258 'requestHeaders'
240259] ) ;
241- chrome . webRequest . onHeadersReceived . addListener ( function ( details ) {
260+ browser . webRequest . onHeadersReceived . addListener ( function ( details ) {
242261
243262 if ( ugetWrapperNotFound ) { // uget-chrome-wrapper not installed
244263 return {
@@ -258,7 +277,7 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
258277 } ;
259278 }
260279
261- interruptDownload = false ;
280+ var interruptDownload = false ;
262281 message . url = details . url ;
263282 var contentType = "" ;
264283
@@ -294,7 +313,7 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
294313 }
295314 }
296315 }
297- if ( interruptDownload == true && interruptDownloads == true ) {
316+ if ( interruptDownload && interruptDownloads ) {
298317 for ( var i = 0 ; i < filter . length ; i ++ ) {
299318 if ( filter [ i ] != "" && contentType . lastIndexOf ( filter [ i ] ) != - 1 ) {
300319 return {
@@ -315,12 +334,12 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
315334 sendMessageToHost ( message ) ;
316335 message . postdata = '' ;
317336 var scheme = / ^ h t t p s / . test ( details . url ) ? 'https' : 'http' ;
318- if ( chromeVersion >= 35 ) {
337+ if ( chromeVersion >= 35 || firefoxVersion >= 51 ) {
319338 return {
320339 redirectUrl : "javascript:"
321340 } ;
322341 } else if ( details . frameId === 0 ) {
323- chrome . tabs . update ( details . tabId , {
342+ browser . tabs . update ( details . tabId , {
324343 url : "javascript:"
325344 } ) ;
326345 var responseHeaders = details . responseHeaders . filter ( function ( header ) {
@@ -343,7 +362,6 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
343362 cancel : true
344363 } ;
345364 }
346- interruptDownloads == true ;
347365 clearMessage ( ) ;
348366 return {
349367 responseHeaders : details . responseHeaders
@@ -363,13 +381,13 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
363381
364382function updateKeywords ( data ) {
365383 keywords = data . split ( / [ \s , ] + / ) ;
366- } ;
384+ }
367385
368386function isBlackListed ( url ) {
369387 if ( url . includes ( "//docs.google.com/" ) || url . includes ( "googleusercontent.com/docs" ) ) { // Cannot download from Google Docs
370388 return true ;
371389 }
372- for ( keyword of keywords ) {
390+ for ( var keyword of keywords ) {
373391 if ( url . includes ( keyword ) ) {
374392 return true ;
375393 }
@@ -381,11 +399,11 @@ function isBlackListed(url) {
381399function setInterruptDownload ( interrupt , writeToStorage ) {
382400 interruptDownloads = interrupt ;
383401 if ( interrupt ) {
384- chrome . browserAction . setIcon ( {
402+ browser . browserAction . setIcon ( {
385403 path : "./icon_32.png"
386404 } ) ;
387405 } else {
388- chrome . browserAction . setIcon ( {
406+ browser . browserAction . setIcon ( {
389407 path : "./icon_disabled_32.png"
390408 } ) ;
391409 }
0 commit comments