diff --git a/background.js b/background.js
index 271a1f4..73203cc 100644
--- a/background.js
+++ b/background.js
@@ -116,6 +116,12 @@ function storeInBrowserStorage(item, callback_function) {
chrome.storage.local.set(item, callback_function);
}
+function hasCookieKey(cookie, key) {
+ let cookieArray = cookie.value.split(';').filter((e) => e.trim().length > 0);
+ let cookieKeyIndex = cookieArray.findIndex((kv) => kv.trim().startsWith(key + '='));
+ return cookieKeyIndex !== -1;
+}
+
/*
* This function set a key-value pair in HTTP header "Cookie",
* and returns the value of HTTP header after modification.
@@ -230,7 +236,7 @@ function rewriteRequestHeader(e) {
'Delete request header : name=' + to_modify.header_name.toLowerCase() + ' for url ' + e.url
);
}
- } else if (to_modify.action === 'cookie_add_or_modify') {
+ } else if (to_modify.action === 'cookie_add') {
let header_cookie = e.requestHeaders.find((header) => header.name.toLowerCase() === 'cookie');
let new_cookie = cookie_keyvalues_set(
header_cookie === undefined ? '' : header_cookie.value,
@@ -241,16 +247,33 @@ function rewriteRequestHeader(e) {
e.requestHeaders.push({name: 'Cookie', value: new_cookie});
if (config.debug_mode)
log(
- 'cookie_add_or_modify.req new_header : name=Cookie,value=' +
+ 'cookie_add.req new_header : name=Cookie,value=' +
new_cookie +
' for url ' +
e.url
);
- } else {
+ } else if ( ! hasCookieKey(header_cookie, to_modify.header_name)) {
+ header_cookie.value = new_cookie;
+ if (config.debug_mode)
+ log(
+ 'cookie_modify.req modify_header : name=Cookie,value=' +
+ new_cookie +
+ ' for url ' +
+ e.url
+ );
+ }
+ } else if (to_modify.action === 'cookie_modify') {
+ let header_cookie = e.requestHeaders.find((header) => header.name.toLowerCase() === 'cookie');
+ let new_cookie = cookie_keyvalues_set(
+ header_cookie === undefined ? '' : header_cookie.value,
+ to_modify.header_name,
+ to_modify.header_value
+ );
+ if (header_cookie != undefined) {
header_cookie.value = new_cookie;
if (config.debug_mode)
log(
- 'cookie_add_or_modify.req modify_header : name=Cookie,value=' +
+ 'cookie_modify.req modify_header : name=Cookie,value=' +
new_cookie +
' for url ' +
e.url
@@ -346,7 +369,7 @@ function rewriteResponseHeader(e) {
e.url
);
}
- } else if (to_modify.action === 'cookie_add_or_modify') {
+ } else if (to_modify.action === 'cookie_add') {
let header_cookie = e.responseHeaders.find(
(header) =>
header.name.toLowerCase() === 'set-cookie' &&
@@ -362,21 +385,36 @@ function rewriteResponseHeader(e) {
);
if (header_cookie === undefined) {
log(
- "SimpleModifyHeaders.Warning: you're using cookie_add_or_modify in Response. While adding new cookie in response, this plugin only generates `Set-Cookie: cookie-name=cookie-value `, without ANY additional attributes. Add a `Set-Cookie` header if you need them. "
+ "SimpleModifyHeaders.Warning: you're using cookie_add in Response. While adding new cookie in response, this plugin only generates `Set-Cookie: cookie-name=cookie-value `, without ANY additional attributes. Add a `Set-Cookie` header if you need them. "
);
e.responseHeaders.push({name: 'Set-Cookie', value: new_header_value});
if (config.debug_mode)
log(
- 'cookie_add_or_modify.resp new_header : name=Cookie,value=' +
+ 'cookie_add.resp new_header : name=Cookie,value=' +
new_header_value +
' for url ' +
e.url
);
- } else {
+ }
+ } else if (to_modify.action === 'cookie_modify') {
+ let header_cookie = e.responseHeaders.find(
+ (header) =>
+ header.name.toLowerCase() === 'set-cookie' &&
+ header.value
+ .toLowerCase()
+ .trim()
+ .startsWith(to_modify.header_name.toLowerCase() + '=')
+ );
+ let new_header_value = set_cookie_modify_cookie_value(
+ header_cookie === undefined ? '' : header_cookie.value,
+ to_modify.header_name,
+ to_modify.header_value
+ );
+ if (header_cookie != undefined) {
header_cookie.value = new_header_value;
if (config.debug_mode)
log(
- 'cookie_add_or_modify.resp modify_header : name=Cookie,value=' +
+ 'cookie_modify.resp modify_header : name=Cookie,value=' +
new_header_value +
' for url ' +
e.url
diff --git a/manifestV3..json b/manifestV3.json
similarity index 95%
rename from manifestV3..json
rename to manifestV3.json
index 65f94a9..3d95ecd 100644
--- a/manifestV3..json
+++ b/manifestV3.json
@@ -25,4 +25,4 @@
"background": {
"service_worker": "service-worker.js"
}
-}
\ No newline at end of file
+}
diff --git a/popup/config.js b/popup/config.js
index 832f7fa..303442c 100644
--- a/popup/config.js
+++ b/popup/config.js
@@ -190,7 +190,8 @@ function appendLine(url_contains, action, header_name, header_value, comment, ap
if (!useManifestV3) {
// Not available in Manifest V3
html += `
-
+
+
`;
}
html += `