167 CBrCtl* brctl = control(frame); |
169 CBrCtl* brctl = control(frame); |
168 WebDocumentLoader* topDocumentLoader = static_cast<WebDocumentLoader*>(core(brctl->webView()->mainFrame())->loader()->documentLoader()); |
170 WebDocumentLoader* topDocumentLoader = static_cast<WebDocumentLoader*>(core(brctl->webView()->mainFrame())->loader()->documentLoader()); |
169 HttpUiCallbacks::TEnterStatus enterStatus = HttpUiCallbacks::EEnterStatusNone; |
171 HttpUiCallbacks::TEnterStatus enterStatus = HttpUiCallbacks::EEnterStatusNone; |
170 bool ret = true; |
172 bool ret = true; |
171 |
173 |
172 if (brctl->settings()->brctlSetting(TBrCtlDefs::ESettingsSecurityWarnings)) { |
174 TUriParser8 secureUrlParser; |
173 TUriParser8 parser; |
175 TUriParser8 currentSecureUrlParser; |
174 bool secureUrl = false; |
176 bool secureUrl = false; |
175 bool currentSecureUrl = false; |
177 bool currentSecureUrl = false; |
176 if (parser.Parse(request.url().des()) == KErrNone) { |
178 if (secureUrlParser.Parse(request.url().des()) == KErrNone) { |
177 TPtrC8 scheme = parser.Extract( EUriScheme ); |
179 TPtrC8 scheme = secureUrlParser.Extract( EUriScheme ); |
178 secureUrl = scheme.CompareF(KHttps) == 0; |
180 secureUrl = scheme.CompareF(KHttps) == 0; |
179 } |
181 } |
180 if (frame->loader() && frame->loader()->documentLoader()) { |
182 if (frame->loader() && frame->loader()->documentLoader()) { |
181 TPtrC8 url = frame->loader()->documentLoader()->URL().des(); |
183 TPtrC8 url = frame->loader()->documentLoader()->URL().des(); |
182 TUriParser8 parser; |
184 if (currentSecureUrlParser.Parse(url) == KErrNone) { |
183 if (parser.Parse(url) == KErrNone) { |
185 TPtrC8 scheme = currentSecureUrlParser.Extract( EUriScheme ); |
184 TPtrC8 scheme = parser.Extract( EUriScheme ); |
186 currentSecureUrl = scheme.CompareF(KHttps) == 0; |
185 currentSecureUrl = scheme.CompareF(KHttps) == 0; |
187 } |
186 } |
188 } |
187 } |
189 if (request.mainLoad()) { |
188 if (request.mainLoad()) { |
190 if (!frame->ownerElement()) { |
189 if (!frame->ownerElement()) { |
|
190 if (currentSecureUrl) { |
|
191 if (!secureUrl) { |
|
192 // secure -> non secure |
|
193 if (request.httpMethod() == "POST") { |
|
194 enterStatus = HttpUiCallbacks::ESubmittingToNonSecurePage; |
|
195 } |
|
196 else { |
|
197 enterStatus = HttpUiCallbacks::EExitingSecurePage; |
|
198 } |
|
199 } // if (!secureUrl) |
|
200 } |
|
201 else { |
|
202 if (secureUrl) { |
|
203 // non secure -> secure |
|
204 enterStatus = HttpUiCallbacks::EEnteringSecurePage; |
|
205 } |
|
206 } // if (currentSecureUrl) |
|
207 } // if (!frame->ownerElement()) |
|
208 } |
|
209 else |
|
210 { |
|
211 if (currentSecureUrl) { |
191 if (currentSecureUrl) { |
212 if (!secureUrl) { |
192 if (!secureUrl) { |
213 // Ask once per page. If we already asked, just use the previous user decision |
193 // secure -> non secure |
214 if (topDocumentLoader->userWasAskedToLoadNonSecureItem()) { |
194 if (request.httpMethod() == "POST") { |
215 ret = topDocumentLoader->userAgreedToLoadNonSecureItem(); |
195 enterStatus = HttpUiCallbacks::ESubmittingToNonSecurePage; |
216 } |
196 } |
217 else { |
197 else { |
218 enterStatus = HttpUiCallbacks::ESomeItemsNotSecure; |
198 enterStatus = HttpUiCallbacks::EExitingSecurePage; |
219 } |
199 } |
220 } |
200 } // if (!secureUrl) |
221 } |
201 else { |
|
202 // secure -> secure |
|
203 if( secureUrlParser.Extract(EUriHost).Compare( |
|
204 currentSecureUrlParser.Extract(EUriHost)) ) { |
|
205 enterStatus = HttpUiCallbacks::EEnteringSecurePage; |
|
206 } |
|
207 else { |
|
208 enterStatus = HttpUiCallbacks::EReEnteringSecurePage; |
|
209 } |
|
210 } |
|
211 } // if (currentSecureUrl) |
222 else { |
212 else { |
223 if (secureUrl) { |
213 if (secureUrl) { |
224 enterStatus = HttpUiCallbacks::ESecureItemInNonSecurePage; |
214 // non secure -> secure |
225 } |
215 enterStatus = HttpUiCallbacks::EEnteringSecurePage; |
226 } |
216 } |
227 } |
217 } |
|
218 } // if (!frame->ownerElement()) |
|
219 } |
|
220 else |
|
221 { |
|
222 if (currentSecureUrl) { |
|
223 if (!secureUrl) { |
|
224 // Ask once per page. If we already asked, just use the previous user decision |
|
225 if (topDocumentLoader->userWasAskedToLoadNonSecureItem()) { |
|
226 ret = topDocumentLoader->userAgreedToLoadNonSecureItem(); |
|
227 } |
|
228 else { |
|
229 enterStatus = HttpUiCallbacks::ESomeItemsNotSecure; |
|
230 } |
|
231 } |
|
232 } |
|
233 else { |
|
234 if (secureUrl) { |
|
235 enterStatus = HttpUiCallbacks::ESecureItemInNonSecurePage; |
|
236 } |
|
237 } |
228 } |
238 } |
229 if (enterStatus != HttpUiCallbacks::EEnterStatusNone) { |
239 if (enterStatus != HttpUiCallbacks::EEnterStatusNone) { |
230 int err = m_httpSessionManager.uiCallback()->aboutToLoadPage(brctl, enterStatus); |
240 int err = m_httpSessionManager.uiCallback()->aboutToLoadPage(brctl, enterStatus); |
231 if (err != KErrNone) { |
241 if (err != KErrNone) { |
232 ret = false; |
242 ret = false; |