This would be a bit of a workaround, but you could use the list of HttpRequestResponses returned by the context menu action to set up your ProxyHistoryFilter. This would mean you can retrieve ProxyHttpRequestResponses from your Proxy History based on the user's selected HtppRequestResponses.
I've put together a quick example that matches based on the request URL here - in practice, you would want a more stringent matching criteria, as you may have multiple requests with the same URL:
import burp.api.montoya.BurpExtension;
import burp.api.montoya.MontoyaApi;
import burp.api.montoya.http.message.HttpRequestResponse;
import burp.api.montoya.proxy.ProxyHttpRequestResponse;
import burp.api.montoya.ui.contextmenu.ContextMenuEvent;
import burp.api.montoya.ui.contextmenu.ContextMenuItemsProvider;
import burp.api.montoya.ui.contextmenu.InvocationType;
import javax.swing.*;
import java.awt.*;
import java.util.Collections;
import java.util.List;
import static java.util.Collections.emptyList;
public class Extension implements BurpExtension
{
@Override
public void initialize(MontoyaApi montoyaApi)
{
montoyaApi.userInterface().registerContextMenuItemsProvider(new ContextMenuItemsProvider()
{
@Override
public List<Component> provideMenuItems(ContextMenuEvent event)
{
if (event.isFrom(InvocationType.PROXY_HISTORY))
{
JMenuItem menuItem = new JMenuItem("Retrieve items");
menuItem.addActionListener(l -> {
List<HttpRequestResponse> requestResponses = event.selectedRequestResponses();
List<ProxyHttpRequestResponse> selectedHistory = montoyaApi.proxy().history(proxyHttpRequestResponse -> requestResponses.stream().anyMatch(r -> proxyHttpRequestResponse.request().url().equals(r.request().url())));
selectedHistory.forEach(i -> montoyaApi.logging().logToOutput(i.request().url()));
});
return List.of(menuItem);
}
return emptyList();
}
});
}
}