Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Youtube wall popup to v10 #1387

Merged
merged 3 commits into from
Nov 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 34 additions & 20 deletions extension-manifest-v2/app/content-scripts/youtube.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,40 @@
/**
* Ghostery Browser Extension
* https://www.ghostery.com/
*
* Copyright 2017-present Ghostery GmbH. All rights reserved.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0
*/

import detectWall from '@ghostery/ui/youtube/wall';
import { showIframe, closeIframe } from '@ghostery/ui/iframe';

// Based on https://github.com/AdguardTeam/AdguardFilters/blob/e5ae8e3194f8d18bdcc660d4c42282e4a96ca5b9/AnnoyancesFilter/Popups/sections/antiadblock.txt#L2044
const ADBLOCKER_WALL_SELECTORS = [
'ytd-watch-flexy:not([hidden]) ytd-enforcement-message-view-model > div.ytd-enforcement-message-view-model',
];
function isFeatureDisabled() {
return new Promise((resolve) => {
chrome.storage.local.get(['youtube_dont_show_again'], (storage) => {
resolve(storage.youtube_dont_show_again);
});
});
}

let isShown = false;
if (!chrome.extension.inIncognitoContext) {
(async () => {
if (await isFeatureDisabled()) return;

chrome.storage.local.get(['youtube_dont_show_again'], (storage) => {
if (storage.youtube_dont_show_again || chrome.extension.inIncognitoContext) {
return;
}
window.addEventListener('yt-navigate-start', () => {
closeIframe();
}, true);

window.addEventListener('yt-navigate-start', () => {
isShown = false;
closeIframe();
}, true);
detectWall(async () => {
if (await isFeatureDisabled()) return;

setInterval(() => {
if (!isShown && document.querySelectorAll(ADBLOCKER_WALL_SELECTORS).length > 0) {
showIframe(chrome.runtime.getURL(`app/templates/youtube.html?url=${encodeURIComponent(window.location.href)}`), '460px');
isShown = true;
}
}, 2000);
});
showIframe(
chrome.runtime.getURL(`app/templates/youtube.html?url=${encodeURIComponent(window.location.href)}`),
'460px',
);
});
})();
}
112 changes: 0 additions & 112 deletions extension-manifest-v2/app/youtube/components/message.js

This file was deleted.

9 changes: 5 additions & 4 deletions extension-manifest-v2/app/youtube/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0
*/

import { mount, html } from 'hybrids';

import '@ghostery/ui/onboarding';
import './components/message';
import '@ghostery/ui/youtube';
import { setupIframe, closeIframe } from '@ghostery/ui/iframe';

setupIframe();
Expand All @@ -25,6 +25,7 @@ function openPrivateWindow() {
url,
},
});
closeIframe();
}

function openBlog(slug) {
Expand All @@ -46,12 +47,12 @@ function dontAsk() {

mount(document.body, {
content: () => html`
<youtube-message
<ui-youtube-wall
onclose="${() => closeIframe()}"
ondontask="${() => dontAsk()}"
onopenblog1="${() => openBlog('enable-extensions-in-incognito')}"
onopenblog2="${() => openBlog('whats-happening-with-youtube-ads')}"
onopenprivatewindow="${() => openPrivateWindow()}"
></youtube-message>
></ui-youtube-wall>
`,
});
6 changes: 6 additions & 0 deletions extension-manifest-v3/src/background/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
sendResponse(tab);
});
return true;
case 'openTabWithUrl':
chrome.tabs.create({ url: msg.url });
break;
case 'openPrivateWindowWithUrl':
chrome.windows.create({ url: msg.url, incognito: true });
break;
}

return false;
Expand Down
55 changes: 55 additions & 0 deletions extension-manifest-v3/src/content_scripts/youtube.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/**
* Ghostery Browser Extension
* https://www.ghostery.com/
*
* Copyright 2017-present Ghostery GmbH. All rights reserved.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0
*/

import { showIframe, closeIframe } from '@ghostery/ui/iframe';
import detectWall from '@ghostery/ui/youtube/wall';

async function isFeatureDisabled() {
const { options, youtubeDontAsk } = await chrome.storage.local.get([
'options',
'youtubeDontAsk',
]);

if (
// User's choice to not show the wall
youtubeDontAsk ||
// Terms not accepted or paused domain
!options ||
!options.terms ||
options.paused.some(({ id }) => id.includes('youtube.com'))
) {
return true;
}

return false;
}

// INFO: Safari always returns false for `inIncognitoContext`
if (!chrome.extension.inIncognitoContext) {
(async () => {
if (await isFeatureDisabled()) return;

window.addEventListener('yt-navigate-start', () => closeIframe(), true);

detectWall(async () => {
if (await isFeatureDisabled()) return;
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

YT page is long living app, so the condition must be checked each time - not only at startup (applies to v8 & v10).


showIframe(
chrome.runtime.getURL(
`/pages/youtube/index.html?url=${encodeURIComponent(
window.location.href,
)}`,
),
'460px',
);
});
})();
}
10 changes: 8 additions & 2 deletions extension-manifest-v3/src/manifest.chromium.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,12 @@
"js": [
"content_scripts/whotracksme/reporting.js"
]
}
},
{
"matches": ["*://www.youtube.com/*"],
"run_at": "document_start",
"js": ["content_scripts/youtube.js"]
}
],
"web_accessible_resources": [
{
Expand All @@ -103,7 +108,8 @@
"pages/autoconsent/index.html",
"pages/onboarding/index.html",
"pages/onboarding/iframe.html",
"pages/onboarding/opera-serp.html"
"pages/onboarding/opera-serp.html",
"pages/youtube/index.html"
],
"all_frames": true,
"matches": [
Expand Down
10 changes: 8 additions & 2 deletions extension-manifest-v3/src/manifest.firefox.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,21 @@
"js": [
"content_scripts/whotracksme/reporting.js"
]
}
},
{
"matches": ["*://www.youtube.com/*"],
"run_at": "document_start",
"js": ["content_scripts/youtube.js"]
}
],
"web_accessible_resources": [
"content_scripts/trackers-preview.js",
"content_scripts/prevent-serp-tracking.js",
"pages/trackers-preview/index.html",
"pages/autoconsent/index.html",
"pages/onboarding/index.html",
"pages/onboarding/iframe.html"
"pages/onboarding/iframe.html",
"pages/youtube/index.html"
],
"browser_specific_settings": {
"gecko": {
Expand Down
10 changes: 8 additions & 2 deletions extension-manifest-v3/src/manifest.safari.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,12 @@
"js": [
"content_scripts/whotracksme/reporting.js"
]
}
},
{
"matches": ["*://www.youtube.com/*"],
"run_at": "document_start",
"js": ["content_scripts/youtube.js"]
}
],
"web_accessible_resources": [
"content_scripts/whotracksme/ghostery-whotracksme.js",
Expand All @@ -103,7 +108,8 @@
"pages/trackers-preview/index.html",
"pages/autoconsent/index.html",
"pages/onboarding/index.html",
"pages/onboarding/iframe.html"
"pages/onboarding/iframe.html",
"pages/youtube/index.html"
],
"content_security_policy" : {},
"browser_specific_settings": {
Expand Down
10 changes: 10 additions & 0 deletions extension-manifest-v3/src/pages/youtube/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Youtube Wall</title>
<script src="./index.js" type="module" async></script>
</head>
<body></body>
</html>
Loading
Loading