Hi.
Samples currently not available.
1. You just need register via CefRuntime.RegisterSchemeHandlerFactory scheme handler factory. It usually just create resource handler.
class MySchemeHandlerFactory : CefSchemeHandlerFactory
{
protected override CefResourceHandler Create(CefBrowser browser, CefFrame frame, string schemeName, CefRequest request)
{
return new MySchemeHandler();
}
}
2. If you use custom scheme (non standard, i.e. sccx - it is custom), - then you need via CefApp.OnRegisterCustomSchemes register scheme in renderer.
protected override void OnRegisterCustomSchemes(CefSchemeRegistrar registrar)
{
registrar.AddCustomScheme("sccx", true, false, false);
}
Note, you can register scheme handler on standard scheme + domain. I.e.
http://myapp can be routed to handler, in this case you doesn't need register built-in scheme in renderer. Also, note, that body of POST requests by historical and security reasons doesn't passed in custom schemes. So if you need POST in data in you handler - you need register scheme handler on http scheme. It more easily.
3. Simple scheme handler sample:
class MySchemeHandler : CefResourceHandler
{
private static int _no;
private bool _completed;
protected override bool ProcessRequest(CefRequest request, CefCallback callback)
{
callback.Continue();
return true;
}
protected override void GetResponseHeaders(CefResponse response, out long responseLength, out string redirectUrl)
{
response.SetHeaderMap();
response.Status = 200;
response.MimeType = "text/html";
response.StatusText = "OK";
responseLength = -1; // unknown content-length
redirectUrl = null; // no-redirect
}
protected override bool ReadResponse(System.IO.Stream response, int bytesToRead, out int bytesRead, CefCallback callback)
{
if (_completed)
{
bytesRead = 0;
return false;
}
else
{
_no++;
// very simple response with one block
var content = Encoding.UTF8.GetBytes("Response #" + _no.ToString());
if (bytesToRead < content.Length) throw new NotImplementedException(); // oops
response.Write(content, 0, content.Length);
bytesRead = content.Length;
_completed = true;
return true;
}
}
protected override bool CanGetCookie(CefCookie cookie)
{
return false;
}
protected override bool CanSetCookie(CefCookie cookie)
{
return false;
}
protected override void Cancel()
{
}
}