From b4f7b2156069e331bf99bb40316905b88e28e24e Mon Sep 17 00:00:00 2001 From: danieltaub Date: Wed, 11 Nov 2020 08:22:40 +0200 Subject: [PATCH 001/350] added netflix video tracking --- src/index.html | 1 + src/manifest.json | 1 + src/options.html | 17 ++++++++++++++++ src/scripts/background.js | 43 ++++++++++++++++++++++++++++++++++++--- src/scripts/settings.js | 32 +++++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 3 deletions(-) diff --git a/src/index.html b/src/index.html index 68bc570..74a8876 100644 --- a/src/index.html +++ b/src/index.html @@ -39,6 +39,7 @@

set notifications after a certain time has elapsed

set a list of sites with no tracking

enable time tracking on youtube.com

+

enable time tracking on Netflix.com

diff --git a/src/manifest.json b/src/manifest.json index 8fbd0bd..ade87a8 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -27,6 +27,7 @@ ], "optional_permissions": [ "https://www.youtube.com/*", + "https://www.netflix.com/*", "notifications" ], "offline_enabled": true, diff --git a/src/options.html b/src/options.html index 4ac4756..ee3bc65 100644 --- a/src/options.html +++ b/src/options.html @@ -82,6 +82,7 @@
+
+ +
+ + +
+ +
+
diff --git a/src/scripts/background.js b/src/scripts/background.js index d069ceb..faf8571 100644 --- a/src/scripts/background.js +++ b/src/scripts/background.js @@ -16,6 +16,7 @@ var setting_notification_list; var setting_notification_message; var isHasPermissioForYouTube; +var isHasPermissioForNetflix; var isHasPermissioForNotification; function updateSummaryTime() { @@ -145,18 +146,28 @@ function isVideoPlayedOnPage() { function checkDOM(state, activeUrl, tab, activeTab) { if (state === 'idle' && isDomainEquals(activeUrl, "youtube.com")) { trackForYT(mainTRacker, activeUrl, tab, activeTab); + } else if (state === 'idle' && isDomainEquals(activeUrl, "netflix.com")) { + trackForNetflix(mainTRacker, activeUrl, tab, activeTab); } else activity.closeIntervalForCurrentTab(); } function trackForYT(callback, activeUrl, tab, activeTab) { if (isHasPermissioForYouTube) { - executeScript(callback, activeUrl, tab, activeTab); + executeScriptYoutube(callback, activeUrl, tab, activeTab); } else { - checkPermissionsForYT(executeScript, activity.closeIntervalForCurrentTab, callback, activeUrl, tab, activeTab); + checkPermissionsForYT(executeScriptYoutube, activity.closeIntervalForCurrentTab, callback, activeUrl, tab, activeTab); } } -function executeScript(callback, activeUrl, tab, activeTab) { +function trackForNetflix(callback, activeUrl, tab, activeTab) { + if (isHasPermissioForNetflix) { + executeScriptNetflix(callback, activeUrl, tab, activeTab); + } else { + checkPermissionsForNetflix(executeScriptNetflix, activity.closeIntervalForCurrentTab, callback, activeUrl, tab, activeTab); + } +} + +function executeScriptYoutube(callback, activeUrl, tab, activeTab) { chrome.tabs.executeScript({ code: "var videoElement = document.getElementsByTagName('video')[0]; (videoElement !== undefined && videoElement.currentTime > 0 && !videoElement.paused && !videoElement.ended && videoElement.readyState > 2);" }, (results) => { if (results !== undefined && results[0] !== undefined && results[0] === true) callback(activeUrl, tab, activeTab); @@ -164,6 +175,18 @@ function executeScript(callback, activeUrl, tab, activeTab) { }); } +function executeScriptNetflix(callback, activeUrl, tab, activeTab) { + chrome.tabs.executeScript({ code: "var videoElement = document.getElementsByTagName('video')[0]; (videoElement !== undefined && videoElement.currentTime > 0 && !videoElement.paused && !videoElement.ended && videoElement.readyState > 2);" }, (results) => { + if (results !== undefined && results[0] !== undefined && results[0] === true) { + console.log("netglix is playing") + callback(activeUrl, tab, activeTab); + } else { + console.log("netflix paused") + activity.closeIntervalForCurrentTab(); + } + }); +} + function backgroundUpdateStorage() { if (tabs != undefined && tabs.length > 0) storage.saveTabs(tabs); @@ -324,6 +347,7 @@ function loadAddDataFromStorage() { function loadPermissions() { checkPermissionsForYT(); + checkPermissionsForNetflix(); checkPermissionsForNotifications(); } @@ -340,6 +364,19 @@ function checkPermissionsForYT(callbackIfTrue, callbackIfFalse, ...props) { }); } +function checkPermissionsForNetflix(callbackIfTrue, callbackIfFalse, ...props) { + chrome.permissions.contains({ + permissions: ['tabs'], + origins: ["https://www.netflix.com/*"] + }, function(result) { + if (callbackIfTrue != undefined && result) + callbackIfTrue(...props); + if (callbackIfFalse != undefined && !result) + callbackIfFalse(); + isHasPermissioForNetflix = result; + }); +} + function checkPermissionsForNotifications(callback, ...props) { chrome.permissions.contains({ permissions: ["notifications"] diff --git a/src/scripts/settings.js b/src/scripts/settings.js index eb33fdf..a1a56b6 100644 --- a/src/scripts/settings.js +++ b/src/scripts/settings.js @@ -46,6 +46,9 @@ document.addEventListener('DOMContentLoaded', function () { document.getElementById('grantPermissionForYT').addEventListener('click', function () { grantPermissionForYT(); }); + document.getElementById('grantPermissionForNetflix').addEventListener('click', function () { + grantPermissionForNetflix(); + }); document.getElementById('grantPermissionForNotifications').addEventListener('click', function () { grantPermissionForNotifications(); }); @@ -107,6 +110,7 @@ function loadSettings() { document.getElementById('notifyMessage').value = mess; }); checkPermissionsForYT(); + checkPermissionsForNetflix(); checkPermissionsForNotifications(); } @@ -121,6 +125,17 @@ function checkPermissionsForYT() { }); } +function checkPermissionsForNetflix() { + chrome.permissions.contains({ + permissions: ['tabs'], + origins: ["https://www.netflix.com/*"] + }, function (result) { + if (result) { + setUIForAnyPermissionForNetflix(); + } + }); +} + function checkPermissionsForNotifications() { chrome.permissions.contains({ permissions: ["notifications"] @@ -156,6 +171,18 @@ function grantPermissionForYT() { }); } +function grantPermissionForNetflix() { + chrome.permissions.request({ + permissions: ['tabs'], + origins: ["https://www.netflix.com/*"] + }, function (granted) { + // The callback argument will be true if the user granted the permissions. + if (granted) { + setUIForAnyPermissionForNetflix(); + } + }); +} + function grantPermissionForNotifications() { chrome.permissions.request({ permissions: ["notifications"] @@ -172,6 +199,11 @@ function setUIForAnyPermissionForYT() { document.getElementById('grantPermissionForYT').setAttribute('disabled', 'true'); } +function setUIForAnyPermissionForNetflix() { + document.getElementById('permissionSuccessedBlockForNetflix').hidden = false; + document.getElementById('grantPermissionForNetflix').setAttribute('disabled', 'true'); +} + function setUIForAnyPermissionForNotifications() { document.getElementById('permissionSuccessedBlockForNotifications').hidden = false; document.getElementById('grantPermissionForNotifications').setAttribute('disabled', 'true'); From 61a358cc71824637ae1378be9f9543b2d6b6ab62 Mon Sep 17 00:00:00 2001 From: danieltaub Date: Thu, 12 Nov 2020 09:46:28 +0200 Subject: [PATCH 002/350] edit the options page --- src/options.html | 12 +++++------- src/scripts/background.js | 2 -- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/options.html b/src/options.html index ee3bc65..e8f6dda 100644 --- a/src/options.html +++ b/src/options.html @@ -86,10 +86,13 @@
+
+
+
- +