Commit 29b5c083 authored by Nathan Bruer's avatar Nathan Bruer Committed by Commit Bot

[Devtools] Overrides now intercept from response stage

To get better mime-types we now intercept response info for overrides at
the response stage.

R=pfeldman
BUG=760316

Change-Id: I6f0367ef2789d210c51dc1c39130e4a72106b05b
Reviewed-on: https://chromium-review.googlesource.com/780922
Commit-Queue: Blaise Bruer <allada@chromium.org>
Reviewed-by: default avatarPavel Feldman <pfeldman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#518800}
parent 509d78a6
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
Common.moduleSetting('cacheDisabled').addChangeListener(cacheSettingChanged); Common.moduleSetting('cacheDisabled').addChangeListener(cacheSettingChanged);
TestRunner.addResult('Enabling Interception'); TestRunner.addResult('Enabling Interception');
await SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns(['*'], () => Promise.resolve()); await SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns([{urlPattern: '*'}], () => Promise.resolve());
TestRunner.addResult('Interception Enabled'); TestRunner.addResult('Interception Enabled');
TestRunner.completeTest(); TestRunner.completeTest();
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
*/ */
async function checkPattern(pattern) { async function checkPattern(pattern) {
TestRunner.addResult("Setting Pattern: " + cleanURLOrPattern(pattern)); TestRunner.addResult("Setting Pattern: " + cleanURLOrPattern(pattern));
await SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns([pattern], interceptionHandler); await SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns([{urlPattern: pattern}], interceptionHandler);
TestRunner.addResult("Requesting: " + cleanURLOrPattern(resourceURL)); TestRunner.addResult("Requesting: " + cleanURLOrPattern(resourceURL));
await TestRunner.evaluateInPageAsync(`fetch('` + resourceURL + `')`); await TestRunner.evaluateInPageAsync(`fetch('` + resourceURL + `')`);
TestRunner.addResult("Response Received: " + cleanURLOrPattern(resourceURL)); TestRunner.addResult("Response Received: " + cleanURLOrPattern(resourceURL));
......
...@@ -390,7 +390,10 @@ Persistence.NetworkPersistenceManager = class extends Common.Object { ...@@ -390,7 +390,10 @@ Persistence.NetworkPersistenceManager = class extends Common.Object {
} }
return SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns( return SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns(
Array.from(patterns), this._interceptionHandlerBound); Array.from(patterns).map(
pattern =>
({urlPattern: pattern, interceptionStage: Protocol.Network.InterceptionStage.HeadersReceived})),
this._interceptionHandlerBound);
} }
} }
...@@ -457,10 +460,18 @@ Persistence.NetworkPersistenceManager = class extends Common.Object { ...@@ -457,10 +460,18 @@ Persistence.NetworkPersistenceManager = class extends Common.Object {
if (!fileSystemUISourceCode) if (!fileSystemUISourceCode)
return; return;
var expectedResourceType = Common.resourceTypes[interceptedRequest.resourceType] || Common.resourceTypes.Other; var mimeType = '';
var mimeType = fileSystemUISourceCode.mimeType(); if (interceptedRequest.responseHeaders) {
if (Common.ResourceType.fromMimeType(mimeType) !== expectedResourceType) var responseHeaders = SDK.NetworkManager.lowercaseHeaders(interceptedRequest.responseHeaders);
mimeType = expectedResourceType.canonicalMimeType(); mimeType = responseHeaders['content-type'];
}
if (!mimeType) {
var expectedResourceType = Common.resourceTypes[interceptedRequest.resourceType] || Common.resourceTypes.Other;
mimeType = fileSystemUISourceCode.mimeType();
if (Common.ResourceType.fromMimeType(mimeType) !== expectedResourceType)
mimeType = expectedResourceType.canonicalMimeType();
}
var project = /** @type {!Persistence.FileSystemWorkspaceBinding.FileSystem} */ (fileSystemUISourceCode.project()); var project = /** @type {!Persistence.FileSystemWorkspaceBinding.FileSystem} */ (fileSystemUISourceCode.project());
var blob = await project.requestFileBlob(fileSystemUISourceCode); var blob = await project.requestFileBlob(fileSystemUISourceCode);
interceptedRequest.continueRequestWithContent(new Blob([blob], {type: mimeType})); interceptedRequest.continueRequestWithContent(new Blob([blob], {type: mimeType}));
......
...@@ -147,7 +147,7 @@ SDK.NetworkManager = class extends SDK.SDKModel { ...@@ -147,7 +147,7 @@ SDK.NetworkManager = class extends SDK.SDKModel {
* @param {!Object} headers * @param {!Object} headers
* @return {!Object<string, string>} * @return {!Object<string, string>}
*/ */
static _lowercaseHeaders(headers) { static lowercaseHeaders(headers) {
var newHeaders = {}; var newHeaders = {};
for (var headerName in headers) for (var headerName in headers)
newHeaders[headerName.toLowerCase()] = headers[headerName]; newHeaders[headerName.toLowerCase()] = headers[headerName];
...@@ -448,7 +448,7 @@ SDK.NetworkDispatcher = class { ...@@ -448,7 +448,7 @@ SDK.NetworkDispatcher = class {
*/ */
responseReceived(requestId, loaderId, time, resourceType, response, frameId) { responseReceived(requestId, loaderId, time, resourceType, response, frameId) {
var networkRequest = this._inflightRequestsById[requestId]; var networkRequest = this._inflightRequestsById[requestId];
var lowercaseHeaders = SDK.NetworkManager._lowercaseHeaders(response.headers); var lowercaseHeaders = SDK.NetworkManager.lowercaseHeaders(response.headers);
if (!networkRequest) { if (!networkRequest) {
// We missed the requestWillBeSent. // We missed the requestWillBeSent.
var eventData = {}; var eventData = {};
...@@ -798,7 +798,7 @@ SDK.MultitargetNetworkManager = class extends Common.Object { ...@@ -798,7 +798,7 @@ SDK.MultitargetNetworkManager = class extends Common.Object {
this._effectiveBlockedURLs = []; this._effectiveBlockedURLs = [];
this._updateBlockedPatterns(); this._updateBlockedPatterns();
/** @type {!Multimap<!SDK.MultitargetNetworkManager.RequestInterceptor, string>} */ /** @type {!Multimap<!SDK.MultitargetNetworkManager.RequestInterceptor, !SDK.MultitargetNetworkManager.InterceptionPattern>} */
this._urlsForRequestInterceptor = new Multimap(); this._urlsForRequestInterceptor = new Multimap();
SDK.targetManager.observeTargets(this, SDK.Target.Capability.Network); SDK.targetManager.observeTargets(this, SDK.Target.Capability.Network);
...@@ -829,10 +829,8 @@ SDK.MultitargetNetworkManager = class extends Common.Object { ...@@ -829,10 +829,8 @@ SDK.MultitargetNetworkManager = class extends Common.Object {
networkAgent.setUserAgentOverride(this._currentUserAgent()); networkAgent.setUserAgentOverride(this._currentUserAgent());
if (this._effectiveBlockedURLs.length) if (this._effectiveBlockedURLs.length)
networkAgent.setBlockedURLs(this._effectiveBlockedURLs); networkAgent.setBlockedURLs(this._effectiveBlockedURLs);
if (this.isIntercepting()) { if (this.isIntercepting())
networkAgent.setRequestInterception( networkAgent.setRequestInterception(this._urlsForRequestInterceptor.valuesArray());
this._urlsForRequestInterceptor.valuesArray().map(pattern => ({urlPattern: pattern})));
}
this._agents.add(networkAgent); this._agents.add(networkAgent);
if (this.isThrottling()) if (this.isThrottling())
this._updateNetworkConditions(networkAgent); this._updateNetworkConditions(networkAgent);
...@@ -1007,7 +1005,7 @@ SDK.MultitargetNetworkManager = class extends Common.Object { ...@@ -1007,7 +1005,7 @@ SDK.MultitargetNetworkManager = class extends Common.Object {
} }
/** /**
* @param {!Array<string>} patterns * @param {!Array<!SDK.MultitargetNetworkManager.InterceptionPattern>} patterns
* @param {!SDK.MultitargetNetworkManager.RequestInterceptor} requestInterceptor * @param {!SDK.MultitargetNetworkManager.RequestInterceptor} requestInterceptor
* @return {!Promise} * @return {!Promise}
*/ */
...@@ -1037,11 +1035,8 @@ SDK.MultitargetNetworkManager = class extends Common.Object { ...@@ -1037,11 +1035,8 @@ SDK.MultitargetNetworkManager = class extends Common.Object {
Common.moduleSetting('cacheDisabled').set(true); Common.moduleSetting('cacheDisabled').set(true);
this._updatingInterceptionPatternsPromise = null; this._updatingInterceptionPatternsPromise = null;
var promises = /** @type {!Array<!Promise>} */ ([]); var promises = /** @type {!Array<!Promise>} */ ([]);
for (var agent of this._agents) { for (var agent of this._agents)
// We do not allow '?' as a single character wild card for now and do not support '*' either. promises.push(agent.setRequestInterception(this._urlsForRequestInterceptor.valuesArray()));
var patterns = this._urlsForRequestInterceptor.valuesArray().map(pattern => ({urlPattern: pattern}));
promises.push(agent.setRequestInterception(this.isIntercepting() ? patterns : []));
}
this.dispatchEventToListeners(SDK.MultitargetNetworkManager.Events.InterceptorsChanged); this.dispatchEventToListeners(SDK.MultitargetNetworkManager.Events.InterceptorsChanged);
return Promise.all(promises); return Promise.all(promises);
} }
...@@ -1196,6 +1191,9 @@ SDK.MultitargetNetworkManager.InterceptedRequest = class { ...@@ -1196,6 +1191,9 @@ SDK.MultitargetNetworkManager.InterceptedRequest = class {
} }
}; };
/** @typedef {!{urlPattern: string, interceptionStage: !Protocol.Network.InterceptionStage}} */
SDK.MultitargetNetworkManager.InterceptionPattern;
/** @typedef {!function(!SDK.MultitargetNetworkManager.InterceptedRequest):!Promise} */ /** @typedef {!function(!SDK.MultitargetNetworkManager.InterceptedRequest):!Promise} */
SDK.MultitargetNetworkManager.RequestInterceptor; SDK.MultitargetNetworkManager.RequestInterceptor;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment