protected override bool ProcessRequest(CefRequest request, CefCallback callback) { var u = new Uri(request.Url); var file = u.Authority + u.AbsolutePath; _totalBytesRead = 0; _fileBytes = null; _completed = false; var fileInfo = new FileInfo(file); // Check if file exists if (!fileInfo.Exists) { _chromelyErrorHandler.HandleResourceError(ResourceStatus.FileNotFound, file, out _statusCode, out _statusText); _fileBytes = _statusText.GetMemoryStream(); callback.Continue(); } // Check if file exists but empty else if (fileInfo.Length == 0) { _chromelyErrorHandler.HandleResourceError(ResourceStatus.ZeroFileSize, file, out _statusCode, out _statusText); _fileBytes = _statusText.GetMemoryStream(); callback.Continue(); } else { Task.Run(() => { using (callback) { try { _fileBytes = File.ReadAllBytes(file); string extension = Path.GetExtension(file); _mime = MimeMapper.GetMimeType(extension); _statusCode = ResourceConstants.StatusOK; _statusText = ResourceConstants.StatusOKText; } catch (Exception exception) { _chromelyErrorHandler.HandleResourceError(ResourceStatus.FileProcessingError, file, exception, out _statusCode, out _statusText); _fileBytes = _statusText.GetMemoryStream(); } finally { callback.Continue(); } } }); return(true); } callback.Dispose(); return(false); }
protected override void GetResponseHeaders(CefResponse response, out long responseLength, out string redirectUrl) { // unknown content-length // no-redirect responseLength = -1; redirectUrl = null; try { var headers = response.GetHeaderMap(); headers.Add("Access-Control-Allow-Origin", "*"); response.SetHeaderMap(headers); response.Status = (int)_statusCode; response.MimeType = _mime; response.StatusText = _statusText; } catch (Exception exception) { _chromelyErrorHandler.HandleResourceError(ResourceStatus.FileProcessingError, null, exception, out _statusCode, out _statusText); response.Status = (int)_statusCode; response.StatusText = _statusText; response.MimeType = "text/plain"; Logger.Instance.Log.LogError(exception, exception.Message); } }