OutSystems / WebView

Avalonia/WPF control that wraps CefGlue webview control
Apache License 2.0
363 stars 41 forks source link

How to set proxy at runtime? #199

Closed hopeko closed 3 years ago

hopeko commented 3 years ago

I know how to set proxy with CefSharp. First, change the context to Cef Thread. Second, set proxy. Is there a similar way to set proxy with CefGlue? And how to do it?

I try to do it like these.

  var proxyInfo = CefDictionaryValue.Create();
  proxyInfo.SetString("mode", "fixed_servers");
  proxyInfo.SetString("server", $"http://127.0.0.1:0000");
  var proxy = CefValue.Create();
  proxy.SetDictionary(proxyInfo);
  string errorMsg = null;
  requestContext.SetPreference("proxy", proxy, ref errorMsg);

But I don't know how to get this requestContext and how to change the context to the CEF UI thread.

hopeko commented 3 years ago

I have already figured it out.

private void SetCurrentProxy()
{
  if (!CefRuntime.CurrentlyOn(CefThreadId.UI))
  {
      CefRuntime.PostTask(CefThreadId.UI, new ActionTask(SetCurrentProxy));
      return;
  }
  Proxy currentProxy = ConfigHelper.GetSharedSSOptions.Proxies[ConfigHelper.GetSharedSSOptions.LastProxyIndex];
  var proxyInfo = CefDictionaryValue.Create();
  proxyInfo.SetString("mode", "fixed_servers");
  proxyInfo.SetString("server", $"http://127.0.0.1:0000");
  var proxy = CefValue.Create();
  proxy.SetDictionary(proxyInfo);
  string errorMsg = null;
  var rc = CefRequestContext.GetGlobalContext();
  rc.SetPreference("proxy", proxy, out errorMsg);
}