OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2015 Eyeo GmbH | 3 * Copyright (C) 2006-2015 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 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 try | 492 try |
493 { | 493 { |
494 // nsILoadInfo.contentPolicyType was introduced in Gecko 35, then | 494 // nsILoadInfo.contentPolicyType was introduced in Gecko 35, then |
495 // renamed to nsILoadInfo.externalContentPolicyType in Gecko 44. | 495 // renamed to nsILoadInfo.externalContentPolicyType in Gecko 44. |
496 let loadInfo = oldChannel.loadInfo; | 496 let loadInfo = oldChannel.loadInfo; |
497 let contentType = ("externalContentPolicyType" in loadInfo ? | 497 let contentType = ("externalContentPolicyType" in loadInfo ? |
498 loadInfo.externalContentPolicyType : loadInfo.contentPolicyType); | 498 loadInfo.externalContentPolicyType : loadInfo.contentPolicyType); |
499 if (!contentType) | 499 if (!contentType) |
500 return; | 500 return; |
501 | 501 |
502 let newLocation = null; | |
503 try | |
504 { | |
505 newLocation = newChannel.URI; | |
506 } catch(e2) {} | |
507 if (!newLocation) | |
508 return; | |
509 | |
510 let wnd = Utils.getRequestWindow(newChannel); | 502 let wnd = Utils.getRequestWindow(newChannel); |
511 if (!wnd) | 503 if (!wnd) |
512 return; | 504 return; |
513 | 505 |
514 if (contentType == Policy.type.POPUP && wnd.opener) | 506 if (contentType == Ci.nsIContentPolicy.TYPE_DOCUMENT) |
515 { | 507 { |
516 // Popups are initiated by their opener, not their own window. | 508 if (wnd.history.length <= 1 && wnd.opener) |
517 wnd = wnd.opener; | 509 { |
| 510 // Special treatment for pop-up windows - this will close the window |
| 511 // rather than preventing the redirect. Note that we might not have |
| 512 // seen the original channel yet because the redirect happened before |
| 513 // the async code in observe() had a chance to run. |
| 514 this.observe(wnd, "content-document-global-created", null, oldChannel.
URI); |
| 515 this.observe(wnd, "content-document-global-created", null, newChannel.
URI); |
| 516 } |
| 517 return; |
518 } | 518 } |
519 | 519 |
520 if (!Policy.processNode(wnd, wnd.document, contentType, newLocation, false
)) | 520 if (!Policy.processNode(wnd, wnd.document, contentType, newChannel.URI, fa
lse)) |
521 result = Cr.NS_BINDING_ABORTED; | 521 result = Cr.NS_BINDING_ABORTED; |
522 } | 522 } |
523 catch (e) | 523 catch (e) |
524 { | 524 { |
525 // We shouldn't throw exceptions here - this will prevent the redirect. | 525 // We shouldn't throw exceptions here - this will prevent the redirect. |
526 Cu.reportError(e); | 526 Cu.reportError(e); |
527 } | 527 } |
528 finally | 528 finally |
529 { | 529 { |
530 callback.onRedirectVerifyCallback(result); | 530 callback.onRedirectVerifyCallback(result); |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 if (!wnd || wnd.closed) | 729 if (!wnd || wnd.closed) |
730 return; | 730 return; |
731 | 731 |
732 if (entry.type == Policy.type.OBJECT) | 732 if (entry.type == Policy.type.OBJECT) |
733 { | 733 { |
734 node.removeEventListener("mouseover", objectMouseEventHander, true); | 734 node.removeEventListener("mouseover", objectMouseEventHander, true); |
735 node.removeEventListener("mouseout", objectMouseEventHander, true); | 735 node.removeEventListener("mouseout", objectMouseEventHander, true); |
736 } | 736 } |
737 Policy.processNode(wnd, node, entry.type, Utils.makeURI(entry.location), true)
; | 737 Policy.processNode(wnd, node, entry.type, Utils.makeURI(entry.location), true)
; |
738 } | 738 } |
OLD | NEW |