Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 /* | 1 /* |
2 * This file is part of Adblock Plus <http://adblockplus.org/>, | 2 * This file is part of Adblock Plus <http://adblockplus.org/>, |
3 * Copyright (C) 2006-2013 Eyeo GmbH | 3 * Copyright (C) 2006-2013 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
280 /* Web request blocking */ | 280 /* Web request blocking */ |
281 | 281 |
282 document.addEventListener("beforeload", function(event) | 282 document.addEventListener("beforeload", function(event) |
283 { | 283 { |
284 var type; | 284 var type; |
285 | 285 |
286 switch(event.target.localName) | 286 switch(event.target.localName) |
287 { | 287 { |
288 case "frame": | 288 case "frame": |
289 case "iframe": | 289 case "iframe": |
290 type = "sub_rame"; | 290 type = "sub_frame"; |
291 break; | 291 break; |
292 case "img": | 292 case "img": |
293 type = "image"; | 293 type = "image"; |
294 break; | 294 break; |
295 case "object": | 295 case "object": |
296 case "embed": | 296 case "embed": |
297 type = "object"; | 297 type = "object"; |
298 break; | 298 break; |
299 case "script": | 299 case "script": |
300 type = "script"; | 300 type = "script"; |
301 break; | 301 break; |
302 case "link": | 302 case "link": |
303 if (/\bstylesheet\b/i.test(event.target.rel)) | 303 if (/\bstylesheet\b/i.test(event.target.rel)) |
304 { | 304 { |
305 type = "stylesheet"; | 305 type = "stylesheet"; |
306 break; | 306 break; |
307 } | 307 } |
308 default: | 308 default: |
309 type = "other"; | 309 type = "other"; |
310 } | 310 } |
311 | 311 |
312 if (!safari.self.tab.canLoad(event, { | 312 if (!safari.self.tab.canLoad( |
Felix Dahlke
2014/01/18 13:39:19
{ should go on its own line
Sebastian Noack
2014/01/19 10:19:40
Done.
| |
313 type: "webRequest", | 313 event, { |
314 payload: { | 314 type: "webRequest", |
315 url: event.url, | 315 payload: { |
316 type: type, | 316 url: event.url, |
317 documentUrl: document.location.href, | 317 type: type, |
318 isTopLevel: window == window.top | 318 documentUrl: document.location.href, |
319 } | 319 isTopLevel: window == window.top |
320 })) | 320 } |
321 } | |
322 )) | |
323 { | |
321 event.preventDefault(); | 324 event.preventDefault(); |
325 | |
326 // Safari doesn't dispatch an "error" or "load" event when preventing an | |
327 // element from loading by cancelling the "beforeload" event. So we have | |
328 // to dispatch it manually. Otherwise element collapsing wouldn't work. | |
329 var evt = document.createEvent("Event"); | |
330 evt.initEvent(type == "sub_frame" ? "load" : "error"); | |
331 event.target.dispatchEvent(evt); | |
332 } | |
322 }, true); | 333 }, true); |
323 | 334 |
324 | 335 |
325 /* API */ | 336 /* API */ |
326 | 337 |
327 ext.backgroundPage = { | 338 ext.backgroundPage = { |
328 sendMessage: function(message, responseCallback) { | 339 sendMessage: function(message, responseCallback) |
Felix Dahlke
2014/01/18 13:39:19
{ should go on its own line
Sebastian Noack
2014/01/19 10:19:40
Done.
| |
340 { | |
329 _sendMessage( | 341 _sendMessage( |
330 message, responseCallback, | 342 message, responseCallback, |
331 safari.self.tab, safari.self, | 343 safari.self.tab, safari.self, |
332 { | 344 { |
333 documentUrl: document.location.href, | 345 documentUrl: document.location.href, |
334 isTopLevel: window == window.top | 346 isTopLevel: window == window.top |
335 } | 347 } |
336 ); | 348 ); |
337 }, | 349 }, |
338 getWindow: function() | 350 getWindow: function() |
339 { | 351 { |
340 return proxy.getObject(0); | 352 return proxy.getObject(0); |
341 } | 353 } |
342 }; | 354 }; |
343 | 355 |
344 ext.onMessage = new ContentMessageEventTarget(); | 356 ext.onMessage = new ContentMessageEventTarget(); |
357 | |
358 | |
359 // Safari does not pass the element which the context menu is refering to | |
360 // so we need to add it to the event's user info. | |
361 document.addEventListener("contextmenu", function(event) | |
362 { | |
363 var element = event.srcElement; | |
364 safari.self.tab.setContextMenuEventUserInfo(event, { | |
365 srcUrl: ("src" in element) ? element.src : null, | |
366 tagName: element.localName | |
367 }); | |
368 }, false); | |
345 })(); | 369 })(); |
LEFT | RIGHT |