@@ -21,6 +21,8 @@ import android.graphics.Bitmap
2121import android.net.Uri
2222import android.net.http.SslError
2323import android.os.Build
24+ import android.support.annotation.AnyThread
25+ import android.support.annotation.UiThread
2426import android.support.annotation.WorkerThread
2527import android.webkit.*
2628import androidx.core.net.toUri
@@ -32,6 +34,7 @@ import com.duckduckgo.app.statistics.pixels.Pixel.PixelName.HTTPS_UPGRADE_SITE_E
3234import com.duckduckgo.app.statistics.pixels.Pixel.PixelParameter
3335import timber.log.Timber
3436import javax.inject.Inject
37+ import kotlin.concurrent.thread
3538
3639
3740class BrowserWebViewClient @Inject constructor(
@@ -121,36 +124,45 @@ class BrowserWebViewClient @Inject constructor(
121124 override fun onReceivedError (view : WebView , errorCode : Int , description : String , failingUrl : String ) {
122125 if (Build .VERSION .SDK_INT < Build .VERSION_CODES .M ) {
123126 val url = failingUrl.toUri()
124- if (isHttpsUpgradeSite(url)) {
125- reportHttpsUpgradeSiteError(url, statusCode = null , error = " WEB_RESOURCE_ERROR_$errorCode " )
126- }
127+ reportHttpsErrorIfInUpgradeList(url, statusCode = null , error = " WEB_RESOURCE_ERROR_$errorCode " )
127128 }
128129 super .onReceivedError(view, errorCode, description, failingUrl)
129130 }
130131
131132 @TargetApi(Build .VERSION_CODES .M )
132133 override fun onReceivedError (view : WebView , request : WebResourceRequest , error : WebResourceError ) {
133- if (request.isForMainFrame && isHttpsUpgradeSite(request.url) ) {
134- reportHttpsUpgradeSiteError (request.url, statusCode = null , error = " WEB_RESOURCE_ERROR_${error.errorCode} " )
134+ if (request.isForMainFrame) {
135+ reportHttpsErrorIfInUpgradeList (request.url, statusCode = null , error = " WEB_RESOURCE_ERROR_${error.errorCode} " )
135136 }
136137 super .onReceivedError(view, request, error)
137138 }
138139
139140 override fun onReceivedHttpError (view : WebView , request : WebResourceRequest , errorResponse : WebResourceResponse ) {
140- if (request.isForMainFrame && isHttpsUpgradeSite(request.url) ) {
141- reportHttpsUpgradeSiteError (request.url, errorResponse.statusCode, error = null )
141+ if (request.isForMainFrame) {
142+ reportHttpsErrorIfInUpgradeList (request.url, errorResponse.statusCode, error = null )
142143 }
143144 super .onReceivedHttpError(view, request, errorResponse)
144145 }
145146
147+ @UiThread
146148 override fun onReceivedSslError (view : WebView , handler : SslErrorHandler , error : SslError ) {
147149 val uri = error.url.toUri()
148- if (isHttpsUpgradeSite(uri)) {
149- reportHttpsUpgradeSiteError(uri, null , " SSL_ERROR_${error.primaryError} " )
150- }
150+ reportHttpsErrorIfInUpgradeList(uri, null , " SSL_ERROR_${error.primaryError} " )
151151 super .onReceivedSslError(view, handler, error)
152152 }
153153
154+ @AnyThread
155+ private fun reportHttpsErrorIfInUpgradeList (url : Uri , statusCode : Int? , error : String? ) {
156+
157+ if (! url.isHttps) return
158+
159+ thread {
160+ if (httpsUpgrader.isInUpgradeList(url)) {
161+ reportHttpsUpgradeSiteError(url, statusCode, error)
162+ }
163+ }
164+ }
165+
154166 private fun reportHttpsUpgradeSiteError (url : Uri , statusCode : Int? , error : String? ) {
155167 val params = mapOf (
156168 PixelParameter .URL to url.simpleUrl,
@@ -160,10 +172,6 @@ class BrowserWebViewClient @Inject constructor(
160172 pixel.fire(HTTPS_UPGRADE_SITE_ERROR , params)
161173 }
162174
163- private fun isHttpsUpgradeSite (url : Uri ): Boolean {
164- return url.isHttps && httpsUpgrader.isInUpgradeList(url)
165- }
166-
167175 /* *
168176 * Utility to function to execute a function, and then return true
169177 *
0 commit comments