Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.61 KB | None | 0 0
  1. let parentTabs = [];
  2. let validTabs = [];
  3. let tabsPromises = []
  4. // let historyPath = [];
  5. // let createdTabData = {};
  6. // let popUnder = false;
  7. // let ads = {};
  8. // let parentTab = [];
  9. // let parentTabChange = [];
  10.  
  11. // const recursiveSearch = (tabInList, currentTab) => {
  12. // if (isNextExist(tabInList)) {
  13. // return recursiveSearch(tabInList.next, currentTab)
  14. // }
  15. // return tabInList.next = { url: currentTab.url }
  16. // };
  17.  
  18. // const isNextExist = tab => {
  19. // if (tab) {
  20. // const isNext = Object.keys(tab).filter(elem => elem === "next")
  21. // if (isNext.length === 1) return true;
  22. // }
  23. // return false;
  24. // }
  25.  
  26. // const isIdExist = id => {
  27. // if (allTabs[id]) return true;
  28. // return false;
  29. // };
  30.  
  31. const verifyTab = async (tab) => {
  32. // debugger
  33. let response = await fetch('http://localhost:3000/watch', {
  34. method: 'POST',
  35. headers: {
  36. 'Content-Type': 'application/json'
  37. },
  38. body: JSON.stringify(tab)
  39. })
  40. let data = await response.json();
  41. return data;
  42. }
  43.  
  44. const traceTab = async tab => {
  45. let response = await fetch('http://localhost:3000/trace', {
  46. method: 'POST',
  47. headers: {
  48. 'Content-Type': 'application/json'
  49. },
  50. body: JSON.stringify(tab)
  51. })
  52. }
  53.  
  54. // const isTabNeeded = (tabId) => {
  55. // let isAlreadyFind = false;
  56. // let detectedTab;
  57. // validTabs.forEach(elem => {
  58. // if (!isAlreadyFind) {
  59. // if (elem.id === tabId) {
  60. // isAlreadyFind = true;
  61. // detectedTab = elem;
  62. // }
  63. // else if (elem.childs.length > 0) {
  64. // elem.childs.forEach(childElem => {
  65. // if (childElem.id === tabId) {
  66. // isAlreadyFind = true;
  67. // detectedTab = childElem;
  68. // detectedTab.isChildren = true;
  69. // }
  70. // });
  71. // }
  72. // }
  73. // });
  74. // return detectedTab;
  75. // };
  76.  
  77. // chrome.tabs.query({currentWindow: true }, async function(tabs) {
  78. // Object.values(tabs).map(tab => {
  79. // return allTabs.push({ id: tab.id, url: tab.url, parentUrl: '', path: [], childs : [] });
  80. // })
  81. // validTabs = await verifyTabs();
  82. // });
  83.  
  84. // chrome.history.onVisited.addListener(function(data) {
  85. // debugger
  86. // historyPath.push(data.url);
  87. // });
  88.  
  89. const getValidTab = async id => {
  90. let isAlreadyFind = false;
  91. let detectedTab;
  92. for (const elem of parentTabs) {
  93. if (!isAlreadyFind) {
  94. if (elem.id === id) {
  95. isAlreadyFind = true;
  96. if (elem.isPending) await elem.promise;
  97. if (elem.isValid) {
  98. detectedTab = elem;
  99. } else {
  100. detectedTab = null;
  101. }
  102. }
  103. else if (elem.childs.length > 0) {
  104. for (const childElem of elem.childs) {
  105. if (childElem.id === id) {
  106. if (elem.isPending) await elem.promise
  107. // debugger
  108. childElem.parentUrl = elem.url;
  109. isAlreadyFind = true;
  110. detectedTab = childElem;
  111. }
  112. }
  113. // elem.childs.forEach(async childElem => {
  114. // if (childElem.id === id) {
  115. // if (elem.isPending) await elem.promise
  116. // debugger
  117. // childElem.parentUrl = elem.url;
  118. // isAlreadyFind = true;
  119. // detectedTab = childElem;
  120. // }
  121. // });
  122. }
  123. }
  124. }
  125. return detectedTab;
  126. // let tab = parentTabs.find(elem => elem.id === id);
  127. // if (!tab.promise) {
  128. // tab.promise = new Promise((resolve, reject) => {
  129. // chrome.tabs.get(id, async function(tab){
  130. // debugger;
  131. // let data = await verifyTab(tab)
  132. // if (data.length > 0) resolve({ id: tab.id, url: tab.url, parentUrl: '', path: [], childs : [] });
  133. // });
  134. // });
  135. // }
  136. };
  137.  
  138. chrome.webRequest.onBeforeRedirect.addListener(async function(details) {
  139. // debugger
  140. if (details.type === 'main_frame'){
  141. const adsTab = await getValidTab(details.tabId);
  142. if (adsTab) {
  143. adsTab.path.push({code: details.statusCode, url: details.url})
  144. }
  145. }
  146. }, {urls: ["<all_urls>"]}
  147. );
  148.  
  149. chrome.webRequest.onCompleted.addListener(async function(details) {
  150. // debugger
  151. if (details.type === 'main_frame'){
  152. const adsTab = await getValidTab(details.tabId);
  153. // debugger
  154. if (adsTab) {
  155. adsTab.path.push({code: details.statusCode, url: details.url})
  156. }
  157. }
  158. }, {urls: ["<all_urls>"]}
  159. );
  160.  
  161. chrome.tabs.onCreated.addListener(function(tab) {
  162. // debugger
  163. let parent = parentTabs.find(elem => elem.id === tab.openerTabId);
  164. if (!parent) {
  165. const promise = new Promise((resolve, reject) => {
  166. chrome.tabs.get(tab.openerTabId, async function(tab){
  167. // debugger;
  168. const parent = parentTabs.find(elem => elem.id === tab.id);
  169. parent.url = tab.url;
  170. let data = await verifyTab(tab)
  171. parent.isPending = false;
  172. if (data.length > 0) {
  173. parent.isValid = true;
  174. resolve("Valid");
  175. } else reject("Not Valid");
  176. });
  177. });
  178. parent = {
  179. id: tab.openerTabId,
  180. isPending: true,
  181. path: [],
  182. childs: [],
  183. isValid: false,
  184. promise
  185. };
  186. parentTabs.push(parent);
  187. }
  188. parentTabs.forEach(parent => {
  189. parent.childs = parent.childs.filter(child => child.id !== tab.openerTabId);
  190. });
  191. parent.childs.push({ id: tab.id, url: tab.url, parentUrl: "", path: [], isChildren: true });
  192. // let parentTab = await getTab(tab.openerTabId);
  193. // //validTabs = await verifyTabs(parentTab);
  194.  
  195. // let parent = validTabs.filter(elem => elem.id === tab.openerTabId);
  196. // if (parent.length > 0) {
  197. // // parentTab = JSON.parse(JSON.stringify(parent));
  198. // // parentTabChange = parent;
  199. // // createdTabData = {tabId: tab.id, status: tab.status, openerTabId: tab.openerTabId, parentUrl: parent[0].url};
  200. // parent[0].childs.push({ id: tab.id, url: tab.url, parentUrl: parent[0].url, path: [], childs : []});
  201.  
  202. // }
  203. });
  204.  
  205. // chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
  206. // debugger
  207. // allTabs = allTabs.filter(elem => elem.id !== tabId);
  208. // validTabs = validTabs.filter(elem => elem.id !== tabId);
  209. // validTabs.forEach(elem => {
  210. // if (elem.childs.length > 0) {
  211. // elem.childs = elem.childs.filter(childElem => childElem.id !== tabId)
  212. // }
  213. // });
  214. // console.log(validTabs)
  215. // });
  216.  
  217. chrome.tabs.onUpdated.addListener(async function(tabId, changeInfo, currentTab) {
  218. // debugger
  219. // console.log(validTabs);
  220. //is the currentTab in validTabs
  221. // if (currentTab.url !== parentTab[0].url) {
  222. //let t = await getTab(tabId);
  223. if (changeInfo.status === 'complete' && currentTab.title !== 'New Tab') {
  224. const validTab = await getValidTab(tabId);
  225. if (validTab) {
  226. // createdTabData.status = currentTab.status;
  227. // createdTabData.openerTabId = currentTab.openerTabId;
  228. if (validTab.path.length > 0) {
  229.  
  230. if (validTab.isChildren) {
  231. if (validTab.parentUrl !== validTab.path[validTab.path.length - 1].url) traceTab({origin: validTab.parentUrl, path: validTab.path});
  232. } else {
  233. // if (validTab.url !== validTab.path[validTab.path.length - 1].url)
  234. traceTab({origin: validTab.url, path: validTab.path});
  235. }
  236. validTab.path = [];
  237. }
  238. }
  239. }
  240. // }
  241. });
  242.  
  243. // try {
  244. // chrome.tabs.captureVisibleTab(null,{},function(dataUri){
  245. // console.log(dataUri);
  246. // });
  247. // }
  248. // catch(error) {
  249. // console.log(error)
  250. // }
  251.  
  252. // if (isNextExist(allTabs[currentTab.id])) {
  253. // return recursiveSearch(allTabs[currentTab.openerTabId], currentTab)
  254. // }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement