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
|
# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
from __future__ import annotations
from PySide6.QtWebEngineCore import (qWebEngineChromiumVersion,
QWebEngineProfile, QWebEngineSettings)
from PySide6.QtCore import QObject, Qt, Slot
from downloadmanagerwidget import DownloadManagerWidget
from browserwindow import BrowserWindow
class Browser(QObject):
def __init__(self, parent=None):
super().__init__(parent)
self._windows = []
self._download_manager_widget = DownloadManagerWidget()
self._profile = None
# Quit application if the download manager window is the only
# remaining window
self._download_manager_widget.setAttribute(Qt.WidgetAttribute.WA_QuitOnClose, False)
def create_hidden_window(self, offTheRecord=False):
if not offTheRecord and not self._profile:
name = "simplebrowser." + qWebEngineChromiumVersion()
self._profile = QWebEngineProfile(name)
s = self._profile.settings()
s.setAttribute(QWebEngineSettings.WebAttribute.PluginsEnabled, True)
s.setAttribute(QWebEngineSettings.WebAttribute.DnsPrefetchEnabled, True)
s.setAttribute(QWebEngineSettings.WebAttribute.LocalContentCanAccessRemoteUrls, True)
s.setAttribute(QWebEngineSettings.WebAttribute.LocalContentCanAccessFileUrls, False)
s.setAttribute(QWebEngineSettings.ScreenCaptureEnabled, True)
self._profile.downloadRequested.connect(
self._download_manager_widget.download_requested)
profile = QWebEngineProfile.defaultProfile() if offTheRecord else self._profile
main_window = BrowserWindow(self, profile, False)
profile.setPersistentPermissionsPolicy(
QWebEngineProfile.PersistentPermissionsPolicy.AskEveryTime)
self._windows.append(main_window)
main_window.about_to_close.connect(self._remove_window)
return main_window
def create_window(self, offTheRecord=False):
main_window = self.create_hidden_window(offTheRecord)
main_window.show()
return main_window
def create_dev_tools_window(self):
profile = (self._profile if self._profile
else QWebEngineProfile.defaultProfile())
main_window = BrowserWindow(self, profile, True)
self._windows.append(main_window)
main_window.about_to_close.connect(self._remove_window)
main_window.show()
return main_window
def windows(self):
return self._windows
def download_manager_widget(self):
return self._download_manager_widget
@Slot()
def _remove_window(self):
w = self.sender()
if w in self._windows:
del self._windows[self._windows.index(w)]
|