157 self.__proxy = NetworkAccessManagerProxy(self) |
157 self.__proxy = NetworkAccessManagerProxy(self) |
158 self.__proxy.setWebPage(self) |
158 self.__proxy.setWebPage(self) |
159 self.__proxy.setPrimaryNetworkAccessManager( |
159 self.__proxy.setPrimaryNetworkAccessManager( |
160 Helpviewer.HelpWindow.HelpWindow.networkAccessManager()) |
160 Helpviewer.HelpWindow.HelpWindow.networkAccessManager()) |
161 self.setNetworkAccessManager(self.__proxy) |
161 self.setNetworkAccessManager(self.__proxy) |
|
162 |
|
163 self.__sslInfo = None |
|
164 self.__proxy.finished[QNetworkReply].connect(self.__managerFinished) |
162 |
165 |
163 def acceptNavigationRequest(self, frame, request, type_): |
166 def acceptNavigationRequest(self, frame, request, type_): |
164 """ |
167 """ |
165 Protected method to determine, if a request may be accepted. |
168 Protected method to determine, if a request may be accepted. |
166 |
169 |
285 """ |
288 """ |
286 agent = Preferences.getHelp("UserAgent") |
289 agent = Preferences.getHelp("UserAgent") |
287 if agent == "": |
290 if agent == "": |
288 agent = QWebPage.userAgentForUrl(self, url) |
291 agent = QWebPage.userAgentForUrl(self, url) |
289 return agent |
292 return agent |
|
293 |
|
294 def __managerFinished(self, reply): |
|
295 """ |
|
296 Private slot to handle a finished reply. |
|
297 |
|
298 This slot is used to get SSL related information for a reply. |
|
299 |
|
300 @param reply reference to the finished reply (QNetworkReply) |
|
301 """ |
|
302 try: |
|
303 frame = reply.request().originatingObject() |
|
304 except AttributeError: |
|
305 frame = None |
|
306 |
|
307 mainFrameRequest = frame == self.mainFrame() |
|
308 |
|
309 if mainFrameRequest and \ |
|
310 self.__sslInfo is not None and \ |
|
311 not self.__domainSchemeMatch(reply.url(), self.__sslInfo.url): |
|
312 self.__sslInfo = None |
|
313 |
|
314 if reply.error() == QNetworkReply.NoError and \ |
|
315 mainFrameRequest and \ |
|
316 self.__sslInfo is None and \ |
|
317 reply.url().scheme().lower() == "https": |
|
318 self.__sslInfo = reply.sslConfiguration().peerCertificate() |
|
319 self.__sslInfo.url = QUrl(reply.url()) |
|
320 |
|
321 def __domainSchemeMatch(self, url1, url2): |
|
322 """ |
|
323 Private method to check, if to URLs belong to the same domain. |
|
324 |
|
325 @param url1 first URL (QUrl) |
|
326 @param url2 second URL (QUrl) |
|
327 @return flag indicating a match (boolean) |
|
328 """ |
|
329 if url1.scheme() != url2.scheme(): |
|
330 return False |
|
331 |
|
332 url1L = url1.host().lower().split(".") |
|
333 url2L = url2.host().lower().split(".") |
|
334 if min(len(url1L), len(url2L)) < 2: |
|
335 return False |
|
336 |
|
337 return url1L[-2:] == url2L[-2:] |
290 |
338 |
291 ########################################################################################## |
339 ########################################################################################## |
292 |
340 |
293 class HelpBrowser(QWebView): |
341 class HelpBrowser(QWebView): |
294 """ |
342 """ |