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 = Object.create(null); | 22 var pages = Object.create(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 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 // loaded in the same tab. If there is more than one match, | 568 // loaded in the same tab. If there is more than one match, |
569 // the most recent loaded page and frame is preferred. | 569 // the most recent loaded page and frame is preferred. |
570 for (var curPageId in tab._pages) | 570 for (var curPageId in tab._pages) |
571 { | 571 { |
572 var curPage = pages[curPageId]; | 572 var curPage = pages[curPageId]; |
573 | 573 |
574 for (var i = 0; i < curPage._frames.length; i++) | 574 for (var i = 0; i < curPage._frames.length; i++) |
575 { | 575 { |
576 var curFrame = curPage._frames[i]; | 576 var curFrame = curPage._frames[i]; |
577 | 577 |
578 if (curFrame.url == message.referrer) | 578 if (curFrame.url.href == message.referrer) |
579 { | 579 { |
580 pageId = curPageId; | 580 pageId = curPageId; |
581 page = curPage; | 581 page = curPage; |
582 parentFrame = curFrame; | 582 parentFrame = curFrame; |
583 } | 583 } |
584 | 584 |
585 if (i == 0) | 585 if (i == 0) |
586 { | 586 { |
587 lastPageId = curPageId; | 587 lastPageId = curPageId; |
588 lastPage = curPage; | 588 lastPage = curPage; |
589 lastPageTopLevelFrame = curFrame; | 589 lastPageTopLevelFrame = curFrame; |
590 } | 590 } |
591 } | 591 } |
592 } | 592 } |
593 | 593 |
594 // if we can't find the parent frame and its page, fall back to | 594 // if we can't find the parent frame and its page, fall back to |
595 // the page most recently loaded in the tab and its top level fram
e | 595 // the page most recently loaded in the tab and its top level fram
e |
596 if (!page) | 596 if (!page) |
597 { | 597 { |
598 pageId = lastPageId; | 598 pageId = lastPageId; |
599 page = lastPage; | 599 page = lastPage; |
600 parentFrame = lastPageTopLevelFrame; | 600 parentFrame = lastPageTopLevelFrame; |
601 } | 601 } |
602 | 602 |
603 frameId = page._frames.length; | 603 frameId = page._frames.length; |
604 page._frames.push({url: message.url, parent: parentFrame}); | 604 page._frames.push({url: new URL(message.url), parent: parentFrame}
); |
605 } | 605 } |
606 | 606 |
607 event.message = {pageId: pageId, frameId: frameId}; | 607 event.message = {pageId: pageId, frameId: frameId}; |
608 break; | 608 break; |
609 case "webRequest": | 609 case "webRequest": |
610 var page = pages[event.message.pageId]; | 610 var page = pages[event.message.pageId]; |
| 611 var frame = page._frames[event.message.frameId]; |
| 612 |
611 var results = ext.webRequest.onBeforeRequest._dispatch( | 613 var results = ext.webRequest.onBeforeRequest._dispatch( |
612 event.message.url, | 614 new URL(event.message.url, frame.url), |
613 event.message.type, | 615 event.message.type, page, frame |
614 page, | |
615 page._frames[event.message.frameId] | |
616 ); | 616 ); |
617 | 617 |
618 event.message = (results.indexOf(false) == -1); | 618 event.message = (results.indexOf(false) == -1); |
619 break; | 619 break; |
620 case "proxy": | 620 case "proxy": |
621 event.message = backgroundPageProxy.handleMessage(event.message); | 621 event.message = backgroundPageProxy.handleMessage(event.message); |
622 break; | 622 break; |
623 case "request": | 623 case "request": |
624 var page = pages[event.message.pageId]; | 624 var page = pages[event.message.pageId]; |
625 var sender = {page: page, frame: page._frames[event.message.frameId]
}; | 625 var sender = {page: page, frame: page._frames[event.message.frameId]
}; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 | 663 |
664 ext.showOptions = function(callback) | 664 ext.showOptions = function(callback) |
665 { | 665 { |
666 var optionsUrl = safari.extension.baseURI + "options.html"; | 666 var optionsUrl = safari.extension.baseURI + "options.html"; |
667 | 667 |
668 for (var id in pages) | 668 for (var id in pages) |
669 { | 669 { |
670 var page = pages[id]; | 670 var page = pages[id]; |
671 var tab = page._tab; | 671 var tab = page._tab; |
672 | 672 |
673 if (page.url == optionsUrl && tab.browserWindow == safari.application.acti
veBrowserWindow) | 673 if (page.url.href == optionsUrl && tab.browserWindow == safari.application
.activeBrowserWindow) |
674 { | 674 { |
675 tab.activate(); | 675 tab.activate(); |
676 if (callback) | 676 if (callback) |
677 callback(page); | 677 callback(page); |
678 return; | 678 return; |
679 } | 679 } |
680 } | 680 } |
681 | 681 |
682 ext.pages.open(optionsUrl, callback); | 682 ext.pages.open(optionsUrl, callback); |
683 }; | 683 }; |
684 })(); | 684 })(); |
OLD | NEW |