Loading HTML content...
; if (error) return{error}
; - if (iframeRenderMode === 'srcDoc') { + if (renderMode === 'secure') { + if (secureHtml === null || secureHtml === undefined) { + if (!isLoading && !error) { + returnNo HTML content to display.
; + } + return null; + } + return ( + + ); + } else if (iframeRenderMode === 'srcDoc') { if (htmlString === null || htmlString === undefined) { if (!isLoading && !error) { returnNo HTML content to display.
; diff --git a/packages/client/src/components/__tests__/HtmlResource.test.tsx b/packages/client/src/components/__tests__/HtmlResource.test.tsx index 3c28629..3ab0f93 100644 --- a/packages/client/src/components/__tests__/HtmlResource.test.tsx +++ b/packages/client/src/components/__tests__/HtmlResource.test.tsx @@ -5,7 +5,7 @@ import { vi, Mock, MockInstance } from 'vitest'; import type { Resource } from '@modelcontextprotocol/sdk/types.js'; describe('HtmlResource component', () => { - const mockOnUiAction = vi.fn(); + const mockOnUiAction = vi.fn().mockResolvedValue(undefined); const defaultProps: RenderHtmlResourceProps = { resource: { mimeType: 'text/html', text: 'Hello Test
' }, @@ -25,6 +25,24 @@ describe('HtmlResource component', () => { expect(iframe.srcdoc).toContain('Hello Test
'); }); + it('renders sanitized HTML using secure mode and handles actions', () => { + const props: RenderHtmlResourceProps = { + resource: { + mimeType: 'text/html', + text: 'Hello World
', + }, + onUiAction: mockOnUiAction, + renderMode: 'secure', + }; + render(