예제 #1
0
        /// <summary>
        /// Processes the request.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            Url = request.Url;
            var application = BaseMainApplication.Current;

            application.InvokeOnMainAsync(() =>
            {
                try
                {
                    var path = application.GetContentPath(request.Url);

                    if (application.ContentProvider.ContentExists(path))
                    {
                        Data = application.ContentProvider.GetContent(path);
                    }
                }
                catch (Exception e)
                {
                    Data      = null;
                    Exception = e;

                    GeneralLog.Error("Content request exception.", e);
                }

                callback.Continue();
            });

            return(true);
        }
예제 #2
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            Task.Run(() =>
            {
                using (callback)
                {
                    try
                    {
                        _apiResponse = _apiRouter.ProcessRequest(request);

                        if (_apiResponse.Data != null)
                        {
                            _logger.Debug(_apiResponse.Data);
                            _responseBytes = Encoding.UTF8.GetBytes(_apiResponse.Data);
                        }
                    }
                    catch (Exception exception)
                    {
                        _logger.Error(exception, exception.Message);
                        _apiResponse = new ApiResponse(exception.Message, 500);
                    }
                    finally
                    {
                        callback.Continue();
                    }
                }
            });

            return(true);
        }
예제 #3
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            try
            {
                string u = request.Url.Substring(17);

                int i = u.IndexOf('/');

                string file = u.Substring(0, i) + ":" + u.Substring(i);

                file = HttpUtility.UrlDecode(file);

                stream = File.Open(file, FileMode.Open);

                callback.Continue();
                return(true);
            }
            catch (Exception ex)
            {
                if (stream != null)
                {
                    stream.Dispose();
                }

                MessageBox.Show(ex.ToString());

                return(false);
            }
        }
예제 #4
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            try
            {
                Uri url = new Uri(request.Url);

                string resourceName = url.LocalPath.Substring(1).Replace('/', '.');

                resourceName = HttpUtility.UrlDecode(resourceName);

                Assembly assm = Assembly.GetEntryAssembly();

                stream = assm.GetManifestResourceStream(resourceName);

                if (stream == null)
                {
                    throw new Exception("找不到 名为 \"" + resourceName + "\" 的资源 。");
                }

                callback.Continue();
                return(true);
            }
            catch (Exception ex)
            {
                if (stream != null)
                {
                    stream.Dispose();
                }

                MessageBox.Show(ex.ToString());

                return(false);
            }
        }
예제 #5
0
 protected override bool ProcessRequest(CefRequest request, CefCallback callback)
 {
     callback.Continue();
     _completed      = false;
     _transmittedLen = 0;
     return(true);
 }
예제 #6
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            var requestNo = Interlocked.Increment(ref _requestNo);

            var response = new StringBuilder();

            response.AppendFormat("<pre>\n");
            response.AppendFormat("Requests processed by DemoAppResourceHandler: {0}\n", requestNo);

            response.AppendFormat("Method: {0}\n", request.Method);
            response.AppendFormat("URL: {0}\n", request.Url);

            response.AppendLine();
            response.AppendLine("Headers:");
            var headers = request.GetHeaderMap();
            foreach (string key in headers)
            {
                foreach (var value in headers.GetValues(key))
                {
                    response.AppendFormat("{0}: {1}\n", key, value);
                }
            }
            response.AppendLine();

            response.AppendFormat("</pre>\n");

            responseData = Encoding.UTF8.GetBytes(response.ToString());

            callback.Continue();
            return true;
        }
예제 #7
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            var u = new Uri(request.Url);
            var fileAbsolutePath = u.AbsolutePath;
            var file             = u.Authority + fileAbsolutePath;

            if (string.IsNullOrEmpty(Path.GetFileName(file)))
            {
                file = Path.Combine(file, "index.html");
            }

            _totalBytesRead           = 0;
            _chromelyResource.Content = null;
            _completed = false;

            if (ProcessAssmblyEmbeddedFile(request.Url, file, fileAbsolutePath, callback))
            {
                return(true);
            }

            if (ProcessLocalFile(file, callback))
            {
                return(true);
            }

            callback.Dispose();
            return(false);
        }
 protected override bool Open(CefRequest request, out bool handleRequest, CefCallback callback)
 {
     // Backwards compatibility. ProcessRequest will be called.
     callback.Dispose();
     handleRequest = false;
     return(false);
 }
