remote/network/RemoteCookieAccessFilter.cpp (64 lines of code) (raw):
#include "RemoteCookieAccessFilter.h"
#include "../handlers/RemoteClientHandler.h"
#include "../log/Log.h"
#include "RemoteRequest.h"
#include "RemoteResponse.h"
#include "../browser/RemoteFrame.h"
namespace {
std::vector<std::string> cookie2list(const CefCookie& cookie);
}
RemoteCookieAccessFilter::RemoteCookieAccessFilter(
int bid,
std::shared_ptr<ServerHandlerContext> service,
thrift_codegen::RObject peer)
: RemoteJavaObject<RemoteCookieAccessFilter>(
service,
peer.objId,
[=](JavaService service) {
service->CookieAccessFilter_Dispose(peer.objId);
}), myBid(bid) {}
///
/// Called on the IO thread before a resource request is sent. The |browser|
/// and |frame| values represent the source of the request, and may be NULL
/// for requests originating from service workers or CefURLRequest. |request|
/// cannot be modified in this callback. Return true if the specified cookie
/// can be sent with the request or false otherwise.
///
/*--cef(optional_param=browser,optional_param=frame)--*/
bool RemoteCookieAccessFilter::CanSendCookie(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefRequest> request,
const CefCookie& cookie
) {
RemoteRequest::Holder req(request);
RemoteFrame::Holder frm(frame);
return myCtx->javaServiceIO()->exec<bool>([&](JavaService s){
return s->CookieAccessFilter_CanSendCookie(myPeerId, myBid, frm.serverId(), req.serverId(), cookie2list(cookie));
}, true);
}
///
/// Called on the IO thread after a resource response is received. The
/// |browser| and |frame| values represent the source of the request, and may
/// be NULL for requests originating from service workers or CefURLRequest.
/// |request| cannot be modified in this callback. Return true if the
/// specified cookie returned with the response can be saved or false
/// otherwise.
///
/*--cef(optional_param=browser,optional_param=frame)--*/
bool RemoteCookieAccessFilter::CanSaveCookie(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefRequest> request,
CefRefPtr<CefResponse> response,
const CefCookie& cookie
) {
RemoteRequest::Holder req(request);
RemoteResponse::Holder resp(response);
RemoteFrame::Holder frm(frame);
return myCtx->javaServiceIO()->exec<bool>([&](JavaService s){
return s->CookieAccessFilter_CanSaveCookie(myPeerId, myBid, frm.serverId(), req.serverId(),
resp.serverId(), cookie2list(cookie));
}, true);
}
namespace {
std::string cefstr2std(cef_string_t cefstr) {
CefString tmp(cefstr.str, cefstr.length);
return tmp.ToString();
}
std::vector<std::string> cookie2list(const CefCookie& cookie) {
std::vector<std::string> result;
result.push_back(cefstr2std(cookie.name));
result.push_back(cefstr2std(cookie.value));
result.push_back(cefstr2std(cookie.domain));
result.push_back(cefstr2std(cookie.path));
result.push_back(std::to_string(cookie.secure));
result.push_back(std::to_string(cookie.httponly));
result.push_back(std::to_string(cookie.creation.val));
result.push_back(std::to_string(cookie.last_access.val));
result.push_back(std::to_string(cookie.has_expires));
result.push_back(std::to_string(cookie.expires.val));
return result;
}
}