Skip to content
This repository was archived by the owner on May 22, 2019. It is now read-only.

Commit 1584e26

Browse files
committed
Finish implementing "allow_remote_requests" config option. also some code cleanup.
1 parent 8b5cd4a commit 1584e26

File tree

6 files changed

+35
-9
lines changed

6 files changed

+35
-9
lines changed

whither/base/config_loader.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ def load_config(self, key: str) -> dict:
6767

6868
return {key: value for key, value in config.items()}
6969

70+
def load_default_config(self) -> dict:
71+
load_from_orig = self.load_from
72+
self.load_from = __file__
73+
default_config = self.load_config('Example')
74+
self.load_from = load_from_orig
75+
76+
return default_config
77+
7078
@classmethod
7179
def remove_filter(cls, callback: Callable[[str, str], None]) -> None:
7280
cls._filters.remove(callback)

whither/base/objects.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def _maybe_start_accessibility_service(self):
148148

149149
def run(self) -> int:
150150
self._maybe_start_accessibility_service()
151-
raise NotImplementedError()
151+
return 0
152152

153153

154154
class WebContainer(BaseObject):

whither/toolkits/qt/application.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ def _set_window_size_position(self) -> None:
5353
self._main_window.widget.setGeometry(self.desktop.availableGeometry())
5454

5555
def run(self) -> int:
56+
super().run()
57+
5658
self.logger.debug('Setting window size and position')
5759
self._set_window_size_position()
5860

whither/toolkits/qt/interceptor.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@
2525
# You should have received a copy of the GNU General Public License
2626
# along with whither; If not, see <http://www.gnu.org/licenses/>.
2727

28-
""" Wrapper for QMainWindow """
28+
""" Request Interceptor """
2929

3030
# 3rd-Party Libs
31-
from PyQt5.QtCore import QObject
3231
from PyQt5.QtWebEngineCore import (
3332
QWebEngineUrlRequestInterceptor,
3433
QWebEngineUrlRequestInfo,
@@ -38,7 +37,17 @@
3837
class QtUrlRequestInterceptor(QWebEngineUrlRequestInterceptor):
3938

4039
def intercept_request(self, info: QWebEngineUrlRequestInfo) -> None:
41-
pass
40+
url = info.requestUrl().toString()
41+
not_data_uri = 'data' != info.requestUrl().scheme()
42+
not_local_file = not info.requestUrl().isLocalFile()
43+
44+
not_devtools = (
45+
not url.startswith('http://127.0.0.1') and not url.startswith('ws://127.0.0.1')
46+
)
47+
48+
block_request = not_devtools and not_data_uri and not_local_file
49+
50+
info.block(block_request)
4251

4352
def interceptRequest(self, info: QWebEngineUrlRequestInfo) -> None:
4453
self.intercept_request(info)

whither/toolkits/qt/web_container.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
QWebEngineView,
4040
QWebEngineSettings,
4141
QWebEngineScript,
42+
QWebEngineProfile,
4243
)
4344
from PyQt5.QtCore import (
4445
Qt,
@@ -49,6 +50,8 @@
4950
# This Library
5051
from whither.base.objects import WebContainer
5152
from .devtools import DevTools
53+
from .interceptor import QtUrlRequestInterceptor
54+
5255

5356
# Typing Helpers
5457
BridgeObjects = Tuple['BridgeObject']
@@ -78,8 +81,12 @@ def __init__(self, bridge_objs: BridgeObjects = None, *args, **kwargs) -> None:
7881
if self._config.debug_mode:
7982
os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = '12345'
8083

84+
self.profile = QWebEngineProfile.defaultProfile()
85+
self.interceptor = QtUrlRequestInterceptor()
86+
8187
self.view = QWebEngineView(parent=self._main_window.widget)
8288
self.page = self.view.page()
89+
8390
self.channel = QWebChannel(self.page)
8491
self.bridge_initialized = False
8592

@@ -91,6 +98,9 @@ def __init__(self, bridge_objs: BridgeObjects = None, *args, **kwargs) -> None:
9198
if not self._config.context_menu.enabled:
9299
self.view.setContextMenuPolicy(Qt.PreventContextMenu)
93100

101+
if not self._config.allow_remote_urls:
102+
self.profile.setRequestInterceptor(self.interceptor)
103+
94104
if self._config.entry_point.autoload:
95105
self.initialize_bridge_objects()
96106
self.load()

whither/toolkits/qt/window.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,21 @@
4646
# This Library
4747
from whither.base.objects import Window
4848

49-
# Typing Helpers
50-
QtWindowStatesT = Dict[str, Qt.WindowState]
51-
5249

5350
WINDOW_STATES = {
5451
'NORMAL': Qt.WindowNoState,
5552
'MINIMIZED': Qt.WindowMinimized,
5653
'MAXIMIZED': Qt.WindowMaximized,
5754
'FULLSCREEN': Qt.WindowFullScreen,
58-
} # type: QtWindowStatesT
55+
} # type: Dict[str, Qt.WindowState]
5956

6057

6158
class QtWindow(Window):
6259

6360
def __init__(self, name: str = '_window', *args, **kwargs) -> None:
6461
super().__init__(name=name, *args, **kwargs)
6562

66-
self.states = WINDOW_STATES # type: dict
63+
self.states = WINDOW_STATES # type: Dict[str, Qt.WindowState]
6764
self.widget = None # type: QWidget
6865

6966
self._initialize()

0 commit comments

Comments
 (0)