bool ILifeSpanHandler.DoClose(IWebBrowser browserControl, IBrowser browser) { //The default CEF behaviour (return false) will send a OS close notification (e.g. WM_CLOSE). //See the doc for this method for full details. //return true here to handle closing yourself (no WM_CLOSE will be sent). return true; }
void IDisplayHandler.OnFullscreenModeChange(IWebBrowser browserControl, IBrowser browser, bool fullscreen) { var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; chromiumWebBrowser.InvokeOnUiThreadIfRequired(() => { if (fullscreen) { parent = chromiumWebBrowser.Parent; parent.Controls.Remove(chromiumWebBrowser); fullScreenForm = new Form(); fullScreenForm.FormBorderStyle = FormBorderStyle.None; fullScreenForm.WindowState = FormWindowState.Maximized; fullScreenForm.Controls.Add(chromiumWebBrowser); fullScreenForm.ShowDialog(parent.FindForm()); } else { fullScreenForm.Controls.Remove(chromiumWebBrowser); parent.Controls.Add(chromiumWebBrowser); fullScreenForm.Close(); fullScreenForm.Dispose(); fullScreenForm = null; } }); }
bool ILifeSpanHandler.OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) { newBrowser = null; //browserControl.Load(targetUrl); OpenInNewTab?.Invoke(this, new NewTabEventArgs(targetUrl)); //this breaks when there are multiple window.open calls from JS. return true; }
public IResourceHandler GetResourceHandler(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request) { // Every time we request the main GPM page allow another JS injection if (Regex.Match(request.Url, @"^http[s]?://play\.google\.com/music/listen", RegexOptions.IgnoreCase).Success) { firstJSOnly = true; } if (Regex.Match(request.Url, @"\.js", RegexOptions.IgnoreCase).Success && Regex.Match(request.Url, @"http", RegexOptions.IgnoreCase).Success && firstJSOnly) { firstJSOnly = false; using (WebClient webClient = new WebClient()) { // These are the JS files to inject into GPM string dark_theme = Google_Play_Music.Properties.Resources.dark_theme; string custom_interface = Google_Play_Music.Properties.Resources.custom_interface; string mini_player = Google_Play_Music.Properties.Resources.mini_player; Color c = Properties.Settings.Default.CustomColor; string RGB = "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2"); string custom_color = ";(function() {window.CustomColor = '" + RGB + "';})();"; bool controlsOnHover = Properties.Settings.Default.HoverControls; string controlsOnHoverJS = ";(function() {window.hoverControls = " + controlsOnHover.ToString().ToLower() + ";})();"; string setInitialZoomJS = ";(function() {csharpinterface.setInitialZoom();})();"; return ResourceHandler.FromStream(new MemoryStream(Encoding.UTF8.GetBytes(webClient.DownloadString(request.Url) + ";" + custom_color + controlsOnHoverJS + setInitialZoomJS + dark_theme + custom_interface + mini_player)), webClient.ResponseHeaders["Content-Type"]); } } return null; }
public FrameLoadStartEventArgs(IBrowser browser, IFrame frame) { Browser = browser; Frame = frame; Url = frame.Url; IsMainFrame = frame.IsMain; }
public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback) { if (!callback.IsDisposed) { using (callback) { string directory = Properties.Settings.Default.StorageLocation + (GlobalVariables.CurrentUnitCode != "" ? GlobalVariables.CurrentUnitCode + "/" : ""); Directory.CreateDirectory(directory); string filename = directory + downloadItem.SuggestedFileName; if (!File.Exists(filename)) { callback.Continue(filename, showDialog: false); ++GlobalVariables.FilesDownloaded; BlackboardFile f = new BlackboardFile(downloadItem.SuggestedFileName, downloadItem.Url); f.RawURL = GlobalVariables.CurrentUrl; f.FirstDownloaded = DateTime.Now; f.LastDownloaded = DateTime.Now; f.TimesDownloaded = 1; f.LocalPath = filename; //We know the unit we want exists in GlobalVariables.Units because it was created before the download started, back in Crawler.cs GlobalVariables.Units.First(u => u.Name == GlobalVariables.CurrentUnitCode).Files.Add(f); } else { //FUTURE FEATURE: Allow files to be marked for redownloading. ++GlobalVariables.FilesSkipped; } if (DownloadHandled != null) DownloadHandled(new object(), new EventArgs()); } } }
public IResourceHandler GetResourceHandler(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request) { // Every time we request the main GPM page allow another JS injection if (Regex.Match(request.Url, @"^http[s]?://play\.google\.com/music/listen", RegexOptions.IgnoreCase).Success) { firstJSOnly = true; } if (Regex.Match(request.Url, @"\.js", RegexOptions.IgnoreCase).Success && Regex.Match(request.Url, @"http", RegexOptions.IgnoreCase).Success && firstJSOnly) { firstJSOnly = false; using (WebClient webClient = new WebClient()) { // These are the JS files to inject into GPM string custom_interface = Properties.Resources.custom_interface; return ResourceHandler.FromStream(new MemoryStream(Encoding.UTF8.GetBytes( webClient.DownloadString(request.Url) + ";window.onload=function(){csharpinterface.showApp();};document.addEventListener('DOMContentLoaded', function () {" + "window.OBSERVER = setInterval(function() { if (document.getElementById('material-vslider')) { clearInterval(window.OBSERVER); " + Properties.Resources.gmusic_min + Properties.Resources.gmusic_theme_min + Properties.Resources.gmusic_mini_player_min + this.getInitCode() + custom_interface + "}}, 10);});")), webClient.ResponseHeaders["Content-Type"]); } } return null; }
/// <summary> /// Initializes a new instance of the <see cref="PageNavigationSteps" /> class. /// </summary> /// <param name="browser">The browser.</param> /// <param name="pageMapper">The page mapper.</param> /// <param name="scenarioContext">The scenario context.</param> /// <param name="actionPipelineService">The action pipeline service.</param> public PageNavigationSteps(IBrowser browser, IPageMapper pageMapper, IScenarioContextHelper scenarioContext, IActionPipelineService actionPipelineService) : base(scenarioContext) { this.browser = browser; this.pageMapper = pageMapper; this.actionPipelineService = actionPipelineService; }
CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) { using (callback) { if (request.Method == "POST") { using (var postData = request.PostData) { var elements = postData.Elements; var charSet = request.GetCharSet(); foreach (var element in elements) { if (element.Type == PostDataElementType.Bytes) { var body = element.GetBody(charSet); } } } } //Note to Redirect simply set the request Url //if (request.Url.StartsWith("https://www.google.com", StringComparison.OrdinalIgnoreCase)) //{ // request.Url = "https://github.com/"; //} //Callback in async fashion //callback.Continue(true); //return CefReturnValue.ContinueAsync; } return CefReturnValue.Continue; }
void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) { //Removing existing menu item model.Remove(CefMenuCommand.ViewSource); // Remove "View Source" option model.Remove(CefMenuCommand.Print); //Add new custom menu items model.AddItem((CefMenuCommand)ViewSource, "View Page Source"); if (parameters.TypeFlags.HasFlag(ContextMenuType.Media) && parameters.HasImageContents) { if(OsirtHelper.HasJpegExtension(parameters.SourceUrl)) { model.AddItem((CefMenuCommand)ViewImageExifData, "View image EXIF data"); } model.AddItem((CefMenuCommand)MenuSaveImage, "Save image"); model.AddItem((CefMenuCommand)CopyImgLocation, "Copy image location to clipboard"); model.AddItem((CefMenuCommand)ReverseImageSearch, "Reverse image search using TinEye"); } if(OsirtHelper.IsOnYouTube(browserControl.Address)) { model.AddItem((CefMenuCommand)SaveYouTubeVideo, "Extract YouTube video"); } if (OsirtHelper.IsOnFacebook(browserControl.Address)) { model.AddItem((CefMenuCommand)ViewFacebookId, "Show Facebook profile ID"); } if(!string.IsNullOrEmpty(parameters.UnfilteredLinkUrl)) { model.AddItem((CefMenuCommand)26501, "Open link in new tab"); } }
bool IRequestHandler.OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect) { if (!frame.IsMain || CommonUrls.IsWithSixUrl(request.Url) || IsAuthUrl(new Uri(request.Url))) return false; OpenInSystemBrowser(request.Url); return true; }
CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) { if (CommonUrls.IsWithSixUrl(request.Url)) { var headers = request.Headers; headers[Common.ClientHeader] = DomainEvilGlobal.SecretData.UserInfo.ClientId.ToString(); headers[Common.ClientHeaderV] = Common.App.ProductVersion; request.Headers = headers; } return CefReturnValue.Continue; //Example of how to set Referer // Same should work when setting any header // For this example only set Referer when using our custom scheme var url = new Uri(request.Url); if (url.Scheme == "customscheme") // CefSharpSchemeHandlerFactory.SchemeName { var headers = request.Headers; headers["Referer"] = "http://google.com"; request.Headers = headers; } //NOTE: If you do not wish to implement this method returning false is the default behaviour // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. //callback.Dispose(); //return false; //NOTE: When executing the callback in an async fashion need to check to see if it's disposed if (!callback.IsDisposed) { using (callback) { if (request.Method == "POST") { using (var postData = request.PostData) { if (postData != null) { var elements = postData.Elements; var charSet = request.GetCharSet(); foreach (var element in elements) { if (element.Type == PostDataElementType.Bytes) { var body = element.GetBody(charSet); } } } } } //Note to Redirect simply set the request Url //if (request.Url.StartsWith("https://www.google.com", StringComparison.OrdinalIgnoreCase)) //{ // request.Url = "https://github.com/"; //} //Callback in async fashion //callback.Continue(true); //return CefReturnValue.ContinueAsync; } } return CefReturnValue.Continue; }
public FrameLoadEndEventArgs(IBrowser browser, IFrame frame, int httpStatusCode) { Browser = browser; Frame = frame; Url = frame.Url; HttpStatusCode = httpStatusCode; }
public WebBrowser(BrowserType browserType, IVariableRetriever v) { _browserType = browserType; _browser = BrowserFactory.CreateBrowser(browserType); _variableRetriver = v; initializeUserSettingsPropertiesList(); }
public void AddChar(IBrowser browser, char chr) { char newChar = Char.ToLower(chr); curString += newChar; IBrowserItem cur = browser.Cursor; if (cur.State.HasFlag(BrowserItemState.UnMarkable) == false && cur.showName.ToLower().StartsWith(curString)) return; List<IBrowserItem> items = browser.Items; foreach (IBrowserItem item in items) { if (item.State.HasFlag(BrowserItemState.UnMarkable) == false && item.showName.ToLower().StartsWith(curString)) { browser.SelectItem(item); return; } } curString = new string(newChar, 1); foreach (IBrowserItem item in items) { if (item.State.HasFlag(BrowserItemState.UnMarkable) == false && item.showName.ToLower().StartsWith(curString)) { browser.SelectItem(item); return; } } curString = ""; }
public void WelcomeToZecco(IBrowser browser) { WelcomeToZeccoLink(browser); }
/// <summary> /// Initializes a new instance of the <see cref="MemoryHtmlPage"/> class. /// </summary> /// <param name="browser"> /// The browser. /// </param> /// <param name="html"> /// The HTML. /// </param> /// <exception cref="ArgumentNullException">The <paramref name="browser"/> parameter is <c>null</c>.</exception> /// <exception cref="ArgumentException">The <paramref name="html"/> parameter is <c>null</c>, empty or only contains white space.</exception> public MemoryHtmlPage(IBrowser browser, string html) { if (browser == null) { throw new ArgumentNullException("browser"); } if (string.IsNullOrWhiteSpace(html)) { throw new ArgumentException(Resources.HtmlPage_NoHtmlContentProvided, "html"); } IEnumerable<HttpOutcome> outcomes = new List<HttpOutcome> { new HttpOutcome(_targetLocation, HttpMethod.Get, HttpStatusCode.OK, "OK", TimeSpan.FromMilliseconds(5)) }; var result = new HttpResult(outcomes); Initialize(browser, HttpStatusCode.OK, "OK", result); using (var reader = new StringReader(html)) { SetContent(reader); } }
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, string acceptLang, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage) { switch (dialogType) { case CefJsDialogType.Alert: MessageBox.Show(messageText); suppressMessage = true; return false; case CefJsDialogType.Confirm: var dr = MessageBox.Show(messageText, "提示", MessageBoxButton.YesNo); if (dr == MessageBoxResult.Yes) callback.Continue(true); else callback.Continue(false); suppressMessage = false; return true; case CefJsDialogType.Prompt: MessageBox.Show("系统不支持prompt形式的提示框", "UTMP系统提示"); break; } //如果suppressMessage被设置为true,并且函数返回值为false,将阻止页面打开JS的弹出窗口。 //如果suppressMessage被设置为false,并且函数返回值也是false,页面将会打开这个JS弹出窗口。 suppressMessage = true; return false; }
/// <inheritdoc/>> public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey) { bool result = false; Debug.WriteLine(String.Format("OnKeyEvent: KeyType: {0} 0x{1:X} Modifiers: {2}", type, windowsKeyCode, modifiers)); // TODO: Handle MessageNeeded cases here somehow. return result; }
bool IGeolocationHandler.OnRequestGeolocationPermission(IWebBrowser browserControl, IBrowser browser, string requestingUrl, int requestId, IGeolocationCallback callback) { //You can execute the callback inline //callback.Continue(true); //return true; //You can execute the callback in an `async` fashion //Open a message box on the `UI` thread and ask for user input. //You can open a form, or do whatever you like, just make sure you either //execute the callback or call `Dispose` as it's an `unmanaged` wrapper. var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; chromiumWebBrowser.Dispatcher.BeginInvoke((Action)(() => { //Callback wraps an unmanaged resource, so we'll make sure it's Disposed (calling Continue will also Dipose of the callback, it's safe to dispose multiple times). using (callback) { var result = MessageBox.Show(String.Format("{0} wants to use your computer's location. Allow? ** You must set your Google API key in CefExample.Init() for this to work. **", requestingUrl), "Geolocation", MessageBoxButton.YesNo); //Execute the callback, to allow/deny the request. callback.Continue(result == MessageBoxResult.Yes); } })); //Yes we'd like to hadle this request ourselves. return true; }
public void Help(IBrowser browser) { HelpLink(browser); }
bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, int commandId, CefEventFlags eventFlags) { if (commandId == (int)CefMenuCommand.Reload) { browser.Reload(); } return false; }
public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback) { if (!callback.IsDisposed) { callback.Continue(downloadItem.SuggestedFileName, showDialog: true); callback.Dispose(); } }
public LoadingStateChangedEventArgs(IBrowser browser, bool canGoBack, bool canGoForward, bool isLoading) { Browser = browser; CanGoBack = canGoBack; CanGoForward = canGoForward; IsLoading = isLoading; CanReload = !isLoading; }
IResourceHandler IResourceHandlerFactory.GetResourceHandler(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request) { if (request.Url.Contains("zeldaADPCM5bit.swf")) { return new FlashResourceHandler(); } return null; }
bool IRequestHandler.GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { //NOTE: If you do not wish to implement this method returning false is the default behaviour // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. callback.Dispose(); return false; }
public void Setup() { //In Custom framework we need to initalize the LeanFT SDK SDK.Init(new SdkConfiguration()); //Open Internet Explorer browser = BrowserFactory.Launch(BrowserType.InternetExplorer); }
public static bool IsItemSelected(IBrowser browser, string pattern, uint timeout) { return browser.Describe<IWebElement>(new WebElementDescription { XPath = "//span[contains(@class,'checkbox_checked_yes')]", InnerText = pattern }).Exists(timeout); }
public void SignOut(IBrowser browser) //CheckPoint:Logout successfully, the Login button can be viewed. { UserSignOut(browser); Assert.IsTrue(browser.Link(Find.ByClass("login-button login-signin")).Exists); }
void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) { Console.WriteLine("Context menu opened"); Console.WriteLine(parameters.MisspelledWord); //To disable context mode then clear // model.Clear(); }
public override bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { return(false); }
public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { return(false); }
public void OnDocumentAvailableInMainFrame(IWebBrowser chromiumWebBrowser, IBrowser browser) { }
public override void 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. }
public void Run(IBrowser browser) { using (browser) { foreach (Command command in commands) { bool result = false; switch (command.Action) { case "open": { string url = string.Format("{0}{1}.aspx", FairyTalesUrl, command.Subject); browser.GoTo(url); result = browser.Url == url; } break; case "check": { if (command.Subject == "ActiveProject") { ISpan span = browser.Span("ctl00_ContentPlaceHolder1_activeProject"); if (span.Exists) { result = span.Text == command.Argument.Replace("\"", ""); } } } break; case "enter": { if (command.Subject == "ProjectInput") { string input = command.Argument.Replace("\"", ""); ITextField projectInput = browser.TextField("ctl00_ContentPlaceHolder1_projectInput"); if (projectInput.Exists) { projectInput.Value = input; result = projectInput.Value == input; } } } break; case "press": { if (command.Subject == "AddProject") { IButton button = browser.Button("ctl00_ContentPlaceHolder1_addProjectButton"); if (button.Exists) { button.Click(); result = true; } } } break; } results.Add(command.ToString(), result); } } results["close"] = true; }
public bool OnAutoResize(IWebBrowser browserControl, IBrowser browser, CefSharp.Structs.Size newSize) { return(true); }
public void OnFullscreenModeChange(IWebBrowser browserControl, IBrowser browser, bool fullscreen) { }
public override void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) { // TODO: Add your own code here for handling scenarios where the Render Process terminated for one reason or another. browserControl.Load(CefExample.RenderProcessCrashedUrl); }
public IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) { return(this); }
public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser) { }
public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) { Uri url; if (Uri.TryCreate(request.Url, UriKind.Absolute, out url) == false) { //If we're unable to parse the Uri then cancel the request // avoid throwing any exceptions here as we're being called by unmanaged code return(CefReturnValue.Cancel); } //Example of how to set Referer // Same should work when setting any header // For this example only set Referer when using our custom scheme if (url.Scheme == CefSharpSchemeHandlerFactory.SchemeName) { //Referrer is now set using it's own method (was previously set in headers before) request.SetReferrer("http://google.com", ReferrerPolicy.Default); } //Example of setting User-Agent in every request. //var headers = request.Headers; //var userAgent = headers["User-Agent"]; //headers["User-Agent"] = userAgent + " CefSharp"; //request.Headers = headers; //NOTE: If you do not wish to implement this method returning false is the default behaviour // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. //callback.Dispose(); //return false; //NOTE: When executing the callback in an async fashion need to check to see if it's disposed if (!callback.IsDisposed) { using (callback) { if (request.Method == "POST") { using (var postData = request.PostData) { if (postData != null) { var elements = postData.Elements; var charSet = request.GetCharSet(); foreach (var element in elements) { if (element.Type == PostDataElementType.Bytes) { var body = element.GetBody(charSet); } } } } } //Note to Redirect simply set the request Url //if (request.Url.StartsWith("https://www.google.com", StringComparison.OrdinalIgnoreCase)) //{ // request.Url = "https://github.com/"; //} //Callback in async fashion //callback.Continue(true); //return CefReturnValue.ContinueAsync; } } return(CefReturnValue.Continue); }
//MemoryStreamResponseFilter memFilter; public override IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) { var url = new Uri(request.Url); string urlStr = url.ToString(); if (request.PostData != null) { string dat = ""; foreach (var va in request.PostData.Elements) { if (dat.Length > 0) { dat += "\r\n"; } dat += Encoding.ASCII.GetString(va.Bytes); } Lib.Logging.log("intelrequest.txt", url + ": " + dat); } if (url.Equals("https://intel.ingress.com/r/redeemReward")) { mv.OrgKeyRequest = mv.cloneRequest(request); } if (url.Equals("https://intel.ingress.com/r/getEntities")) { return(new MemoryStreamResponseFilter(mv)); //if (memFilter == null) memFilter = new MemoryStreamResponseFilter(); //memFilter; } return(null); }
public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser) { }
public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags) { int id = (int)commandId; if (id == ShowDevTools) { browser.ShowDevTools(); } if (id == CloseDevTools) { browser.CloseDevTools(); } if (id == SaveImageAs) { browser.GetHost().StartDownload(parameters.SourceUrl); } if (id == SaveLinkAs) { browser.GetHost().StartDownload(parameters.LinkUrl); } if (id == OpenLinkInNewTab) { ChromiumWebBrowser newBrowser = myForm.AddNewBrowserTab(parameters.LinkUrl, false, browser.MainFrame.Url); } if (id == CopyLinkAddress) { Clipboard.SetText(parameters.LinkUrl); } if (id == CloseTab) { myForm.InvokeOnParent(delegate() { myForm.CloseActiveTab(); }); } if (id == RefreshTab) { myForm.InvokeOnParent(delegate() { myForm.RefreshActiveTab(); }); } if (id == SaveAsPdf) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "PDF Files | *.pdf"; if (sfd.ShowDialog() == DialogResult.OK) { //string path = Path.GetFileName(sfd.FileName); browser.PrintToPdfAsync(sfd.FileName, new PdfPrintSettings() { SelectionOnly = false, BackgroundsEnabled = true }); } } if (id == Print) { browser.Print(); } return(false); }
public override bool OnSelectClientCertificate(IWebBrowser browserControl, IBrowser browser, bool isProxy, string host, int port, X509Certificate2Collection certificates, ISelectClientCertificateCallback callback) { //NOTE: If you do not wish to implement this method returning false is the default behaviour // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. callback.Dispose(); return(false); }
public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame) { }
void ILifeSpanHandler.OnAfterCreated(IWebBrowser browserControl, IBrowser browser) { }
public override bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { return(false); }
public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback) { // show default menu return(false); }
bool ILifeSpanHandler.OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) { //Default behaviour newBrowser = null; return(false); //Return true to cancel the popup creation //EXPERIMENTAL OPTION #1: Demonstrates using a new instance of ChromiumWebBrowser to host the popup. //var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; //ChromiumWebBrowser chromiumBrowser = null; //var windowX = windowInfo.X; //var windowY = windowInfo.Y; //var windowWidth = (windowInfo.Width == int.MinValue) ? 600 : windowInfo.Width; //var windowHeight = (windowInfo.Height == int.MinValue) ? 800 : windowInfo.Height; //chromiumWebBrowser.Invoke(new Action(() => //{ // var owner = chromiumWebBrowser.FindForm(); // chromiumBrowser = new ChromiumWebBrowser(targetUrl) // { // LifeSpanHandler = this // }; // //NOTE: This is important and must be called before the handle is created // chromiumBrowser.SetAsPopup(); // //Ask nicely for the control to create it's underlying handle as we'll need to // //pass it to IWindowInfo.SetAsChild // chromiumBrowser.CreateControl(); // var popup = new Form // { // Left = windowX, // Top = windowY, // Width = windowWidth, // Height = windowHeight, // Text = targetFrameName // }; // owner.AddOwnedForm(popup); // popup.Controls.Add(new Label { Text = "CefSharp Custom Popup" }); // popup.Controls.Add(chromiumBrowser); // popup.Show(); // var rect = chromiumBrowser.ClientRectangle; // //This is key, need to tell the Browser which handle will it's parent // //You maybe able to pass in 0 values for left, top, right and bottom though it's safest to provide them // windowInfo.SetAsChild(chromiumBrowser.Handle, rect.Left, rect.Top, rect.Right, rect.Bottom); //})); //newBrowser = chromiumBrowser; //return false; //EXPERIMENTAL OPTION #2: Use IWindowInfo.SetAsChild to specify the parent handle //NOTE: Window resize not yet handled - it should be possible to get the // IBrowserHost from the newly created IBrowser instance that represents the popup // Then subscribe to window resize notifications and call NotifyMoveOrResizeStarted //var chromiumWebBrowser = (ChromiumWebBrowser)browserControl; //var windowX = windowInfo.X; //var windowY = windowInfo.Y; //var windowWidth = (windowInfo.Width == int.MinValue) ? 600 : windowInfo.Width; //var windowHeight = (windowInfo.Height == int.MinValue) ? 800 : windowInfo.Height; //chromiumWebBrowser.Invoke(new Action(() => //{ // var owner = chromiumWebBrowser.FindForm(); // var popup = new Form // { // Left = windowX, // Top = windowY, // Width = windowWidth, // Height = windowHeight, // Text = targetFrameName // }; // popup.CreateControl(); // owner.AddOwnedForm(popup); // var control = new Control(); // control.Dock = DockStyle.Fill; // control.CreateControl(); // popup.Controls.Add(control); // popup.Show(); // var rect = control.ClientRectangle; // windowInfo.SetAsChild(control.Handle, rect.Left, rect.Top, rect.Right, rect.Bottom); //})); }
public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath) { }
/// <inheritdoc/>> public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, 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 = browserControl as 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); }
public NavBarPage(IBrowser browser) : base(browser, Constants.NavBarPage, "there is no page test id for navbar") { }
public IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response) { return(null); }
public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { return(false); }
public override void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser) { }
public override void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { var url = new Uri(request.Url); }
public override IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) { var url = new Uri(request.Url); if (url.Scheme == CefSharpSchemeHandlerFactory.SchemeName) { if (request.Url.Equals(CefExample.ResponseFilterTestUrl, StringComparison.OrdinalIgnoreCase)) { return(new FindReplaceResponseFilter("REPLACE_THIS_STRING", "This is the replaced string!")); } if (request.Url.Equals("custom://cefsharp/assets/js/jquery.js", StringComparison.OrdinalIgnoreCase)) { return(new AppendResponseFilter(System.Environment.NewLine + "//CefSharp Appended this comment.")); } //Only called for our customScheme var dataFilter = new MemoryStreamResponseFilter(); responseDictionary.Add(request.Identifier, dataFilter); return(dataFilter); } //return new PassThruResponseFilter(); return(null); }
public IResourceHandler GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request) { return(null); }
public override bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url) { return(url.StartsWith("mailto")); }