remote/handlers/RemotePermissionHandler.cpp (25 lines of code) (raw):
#include "RemotePermissionHandler.h"
#include "../RpcExecutor.h"
#include "../Utils.h"
#include "../browser/RemoteFrame.h"
#include "../callback/RemoteMediaAccessCallback.h"
#include "../log/Log.h"
#include "../browser/RemoteBrowser.h"
const bool doTrace = getBoolEnv("CEF_SERVER_TRACE_RemotePermissionHandler");
RemotePermissionHandler::RemotePermissionHandler(std::shared_ptr<RpcExecutor> service) : myService(service) {}
// Return true and call CefMediaAccessCallback methods either in this method or at a later time to continue or cancel the request.
// Return false to proceed with default handling (immediately).
bool RemotePermissionHandler::OnRequestMediaAccessPermission(
CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& requesting_origin,
uint32_t requested_permissions,
CefRefPtr<CefMediaAccessCallback> callback) {
FIND_BID_OR_RETURN_VAL(false);
RemoteFrame::Holder frm(frame);
std::shared_ptr<RemoteMediaAccessCallback> mediaAccessCallback = RemoteMediaAccessCallback::wrapDelegate(callback);
const bool handled = myService->exec<bool>([&](const JavaService& s){
return s->PermissionHandler_OnRequestMediaAccessPermission(bid, frm.serverId(), requesting_origin.ToString(), requested_permissions, mediaAccessCallback->serverId());
}, false);
if (!handled)
RemoteMediaAccessCallback::dispose(mediaAccessCallback->getId());
return handled;
}