Example #1
0
 public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
 {
     try
     {
         var urlToFetch = urlSchemeTask.Request.Url.ToString();
         if (!urlToFetch.Contains("favicon"))
         {
             var safeResponse   = AsyncContext.Run(() => WebFetchService.FetchResourceAsync(urlToFetch));
             var stream         = new MemoryStream(safeResponse.Data);
             var response       = new NSUrlResponse(urlSchemeTask.Request.Url, safeResponse.MimeType, (nint)stream.Length, null);
             var currentWebView = webView as HybridWebViewRenderer;
             currentWebView.SetCurrentPageVersion(safeResponse.CurrentNrsVersion);
             currentWebView.SetLatestPageVersion(safeResponse.LatestNrsVersion);
             urlSchemeTask.DidReceiveResponse(response);
             urlSchemeTask.DidReceiveData(NSData.FromStream(stream));
             urlSchemeTask.DidFinish();
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         if (ex.InnerException != null)
         {
             var stream   = new MemoryStream();
             var response = new NSUrlResponse(urlSchemeTask.Request.Url, "text/html", 0, null);
             urlSchemeTask.DidReceiveResponse(response);
             urlSchemeTask.DidReceiveData(NSData.FromStream(stream));
             urlSchemeTask.DidFinish();
         }
     }
 }
 public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
 {
     try
     {
         var urlToFetch = urlSchemeTask.Request.Url.ToString();
         if (!urlToFetch.Contains("favicon"))
         {
             var safeResponse = AsyncContext.Run(() => WebFetchService.FetchResourceAsync(urlToFetch));
             var stream       = new MemoryStream(safeResponse.Data);
             var response     = new NSUrlResponse(urlSchemeTask.Request.Url, safeResponse.MimeType, (nint)stream.Length, null);
             urlSchemeTask.DidReceiveResponse(response);
             urlSchemeTask.DidReceiveData(NSData.FromStream(stream));
             urlSchemeTask.DidFinish();
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         if (ex.InnerException != null)
         {
             var urlToFetch = urlSchemeTask.Request.Url.ToString();
             var stream     = new MemoryStream();
             var mimeType   = MimeMapping.MimeUtility.GetMimeMapping(urlToFetch) ?? "text/html";
             var response   = new NSUrlResponse(urlSchemeTask.Request.Url, mimeType, 0, null);
             urlSchemeTask.DidReceiveResponse(response);
             urlSchemeTask.DidReceiveData(NSData.FromStream(stream));
             urlSchemeTask.DidFinish();
         }
     }
 }
            public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
            {
                var responseBytes = GetResponseBytes(urlSchemeTask.Request.Url.AbsoluteString, out var contentType, out var statusCode);
                var response      = new NSUrlResponse(urlSchemeTask.Request.Url, contentType, responseBytes.Length, null);

                urlSchemeTask.DidReceiveResponse(response);
                urlSchemeTask.DidReceiveData(NSData.FromArray(responseBytes));
                urlSchemeTask.DidFinish();
            }
Example #4
0
        public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
        {
            var urlToCheck = $"{urlSchemeTask.Request.Url.Scheme}:{urlSchemeTask.Request.Url.BaseUrl}";

            if (!_urls.Contains(urlToCheck))
            {
                return;
            }

            var action       = _urlActions[urlToCheck];
            var actionResult = action.Invoke();

            urlSchemeTask.DidReceiveData(NSData.FromString(actionResult));
            urlSchemeTask.DidFinish();
        }
Example #5
0
            public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
            {
                var responseBytes = GetResponseBytes(urlSchemeTask.Request.Url.AbsoluteString, out var contentType, statusCode: out var statusCode);

                if (statusCode == 200)
                {
                    using (var dic = new NSMutableDictionary <NSString, NSString>())
                    {
                        dic.Add((NSString)"Content-Length", (NSString)(responseBytes.Length.ToString(CultureInfo.InvariantCulture)));
                        dic.Add((NSString)"Content-Type", (NSString)contentType);
                        // Disable local caching. This will prevent user scripts from executing correctly.
                        dic.Add((NSString)"Cache-Control", (NSString)"no-cache, max-age=0, must-revalidate, no-store");
                        using var response = new NSHttpUrlResponse(urlSchemeTask.Request.Url, statusCode, "HTTP/1.1", dic);
                        urlSchemeTask.DidReceiveResponse(response);
                    }
                    urlSchemeTask.DidReceiveData(NSData.FromArray(responseBytes));
                    urlSchemeTask.DidFinish();
                }
            }
Example #6
0
        /// <summary>
        /// Starts a task that handles the retrieval of the resource.
        /// </summary>
        /// <param name="webView">The webview to use.</param>
        /// <param name="urlSchemeTask">The scheme task status object.</param>
        public void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
        {
            var url = urlSchemeTask.Request.Url;

            var stream = this.requestHandler(url.AbsoluteString, out string contentType, out Encoding encoding);

            NSDictionary headers = new NSMutableDictionary();

            headers.SetValueForKey((NSString)contentType, (NSString)"Content-Type");
            headers.SetValueForKey((NSString)"no-cache", (NSString)"Cache-Control");
            var response = new NSHttpUrlResponse(url, stream != null ? 200 : 404, "HTTP/1.1", headers);

            urlSchemeTask.DidReceiveResponse(response);
            if (stream != null)
            {
                urlSchemeTask.DidReceiveData(NSData.FromStream(stream));
            }

            urlSchemeTask.DidFinish();
        }
 public void StopUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
 {
 }
Example #8
0
 public void StopUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSchemeTask)
 {
     throw new NotImplementedException();
 }