예제 #9
0
 public OnProcessRequestEventArgs(string _id, CefRequest _request, CefCallback _callback)
 {
     id              = _id;
     request         = _request;
     callback        = _callback;
     continueRequest = false; //do not continue by default
 }
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            var requestNo = Interlocked.Increment(ref _requestNo);

            var response = new StringBuilder();

            response.AppendFormat("<pre>\n");
            response.AppendFormat("Requests processed by DemoAppResourceHandler: {0}\n", requestNo);

            response.AppendFormat("Method: {0}\n", request.Method);
            response.AppendFormat("URL: {0}\n", request.Url);

            response.AppendLine();
            response.AppendLine("Headers:");
            var headers = request.GetHeaderMap();

            foreach (string key in headers)
            {
                foreach (var value in headers.GetValues(key))
                {
                    response.AppendFormat("{0}: {1}\n", key, value);
                }
            }
            response.AppendLine();

            response.AppendFormat("</pre>\n");

            responseData = Encoding.UTF8.GetBytes(response.ToString());

            callback.Continue();
            return(true);
        }
예제 #11
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            _uri = new Uri(request.Url);
            //判断是否本地目录文件
            var filePath = Path.GetFullPath(System.Environment.CurrentDirectory + "\\Resources" + _uri.AbsolutePath);

            if (File.Exists(filePath))
            {
                responseData = ReadFileToBinary(filePath);
                callback.Continue();
                return(true);
            }

            //判断是否资源文件
            var    segments = _uri.Segments;
            var    file     = segments[segments.Length - 1];
            string resource;

            if (resources.TryGetValue(file, out resource) &&
                !String.IsNullOrEmpty(resource))
            {
                responseData = Encoding.UTF8.GetBytes(resource);
                callback.Continue();

                return(true);
            }

            process = false;
            callback.Continue();
            return(false);
        }
        private bool ProcessLocalFile(string file, CefCallback callback)
        {
            // Check if file exists and not empty
            var fileInfo = new FileInfo(file);

            if ((fileInfo.Exists) && fileInfo.Length > 0)
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            _fileBytes = File.ReadAllBytes(file);

                            string extension = Path.GetExtension(file);
                            _mime            = MimeMapper.GetMimeType(extension);
                        }
                        catch (Exception exception)
                        {
                            Logger.Instance.Log.LogError(exception, exception.Message);
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });

                return(true);
            }

            return(false);
        }
예제 #13
0
        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 bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            var isCustomScheme = _config?.UrlSchemes?.IsUrlRegisteredCustomScheme(request.Url);

            if (isCustomScheme.HasValue && isCustomScheme.Value)
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            var uri  = new Uri(request.Url);
                            var path = uri.LocalPath;

                            var response = new ChromelyResponse();
                            if (string.IsNullOrEmpty(path))
                            {
                                response.ReadyState = (int)ReadyState.ResponseIsReady;
                                response.Status     = (int)System.Net.HttpStatusCode.BadRequest;
                                response.StatusText = "Bad Request";

                                _chromelyResponse = response;
                            }
                            else
                            {
                                var parameters = request.Url.GetParameters();
                                var postData   = GetPostData(request);

                                _chromelyResponse = _requestTaskRunner.Run(request.Method, path, parameters, postData);
                                string jsonData   = _chromelyResponse.Data.EnsureResponseDataIsJsonFormat();
                                _responseBytes    = Encoding.UTF8.GetBytes(jsonData);
                            }
                        }
                        catch (Exception exception)
                        {
                            Logger.Instance.Log.Error(exception);

                            _chromelyResponse =
                                new ChromelyResponse
                            {
                                Status = (int)HttpStatusCode.BadRequest,
                                Data   = "An error occured."
                            };
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });

                return(true);
            }

            Logger.Instance.Log.Error($"Url {request.Url} is not of a registered custom scheme.");
            callback.Dispose();
            return(false);
        }
예제 #15
0
 protected override bool ProcessRequest(CefRequest request, CefCallback callback)
 {
     if (callback != null)
     {
         callback.Continue();
     }
     return(true);
 }
예제 #16
0
        /// <summary>
        /// The ProcessRequest.
        /// </summary>
        /// <param name="request">The request<see cref="CefRequest"/>.</param>
        /// <param name="callback">The callback<see cref="CefCallback"/>.</param>
        /// <returns>The <see cref="bool"/>.</returns>
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            var webRequest = CefGlue.Lib.Browser.WebRequest.Create(request);

            this.respData = this.ExecuteCore(webRequest);
            callback.Continue();
            return(true);
        }
예제 #17
0
 protected override bool Open(CefRequest request, out bool handleRequest, CefCallback callback)
 {
     //if(handleRequest)
     handleRequest = true;
     callback.Continue();
     return(true);
     //throw new NotImplementedException();
 }
