blob: 83bd4fa14eba53faf12de55c013e90084d39dab7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.geckoview_example;
import androidx.annotation.Nullable;
import java.util.ArrayList;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoSessionSettings;
import org.mozilla.geckoview.WebExtension;
public class TabSessionManager {
private static ArrayList<TabSession> mTabSessions = new ArrayList<>();
private int mCurrentSessionIndex = 0;
private TabObserver mTabObserver;
private boolean mTrackingProtection;
public interface TabObserver {
void onCurrentSession(TabSession session);
}
public TabSessionManager() {}
public void unregisterWebExtension() {
for (final TabSession session : mTabSessions) {
session.action = null;
}
}
public void setWebExtensionDelegates(
WebExtension extension,
WebExtension.ActionDelegate actionDelegate,
WebExtension.SessionTabDelegate tabDelegate) {
for (final TabSession session : mTabSessions) {
final WebExtension.SessionController sessionController = session.getWebExtensionController();
sessionController.setActionDelegate(extension, actionDelegate);
sessionController.setTabDelegate(extension, tabDelegate);
}
}
public void setUseTrackingProtection(boolean trackingProtection) {
if (trackingProtection == mTrackingProtection) {
return;
}
mTrackingProtection = trackingProtection;
for (final TabSession session : mTabSessions) {
session.getSettings().setUseTrackingProtection(trackingProtection);
}
}
public void setTabObserver(TabObserver observer) {
mTabObserver = observer;
}
public void addSession(TabSession session) {
mTabSessions.add(session);
}
public TabSession getSession(int index) {
if (index >= mTabSessions.size() || index < 0) {
return null;
}
return mTabSessions.get(index);
}
public TabSession getCurrentSession() {
return getSession(mCurrentSessionIndex);
}
public TabSession getSession(GeckoSession session) {
int index = mTabSessions.indexOf(session);
if (index == -1) {
return null;
}
return getSession(index);
}
public void setCurrentSession(TabSession session) {
int index = mTabSessions.indexOf(session);
if (index == -1) {
mTabSessions.add(session);
index = mTabSessions.size() - 1;
}
mCurrentSessionIndex = index;
if (mTabObserver != null) {
mTabObserver.onCurrentSession(session);
}
}
private boolean isCurrentSession(TabSession session) {
return session == getCurrentSession();
}
public void closeSession(@Nullable TabSession session) {
if (session == null) {
return;
}
if (isCurrentSession(session) && mCurrentSessionIndex == mTabSessions.size() - 1) {
--mCurrentSessionIndex;
}
session.close();
mTabSessions.remove(session);
}
public TabSession newSession(GeckoSessionSettings settings) {
TabSession tabSession = new TabSession(settings);
mTabSessions.add(tabSession);
return tabSession;
}
public int sessionCount() {
return mTabSessions.size();
}
public ArrayList<TabSession> getSessions() {
return mTabSessions;
}
}
|