CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            // Check if the session is expired
            if (request.Url == "steammobile://lostauth")
            {
                MessageBox.Show("加载确认失败。尝试使用“选择账号”菜单下的“强制刷新会话”。如果依然不起作用,请使用“再次登录”选项。", "确认", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(CefReturnValue.Cancel);
            }

            // For some reason, in order to set cookies manually using a hdeader you need to clear the real cookies every time :/
            Cef.GetGlobalCookieManager().VisitAllCookies(new DeleteAllCookiesVisitor());

            if (request.Url.StartsWith("steammobile://"))
            {
                // Cancel all steammobile:// requests (for the app)
                return(CefReturnValue.Cancel);
            }
            else
            {
                var headers = request.Headers;
                headers.Add("Cookie", Cookies);
                headers.Add("X-Requested-With", "com.valvesoftware.android.steam.community");
                request.Headers = headers;
                return(CefReturnValue.Continue);
            }
        }
예제 #2
0
        public bool OnJSDialog(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser,
                               string originUrl, CefSharp.CefJsDialogType dialogType, string messageText, string defaultPromptText,
                               CefSharp.IJsDialogCallback callback, ref bool suppressMessage)
        {
            switch (dialogType)
            {
            case CefSharp.CefJsDialogType.Alert:
                MessageBox.Show(messageText, "JavaScript", MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK, MessageBoxOptions.DefaultDesktopOnly);
                suppressMessage = true;
                return(false);

            case CefSharp.CefJsDialogType.Confirm:
                var dr = MessageBox.Show(messageText, "JavaScript");
                if (dr == MessageBoxResult.Yes)
                {
                    callback.Continue(true, string.Empty);
                    suppressMessage = false;
                    return(true);
                }
                else
                {
                    callback.Continue(false, string.Empty);
                    suppressMessage = false;
                    return(true);
                }

            case CefSharp.CefJsDialogType.Prompt:
                MessageBox.Show("系统不支持prompt形式的提示框", "JavaScript");
                break;

            default:
                break;
            }
            return(false);
        }
예제 #3
0
 public void OnAfterCreated(CefSharp.IWebBrowser browserControl, IBrowser browser)
 {
 }
예제 #4
0
 public void OnDialogClosed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser)
 {
 }
예제 #5
0
 void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame)
 {
     //throw new NotImplementedException();
 }
예제 #6
0
 void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model)
 {
     model.Clear();
 }
