extensions/markdown-language-features/src/features/preview.ts/MarkdownPreview/setContent
class MarkdownPreview:	private setContent(content: MarkdownContentProviderOutput): void {
		if (this._disposed) {
			return;
		}

		if (this.delegate.getTitle) {
			this._webviewPanel.title = this.delegate.getTitle(this._resource);
		}
		this._webviewPanel.iconPath = this.iconPath;
		this._webviewPanel.webview.options = this.getWebviewOptions();

		this._webviewPanel.webview.html = content.html;

		const srcs = new Set(content.containingImages.map(img => img.src));

		// Delete stale file watchers.
		for (const [src, watcher] of [...this._fileWatchersBySrc]) {
			if (!srcs.has(src)) {
				watcher.dispose();
				this._fileWatchersBySrc.delete(src);
			}
		}

		// Create new file watchers.
		const root = vscode.Uri.joinPath(this._resource, '../');
		for (const src of srcs) {
			const uri = urlToUri(src, root);
			if (uri && uri.scheme === 'file' && !this._fileWatchersBySrc.has(src)) {
				const watcher = vscode.workspace.createFileSystemWatcher(uri.fsPath);
				watcher.onDidChange(() => {
					this.refresh();
				});
				this._fileWatchersBySrc.set(src, watcher);
			}
		}
	}