(pausedRequest)
| 675 | } |
| 676 | |
| 677 | async function cacheRequest(pausedRequest) { |
| 678 | const { |
| 679 | requestId, request, resourceType, |
| 680 | frameId, |
| 681 | responseStatusCode, responseHeaders, responseErrorReason |
| 682 | } = pausedRequest; |
| 683 | const isNavigationRequest = resourceType == "Document"; |
| 684 | const isFont = resourceType == "Font"; |
| 685 | |
| 686 | if ( dontCache(request) ) { |
| 687 | DEBUG.verboseSlow && console.log("Not caching", request.url); |
| 688 | send(`Fetch.continue${requestStage}`, {requestId}); |
| 689 | return; |
| 690 | } |
| 691 | const key = serializeRequestKey(request); |
| 692 | if ( Mode == 'serve' ) { |
| 693 | if ( State.Cache.has(key) ) { |
| 694 | let {body, responseCode, responseHeaders} = await getResponseData(State.Cache.get(key)); |
| 695 | responseCode = responseCode || 200; |
| 696 | //DEBUG.verboseSlow && console.log("Fulfilling", key, responseCode, responseHeaders, body.slice(0,140)); |
| 697 | DEBUG.verboseSlow && console.log("Fulfilling", key, responseCode, body.slice(0,140)); |
| 698 | await send("Fetch.fulfillRequest", { |
| 699 | requestId, body, responseCode, responseHeaders |
| 700 | }); |
| 701 | } else { |
| 702 | DEBUG.verboseSlow && console.log("Sending cache stub", key); |
| 703 | await send("Fetch.fulfillRequest", { |
| 704 | requestId, ...UNCACHED |
| 705 | }); |
| 706 | } |
| 707 | } else { |
| 708 | let saveIt = false; |
| 709 | if ( Mode == 'select' ) { |
| 710 | const rootFrameURL = getRootFrameURL(frameId); |
| 711 | const frameDescendsFromBookmarkedURLFrame = hasBookmark(rootFrameURL); |
| 712 | saveIt = frameDescendsFromBookmarkedURLFrame; |
| 713 | DEBUG.verboseSlow && console.log({rootFrameURL, frameId, mode, saveIt}); |
| 714 | } else if ( Mode == 'save' ) { |
| 715 | saveIt = true; |
| 716 | } |
| 717 | if ( saveIt ) { |
| 718 | const response = {key, responseCode: responseStatusCode, responseHeaders}; |
| 719 | const resp = await getBody({requestId, responseStatusCode}); |
| 720 | if ( resp ) { |
| 721 | let {body, base64Encoded} = resp; |
| 722 | if ( ! base64Encoded ) { |
| 723 | body = b64(body); |
| 724 | } |
| 725 | response.body = body; |
| 726 | const responsePath = await saveResponseData(key, request.url, response); |
| 727 | State.Cache.set(key, responsePath); |
| 728 | } else { |
| 729 | DEBUG.verboseSlow && console.warn("get response body error", key, responseStatusCode, responseHeaders, pausedRequest.responseErrorReason); |
| 730 | response.body = ''; |
| 731 | } |
| 732 | //await sleep(DELAY); |
| 733 | if ( !isFont && responseErrorReason ) { |
| 734 | if ( isNavigationRequest ) { |
nothing calls this directly
no test coverage detected