예제 #18
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            this.url      = request.Url;
            this.callback = callback;

            this.mythread = new Thread(new ThreadStart(this.MyThread));
            this.mythread.Start();

            return(true);
        }
예제 #19
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            Task task = new Task(() =>
            {
                Data = Encoding.UTF8.GetBytes(Parse(sql, connectionString, returnType, executionMode));
                callback.Continue();
            });

            task.Start();
            return(true);
        }
예제 #20
0
 protected override RequestHandlingFashion ProcessRequestAsync(CefRequest request, CefCallback callback)
 {
     lock (SyncRoot) {
         if (Response == null && string.IsNullOrEmpty(RedirectUrl))
         {
             responseCallback = callback;
             return(RequestHandlingFashion.ContinueAsync);
         }
         return(RequestHandlingFashion.Continue);
     }
 }
예제 #21
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            uri      = new Uri(request.Url);
            fileName = uri.AbsolutePath;

            // if url is blocked

            /*if (!myForm.IsURLOk(request.Url)) {
             *
             *                  // return true so it does not open up
             *                  return true;
             *          }*/

            // if url is browser file
            if (uri.Host == "storage")
            {
                fileName = appPath + uri.Host + fileName;
                if (File.Exists(fileName))
                {
                    Task.Factory.StartNew(() => {
                        using (callback)
                        {
                            //var bytes = Encoding.UTF8.GetBytes(resource);
                            //stream = new MemoryStream(bytes);
                            FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                            //  mimeType = CefResourceHandler.GetMimeType(Path.GetExtension(fileName));
                            stream = fStream;
                            callback.Continue();
                        }
                    });

                    return(true);
                }
            }

            // if url is request for icon of another file
            if (uri.Host == "fileicon")
            {
                Task.Factory.StartNew(() => {
                    using (callback)
                    {
                        stream = FileIconUtils.GetFileIcon(fileName, FileIconSize.Large);
                        // mimeType = ResourceHandler.GetMimeType(".png");
                        callback.Continue();
                    }
                });
                return(true);
            }


            // by default reject
            callback.Dispose();
            return(false);
        }
예제 #22
0
        protected override bool Open(CefRequest request, out bool handleRequest, CefCallback callback)
        {
            if (client != null)
            {
                throw new InvalidOperationException("DisableCspResourceHandler is not reusable!");
            }

            client = new Client(callback);
            CefRuntime.PostTask(CefThreadId.IO, new CefActionTask(() => frame.CreateUrlRequest(request, client)));
            handleRequest = false;
            return(true);
        }
예제 #23
0
        /// <summary>
        /// The on web socket request.
        /// </summary>
        /// <param name="server">
        /// The server.
        /// </param>
        /// <param name="connectionId">
        /// The connection id.
        /// </param>
        /// <param name="clientAddress">
        /// The client address.
        /// </param>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <param name="callback">
        /// The callback.
        /// </param>
        protected override void OnWebSocketRequest(
            CefServer server,
            int connectionId,
            string clientAddress,
            CefRequest request,
            CefCallback callback)
        {
            // Cache name and connection identifier.
            ConnectionNameMapper.Add(request.Url, connectionId);

            // Always accept WebSocket connections.
            callback.Continue();
        }
예제 #24
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            //Uri uri = new Uri(request.Url);
            //Debug.WriteLine("ProcessRequestAsync: " + request.Url);
            Task task = new Task(() =>
            {
                Data = Encoding.UTF8.GetBytes(Parse(sql, connectionString, returnType, executionMode));
                callback.Continue();
            });

            task.Start();
            return(true);
        }
예제 #25
0
            protected override bool ProcessRequest(CefRequest request, CefCallback callback)
            {
                Debug.WriteLine(DBGPREFIX + "ProcessRequest for id: " + id);
                var handler = OnProcessRequestEvent;

                if (handler != null)
                {
                    var e = new OnProcessRequestEventArgs(id, request, callback);
                    handler(null, e);
                    Debug.WriteLine(DBGPREFIX + "ProcessRequest for id: " + id + (e.continueRequest ? " will continue processing" : " will be cancelled"));
                    return(e.continueRequest);
                }
                return(false);
            }
예제 #26
0
        private bool ProcessLocalFile(string file, CefCallback callback)
        {
            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);
            }

            return(false);
        }
예제 #27
0
 protected override bool ProcessRequest(CefRequest request, CefCallback callback)
 {
     lock (SyncRoot) {
         if (Response == null && string.IsNullOrEmpty(RedirectUrl))
         {
             responseCallback = callback;
         }
         else
         {
             callback.Continue();
         }
         return(true);
     }
 }
