Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: third_party/WebKit/LayoutTests/http/tests/inspector/network-test.js

Issue 2838673003: [Devtools][Regression] Fixed websocket frame selection loss on frame received (Closed)
Patch Set: [Devtools] Fixed websocket frame selection loss on frame received Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/http/tests/inspector/network-test.js
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/network-test.js b/third_party/WebKit/LayoutTests/http/tests/inspector/network-test.js
index dc9bf760c1d2583e9bd52ef4a97af93ff0d1c944..5a55e3cbd7e28ec1dbc8cafccdf1e52e30f91162 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/network-test.js
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/network-test.js
@@ -52,13 +52,125 @@ function makeFetch(url, requestInitializer)
}).catch(e => e);
}
+function makeWebSocket(url)
+{
+ return Promise.resolve(new WebSocket(url));
+}
+
var initialize_NetworkTest = function() {
InspectorTest.preloadPanel("network");
+InspectorTest._sdkRequestStartedPromises = new Map();
+InspectorTest._sdkResponseReceivedPromises = new Map();
+
+InspectorTest._handleRequestStarted = function(data) {
+ var request = /** @type {!SDK.NetworkRequest} */ (data.data);
+ var promises = InspectorTest._sdkRequestStartedPromises.get(request.url());
+ if (!promises)
+ return;
+ InspectorTest._sdkRequestStartedPromises.delete(request.url());
+ promises.forEach(resolver => resolver(request));
+}
+
+/**
+ * @param {string} url
+ * @return {!Promise<!SDK.NetworkRequest>}
+ */
+InspectorTest.sdkRequestStartedFromUrlPromise = function(url)
dgozman 2017/04/25 21:20:45 Doesn't InspectorTest.findRequestsByURLPattern wor
allada 2017/04/27 17:03:19 Partially, My goal was to have a function that wou
+{
+ return new Promise(resolve => {
+ var promises = InspectorTest._sdkRequestStartedPromises.get(url);
+ if (!promises) {
+ promises = [];
+ InspectorTest._sdkRequestStartedPromises.set(url, promises);
+ }
+ promises.push(resolve);
+ });
+}
+
+/**
+ * @param {string} url
+ */
+InspectorTest.makeWebsocketPromise = function(url)
dgozman 2017/04/25 21:20:45 Only add "promise" at the end if there is non-prom
allada 2017/04/27 17:03:19 Done.
+{
+ return InspectorTest.callFunctionInPageAsync("makeWebSocket", [url]);
+}
+
+/**
+ * @param {!SDK.NetworkRequest} request
+ */
+InspectorTest._resolveResponseReceivedsIfNeeded = function(request) {
+ if (request.responseReceivedTime === -1)
+ return;
+ var promises = InspectorTest._sdkResponseReceivedPromises.get(request);
+ if (!promises)
+ return;
+ InspectorTest._sdkResponseReceivedPromises.delete(request);
+ promises.forEach(resolver => resolver(request));
+}
+
+/**
+ * @param {!SDK.NetworkRequest} request
+ * @return {!Promise<!SDK.NetworkRequest>}
+ */
+InspectorTest.waitForRequestResponse = function(request)
+{
+ return new Promise(resolve => {
+ var promises = InspectorTest._sdkResponseReceivedPromises.get(request);
dgozman 2017/04/25 21:20:45 It's easier to add/remove listener right here, ins
allada 2017/04/27 17:03:19 Done.
+ if (!promises) {
+ promises = [];
+ InspectorTest._sdkResponseReceivedPromises.set(request, promises);
+ }
+ promises.push(resolve);
+ InspectorTest._resolveResponseReceivedsIfNeeded(request);
+ });
+}
+
+/**
+ * @param {string}
+ * @return {?Network.NetworkRequestNode}
+ */
+InspectorTest.networkLogViewNodeForRequestId = function(id)
+{
+ return UI.panels.network._networkLogView._nodesByRequestId.get(id) || null;
+}
+
+/**
+ * @param {!SDK.NetworkRequest} wsRequest
+ * @param {string} message
+ * @return {!Promise<!SDK.NetworkRequest.WebSocketFrame>}
+ */
+InspectorTest.waitForWebsocketFrameReceived = function(wsRequest, message)
+{
+ return new Promise(resolve => {
+ for (var frame of wsRequest.frames()) {
+ if (resolveIfNeeded(frame))
+ return;
+ }
+ wsRequest.addEventListener(SDK.NetworkRequest.Events.WebsocketFrameAdded, handleFrameReceived);
+
+ function handleFrameReceived(data)
+ {
+ if (resolveIfNeeded(/** @type {!SDK.NetworkRequest.WebSocketFrame} */ (data.data)))
+ wsRequest.removeEventListener(SDK.NetworkRequest.Events.WebsocketFrameAdded, handleFrameReceived);
+ }
+
+ function resolveIfNeeded(frame)
+ {
+ if (frame.type !== SDK.NetworkRequest.WebSocketFrameType.Receive || frame.text !== message)
+ return false;
+ resolve(frame);
+ return true;
+ }
+ });
+}
+
InspectorTest.recordNetwork = function()
{
UI.panels.network._networkLogView.setRecording(true);
+ InspectorTest.networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted, InspectorTest._handleRequestStarted);
+ InspectorTest.networkManager.addEventListener(SDK.NetworkManager.Events.RequestUpdated, data => InspectorTest._resolveResponseReceivedsIfNeeded(/** @type {!SDK.NetworkRequest} */ (data.data)));
}
InspectorTest.networkRequests = function()

Powered by Google App Engine
This is Rietveld 408576698