public StethoReporter() { mReporter = NetworkEventReporterImpl.get(); mRequestId = mReporter.nextRequestId(); }
/** * Static accessor allowing callers to easily hook into the WebKit Inspector system without * creating dependencies on the main Stetho initialization code path. */ public static synchronized NetworkEventReporter get() { if (sInstance == null) { sInstance = new NetworkEventReporterImpl(); } return sInstance; }
@Override public void webSocketFrameReceived(InspectorWebSocketFrame frame) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.WebSocketFrameReceivedParams params = new Network.WebSocketFrameReceivedParams(); params.requestId = frame.requestId(); params.timestamp = stethoNow() / 1000.0; params.response = convertFrame(frame); peerManager.sendNotificationToPeers("Network.webSocketFrameReceived", params); } }
private void loadingFinished(String requestId) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.LoadingFinishedParams finishedParams = new Network.LoadingFinishedParams(); finishedParams.requestId = requestId; finishedParams.timestamp = stethoNow() / 1000.0; peerManager.sendNotificationToPeers("Network.loadingFinished", finishedParams); } }
@Override public void responseHeadersReceived(InspectorResponse response) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.Response responseJSON = new Network.Response(); responseJSON.url = response.url(); responseJSON.status = response.statusCode(); responseJSON.statusText = response.reasonPhrase(); responseJSON.headers = formatHeadersAsJSON(response); String contentType = getContentType(response); responseJSON.mimeType = contentType != null ? getResourceTypeHelper().stripContentExtras(contentType) : "application/octet-stream"; responseJSON.connectionReused = response.connectionReused(); responseJSON.connectionId = response.connectionId(); responseJSON.fromDiskCache = response.fromDiskCache(); Network.ResponseReceivedParams receivedParams = new Network.ResponseReceivedParams(); receivedParams.requestId = response.requestId(); receivedParams.frameId = "1"; receivedParams.loaderId = "1"; receivedParams.timestamp = stethoNow() / 1000.0; receivedParams.response = responseJSON; AsyncPrettyPrinter asyncPrettyPrinter = initAsyncPrettyPrinterForResponse(response, peerManager); receivedParams.type = determineResourceType(asyncPrettyPrinter, contentType, getResourceTypeHelper()); peerManager.sendNotificationToPeers("Network.responseReceived", receivedParams); } }
@Override public void requestWillBeSent(InspectorRequest request) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.Request requestJSON = new Network.Request(); requestJSON.url = request.url(); requestJSON.method = request.method(); requestJSON.headers = formatHeadersAsJSON(request); requestJSON.postData = readBodyAsString(peerManager, request); params.documentURL = request.url(); params.request = requestJSON; params.timestamp = stethoNow() / 1000.0; params.initiator = initiatorJSON; params.redirectResponse = null;
@Override public void webSocketWillSendHandshakeRequest(InspectorWebSocketRequest request) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.WebSocketWillSendHandshakeRequestParams params = new Network.WebSocketWillSendHandshakeRequestParams(); params.requestId = request.id(); params.timestamp = stethoNow() / 1000.0; params.wallTime = System.currentTimeMillis() / 1000.0; Network.WebSocketRequest requestJSON = new Network.WebSocketRequest(); requestJSON.headers = formatHeadersAsJSON(request); params.request = requestJSON; peerManager.sendNotificationToPeers("Network.webSocketWillSendHandshakeRequest", params); } }
@Nullable private static AsyncPrettyPrinter initAsyncPrettyPrinterForResponse( InspectorResponse response, NetworkPeerManager peerManager) { AsyncPrettyPrinterRegistry registry = peerManager.getAsyncPrettyPrinterRegistry(); AsyncPrettyPrinter asyncPrettyPrinter = createPrettyPrinterForResponse(response, registry); if (asyncPrettyPrinter != null) { peerManager.getResponseBodyFileManager().associateAsyncPrettyPrinterWithId( response.requestId(), asyncPrettyPrinter); } return asyncPrettyPrinter; }
@Nullable InputStream availableInputStream, ResponseHandler responseHandler) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { if (availableInputStream == null) { getResourceTypeHelper().determineResourceType(contentType) : null;
@Override public boolean isEnabled() { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); return peerManager != null; }
@Override public void dataSent( String requestId, int dataLength, int encodedDataLength) { // The inspector protocol only gives us the dataReceived event, but we can happily combine // upstream and downstream data into this to visualize the real size of the request, not // strictly the size of the "content" as reported in the UI. dataReceived(requestId, dataLength, encodedDataLength); }
private void loadingFailed(String requestId, String errorText) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.LoadingFailedParams failedParams = new Network.LoadingFailedParams(); failedParams.requestId = requestId; failedParams.timestamp = stethoNow() / 1000.0; failedParams.errorText = errorText; failedParams.type = Page.ResourceType.OTHER; peerManager.sendNotificationToPeers("Network.loadingFailed", failedParams); } }
@Override public void webSocketHandshakeResponseReceived(InspectorWebSocketResponse response) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.WebSocketHandshakeResponseReceivedParams params = new Network.WebSocketHandshakeResponseReceivedParams(); params.requestId = response.requestId(); params.timestamp = stethoNow() / 1000.0; Network.WebSocketResponse responseJSON = new Network.WebSocketResponse(); responseJSON.headers = formatHeadersAsJSON(response); responseJSON.headersText = null; if (response.requestHeaders() != null) { responseJSON.requestHeaders = formatHeadersAsJSON(response.requestHeaders()); responseJSON.requestHeadersText = null; } responseJSON.status = response.statusCode(); responseJSON.statusText = response.reasonPhrase(); params.response = responseJSON; peerManager.sendNotificationToPeers("Network.webSocketHandshakeResponseReceived", params); } }
@Test public void testInitAsyncPrettyPrinterForResponseWithRegisteredHeader() { ArrayList<String> headerNames = new ArrayList<String>(); ArrayList<String> headerValues = new ArrayList<String>(); headerNames.add(UNREGISTERED_HEADER_NAMES[0]); headerNames.add(UNREGISTERED_HEADER_NAMES[1]); headerNames.add(TEST_HEADER_NAME); headerValues.add(UNREGISTERED_HEADER_VALUES[0]); headerValues.add(UNREGISTERED_HEADER_VALUES[1]); headerValues.add(TEST_HEADER_VALUE); TestInspectorResponse testResponse = new TestInspectorResponse( headerNames, headerValues, TEST_REQUEST_ID ); AsyncPrettyPrinter prettyPrinter = NetworkEventReporterImpl.createPrettyPrinterForResponse( testResponse, mAsyncPrettyPrinterRegistry); assertNotNull(prettyPrinter); }
@Override public void webSocketCreated(String requestId, String url) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.WebSocketCreatedParams params = new Network.WebSocketCreatedParams(); params.requestId = requestId; params.url = url; peerManager.sendNotificationToPeers("Network.webSocketCreated", params); } }
@Before public void setUp() { PowerMockito.mockStatic(NetworkEventReporterImpl.class); mMockEventReporter = mock(NetworkEventReporter.class); Mockito.when(mMockEventReporter.isEnabled()).thenReturn(true); PowerMockito.when(NetworkEventReporterImpl.get()).thenReturn(mMockEventReporter); mInterceptor = new StethoInterceptor(); mClientWithInterceptor = new OkHttpClient.Builder() .addNetworkInterceptor(mInterceptor) .build(); }
@Override public void webSocketClosed(String requestId) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.WebSocketClosedParams params = new Network.WebSocketClosedParams(); params.requestId = requestId; params.timestamp = stethoNow() / 1000.0; peerManager.sendNotificationToPeers("Network.webSocketClosed", params); } }
@Override public void webSocketFrameSent(InspectorWebSocketFrame frame) { NetworkPeerManager peerManager = getPeerManagerIfEnabled(); if (peerManager != null) { Network.WebSocketFrameSentParams params = new Network.WebSocketFrameSentParams(); params.requestId = frame.requestId(); params.timestamp = stethoNow() / 1000.0; params.response = convertFrame(frame); peerManager.sendNotificationToPeers("Network.webSocketFrameSent", params); } }
@Test public void testInitAsyncPrettyPrinterForResponseWithUnregisteredHeader() { ArrayList<String> headerNames = new ArrayList<String>(); ArrayList<String> headerValues = new ArrayList<String>(); headerNames.add(UNREGISTERED_HEADER_NAMES[0]); headerNames.add(UNREGISTERED_HEADER_NAMES[1]); headerNames.add(UNREGISTERED_HEADER_NAMES[2]); headerValues.add(UNREGISTERED_HEADER_VALUES[0]); headerValues.add(UNREGISTERED_HEADER_VALUES[1]); headerValues.add(UNREGISTERED_HEADER_VALUES[2]); TestInspectorResponse testResponse = new TestInspectorResponse( headerNames, headerValues, TEST_REQUEST_ID ); AsyncPrettyPrinter prettyPrinter = NetworkEventReporterImpl.createPrettyPrinterForResponse( testResponse, mAsyncPrettyPrinterRegistry); assertEquals(null, prettyPrinter); }
@Before public void setUp() { PowerMockito.mockStatic(NetworkEventReporterImpl.class); mMockEventReporter = mock(NetworkEventReporter.class); Mockito.when(mMockEventReporter.isEnabled()).thenReturn(true); PowerMockito.when(NetworkEventReporterImpl.get()).thenReturn(mMockEventReporter); mInterceptor = new StethoInterceptor(); mClientWithInterceptor = new OkHttpClient(); mClientWithInterceptor.networkInterceptors().add(mInterceptor); }