예제 #28
0
 protected override bool ReadResponse(Stream response, int bytesToRead, out int bytesRead, CefCallback callback)
 {
     if (bytesToRead == 0 || pos >= responseData.Length)
     {
         bytesRead = 0;
         return false;
     }
     else
     {
         response.Write(responseData, pos, bytesToRead);
         pos += bytesToRead;
         bytesRead = bytesToRead;
         return true;
     }
 }
예제 #29
0
        private bool ProcessLocalFile(string file, CefCallback callback)
        {
            _fileInfo = new FileInfo(file);

            // Check if file exists
            if (!_fileInfo.Exists)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            // Check if file exists but empty
            else if (_fileInfo.Length == 0)
            {
                _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo);
                callback.Continue();
            }
            else
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            var fileBytes             = File.ReadAllBytes(file);
                            _chromelyResource.Content = new MemoryStream(fileBytes);

                            string extension             = Path.GetExtension(file);
                            _chromelyResource.MimeType   = MimeMapper.GetMimeType(extension);
                            _chromelyResource.StatusCode = ResourceConstants.StatusOK;
                            _chromelyResource.StatusText = ResourceConstants.StatusOKText;
                        }
                        catch (Exception exception)
                        {
                            _chromelyResource = _chromelyErrorHandler.HandleError(_fileInfo, exception);
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });

                return(true);
            }

            return(false);
        }
예제 #30
0
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            Task task = new Task(() =>
            {
                try
                {
                    //var serializer = new JavaScriptSerializer();
                    //serializer.MaxJsonLength = Int32.MaxValue;
                    //serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
                    var zip      = new iZip(configuration.Application, Environment.CurrentDirectory, JsonMapper.ToObject <object>(zipString));
                    var zipBytes = Data = iZip.CreateZip(zip);

                    var dir = Environment.CurrentDirectory + "\\Web\\" + configuration.Application + "\\reports";
                    if (!Directory.Exists(dir))
                    {
                        Directory.CreateDirectory(dir);
                    }

                    var dt   = DateTime.Now.ToString("yyyyMMddHmmssfff");
                    var file = zip.Properties.Title.Replace(" ", "_") + "_" + dt + "_" + zip.Properties.Items + ".zip";
                    var path = dir + "\\" + file;
                    File.WriteAllBytes(path, zipBytes);

                    var echo = JsonMapper.ToJson(new FileHelper("OK", "reports/" + file, zip.Properties.Title, zip.Properties.Items));

                    Data = Encoding.UTF8.GetBytes(echo);
                }
                catch (Exception ex)
                {
                    Log.Trace(ex.Message, ex.StackTrace);

                    var echo = JsonMapper.ToJson(new ErrorHelper(ex.Message, ex.StackTrace));

                    Data = Encoding.UTF8.GetBytes(echo);
                }

                callback.Continue();
            });

            task.Start();
            return(true);
        }
        protected override bool ProcessRequest(CefRequest request, CefCallback callback)
        {
            if (!this.PrepareRequest(request))
            {
                return(false);
            }

            _cancellationTokenSource = new CancellationTokenSource();
            _dataStream = null;

            GetResource();

            return(true);

            async void GetResource()
            {
                try
                {
                    if (await LoadResourceData(_cancellationTokenSource.Token))
                    {
                        _dataStream = await GetResourceDataStream(_cancellationTokenSource.Token);
                    }
                }
                catch (TaskCanceledException)
                {
                    Logger.Instance.Log.Info("The request was canceled.");
                }
                catch (Exception ex) when(ex.Message == "The request was aborted: The request was canceled.")
                {
                    Logger.Instance.Log.Info("The request was canceled.");
                }
                catch (Exception ex)
                {
                    Logger.Instance.Log.Error(ex, "Exception thrown while loading resource");
                }
                finally
                {
                    callback.Continue();
                    callback.Dispose();
                }
            }
        }
        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;

            // Check if file exists and not empty
            var fileInfo = new FileInfo(file);

            if ((fileInfo.Exists) && fileInfo.Length > 0)
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        try
                        {
                            _fileBytes = File.ReadAllBytes(file);

                            string extension = Path.GetExtension(file);
                            _mime            = MimeMapper.GetMimeType(extension);
                        }
                        catch (Exception exception)
                        {
                            Logger.Instance.Log.Error(exception);
                        }
                        finally
                        {
                            callback.Continue();
                        }
                    }
                });

                return(true);
            }

            callback.Dispose();
            return(false);
        }