~dmj726/userwebkit/webkit2

« back to all changes in this revision

Viewing changes to userwebkit/__init__.py

  • Committer: David Jordan
  • Date: 2019-11-15 09:23:09 UTC
  • Revision ID: djordan2@novacut.com-20191115092309-kxkpsqcflk9oaknx
port to webkit2

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
from microfiber import _oauth_header, basic_auth_header
35
35
import dbus
36
36
from dbus.mainloop.glib import DBusGMainLoop
37
 
from gi.repository import GLib, GObject, Gtk, WebKit
 
37
from gi.repository import GLib, GObject, Gtk, WebKit2
38
38
 
39
39
 
40
40
__version__ = '16.07.0'
51
51
    )
52
52
 
53
53
 
54
 
class CouchView(WebKit.WebView):
 
54
class CouchView(WebKit2.WebView):
55
55
    __gsignals__ = {
56
56
        'open': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE,
57
57
            [GObject.TYPE_PYOBJECT]
61
61
    def __init__(self, env=None, dmedia_resolver=None):
62
62
        super().__init__()
63
63
        self._logging_enabled = False
64
 
        self.connect('resource-request-starting', self._on_request)
65
 
        self.connect('navigation-policy-decision-requested',
66
 
            self._on_nav_policy_decision
67
 
        )
 
64
        self.enable_logging()
 
65
        #self.connect('resource-request-starting', self._on_request)
 
66
        self.webctx = WebKit2.WebContext.get_default()
 
67
        self.webctx.register_uri_scheme("dmedia", self._on_dmedia_request, None)
 
68
        self.connect('authenticate', self._on_authenticate_request)
 
69
        self.connect('decide-policy', self._on_decide_policy, None)
 
70
        #self.connect('navigation-policy-decision-requested',
 
71
        #    self._on_nav_policy_decision
 
72
        #)
68
73
        self.set_env(env)
69
74
        self._dmedia_resolver = dmedia_resolver
70
75
 
87
92
    def enable_logging(self):
88
93
        if not self._logging_enabled:
89
94
            self._logging_enabled = True
90
 
            self.connect('console-message', self._on_console_message)
 
95
            settings = self.get_settings()
 
96
            settings.set_enable_write_console_messages_to_stdout (True)
 
97
            #self.connect('console-message', self._on_console_message)
91
98
 
92
99
    def _on_console_message(self, view, message, line, source_id):
93
100
        log.debug('%s @%s: %s', source_id, line, message)
94
101
 
 
102
    def _on_dmedia_request(self, request):
 
103
        log.info("v")
 
104
        
 
105
    def _on_authenticate_request(self, view, request):
 
106
        if self._env is None:
 
107
            return
 
108
        authorization = self._authorization
 
109
        c = WebKit2.Credential(self._env['basic']['username'], self._env['basic']['password'], 0)
 
110
        request.authenticate(c)
 
111
        return True
 
112
 
 
113
 
95
114
    def _on_request(self, view, frame, resource, request, response):
96
115
        if self._env is None:
97
116
            return
126
145
        if authorization is not None:
127
146
            message.request_headers.append('authorization', authorization)
128
147
 
 
148
    def _on_decide_policy(self, request, policy, policy_type, data):
 
149
        """
 
150
        Handle user trying to Navigate away from current page.
 
151
 
 
152
        Note that this will be called before `CouchView._on_resource_request()`.
 
153
 
 
154
        The *policy* arg is a ``WebPolicyDecision`` instance.  To handle the
 
155
        decision, call one of:
 
156
 
 
157
            * ``WebPolicyDecision.ignore()``
 
158
            * ``WebPolicyDecision.use()``
 
159
            * ``WebPolicyDecision.download()``
 
160
 
 
161
        And then return ``True``.
 
162
 
 
163
        Otherwise, return ``False`` or ``None`` to have the WebKit default
 
164
        behavior apply.
 
165
        """
 
166
        if (policy_type == WebKit2.PolicyDecisionType.NAVIGATION_ACTION):
 
167
            if self._env is None:
 
168
                return
 
169
            uri = request.get_uri()
 
170
            u = urlparse(uri)
 
171
            if u.netloc == self._u.netloc or u.scheme == 'file':
 
172
                return False
 
173
            if u.scheme in ('http', 'https'):
 
174
                self.emit('open', uri)
 
175
            policy.ignore()
 
176
            return True
 
177
        return False
 
178
    
129
179
    def _on_nav_policy_decision(self, view, frame, request, nav, policy):
130
180
        """
131
181
        Handle user trying to Navigate away from current page.
209
259
        script = 'Hub.recv({!r})'.format(
210
260
            json.dumps({'signal': signal, 'args': args}, sort_keys=True)
211
261
        )
212
 
        self._view.execute_script(script)
 
262
        self._view.run_javascript(script, None, None, None) # script, cancellable, callback, user_data
 
263
        #self._view.execute_script(script)
213
264
        self.emit(signal, *args)        
214
265
 
215
266
 
376
427
        if self.enable_inspector:
377
428
            self.view.get_settings().set_property('enable-developer-extras', True)
378
429
            inspector = self.view.get_inspector()
379
 
            inspector.connect('inspect-web-view', self.on_inspect)
 
430
            #inspector.connect('inspect-web-view', self.on_inspect)
380
431
        if self.enable_logging:
381
432
            self.view.enable_logging()
382
433
        self.view.show()