11 |
11 |
12 import os |
12 import os |
13 |
13 |
14 from PyQt4.QtCore import pyqtSignal, QByteArray, qVersion |
14 from PyQt4.QtCore import pyqtSignal, QByteArray, qVersion |
15 from PyQt4.QtGui import QDialog |
15 from PyQt4.QtGui import QDialog |
16 from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply |
16 from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest, \ |
|
17 QNetworkReply |
17 |
18 |
18 from E5Network.E5NetworkProxyFactory import E5NetworkProxyFactory, \ |
19 from E5Network.E5NetworkProxyFactory import E5NetworkProxyFactory, \ |
19 proxyAuthenticationRequired |
20 proxyAuthenticationRequired |
20 try: |
21 try: |
21 from PyQt4.QtNetwork import QSslSocket |
22 from PyQt4.QtNetwork import QSslSocket |
30 |
31 |
31 class NetworkAccessManager(QNetworkAccessManager): |
32 class NetworkAccessManager(QNetworkAccessManager): |
32 """ |
33 """ |
33 Class implementing a QNetworkAccessManager subclass. |
34 Class implementing a QNetworkAccessManager subclass. |
34 |
35 |
35 @signal requestCreated(QNetworkAccessManager.Operation, QNetworkRequest, QNetworkReply) |
36 @signal requestCreated(QNetworkAccessManager.Operation, QNetworkRequest, |
|
37 QNetworkReply) |
36 emitted after the request has been created |
38 emitted after the request has been created |
37 """ |
39 """ |
38 requestCreated = pyqtSignal( |
40 requestCreated = pyqtSignal( |
39 QNetworkAccessManager.Operation, QNetworkRequest, QNetworkReply) |
41 QNetworkAccessManager.Operation, QNetworkRequest, QNetworkReply) |
40 |
42 |
76 self.setSchemeHandler("eric", EricAccessHandler(self)) |
78 self.setSchemeHandler("eric", EricAccessHandler(self)) |
77 |
79 |
78 from .AboutAccessHandler import AboutAccessHandler |
80 from .AboutAccessHandler import AboutAccessHandler |
79 self.setSchemeHandler("about", AboutAccessHandler(self)) |
81 self.setSchemeHandler("about", AboutAccessHandler(self)) |
80 |
82 |
81 from Helpviewer.AdBlock.AdBlockAccessHandler import AdBlockAccessHandler |
83 from Helpviewer.AdBlock.AdBlockAccessHandler import \ |
|
84 AdBlockAccessHandler |
82 self.setSchemeHandler("abp", AdBlockAccessHandler(self)) |
85 self.setSchemeHandler("abp", AdBlockAccessHandler(self)) |
83 |
86 |
84 from .FtpAccessHandler import FtpAccessHandler |
87 from .FtpAccessHandler import FtpAccessHandler |
85 self.setSchemeHandler("ftp", FtpAccessHandler(self)) |
88 self.setSchemeHandler("ftp", FtpAccessHandler(self)) |
86 |
89 |
90 def setSchemeHandler(self, scheme, handler): |
93 def setSchemeHandler(self, scheme, handler): |
91 """ |
94 """ |
92 Public method to register a scheme handler. |
95 Public method to register a scheme handler. |
93 |
96 |
94 @param scheme access scheme (string) |
97 @param scheme access scheme (string) |
95 @param handler reference to the scheme handler object (SchemeAccessHandler) |
98 @param handler reference to the scheme handler object |
|
99 (SchemeAccessHandler) |
96 """ |
100 """ |
97 self.__schemeHandlers[scheme] = handler |
101 self.__schemeHandlers[scheme] = handler |
98 |
102 |
99 def createRequest(self, op, request, outgoingData=None): |
103 def createRequest(self, op, request, outgoingData=None): |
100 """ |
104 """ |
101 Protected method to create a request. |
105 Protected method to create a request. |
102 |
106 |
103 @param op the operation to be performed (QNetworkAccessManager.Operation) |
107 @param op the operation to be performed |
|
108 (QNetworkAccessManager.Operation) |
104 @param request reference to the request object (QNetworkRequest) |
109 @param request reference to the request object (QNetworkRequest) |
105 @param outgoingData reference to an IODevice containing data to be sent |
110 @param outgoingData reference to an IODevice containing data to be sent |
106 (QIODevice) |
111 (QIODevice) |
107 @return reference to the created reply object (QNetworkReply) |
112 @return reference to the created reply object (QNetworkReply) |
108 """ |
113 """ |
109 scheme = request.url().scheme() |
114 scheme = request.url().scheme() |
110 if scheme == "https" and (not SSL_AVAILABLE or not QSslSocket.supportsSsl()): |
115 if scheme == "https" and \ |
111 from .NetworkProtocolUnknownErrorReply import NetworkProtocolUnknownErrorReply |
116 (not SSL_AVAILABLE or not QSslSocket.supportsSsl()): |
|
117 from .NetworkProtocolUnknownErrorReply import \ |
|
118 NetworkProtocolUnknownErrorReply |
112 return NetworkProtocolUnknownErrorReply(scheme, self) |
119 return NetworkProtocolUnknownErrorReply(scheme, self) |
113 |
120 |
114 import Helpviewer.HelpWindow |
121 import Helpviewer.HelpWindow |
115 |
122 |
116 if op == QNetworkAccessManager.PostOperation and outgoingData is not None: |
123 if op == QNetworkAccessManager.PostOperation and \ |
|
124 outgoingData is not None: |
117 outgoingDataByteArray = outgoingData.peek(1024 * 1024) |
125 outgoingDataByteArray = outgoingData.peek(1024 * 1024) |
118 Helpviewer.HelpWindow.HelpWindow.passwordManager().post( |
126 Helpviewer.HelpWindow.HelpWindow.passwordManager().post( |
119 request, outgoingDataByteArray) |
127 request, outgoingDataByteArray) |
120 |
128 |
121 reply = None |
129 reply = None |
124 .createRequest(op, request, outgoingData) |
132 .createRequest(op, request, outgoingData) |
125 if reply is not None: |
133 if reply is not None: |
126 return reply |
134 return reply |
127 |
135 |
128 # give GreaseMonkey the chance to create a request |
136 # give GreaseMonkey the chance to create a request |
129 reply = Helpviewer.HelpWindow.HelpWindow.greaseMonkeyManager().createRequest( |
137 reply = Helpviewer.HelpWindow.HelpWindow.greaseMonkeyManager()\ |
130 op, request, outgoingData) |
138 .createRequest(op, request, outgoingData) |
131 if reply is not None: |
139 if reply is not None: |
132 return reply |
140 return reply |
133 |
141 |
134 req = QNetworkRequest(request) |
142 req = QNetworkRequest(request) |
135 if req.rawHeader("X-Eric5-UserLoadAction") == QByteArray("1"): |
143 if req.rawHeader("X-Eric5-UserLoadAction") == QByteArray("1"): |
136 req.setRawHeader("X-Eric5-UserLoadAction", QByteArray()) |
144 req.setRawHeader("X-Eric5-UserLoadAction", QByteArray()) |
137 req.setAttribute(QNetworkRequest.User + 200, "") |
145 req.setAttribute(QNetworkRequest.User + 200, "") |
138 else: |
146 else: |
139 req.setAttribute(QNetworkRequest.User + 200, req.rawHeader("Referer")) |
147 req.setAttribute( |
|
148 QNetworkRequest.User + 200, req.rawHeader("Referer")) |
140 |
149 |
141 if hasattr(QNetworkRequest, 'HttpPipeliningAllowedAttribute'): |
150 if hasattr(QNetworkRequest, 'HttpPipeliningAllowedAttribute'): |
142 req.setAttribute(QNetworkRequest.HttpPipeliningAllowedAttribute, True) |
151 req.setAttribute( |
|
152 QNetworkRequest.HttpPipeliningAllowedAttribute, True) |
143 if not self.__acceptLanguage.isEmpty(): |
153 if not self.__acceptLanguage.isEmpty(): |
144 req.setRawHeader("Accept-Language", self.__acceptLanguage) |
154 req.setRawHeader("Accept-Language", self.__acceptLanguage) |
145 |
155 |
146 # AdBlock code |
156 # AdBlock code |
147 if op == QNetworkAccessManager.GetOperation: |
157 if op == QNetworkAccessManager.GetOperation: |
175 # Send referer header? |
185 # Send referer header? |
176 if not self.__sendReferer and \ |
186 if not self.__sendReferer and \ |
177 req.url().host() not in Preferences.getHelp("SendRefererWhitelist"): |
187 req.url().host() not in Preferences.getHelp("SendRefererWhitelist"): |
178 req.setRawHeader("Referer", "") |
188 req.setRawHeader("Referer", "") |
179 |
189 |
180 reply = QNetworkAccessManager.createRequest(self, op, req, outgoingData) |
190 reply = QNetworkAccessManager.createRequest( |
|
191 self, op, req, outgoingData) |
181 self.requestCreated.emit(op, req, reply) |
192 self.requestCreated.emit(op, req, reply) |
182 |
193 |
183 return reply |
194 return reply |
184 |
195 |
185 def __authenticationRequired(self, reply, auth): |
196 def __authenticationRequired(self, reply, auth): |
246 """ |
257 """ |
247 if Preferences.getHelp("DiskCacheEnabled"): |
258 if Preferences.getHelp("DiskCacheEnabled"): |
248 from PyQt4.QtWebKit import qWebKitVersion |
259 from PyQt4.QtWebKit import qWebKitVersion |
249 from .NetworkDiskCache import NetworkDiskCache |
260 from .NetworkDiskCache import NetworkDiskCache |
250 diskCache = NetworkDiskCache(self) |
261 diskCache = NetworkDiskCache(self) |
251 location = os.path.join(Utilities.getConfigDir(), "browser", 'cache', |
262 location = os.path.join( |
252 "{0}-Qt{1}".format(qWebKitVersion(), qVersion())) |
263 Utilities.getConfigDir(), "browser", 'cache', |
|
264 "{0}-Qt{1}".format(qWebKitVersion(), qVersion())) |
253 size = Preferences.getHelp("DiskCacheSize") * 1024 * 1024 |
265 size = Preferences.getHelp("DiskCacheSize") * 1024 * 1024 |
254 diskCache.setCacheDirectory(location) |
266 diskCache.setCacheDirectory(location) |
255 diskCache.setMaximumCacheSize(size) |
267 diskCache.setMaximumCacheSize(size) |
256 else: |
268 else: |
257 diskCache = None |
269 diskCache = None |