[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] branch master updated: add a tab update listener to
From: |
gnunet |
Subject: |
[taler-wallet-core] branch master updated: add a tab update listener to look for taler:// |
Date: |
Wed, 07 Sep 2022 17:48:25 +0200 |
This is an automated email from the git hooks/post-receive script.
sebasjm pushed a commit to branch master
in repository wallet-core.
The following commit(s) were added to refs/heads/master by this push:
new 2279ee2c add a tab update listener to look for taler://
2279ee2c is described below
commit 2279ee2c39db5eb1a9dd5ea719043d1e4ebc7141
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Wed Sep 7 12:46:06 2022 -0300
add a tab update listener to look for taler://
---
.../src/platform/chrome.ts | 49 ++++++++++++++++++----
1 file changed, 42 insertions(+), 7 deletions(-)
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index f888d131..4ce995bd 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -105,22 +105,30 @@ type HeaderListenerFunc = (
) => void;
let currentHeaderListener: HeaderListenerFunc | undefined = undefined;
+type TabListenerFunc = (
+ tabId: number, info: chrome.tabs.TabChangeInfo,
+) => void;
+let currentTabListener: TabListenerFunc | undefined = undefined;
+
export function containsTalerHeaderListener(): boolean {
- return currentHeaderListener !== undefined;
+ return currentHeaderListener !== undefined || currentTabListener !==
undefined;
}
export async function removeHostPermissions(): Promise<boolean> {
//if there is a handler already, remove it
if (
- "webRequest" in chrome &&
- "onHeadersReceived" in chrome.webRequest &&
currentHeaderListener &&
- chrome.webRequest.onHeadersReceived.hasListener(currentHeaderListener)
+ chrome?.webRequest?.onHeadersReceived?.hasListener(currentHeaderListener)
) {
chrome.webRequest.onHeadersReceived.removeListener(currentHeaderListener);
}
+ if (currentTabListener &&
+ chrome?.tabs?.onUpdated?.hasListener(currentTabListener)) {
+ chrome.tabs.onUpdated.removeListener(currentTabListener)
+ }
currentHeaderListener = undefined;
+ currentTabListener = undefined;
//notify the browser about this change, this operation is expensive
if ("webRequest" in chrome) {
@@ -365,12 +373,26 @@ function registerTalerHeaderListener(
.map((h) => h.value)
.filter((value): value is string => !!value);
if (values.length > 0) {
+ logger.info(`Found a Taler URI in a response header for the request
${details.url} from tab ${details.tabId}`)
callback(details.tabId, values[0]);
}
}
return;
}
+
+ async function tabListener(tabId: number, info: chrome.tabs.TabChangeInfo):
Promise<void> {
+ console.log("tab update", tabId, info)
+ if (tabId < 0) return;
+ if (info.status !== "complete") return;
+ const uri = await findTalerUriInTab(tabId);
+ console.log("uri", uri)
+ if (!uri) return;
+ logger.info(`Found a Taler URI in the tab ${tabId}`)
+ callback(tabId, uri)
+ }
+
const prevHeaderListener = currentHeaderListener;
+ const prevTabListener = currentTabListener;
getPermissionsApi()
.containsHostPermissions()
@@ -382,17 +404,29 @@ function registerTalerHeaderListener(
) {
chrome.webRequest.onHeadersReceived.removeListener(prevHeaderListener);
}
+ if (prevTabListener &&
chrome?.tabs?.onUpdated?.hasListener(prevTabListener)) {
+ chrome.tabs.onUpdated.removeListener(prevTabListener)
+ }
+
//if the result was positive, add the headerListener
if (result) {
- const listener: chrome.webRequest.WebResponseHeadersEvent | undefined =
+ const headersEvent: chrome.webRequest.WebResponseHeadersEvent |
undefined =
chrome?.webRequest?.onHeadersReceived;
- if (listener) {
- listener.addListener(headerListener, { urls: ["<all_urls>"] }, [
+ if (headersEvent) {
+ headersEvent.addListener(headerListener, { urls: ["<all_urls>"] }, [
"responseHeaders",
]);
currentHeaderListener = headerListener;
}
+
+ const tabsEvent: chrome.tabs.TabUpdatedEvent | undefined =
+ chrome?.tabs?.onUpdated;
+ if (tabsEvent) {
+ tabsEvent.addListener(tabListener);
+ currentTabListener = tabListener;
+ }
}
+
//notify the browser about this change, this operation is expensive
chrome?.webRequest?.handlerBehaviorChanged(() => {
if (chrome.runtime.lastError) {
@@ -400,6 +434,7 @@ function registerTalerHeaderListener(
}
});
});
+
}
const alertIcons = {
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: add a tab update listener to look for taler://,
gnunet <=