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 |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 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/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 (function() | 18 (function() |
19 { | 19 { |
20 /* Pages */ | 20 /* Pages */ |
21 | 21 |
22 var pages = {__proto__: null}; | 22 var pages = {__proto__: null}; |
23 var pageCounter = 0; | 23 var pageCounter = 0; |
24 | 24 |
25 var Page = function(id, tab, url) | 25 var Page = function(id, tab, url) |
26 { | 26 { |
27 this._id = id; | 27 this._id = id; |
28 this._tab = tab; | 28 this._tab = tab; |
29 this._frames = [{url: url, parent: null}]; | 29 this._frames = [{url: new URL(url), parent: null}]; |
30 | 30 |
31 if (tab.page) | 31 if (tab.page) |
32 this._messageProxy = new ext._MessageProxy(tab.page); | 32 this._messageProxy = new ext._MessageProxy(tab.page); |
33 else | 33 else |
34 // while the new tab page is shown on Safari 7, the 'page' property | 34 // while the new tab page is shown on Safari 7, the 'page' property |
35 // of the tab is undefined, and we can't send messages to that page | 35 // of the tab is undefined, and we can't send messages to that page |
36 this._messageProxy = { | 36 this._messageProxy = { |
37 handleRequest: function() {}, | 37 handleRequest: function() {}, |
38 handleResponse: function() {}, | 38 handleResponse: function() {}, |
39 sendMessage: function() {} | 39 sendMessage: function() {} |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 // loaded in the same tab. If there is more than one match, | 567 // loaded in the same tab. If there is more than one match, |
568 // the most recent loaded page and frame is preferred. | 568 // the most recent loaded page and frame is preferred. |
569 for (var curPageId in tab._pages) | 569 for (var curPageId in tab._pages) |
570 { | 570 { |
571 var curPage = pages[curPageId]; | 571 var curPage = pages[curPageId]; |
572 | 572 |
573 for (var i = 0; i < curPage._frames.length; i++) | 573 for (var i = 0; i < curPage._frames.length; i++) |
574 { | 574 { |
575 var curFrame = curPage._frames[i]; | 575 var curFrame = curPage._frames[i]; |
576 | 576 |
577 if (curFrame.url == message.referrer) | 577 if (curFrame.url.href == message.referrer) |
578 { | 578 { |
579 pageId = curPageId; | 579 pageId = curPageId; |
580 page = curPage; | 580 page = curPage; |
581 parentFrame = curFrame; | 581 parentFrame = curFrame; |
582 } | 582 } |
583 | 583 |
584 if (i == 0) | 584 if (i == 0) |
585 { | 585 { |
586 lastPageId = curPageId; | 586 lastPageId = curPageId; |
587 lastPage = curPage; | 587 lastPage = curPage; |
588 lastPageTopLevelFrame = curFrame; | 588 lastPageTopLevelFrame = curFrame; |
589 } | 589 } |
590 } | 590 } |
591 } | 591 } |
592 | 592 |
593 // if we can't find the parent frame and its page, fall back to | 593 // if we can't find the parent frame and its page, fall back to |
594 // the page most recently loaded in the tab and its top level fram
e | 594 // the page most recently loaded in the tab and its top level fram
e |
595 if (!page) | 595 if (!page) |
596 { | 596 { |
597 pageId = lastPageId; | 597 pageId = lastPageId; |
598 page = lastPage; | 598 page = lastPage; |
599 parentFrame = lastPageTopLevelFrame; | 599 parentFrame = lastPageTopLevelFrame; |
600 } | 600 } |
601 | 601 |
602 frameId = page._frames.length; | 602 frameId = page._frames.length; |
603 page._frames.push({url: message.url, parent: parentFrame}); | 603 page._frames.push({url: new URL(message.url), parent: parentFrame}
); |
604 } | 604 } |
605 | 605 |
606 event.message = {pageId: pageId, frameId: frameId}; | 606 event.message = {pageId: pageId, frameId: frameId}; |
607 break; | 607 break; |
608 case "webRequest": | 608 case "webRequest": |
609 var page = pages[event.message.pageId]; | 609 var page = pages[event.message.pageId]; |
| 610 var frame = page._frames[event.message.frameId]; |
| 611 |
610 var results = ext.webRequest.onBeforeRequest._dispatch( | 612 var results = ext.webRequest.onBeforeRequest._dispatch( |
611 event.message.url, | 613 new URL(event.message.url, frame.url), |
612 event.message.type, | 614 event.message.type, page, frame |
613 page, | |
614 page._frames[event.message.frameId] | |
615 ); | 615 ); |
616 | 616 |
617 event.message = (results.indexOf(false) == -1); | 617 event.message = (results.indexOf(false) == -1); |
618 break; | 618 break; |
619 case "proxy": | 619 case "proxy": |
620 event.message = backgroundPageProxy.handleMessage(event.message); | 620 event.message = backgroundPageProxy.handleMessage(event.message); |
621 break; | 621 break; |
622 case "request": | 622 case "request": |
623 var page = pages[event.message.pageId]; | 623 var page = pages[event.message.pageId]; |
624 var sender = {page: page, frame: page._frames[event.message.frameId]
}; | 624 var sender = {page: page, frame: page._frames[event.message.frameId]
}; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 | 662 |
663 ext.showOptions = function(callback) | 663 ext.showOptions = function(callback) |
664 { | 664 { |
665 var optionsUrl = safari.extension.baseURI + "options.html"; | 665 var optionsUrl = safari.extension.baseURI + "options.html"; |
666 | 666 |
667 for (var id in pages) | 667 for (var id in pages) |
668 { | 668 { |
669 var page = pages[id]; | 669 var page = pages[id]; |
670 var tab = page._tab; | 670 var tab = page._tab; |
671 | 671 |
672 if (page.url == optionsUrl && tab.browserWindow == safari.application.acti
veBrowserWindow) | 672 if (page.url.href == optionsUrl && tab.browserWindow == safari.application
.activeBrowserWindow) |
673 { | 673 { |
674 tab.activate(); | 674 tab.activate(); |
675 if (callback) | 675 if (callback) |
676 callback(page); | 676 callback(page); |
677 return; | 677 return; |
678 } | 678 } |
679 } | 679 } |
680 | 680 |
681 ext.pages.open(optionsUrl, callback); | 681 ext.pages.open(optionsUrl, callback); |
682 }; | 682 }; |
683 })(); | 683 })(); |
OLD | NEW |