예제 #7
0
        public bool OnPreKeyEvent(CefSharp.IWebBrowser chromiumWebBrowser, CefSharp.IBrowser browser, CefSharp.KeyType type, int windowsKeyCode, int nativeKeyCode, CefSharp.CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
        {
            const int WM_SYSKEYDOWN = 0x104;
            const int WM_KEYDOWN    = 0x100;
            const int WM_KEYUP      = 0x101;
            const int WM_SYSKEYUP   = 0x105;
            const int WM_CHAR       = 0x102;
            const int WM_SYSCHAR    = 0x106;
            const int VK_TAB        = 0x9;
            const int VK_LEFT       = 0x25;
            const int VK_UP         = 0x26;
            const int VK_RIGHT      = 0x27;
            const int VK_DOWN       = 0x28;

            isKeyboardShortcut = false;

            // Don't deal with TABs by default:
            // TODO: Are there any additional ones we need to be careful of?
            // i.e. Escape, Return, etc...?
            if (windowsKeyCode == VK_TAB || windowsKeyCode == VK_LEFT || windowsKeyCode == VK_UP || windowsKeyCode == VK_DOWN || windowsKeyCode == VK_RIGHT)
            {
                return(false);
            }

            var result = false;

            var control = chromiumWebBrowser as System.Windows.Forms.Control;
            var msgType = 0;

            switch (type)
            {
            case KeyType.RawKeyDown:
                if (isSystemKey)
                {
                    msgType = WM_SYSKEYDOWN;
                }
                else
                {
                    msgType = WM_KEYDOWN;
                }
                break;

            case KeyType.KeyUp:
                if (isSystemKey)
                {
                    msgType = WM_SYSKEYUP;
                }
                else
                {
                    msgType = WM_KEYUP;
                }
                break;

            case KeyType.Char:
                if (isSystemKey)
                {
                    msgType = WM_SYSCHAR;
                }
                else
                {
                    msgType = WM_CHAR;
                }
                break;

            default:
                Trace.Assert(false);
                break;
            }
            // We have to adapt from CEF's UI thread message loop to our fronting WinForm control here.
            // So, we have to make some calls that Application.Run usually ends up handling for us:
            var state = PreProcessControlState.MessageNotNeeded;

            // We can't use BeginInvoke here, because we need the results for the return value
            // and isKeyboardShortcut. In theory this shouldn't deadlock, because
            // atm this is the only synchronous operation between the two threads.
            control.Invoke(new Action(() =>
            {
                var msg = new Message
                {
                    HWnd   = control.Handle,
                    Msg    = msgType,
                    WParam = new IntPtr(windowsKeyCode),
                    LParam = new IntPtr(nativeKeyCode)
                };

                // First comes Application.AddMessageFilter related processing:
                // 99.9% of the time in WinForms this doesn't do anything interesting.
                var processed = Application.FilterMessage(ref msg);
                if (processed)
                {
                    state = PreProcessControlState.MessageProcessed;
                }
                else
                {
                    // Next we see if our control (or one of its parents)
                    // wants first crack at the message via several possible Control methods.
                    // This includes things like Mnemonics/Accelerators/Menu Shortcuts/etc...
                    state = control.PreProcessControlMessage(ref msg);
                }
            }));

            if (state == PreProcessControlState.MessageNeeded)
            {
                // TODO: Determine how to track MessageNeeded for OnKeyEvent.
                isKeyboardShortcut = true;
            }
            else if (state == PreProcessControlState.MessageProcessed)
            {
                // Most of the interesting cases get processed by PreProcessControlMessage.
                result = true;
            }

            Debug.WriteLine("OnPreKeyEvent: KeyType: {0} 0x{1:X} Modifiers: {2}", type, windowsKeyCode, modifiers);
            Debug.WriteLine("OnPreKeyEvent PreProcessControlState: {0}", state);

            return(result);
        }
 void IRequestHandler.OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
 {
 }
 bool IRequestHandler.OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
 {
     return(false);
 }
 public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl)
 {
 }
 public bool OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback)
 {
     return(true);
 }
 public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
 {
     return(new ResourceResponseFilter());
 }
 public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
 {
 }
예제 #14
0
 public bool OnBeforePopup(CefSharp.IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IWindowInfo windowInfo, ref bool noJavascriptAccess, out CefSharp.IWebBrowser newBrowser)
 {
     newBrowser = null;
     return(true);
 }
예제 #15
0
 public void OnBeforeClose(CefSharp.IWebBrowser browserControl, IBrowser browser)
 {
 }
 bool IRequestHandler.OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
 {
     return(false);
 }
 bool IRequestHandler.OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
 {
     return(false);
 }
 bool IRequestHandler.OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
 {
     return(OnOpenUrlFromTab(browserControl, browser, frame, targetUrl, targetDisposition, userGesture));
 }
 bool IRequestHandler.OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
 {
     return(false);
 }
 protected virtual bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
 {
     return(false);
 }
예제 #21
0
 public bool OnKeyEvent(CefSharp.IWebBrowser chromiumWebBrowser, CefSharp.IBrowser browser, CefSharp.KeyType type, int windowsKeyCode, int nativeKeyCode, CefSharp.CefEventFlags modifiers, bool isSystemKey)
 {
     Debug.WriteLine("OnKeyEvent: KeyType: {0} 0x{1:X} Modifiers: {2}", type, windowsKeyCode, modifiers);
     return(false);
 }
 bool IRequestHandler.OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
 {
     callback.Dispose();
     return(false);
 }
예제 #23
0
 bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags)
 {
     //throw new NotImplementedException();
     return(false);
 }
 void IRequestHandler.OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
 {
     // TODO: Add your own code here for handling scenarios where a plugin crashed, for one reason or another.
 }
예제 #25
0
 bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback)
 {
     return(false);
 }
 bool IRequestHandler.GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
 {
     callback.Dispose();
     return(false);
 }
예제 #27
0
 public bool OnJSBeforeUnload(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, string message,
                              bool isReload, CefSharp.IJsDialogCallback callback)
 {
     return(true);
 }
 void IRequestHandler.OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
 {
 }
예제 #29
0
 public void OnResetDialogState(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser)
 {
 }
예제 #30
0
 public bool DoClose(CefSharp.IWebBrowser browserControl, IBrowser browser)
 {
     return(true);
 }