From 70e4512277f001b716ca09648748cc25ee745add Mon Sep 17 00:00:00 2001 From: Shubham-Rasal Date: Wed, 8 Mar 2023 11:55:23 +0530 Subject: [PATCH] migrated download links to mv3 --- .../downloads/download_links/manifest.json | 21 +++ .../downloads/download_links/popup.html | 18 +++ api-samples/downloads/download_links/popup.js | 122 ++++++++++++++++++ .../downloads/download_links/send_links.js | 40 ++++++ 4 files changed, 201 insertions(+) create mode 100644 api-samples/downloads/download_links/manifest.json create mode 100644 api-samples/downloads/download_links/popup.html create mode 100644 api-samples/downloads/download_links/popup.js create mode 100644 api-samples/downloads/download_links/send_links.js diff --git a/api-samples/downloads/download_links/manifest.json b/api-samples/downloads/download_links/manifest.json new file mode 100644 index 00000000..4e40aeff --- /dev/null +++ b/api-samples/downloads/download_links/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "Download Selected Links", + "description": "Select links on a page and download them.", + "version": "0.3", + "minimum_chrome_version": "16.0.884", + "permissions": [ + "downloads", + "activeTab", + "scripting" + ], + "content_scripts":[ + { + "matches": [""], + "js": ["send_links.js"] + } + ], + "action": { + "default_popup": "popup.html" + }, + "manifest_version": 3 +} \ No newline at end of file diff --git a/api-samples/downloads/download_links/popup.html b/api-samples/downloads/download_links/popup.html new file mode 100644 index 00000000..cba0b762 --- /dev/null +++ b/api-samples/downloads/download_links/popup.html @@ -0,0 +1,18 @@ + + + + + + + +
+ + + + + + + + + + diff --git a/api-samples/downloads/download_links/popup.js b/api-samples/downloads/download_links/popup.js new file mode 100644 index 00000000..32f6b8e9 --- /dev/null +++ b/api-samples/downloads/download_links/popup.js @@ -0,0 +1,122 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This extension demonstrates using chrome.downloads.download() to +// download URLs. + +var allLinks = []; +var visibleLinks = []; + +// Display all visible links. +function showLinks() { + var linksTable = document.getElementById('links'); + while (linksTable.children.length > 1) { + linksTable.removeChild(linksTable.children[linksTable.children.length - 1]) + } + for (var i = 0; i < visibleLinks.length; ++i) { + var row = document.createElement('tr'); + var col0 = document.createElement('td'); + var col1 = document.createElement('td'); + var checkbox = document.createElement('input'); + checkbox.checked = true; + checkbox.type = 'checkbox'; + checkbox.id = 'check' + i; + col0.appendChild(checkbox); + col1.innerText = visibleLinks[i]; + col1.style.whiteSpace = 'nowrap'; + col1.onclick = function() { + checkbox.checked = !checkbox.checked; + } + row.appendChild(col0); + row.appendChild(col1); + linksTable.appendChild(row); + } +} + +// Toggle the checked state of all visible links. +function toggleAll() { + var checked = document.getElementById('toggle_all').checked; + for (var i = 0; i < visibleLinks.length; ++i) { + document.getElementById('check' + i).checked = checked; + } +} + +// Download all visible checked links. +function downloadCheckedLinks() { + for (var i = 0; i < visibleLinks.length; ++i) { + if (document.getElementById('check' + i).checked) { + chrome.downloads.download({url: visibleLinks[i]}, + function(id) { + }); + } + } + window.close(); +} + +// Re-filter allLinks into visibleLinks and reshow visibleLinks. +function filterLinks() { + var filterValue = document.getElementById('filter').value; + if (document.getElementById('regex').checked) { + visibleLinks = allLinks.filter(function(link) { + return link.match(filterValue); + }); + } else { + var terms = filterValue.split(' '); + visibleLinks = allLinks.filter(function(link) { + for (var termI = 0; termI < terms.length; ++termI) { + var term = terms[termI]; + if (term.length != 0) { + var expected = (term[0] != '-'); + if (!expected) { + term = term.substr(1); + if (term.length == 0) { + continue; + } + } + var found = (-1 !== link.indexOf(term)); + if (found != expected) { + return false; + } + } + } + return true; + }); + } + showLinks(); +} + +// Add links to allLinks and visibleLinks, sort and show them. send_links.js is +// injected into all frames of the active tab, so this listener may be called +// multiple times. +chrome.runtime.onMessage.addListener(function(links) { + for (var index in links) { + allLinks.push(links[index]); + } + allLinks.sort(); + visibleLinks = allLinks; + showLinks(); +}); + +// Set up event handlers and inject send_links.js into all frames in the active +// tab. +window.onload = function() { + document.getElementById('filter').onkeyup = filterLinks; + document.getElementById('regex').onchange = filterLinks; + document.getElementById('toggle_all').onchange = toggleAll; + document.getElementById('download0').onclick = downloadCheckedLinks; + document.getElementById('download1').onclick = downloadCheckedLinks; + + chrome.windows.getCurrent(function (currentWindow) { + chrome.tabs.query({active: true, windowId: currentWindow.id}, + function(activeTabs) { + chrome.scripting.executeScript( + { + target: {tabId: activeTabs[0].id}, + files: ['send_links.js'] + + }); + + }); + }); +}; diff --git a/api-samples/downloads/download_links/send_links.js b/api-samples/downloads/download_links/send_links.js new file mode 100644 index 00000000..bff84aee --- /dev/null +++ b/api-samples/downloads/download_links/send_links.js @@ -0,0 +1,40 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Send back to the popup a sorted deduped list of valid link URLs on this page. +// The popup injects this script into all frames in the active tab. + +var links = [].slice.apply(document.getElementsByTagName('a')); +links = links.map(function(element) { + // Return an anchor's href attribute, stripping any URL fragment (hash '#'). + // If the html specifies a relative path, chrome converts it to an absolute + // URL. + var href = element.href; + var hashIndex = href.indexOf('#'); + if (hashIndex >= 0) { + href = href.substr(0, hashIndex); + } + return href; +}); + +links.sort(); + +// Remove duplicates and invalid URLs. +var kBadPrefix = 'javascript'; +for (var i = 0; i < links.length;) { + if (((i > 0) && (links[i] == links[i - 1])) || + (links[i] == '') || + (kBadPrefix == links[i].toLowerCase().substr(0, kBadPrefix.length))) { + links.splice(i, 1); + } else { + ++i; + } +} + +console.log(links) + +//using runtime sendmessage to send the links to the popup +chrome.runtime.sendMessage({ + request : links, +});