Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

System Crash When Overriding shouldInterceptRequest in WebViewClient

Tags:

Goal:

Override all requests made by a WebView and make the request myself (eventually set up a proxy).

Code:

@Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) {     if (url == null || url.trim().equals(""))         return null;      final DefaultHttpClient httpClient = new DefaultHttpClient();     httpClient.getConnectionManager().closeExpiredConnections();     final HttpUriRequest httpRequest = new HttpGet(url);      try {         final HttpResponse response = httpClient.execute(httpRequest);         final Header[] headers = response.getHeaders(CONTENT_TYPE);         String mimeType = "";         String encoding = "";         if (headers != null && headers.length > 0) {             final String type = headers[0].getValue();             final int semicolonIndex = type.indexOf(';');             if (semicolonIndex != -1) {                 mimeType = type.substring(0, semicolonIndex).trim();                 encoding = type.substring(semicolonIndex + 1).trim();                 final int equalsIndex = encoding.indexOf('=');                 if (equalsIndex != -1)                     encoding = encoding.substring(equalsIndex + 1).trim();             } else                 mimeType = type;         }          return new WebResourceResponse(mimeType, encoding, response.getEntity().getContent());     } catch (ClientProtocolException e) {         e.printStackTrace();     } catch (IOException e) {         e.printStackTrace();     } catch (IllegalArgumentException e) {         e.printStackTrace();     } finally {         httpClient.getConnectionManager().closeExpiredConnections();     }     return null; } 

The requests all seem to go through just fine, but eventually I get a stack trace with one of the two following issues:

3 15:07:28.650 E/InputDispatcher( 3981): channel '40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8 01-03 15:07:28.650 E/InputDispatcher( 3981): channel '40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 

which is apparently indicative of the operating system running out of file descriptors (fid)

or

01-03 15:29:36.810 I/DEBUG   ( 5798):     5903cd34  ac81c0b7  /system/lib/libdvm.so 01-03 15:29:38.380 I/DEBUG   ( 5798): debuggerd committing suicide to free the zombie! 01-03 15:29:38.380 I/BootReceiver( 3981): Copying /data/tombstones/tombstone_07 to DropBox  

(SYSTEM_TOMBSTONE)

Which means I think means that the OS is running into low level issues.

I am using 3.0 + so the function should be supported.

This mostly fails when I turn javascript on, or after browsing for a while without javascript.

like image 251
XtremeEmir Avatar asked Mar 21 '12 14:03

XtremeEmir


1 Answers

The method is deprecated. Try other signature of same method.

like image 52
Ankit Gupta Avatar answered Nov 09 '22 16:11

Ankit Gupta