18
18
* along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
*/
20
20
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
+
21
25
var interruptDownloads = true ;
22
26
var ugetWrapperNotFound = true ;
23
- var interruptDownload = false ;
24
27
var disposition = '' ;
25
28
var hostName = 'com.javahelps.ugetchromewrapper' ;
26
29
var ugetChromeWrapperVersion ;
27
30
var ugetVersion ;
28
31
var chromeVersion ;
32
+ var firefoxVersion ;
29
33
var filter = [ ] ;
30
34
var keywords = [ ] ;
31
35
var requestList = [ {
47
51
} catch ( ex ) {
48
52
chromeVersion = 33 ;
49
53
}
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
+
50
66
chromeVersion = parseInt ( chromeVersion ) ;
51
67
sendMessageToHost ( {
52
68
version : "2.0.3"
@@ -77,7 +93,7 @@ var message = {
77
93
} ;
78
94
79
95
// Listen to the key press
80
- chrome . extension . onRequest . addListener ( function ( request , sender , sendResponse ) {
96
+ browser . runtime . onMessage . addListener ( function ( request , sender , sendResponse ) {
81
97
var msg = request . message ;
82
98
if ( msg === 'enable' ) {
83
99
// Temporarily enable
@@ -93,7 +109,7 @@ chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
93
109
94
110
// Send message to the uget-chrome-wrapper
95
111
function sendMessageToHost ( message ) {
96
- chrome . runtime . sendNativeMessage ( hostName , message , function ( response ) {
112
+ browser . runtime . sendNativeMessage ( hostName , message , function ( response ) {
97
113
ugetWrapperNotFound = ( response == null ) ;
98
114
if ( ! ugetWrapperNotFound && ! ugetChromeWrapperVersion ) {
99
115
ugetChromeWrapperVersion = response . version ;
@@ -130,13 +146,13 @@ function postParams(source) {
130
146
}
131
147
132
148
// Add to Chrome context menu
133
- chrome . contextMenus . create ( {
149
+ browser . contextMenus . create ( {
134
150
title : 'Download with uGet' ,
135
151
id : "download_with_uget" ,
136
152
contexts : [ 'link' ]
137
153
} ) ;
138
154
139
- chrome . contextMenus . onClicked . addListener ( function ( info , tab ) {
155
+ browser . contextMenus . onClicked . addListener ( function ( info , tab ) {
140
156
"use strict" ;
141
157
if ( info . menuItemId === "download_with_uget" ) {
142
158
clearMessage ( ) ;
@@ -147,8 +163,8 @@ chrome.contextMenus.onClicked.addListener(function(info, tab) {
147
163
}
148
164
} ) ;
149
165
150
- // Interrupt Google Chrome download
151
- chrome . downloads . onCreated . addListener ( function ( downloadItem ) {
166
+ // Interrupt downloads on creation
167
+ browser . downloads . onCreated . addListener ( function ( downloadItem ) {
152
168
153
169
if ( ugetWrapperNotFound || ! interruptDownloads ) { // uget-chrome-wrapper not installed
154
170
return ;
@@ -175,10 +191,13 @@ chrome.downloads.onCreated.addListener(function(downloadItem) {
175
191
return ;
176
192
}
177
193
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
+ ) ;
182
201
183
202
clearMessage ( ) ;
184
203
message . url = url ;
@@ -188,8 +207,8 @@ chrome.downloads.onCreated.addListener(function(downloadItem) {
188
207
sendMessageToHost ( message ) ;
189
208
} ) ;
190
209
191
- chrome . webRequest . onBeforeRequest . addListener ( function ( details ) {
192
- if ( details . method == 'POST' ) {
210
+ browser . webRequest . onBeforeRequest . addListener ( function ( details ) {
211
+ if ( details . method === 'POST' ) {
193
212
message . postdata = postParams ( details . requestBody . formData ) ;
194
213
}
195
214
return {
@@ -207,7 +226,7 @@ chrome.webRequest.onBeforeRequest.addListener(function(details) {
207
226
'blocking' ,
208
227
'requestBody'
209
228
] ) ;
210
- chrome . webRequest . onBeforeSendHeaders . addListener ( function ( details ) {
229
+ browser . webRequest . onBeforeSendHeaders . addListener ( function ( details ) {
211
230
clearMessage ( ) ;
212
231
currRequest ++ ;
213
232
if ( currRequest > 2 )
@@ -238,7 +257,7 @@ chrome.webRequest.onBeforeSendHeaders.addListener(function(details) {
238
257
'blocking' ,
239
258
'requestHeaders'
240
259
] ) ;
241
- chrome . webRequest . onHeadersReceived . addListener ( function ( details ) {
260
+ browser . webRequest . onHeadersReceived . addListener ( function ( details ) {
242
261
243
262
if ( ugetWrapperNotFound ) { // uget-chrome-wrapper not installed
244
263
return {
@@ -258,7 +277,7 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
258
277
} ;
259
278
}
260
279
261
- interruptDownload = false ;
280
+ var interruptDownload = false ;
262
281
message . url = details . url ;
263
282
var contentType = "" ;
264
283
@@ -294,7 +313,7 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
294
313
}
295
314
}
296
315
}
297
- if ( interruptDownload == true && interruptDownloads == true ) {
316
+ if ( interruptDownload && interruptDownloads ) {
298
317
for ( var i = 0 ; i < filter . length ; i ++ ) {
299
318
if ( filter [ i ] != "" && contentType . lastIndexOf ( filter [ i ] ) != - 1 ) {
300
319
return {
@@ -315,12 +334,12 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
315
334
sendMessageToHost ( message ) ;
316
335
message . postdata = '' ;
317
336
var scheme = / ^ h t t p s / . test ( details . url ) ? 'https' : 'http' ;
318
- if ( chromeVersion >= 35 ) {
337
+ if ( chromeVersion >= 35 || firefoxVersion >= 51 ) {
319
338
return {
320
339
redirectUrl : "javascript:"
321
340
} ;
322
341
} else if ( details . frameId === 0 ) {
323
- chrome . tabs . update ( details . tabId , {
342
+ browser . tabs . update ( details . tabId , {
324
343
url : "javascript:"
325
344
} ) ;
326
345
var responseHeaders = details . responseHeaders . filter ( function ( header ) {
@@ -343,7 +362,6 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
343
362
cancel : true
344
363
} ;
345
364
}
346
- interruptDownloads == true ;
347
365
clearMessage ( ) ;
348
366
return {
349
367
responseHeaders : details . responseHeaders
@@ -363,13 +381,13 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
363
381
364
382
function updateKeywords ( data ) {
365
383
keywords = data . split ( / [ \s , ] + / ) ;
366
- } ;
384
+ }
367
385
368
386
function isBlackListed ( url ) {
369
387
if ( url . includes ( "//docs.google.com/" ) || url . includes ( "googleusercontent.com/docs" ) ) { // Cannot download from Google Docs
370
388
return true ;
371
389
}
372
- for ( keyword of keywords ) {
390
+ for ( var keyword of keywords ) {
373
391
if ( url . includes ( keyword ) ) {
374
392
return true ;
375
393
}
@@ -381,11 +399,11 @@ function isBlackListed(url) {
381
399
function setInterruptDownload ( interrupt , writeToStorage ) {
382
400
interruptDownloads = interrupt ;
383
401
if ( interrupt ) {
384
- chrome . browserAction . setIcon ( {
402
+ browser . browserAction . setIcon ( {
385
403
path : "./icon_32.png"
386
404
} ) ;
387
405
} else {
388
- chrome . browserAction . setIcon ( {
406
+ browser . browserAction . setIcon ( {
389
407
path : "./icon_disabled_32.png"
390
408
} ) ;
391
409
}
0 commit comments