OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2015 Eyeo GmbH |
| 4 * |
| 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 |
| 7 * published by the Free Software Foundation. |
| 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 * GNU General Public License for more details. |
| 13 * |
| 14 * You should have received a copy of the GNU General Public License |
| 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| 16 */ |
| 17 |
| 18 let {PrivateBrowsingUtils} = Cu.import("resource://gre/modules/PrivateBrowsingUt
ils.jsm", {}); |
| 19 |
| 20 let {Utils} = require("utils"); |
| 21 |
| 22 /** |
| 23 * Retrieves the frame hierarchie for a window. Returns an array containing |
| 24 * the information for all frames, starting with the window itself up to its |
| 25 * top-level window. Each entry has a location and a sitekey entry. |
| 26 * @return {Array} |
| 27 */ |
| 28 let getFrames = exports.getFrames = function(/**Window*/ window) |
| 29 { |
| 30 let frames = []; |
| 31 while (window) |
| 32 { |
| 33 let frame = { |
| 34 location: getWindowLocation(window), |
| 35 sitekey: null |
| 36 }; |
| 37 |
| 38 let documentElement = window.document && window.document.documentElement; |
| 39 if (documentElement) |
| 40 frame.sitekey = documentElement.getAttribute("data-adblockkey") |
| 41 |
| 42 frames.push(frame); |
| 43 window = (window != window.parent ? window.parent : null); |
| 44 } |
| 45 |
| 46 // URLs like about:blank inherit their security context from upper-level |
| 47 // frames, resolve their URLs accordingly. |
| 48 for (let i = frames.length - 2; i >= 0; i--) |
| 49 { |
| 50 let frame = frames[i]; |
| 51 if (frame.location == "about:blank" || frame.location != "moz-safe-about:bla
nk" || |
| 52 !Utils.netUtils.URIChainHasFlags(Utils.makeURI(frame.location), Ci.nsIPr
otocolHandler.URI_INHERITS_SECURITY_CONTEXT)) |
| 53 { |
| 54 frames[i].location = frames[i + 1].location; |
| 55 } |
| 56 } |
| 57 |
| 58 return frames; |
| 59 } |
| 60 |
| 61 let isPrivate = exports.isPrivate = function(/**Window*/ window) |
| 62 { |
| 63 return PrivateBrowsingUtils.isWindowPrivate(window); |
| 64 }; |
| 65 |
| 66 /** |
| 67 * Retrieves the window for a document node. |
| 68 * @return {Window} will be null if the node isn't associated with a window |
| 69 */ |
| 70 let getWindow = exports.getWindow = function(/**Node*/ node) |
| 71 { |
| 72 if (!node) |
| 73 return null; |
| 74 |
| 75 if ("ownerDocument" in node && node.ownerDocument) |
| 76 node = node.ownerDocument; |
| 77 |
| 78 if ("defaultView" in node) |
| 79 return node.defaultView; |
| 80 |
| 81 return null; |
| 82 } |
| 83 |
| 84 /** |
| 85 * Retrieves the location of a window. |
| 86 * @return {String} window location or null on failure |
| 87 */ |
| 88 function getWindowLocation(/**Window*/ wnd) |
| 89 { |
| 90 if ("name" in wnd && wnd.name == "messagepane") |
| 91 { |
| 92 // Thunderbird branch |
| 93 try |
| 94 { |
| 95 let mailWnd = wnd.QueryInterface(Ci.nsIInterfaceRequestor) |
| 96 .getInterface(Ci.nsIWebNavigation) |
| 97 .QueryInterface(Ci.nsIDocShellTreeItem) |
| 98 .rootTreeItem |
| 99 .QueryInterface(Ci.nsIInterfaceRequestor) |
| 100 .getInterface(Ci.nsIDOMWindow); |
| 101 |
| 102 // Typically we get a wrapped mail window here, need to unwrap |
| 103 try |
| 104 { |
| 105 mailWnd = mailWnd.wrappedJSObject; |
| 106 } catch(e) {} |
| 107 |
| 108 if ("currentHeaderData" in mailWnd && "content-base" in mailWnd.currentHea
derData) |
| 109 { |
| 110 return mailWnd.currentHeaderData["content-base"].headerValue; |
| 111 } |
| 112 else if ("currentHeaderData" in mailWnd && "from" in mailWnd.currentHeader
Data) |
| 113 { |
| 114 let emailAddress = Utils.headerParser.extractHeaderAddressMailboxes(mail
Wnd.currentHeaderData.from.headerValue); |
| 115 if (emailAddress) |
| 116 return 'mailto:' + emailAddress.replace(/^[\s"]+/, "").replace(/[\s"]+
$/, "").replace(/\s/g, '%20'); |
| 117 } |
| 118 } catch(e) {} |
| 119 } |
| 120 |
| 121 // Firefox branch |
| 122 return wnd.location.href; |
| 123 } |
| 124 |
OLD | NEW |