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