From 543d01b6b0377df09fefb13ef553fc4f0a7cc6ce Mon Sep 17 00:00:00 2001 From: Ryan Willis Date: Thu, 14 May 2026 08:52:11 -0700 Subject: [PATCH 1/7] use blob in iframe instead of webview (#9919) --- packages/insomnia/src/root.tsx | 5 ++++ .../viewers/response-pdf-viewer.tsx | 26 ++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/insomnia/src/root.tsx b/packages/insomnia/src/root.tsx index ea09034463..9480e41b24 100644 --- a/packages/insomnia/src/root.tsx +++ b/packages/insomnia/src/root.tsx @@ -203,6 +203,11 @@ export const Layout = ({ children }: { children: React.ReactNode }) => { * insomnia://* ; + frame-src + blob: + * + insomnia://* + ; script-src 'self' 'unsafe-eval' diff --git a/packages/insomnia/src/ui/components/viewers/response-pdf-viewer.tsx b/packages/insomnia/src/ui/components/viewers/response-pdf-viewer.tsx index 086a411f7a..8e8321c9d0 100644 --- a/packages/insomnia/src/ui/components/viewers/response-pdf-viewer.tsx +++ b/packages/insomnia/src/ui/components/viewers/response-pdf-viewer.tsx @@ -1,9 +1,29 @@ +import { useEffect, useState } from 'react'; + interface Props { body: Buffer; } -export const ResponsePDFViewer = (props: Props) => { - const url = `data:application/pdf;base64,${props.body.toString('base64')}`; +export const ResponsePDFViewer = ({ body }: Props) => { + const [url, setUrl] = useState(''); - return ; + useEffect(() => { + const blob = new Blob([body], { type: 'application/pdf' }); + const objectUrl = URL.createObjectURL(blob); + setUrl(objectUrl); + return () => URL.revokeObjectURL(objectUrl); + }, [body]); + + if (!url) { + return null; + } + + return ( +