Skip to content

Commit

Permalink
Fix #88, catch up to 1.14.24
Browse files Browse the repository at this point in the history
Use vAPI.getURL to filter details.file in vAPI.tabs.injectScript.

Also moved some scripts around.
  • Loading branch information
el1t committed Jan 24, 2018
1 parent 37cf0d0 commit a9e2da8
Show file tree
Hide file tree
Showing 7 changed files with 324 additions and 263 deletions.
2 changes: 2 additions & 0 deletions platform/safari/Info.plist
Expand Up @@ -6,6 +6,8 @@
<string>Chris Aljoudi/Raymond Hill</string>
<key>Builder Version</key>
<string>534.57.2</string>
<key>DeveloperIdentifier</key>
<string>3NU33NW2M3</string>
<key>CFBundleDisplayName</key>
<string>{name}</string>
<key>CFBundleIdentifier</key>
Expand Down
263 changes: 1 addition & 262 deletions platform/safari/vapi-background.js

Large diffs are not rendered by default.

191 changes: 191 additions & 0 deletions platform/safari/vapi-cachestorage.js

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions platform/safari/vapi-client.js
Expand Up @@ -643,3 +643,8 @@ self.addEventListener('contextmenu', onContextMenu, true);
})(this);

/******************************************************************************/

vAPI.shutdown.add(function() {
vAPI.messaging.shutdown();
window.vAPI = undefined;
});
3 changes: 3 additions & 0 deletions platform/safari/vapi-common.js
Expand Up @@ -85,6 +85,9 @@ vAPI.getURL = function(path) {
if ( path.match(/^assets\/thirdparties\/.*\/[^\/.]*$/) ) {
path += '.txt';
}
if ( path[0] === '/' ) {
path = path.slice(1);
}
return safari.extension.baseURI + path;
};

Expand Down
114 changes: 114 additions & 0 deletions platform/safari/vapi-webrequest.js
@@ -0,0 +1,114 @@
/*******************************************************************************
uBlock - a browser extension to block requests.
Copyright (C) 2018 The uBlock authors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see {http://www.gnu.org/licenses/}.
Home: https://github.com/gorhill/uBlock
*/

/* global self, safari, SafariBrowserTab, µBlock */

// For background page

'use strict';

/******************************************************************************/

vAPI.net = {};

vAPI.net.registerListeners = function() {
var µb = µBlock,
µburi = µb.URI;

// Until Safari has more specific events, those are instead handled
// in the onBeforeRequestAdapter; clean them up so they're garbage-collected
vAPI.net.onBeforeSendHeaders = null;

var onBeforeRequest = vAPI.net.onBeforeRequest,
onBeforeRequestClient = onBeforeRequest.callback,
onHeadersReceivedClient = vAPI.net.onHeadersReceived.callback;

// https://github.com/el1t/uBlock-Safari/issues/32
// Ignore directives
var shouldBlockResponseHeader = {
script: /script-src/,
worker: /child-src/
};

var onBeforeRequestAdapter = function(e) {
if ( e.name !== 'canLoad' ) {
return;
}
e.stopPropagation && e.stopPropagation();
switch ( e.message.type ) {
case 'main_frame':
vAPI.tabs.onNavigation({
url: e.message.url,
frameId: 0,
tabId: vAPI.tabs.getTabId(e.target).toString()
});
e.message.hostname = µburi.hostnameFromURI(e.message.url);
e.message.tabId = vAPI.tabs.getTabId(e.target);
e.message.responseHeaders = [];
onBeforeRequestClient(e.message);
var blockVerdict = onHeadersReceivedClient(e.message);
blockVerdict = blockVerdict && blockVerdict.responseHeaders && blockVerdict.responseHeaders[0] &&
shouldBlockResponseHeader.script.test(blockVerdict.responseHeaders[0].value);
e.message = {
shouldBlock: blockVerdict === true
};
return;
case 'popup':
var openerTabId = vAPI.tabs.getTabId(e.target).toString();
var shouldBlock = !!vAPI.tabs.onPopupUpdated('preempt', openerTabId, e.message.url);
if ( !shouldBlock ) {
vAPI.tabs.popupCandidate = openerTabId;
}
e.message = {
shouldBlock: shouldBlock
};
break;
case 'popstate':
// No return value/message
vAPI.tabs.onUpdated(vAPI.tabs.getTabId(e.target), {
url: e.message.url
}, {
url: e.message.url
});
break;
case 'worker':
e.message.type = 'sub_frame';
e.message.hostname = µburi.hostnameFromURI(e.message.url);
e.message.tabId = vAPI.tabs.getTabId(e.target);
e.message.responseHeaders = [];
var blockVerdict = onHeadersReceivedClient(e.message);
blockVerdict = blockVerdict && blockVerdict.responseHeaders && blockVerdict.responseHeaders[0] &&
shouldBlockResponseHeader.worker.test(blockVerdict.responseHeaders[0].value);
e.message = {
shouldBlock: blockVerdict === true
}
return;
default:
e.message.hostname = µburi.hostnameFromURI(e.message.url);
e.message.tabId = vAPI.tabs.getTabId(e.target);
var blockVerdict = onBeforeRequestClient(e.message) || {};
blockVerdict.shouldBlock = blockVerdict.cancel === true || blockVerdict.redirectUrl !== undefined;
e.message = blockVerdict;
return;
}
};
safari.application.addEventListener('message', onBeforeRequestAdapter, true);
};
9 changes: 8 additions & 1 deletion tools/make-safari.sh
Expand Up @@ -27,8 +27,15 @@ cp platform/safari/Info.plist "$DES"/
cp platform/safari/Settings.plist "$DES"/
cp LICENSE.txt "$DES"/

cp platform/chromium/vapi.js "$DES"/js/

# Use chrome's usercss polyfill
cp platform/chromium/vapi-usercss.js "$DES"/js/
echo "*** uBlock0.safariextension: Concatenating content scripts..."
cat platform/chromium/vapi-usercss.js > /tmp/contentscript.js
echo >> /tmp/contentscript.js
grep -v "^'use strict';$" $DES/js/contentscript.js >> /tmp/contentscript.js
mv /tmp/contentscript.js $DES/js/contentscript.js
echo ''

# https://github.com/el1t/uBlock-Safari/issues/4
echo -n '*** uBlock0.safariextension: Adding extensions to extensionless assets...'
Expand Down

1 comment on commit a9e2da8

@volcbs
Copy link

@volcbs volcbs commented on a9e2da8 Jan 25, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Chris Aljoudi/Raymond Hill

Why not your name and gorhill?

Please sign in to comment.