Skip to content

Commit 2137f13

Browse files
committed
2 parents 7d7113f + 85dfc03 commit 2137f13

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2648
-76
lines changed

.gitignore

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,30 @@
22
manifest.json
33
build/*
44
dist/*
5-
node_modules
5+
node_modules
6+
7+
## User settings
8+
xcuserdata/
9+
10+
## Xcode 8 and earlier
11+
*.xcscmblueprint
12+
*.xccheckout
13+
14+
## VisualStudioCode ###
15+
.vscode/*
16+
!.vscode/settings.json
17+
!.vscode/tasks.json
18+
!.vscode/launch.json
19+
!.vscode/extensions.json
20+
!.vscode/*.code-snippets
21+
22+
# Local History for Visual Studio Code
23+
.history/
24+
25+
# Built Visual Studio Code Extensions
26+
*.vsix
27+
28+
### VisualStudioCode Patch ###
29+
# Ignore all local history of files
30+
.history
31+
.ionide

cookie-editor.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,26 @@ if (typeof importScripts === 'function') {
1212
browserDetector.getApi().runtime.onMessage.addListener(handleMessage);
1313
browserDetector.getApi().tabs.onUpdated.addListener(onTabsChanged);
1414

15-
if (!browserDetector.isEdge()) {
15+
if (!browserDetector.isSafari()) {
1616
browserDetector.getApi().cookies.onChanged.addListener(onCookiesChanged);
1717
}
1818

1919
isFirefoxAndroid(function(response) {
2020
if (response) {
21-
const popupOptions = {};
22-
popupOptions.popup = '/interface/popup-android/cookie-list.html';
21+
const popupOptions = {
22+
popup: '/interface/popup-android/cookie-list.html'
23+
};
2324
browserDetector.getApi().browserAction.setPopup(popupOptions);
2425
}
2526
});
27+
isSafariIos(function(response) {
28+
if (response) {
29+
const popupOptions = {
30+
popup: '/interface/popup-ios/cookie-list.html'
31+
};
32+
browserDetector.getApi().action.setPopup(popupOptions);
33+
}
34+
});
2635

2736
function handleMessage(request, sender, sendResponse) {
2837
console.log('message received: ' + (request.type || 'unknown'));
@@ -153,4 +162,14 @@ if (typeof importScripts === 'function') {
153162
});
154163
}
155164

165+
function isSafariIos(callback) {
166+
if (!browserDetector.isSafari()) {
167+
return callback(false);
168+
}
169+
170+
return browserDetector.getApi().runtime.getPlatformInfo().then((info) => {
171+
callback(info.os === 'ios');
172+
});
173+
}
174+
156175
}());

interface/devtools/cookie-list.html

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,31 +26,31 @@ <h1 class="container">Cookie Editor</h1>
2626

2727
<div class="panel button-bar active" id="button-bar-default">
2828
<div class="panel-section panel-section-footer">
29-
<button class="panel-section-footer-button" id="create-cookie">
29+
<button class="panel-section-footer-button" id="create-cookie" type="button">
3030
<div>
3131
<svg class="icon"><use href="../sprites/solid.svg#plus"></use></svg>
3232
<div class="tooltip" role="tooltip">Add</div>
3333
</div>
3434
</button>
3535
<div class="panel-section-footer-separator"></div>
3636

37-
<button class="panel-section-footer-button danger" id="delete-all-cookies">
37+
<button class="panel-section-footer-button danger" id="delete-all-cookies" type="button">
3838
<div>
3939
<svg class="icon"><use href="../sprites/solid.svg#trash"></use></svg>
4040
<div class="tooltip" role="tooltip">Delete All</div>
4141
</div>
4242
</button>
4343
<div class="panel-section-footer-separator"></div>
4444

45-
<button class="panel-section-footer-button" id="import-cookies">
45+
<button class="panel-section-footer-button" id="import-cookies" type="button">
4646
<div>
4747
<svg class="icon"><use href="../sprites/solid.svg#file-import"></use></svg>
4848
<div class="tooltip" role="tooltip">Import</div>
4949
</div>
5050
</button>
5151
<div class="panel-section-footer-separator"></div>
5252

53-
<button class="panel-section-footer-button" id="export-cookies">
53+
<button class="panel-section-footer-button" id="export-cookies" type="button">
5454
<div>
5555
<svg class="icon"><use href="../sprites/solid.svg#file-export"></use></svg>
5656
<div class="tooltip" role="tooltip">Export</div>
@@ -61,15 +61,15 @@ <h1 class="container">Cookie Editor</h1>
6161

6262
<div class="panel button-bar" id="button-bar-add">
6363
<div class="panel-section panel-section-footer">
64-
<button class="panel-section-footer-button" id="return-list-add">
64+
<button class="panel-section-footer-button" id="return-list-add" type="button">
6565
<div>
6666
<svg class="icon"><use href="../sprites/solid.svg#arrow-left"></use></svg>
6767
<div class="tooltip" role="tooltip">Cancel</div>
6868
</div>
6969
</button>
7070
<div class="panel-section-footer-separator"></div>
7171

72-
<button class="panel-section-footer-button primary" id="save-create-cookie">
72+
<button class="panel-section-footer-button primary" id="save-create-cookie" type="button">
7373
<div>
7474
<svg class="icon"><use href="../sprites/solid.svg#save"></use></svg>
7575
<div class="tooltip" role="tooltip">Add</div>
@@ -80,15 +80,15 @@ <h1 class="container">Cookie Editor</h1>
8080

8181
<div class="panel button-bar" id="button-bar-import">
8282
<div class="panel-section panel-section-footer">
83-
<button class="panel-section-footer-button" id="return-list-import">
83+
<button class="panel-section-footer-button" id="return-list-import" type="button">
8484
<div>
8585
<svg class="icon"><use href="../sprites/solid.svg#arrow-left"></use></svg>
8686
<div class="tooltip" role="tooltip">Cancel</div>
8787
</div>
8888
</button>
8989
<div class="panel-section-footer-separator"></div>
9090

91-
<button class="panel-section-footer-button primary" id="save-import-cookie">
91+
<button class="panel-section-footer-button primary" id="save-import-cookie" type="button">
9292
<div>
9393
<svg class="icon"><use href="../sprites/solid.svg#file-import"></use></svg>
9494
<div class="tooltip" role="tooltip">Import</div>
@@ -100,7 +100,7 @@ <h1 class="container">Cookie Editor</h1>
100100
<div id="notification-container">
101101
<div id="notification">
102102
<span></span>
103-
<button id="notification-dismiss" aria-label="Dismiss Notification">
103+
<button id="notification-dismiss" aria-label="Dismiss Notification" type="button">
104104
<svg class="icon"><use href="../sprites/solid.svg#times"></use></svg>
105105
</button>
106106
</div>
@@ -122,7 +122,7 @@ <h1 class="container">Cookie Editor</h1>
122122
</svg>
123123
<span class="header-name"></span>
124124
<div class="btns">
125-
<button class="delete" data-tooltip-left="Delete" aria-label="Delete" tabindex="-1">
125+
<button class="delete" data-tooltip-left="Delete" aria-label="Delete" tabindex="-1" type="button">
126126
<svg class="icon">
127127
<use href="../sprites/solid.svg#trash"></use>
128128
</svg>
@@ -132,12 +132,12 @@ <h1 class="container">Cookie Editor</h1>
132132
<div class="expando" aria-hidden="true" role="region">
133133
<div class="wrapper">
134134
<div class="action-btns">
135-
<button class="delete" data-tooltip="Delete" aria-label="Delete">
135+
<button class="delete" data-tooltip="Delete" aria-label="Delete" type="button">
136136
<svg class="icon">
137137
<use href="../sprites/solid.svg#trash"></use>
138138
</svg>
139139
</button>
140-
<button class="save" data-tooltip="Save" aria-label="Save">
140+
<button class="save" data-tooltip="Save" aria-label="Save" type="submit">
141141
<svg class="icon">
142142
<use href="../sprites/solid.svg#save"></use>
143143
</svg>
@@ -152,7 +152,7 @@ <h1 class="container">Cookie Editor</h1>
152152
<label class="label-value">Value</label>
153153
<textarea name="value" class="input-value"></textarea>
154154
</div>
155-
<button class="advanced-toggle">
155+
<button class="advanced-toggle" type="button">
156156
Show Advanced
157157
</button>
158158
<div class="advanced-form">
@@ -236,8 +236,8 @@ <h1 class="container">Cookie Editor</h1>
236236

237237
<template id="tmp-export-options">
238238
<div id="export-menu">
239-
<button id="export-json">Export as JSON</button>
240-
<button id="export-netscape">Export as Netscape</button>
239+
<button id="export-json" type="button">Export as JSON</button>
240+
<button id="export-netscape" type="button">Export as Netscape</button>
241241
</div>
242242
</template>
243243
</body>

interface/lib/browserDetector.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,23 @@ function BrowserDetector() {
33
let namespace = chrome || window.browser || window.chrome;
44
let browserName;
55
let doesSupportSameSiteCookie = null;
6+
let isIos = false
67

78
if (namespace === chrome || namespace === window.chrome) {
8-
browserName = 'chrome';
9-
}
10-
else if (namespace === window.browser) {
9+
let supportPromises = false;
10+
try {
11+
supportPromises = namespace.runtime.getPlatformInfo() instanceof Promise;
12+
}
13+
catch (e) {
14+
}
15+
16+
if (supportPromises) {
17+
browserName = 'safari';
18+
}
19+
else {
20+
browserName = 'chrome';
21+
}
22+
} else if (namespace === window.browser) {
1123
let supportPromises = false;
1224
try {
1325
supportPromises = namespace.runtime.getPlatformInfo() instanceof Promise;
@@ -41,6 +53,10 @@ function BrowserDetector() {
4153
return browserName === 'edge';
4254
};
4355

56+
this.isSafari = function () {
57+
return browserName === 'safari';
58+
};
59+
4460
this.supportSameSiteCookie = function () {
4561
if (doesSupportSameSiteCookie !== null) {
4662
return doesSupportSameSiteCookie;

interface/lib/genericCookieHandler.js

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ function GenericCookieHandler() {
88
const browserDetector = new BrowserDetector();
99

1010
this.getAllCookies = function(callback) {
11-
if (browserDetector.isFirefox()) {
11+
if (browserDetector.isFirefox() && browserDetector.isSafari()) {
1212
browserDetector.getApi().cookies.getAll({
1313
url: this.currentTab.url,
1414
storeId: this.currentTab.cookieStoreId
@@ -36,20 +36,29 @@ function GenericCookieHandler() {
3636
url: url
3737
};
3838

39-
if (cookie.hostOnly) {
39+
// Bad hack on safari because cookies needs to have the very exact same domain
40+
// to be able to edit it.
41+
if (browserDetector.isSafari() && newCookie.domain) {
42+
newCookie.url = "http://" + newCookie.domain;
43+
}
44+
45+
if (cookie.hostOnly || (browserDetector.isSafari() && !newCookie.domain)) {
4046
newCookie.domain = null;
4147
}
4248

43-
if (browserDetector.supportSameSiteCookie()) {
49+
if (browserDetector.supportSameSiteCookie() && !browserDetector.isSafari()) {
4450
newCookie.sameSite = cookie.sameSite || undefined;
4551

4652
if (newCookie.sameSite == "no_restriction") {
4753
newCookie.secure = true;
4854
}
55+
if (browserDetector.isSafari()) {
56+
newCookie.sameSite = 'explicit';
57+
}
4958
}
5059

51-
if (browserDetector.isFirefox()) {
52-
browserDetector.getApi().cookies.set(newCookie).then(cookie => {
60+
if (browserDetector.isFirefox() || browserDetector.isSafari()) {
61+
browserDetector.getApi().cookies.set(newCookie).then((cookie,a,b,c) => {
5362
if (callback) {
5463
callback(null, cookie);
5564
}
@@ -78,8 +87,18 @@ function GenericCookieHandler() {
7887
}
7988
};
8089

81-
this.removeCookie = function(name, url, callback) {
82-
if (browserDetector.isFirefox()) {
90+
this.removeCookie = function(name, url, callback, isRecursive = false) {
91+
// Bad hack on safari because cookies needs to have the very exact same domain
92+
// to be able to delete it.
93+
if (browserDetector.isSafari() && !isRecursive) {
94+
this.getAllCookies((cookies) => {
95+
for (let cookie of cookies) {
96+
if (cookie.name === name) {
97+
this.removeCookie(name, "http://" + cookie.domain, callback, true);
98+
}
99+
}
100+
})
101+
} else if (browserDetector.isFirefox() || browserDetector.isSafari()) {
83102
browserDetector.getApi().cookies.remove({
84103
name: name,
85104
url: url,

0 commit comments

Comments
 (0)