remote/network/RemoteRequestContextHandler.cpp (37 lines of code) (raw):
#include "RemoteRequestContextHandler.h"
#include "RemoteRequest.h"
#include "RemoteResourceRequestHandler.h"
#include "../ServerHandlerContext.h"
#include "../browser/RemoteFrame.h"
#include "../browser/RemoteBrowser.h"
namespace {
const bool doTrace = getBoolEnv("CEF_SERVER_TRACE_RemoteRequestContextHandler");
}
RemoteRequestContextHandler::RemoteRequestContextHandler(std::shared_ptr<ServerHandlerContext> ctx, thrift_codegen::RObject peer) :
RemoteJavaObject<RemoteRequestContextHandler>(ctx, peer.objId), myCtx(ctx) { // Empty disposer because lifetime of java-peer is managed by java owner (RemoteRequestContext)
TRACE();
}
CefRefPtr<CefResourceRequestHandler> RemoteRequestContextHandler::GetResourceRequestHandler(
CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefRequest> request,
bool is_navigation,
bool is_download,
const CefString& request_initiator,
bool& disable_default_handling
) {
// Called on the browser process IO thread before a resource request is initiated.
TRACE();
LogNdc ndc(__FILE_NAME__, __FUNCTION__, "ChromeIO");
std::shared_ptr<RemoteBrowser> rb = RemoteBrowser::findByCefBrowser(browser);
if (!rb)
return nullptr;
RemoteRequest::Holder req(request);
RemoteFrame::Holder frm(frame);
thrift_codegen::RObject peer;
myCtx->javaService()->exec([&](JavaService s){
s->RequestContextHandler_GetResourceRequestHandler(
peer, myPeerId, rb->getBid(), frm.serverId(), req.serverId(), is_navigation, is_download, request_initiator.ToString());
});
disable_default_handling = peer.__isset.flags ? peer.flags != 0 : false;
return !peer.isNull ? new RemoteResourceRequestHandler(rb->getBid(), myCtx, peer) : nullptr;
}