From d1bd53c204c816dc0cca0cb3a502d30971ddcbcb Mon Sep 17 00:00:00 2001 From: Valera Leontyev Date: Wed, 6 May 2015 23:30:34 +0300 Subject: [PATCH] Support for Web Page Media Control API v0.4 --- extension/media-control-api.js | 41 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/extension/media-control-api.js b/extension/media-control-api.js index 862827a..f19a342 100644 --- a/extension/media-control-api.js +++ b/extension/media-control-api.js @@ -1,13 +1,3 @@ -// Tab registration by MediaControlled event -document.addEventListener("MediaControlled", function () { - chrome.runtime.sendMessage({command: "registerTab"}); -}); - -// Tab unregistration by MediaUncontrolled event -document.addEventListener("MediaUncontrolled", function () { - chrome.runtime.sendMessage({command: "unregisterTab"}); -}); - // Media Events emmiter chrome.runtime.onMessage.addListener(function(request) { switch (request.command) { @@ -29,16 +19,31 @@ chrome.runtime.onMessage.addListener(function(request) { } }); -// Tell document that we are ready -console.log('Keysocket Media Control API initialized'); -document.dispatchEvent(new Event("MediaControlApiInit")); - -// Tab registration by meta tag -if (document.getElementsByName("media-controlled").length > 0) { - chrome.runtime.sendMessage({command: "registerTab"}); -} +// Tab registration/unregistration by MediaControlStateChanged event +document.addEventListener("MediaControlStateChanged", function () { + registerOrUnregisterPage(); +}); // Unregister tab before move to another URI window.onunload = function() { chrome.runtime.sendMessage({command: "unregisterTab"}); +} + +// Initial tab registration by meta tag +registerOrUnregisterPage(); + +function isPageMediaControllable() { + var tags = document.getElementsByName("media-controllable"); + if (tags.length > 0) { + for (var i = 0; i < tags.length; i++) { + if (tags[i].getAttribute("content") !== 'no') { + return true; + } + } + } + return false; +} + +function registerOrUnregisterPage() { + chrome.runtime.sendMessage({command: isPageMediaControllable() ? "registerTab" : "unregisterTab"}); } \ No newline at end of file