private FREObject ClearRequestHeaders(FREContext ctx, uint argc, FREObject[] argv) { try { UrlRequestHeaderManager.GetInstance().Remove(); } catch (Exception e) { return(new FreException(e).RawValue); } return(FREObject.Zero); }
private FREObject Load(FREContext ctx, uint argc, FREObject[] argv) { try { var request = new UrlRequest(argv[0], _useEdge); UrlRequestHeaderManager.GetInstance().Add(request); _view.Load(request, argc > 1 ? argv[1].AsString() : null); } catch (Exception e) { return(new FreException(e).RawValue); } return(FREObject.Zero); }
public static UrlRequestHeaderManager GetInstance() { if (_instance != null) { return(_instance); } lock (SyncLock) { if (_instance == null) { _instance = new UrlRequestHeaderManager(); } } return(_instance); }
private FREObject InitView(FREContext ctx, uint argc, FREObject[] argv) { FreSharpLogger.GetInstance().Context = Context; _airWindow = Process.GetCurrentProcess().MainWindowHandle; if (_airWindow == Hwnd.Zero) { return(new FreException( "Cannot find AIR window to attach webView to. Ensure you init the ANE AFTER your main Sprite is initialized. " + "Please see https://forum.starling-framework.org/topic/webviewane-for-osx/page/7?replies=201#post-105524 for more details") .RawValue); } bool useTransparentBackground; try { dynamic settings = new FreObjectSharp(argv[2]); _useEdge = settings.engine == 1; UrlRequestHeaderManager.GetInstance().PersistRequestHeaders = settings.persistRequestHeaders; dynamic cefSettings = new FreObjectSharp(settings.cef); var freUrl = argv[0]; UrlRequest initialUrl = null; if (FreObjectTypeSharp.Null != freUrl.Type()) { initialUrl = new UrlRequest(freUrl, _useEdge); UrlRequestHeaderManager.GetInstance().Add(initialUrl); } var viewPort = argv[1].AsRect(); useTransparentBackground = settings.useTransparentBackground; FREArray clArr = cefSettings.commandLineArgs; var argsDict = new Dictionary <string, string>(); foreach (var argFre in clArr) { var key = argFre.GetProp("key").AsString(); var val = argFre.GetProp("value").AsString(); if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(val)) { continue; } argsDict.Add(key, val); } ArrayList whiteList = settings.urlWhiteList.AsArrayList(); ArrayList blackList = settings.urlBlackList.AsArrayList(); _backgroundColor = argv[4].AsColor(); var backgroundMediaColor = new System.Windows.Media.Color { A = _backgroundColor.A, R = _backgroundColor.R, G = _backgroundColor.G, B = _backgroundColor.B }; _useHiDpi = settings.useHiDPI; if (Environment.OSVersion.Version.Major > 7) { _scaleFactor = _useHiDpi ? WinApi.GetScaleFactor(_airWindow) : 1.0; } else { _scaleFactor = _useHiDpi ? WinApi.GetScaleFactor() : 1.0; } if (_useEdge) { EdgeView.Context = Context; _view = new EdgeView { Background = new SolidColorBrush(backgroundMediaColor) }; } else { CefView.Context = Context; dynamic contextMenu = new FreObjectSharp(settings.contextMenu); dynamic popup = new FreObjectSharp(settings.popup); dynamic dimensions = new FreObjectSharp(popup.dimensions); _view = new CefView { Background = new SolidColorBrush(backgroundMediaColor), RemoteDebuggingPort = cefSettings.remoteDebuggingPort, EnablePrintPreview = cefSettings.enablePrintPreview, CachePath = cefSettings.cachePath, DownloadPath = settings.downloadPath, EnableDownloads = settings.enableDownloads, CacheEnabled = settings.cacheEnabled, LogLevel = cefSettings.logSeverity, AcceptLanguageList = cefSettings.acceptLanguageList, Locale = cefSettings.locale, ContextMenuEnabled = contextMenu.enabled, UserAgent = settings.userAgent, UserDataPath = cefSettings.userDataPath, CommandLineArgs = argsDict, PopupBehaviour = (PopupBehaviour)popup.behaviour, PopupDimensions = new Tuple <int, int>(dimensions.width, dimensions.height), ScaleFactor = _scaleFactor }; } _view.InitialUrl = initialUrl; _view.WhiteList = whiteList; _view.BlackList = blackList; _view.X = Convert.ToInt32(viewPort.X * _scaleFactor); _view.Y = Convert.ToInt32(viewPort.Y * _scaleFactor); _view.ViewWidth = Convert.ToInt32(viewPort.Width * _scaleFactor); _view.ViewHeight = Convert.ToInt32(viewPort.Height * _scaleFactor); _view.Init(); } catch (Exception e) { return(new FreException(e).RawValue); } var parameters = new HwndSourceParameters(); parameters.SetPosition(_view.X, _view.Y); parameters.SetSize(_view.ViewWidth, _view.ViewHeight); parameters.ParentWindow = _airWindow; parameters.WindowName = "Cef Window"; parameters.WindowStyle = (int)WindowStyles.WS_CHILD; parameters.AcquireHwndFocusInMenuMode = true; if (useTransparentBackground && Environment.OSVersion.Version.Major > 7) { parameters.ExtendedWindowStyle = (int)WindowExStyles.WS_EX_LAYERED; parameters.UsesPerPixelTransparency = true; } var source = _useEdge ? new HwndSource(parameters) { RootVisual = (EdgeView)_view } : new HwndSource(parameters) { RootVisual = (CefView)_view }; if (useTransparentBackground && source.CompositionTarget != null) { source.CompositionTarget.BackgroundColor = Colors.Transparent; } _webViewWindow = source.Handle; MessageTouchDevice.RegisterTouchWindow(_webViewWindow); return(FREObject.Zero); }