by azam » Tue Aug 18, 2015 12:37 pm
void ClientApp::OnRegisterCustomSchemes(
CefRefPtr<CefSchemeRegistrar> registrar) {
registrar->AddCustomScheme(
"custom", false, false, false);
}
class ClientSchemeHandler : public CefResourceHandler {
bool ProcessRequest(CefRefPtr<CefRequest> request,
CefRefPtr<CefCallback> callback) OVERRIDE {
...
}
void GetResponseHeaders(CefRefPtr<CefResponse> response,
int64& responseLength,
CefString& redirectUrl) OVERRIDE {
...
}
bool ReadResponse(void* dataOut,
int bytesToRead,
int& bytesRead,
CefRefPtr<CefCallback> callback) OVERRIDE {
...
}
bool CanGetCookie(const CefCookie& cookie) OVERRIDE {
return false;
}
bool CanSetCookie(const CefCookie& cookie) OVERRIDE {
return false;
}
void Cancel() OVERRIDE {
...
}
private:
...
IMPLEMENT_REFCOUNTING(ClientSchemeHandler);
}
class ClientSchemeHandlerFactory : public CefSchemeHandlerFactory {
public:
virtual CefRefPtr<CefResourceHandler> Create(
CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& scheme_name,
CefRefPtr<CefRequest> request)
OVERRIDE {
if (scheme_name == "custom")
return new ClientSchemeHandler;
return NULL;
}
IMPLEMENT_REFCOUNTING(ClientSchemeHandlerFactory);
};
void ClientCEFSchemeHandler::registerSchemeHandlerFactory() {
CefRegisterSchemeHandlerFactory(
"custom",
"resources",
new ClientSchemeHandlerFactory);
}
ClientCEFSchemeHandler::registerSchemeHandlerFactory() function is called from the browser thread immediately after CefInitialize() call.