Skip to content

Commit b72d413

Browse files
committed
WinForms - Improve hosting of popups using ChromiumHostControl
- Add IChromiumWebBrowserBase which is can be used for ChromiumWebBrowser instances and ChromiumHostControl - Reduce code duplication for extensions methods - Update WinForms Example
1 parent 6e211bc commit b72d413

File tree

13 files changed

+166
-847
lines changed

13 files changed

+166
-847
lines changed

CefSharp.OffScreen/ChromiumWebBrowser.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ protected virtual void Dispose(bool disposing)
284284
FocusHandler = new NoFocusHandler();
285285

286286
browser = null;
287+
BrowserCore = null;
287288

288289
if (managedCefBrowserAdapter != null)
289290
{
@@ -656,7 +657,7 @@ public IJavascriptObjectRepository JavascriptObjectRepository
656657
/// Has Focus - Always False
657658
/// </summary>
658659
/// <returns>returns false</returns>
659-
bool IWebBrowser.Focus()
660+
bool IChromiumWebBrowserBase.Focus()
660661
{
661662
// no control to focus for offscreen browser
662663
return false;

CefSharp.WinForms.Example/BrowserForm.cs

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ private void UndoMenuItemClick(object sender, EventArgs e)
229229
var control = GetCurrentTabControl();
230230
if (control != null)
231231
{
232-
control.BrowserControl.Undo();
232+
control.Browser.Undo();
233233
}
234234
}
235235

@@ -238,7 +238,7 @@ private void RedoMenuItemClick(object sender, EventArgs e)
238238
var control = GetCurrentTabControl();
239239
if (control != null)
240240
{
241-
control.BrowserControl.Redo();
241+
control.Browser.Redo();
242242
}
243243
}
244244

@@ -247,7 +247,7 @@ private void CutMenuItemClick(object sender, EventArgs e)
247247
var control = GetCurrentTabControl();
248248
if (control != null)
249249
{
250-
control.BrowserControl.Cut();
250+
control.Browser.Cut();
251251
}
252252
}
253253

@@ -256,7 +256,7 @@ private void CopyMenuItemClick(object sender, EventArgs e)
256256
var control = GetCurrentTabControl();
257257
if (control != null)
258258
{
259-
control.BrowserControl.Copy();
259+
control.Browser.Copy();
260260
}
261261
}
262262

@@ -265,7 +265,7 @@ private void PasteMenuItemClick(object sender, EventArgs e)
265265
var control = GetCurrentTabControl();
266266
if (control != null)
267267
{
268-
control.BrowserControl.Paste();
268+
control.Browser.Paste();
269269
}
270270
}
271271

@@ -274,7 +274,7 @@ private void DeleteMenuItemClick(object sender, EventArgs e)
274274
var control = GetCurrentTabControl();
275275
if (control != null)
276276
{
277-
control.BrowserControl.Delete();
277+
control.Browser.Delete();
278278
}
279279
}
280280

@@ -283,7 +283,7 @@ private void SelectAllMenuItemClick(object sender, EventArgs e)
283283
var control = GetCurrentTabControl();
284284
if (control != null)
285285
{
286-
control.BrowserControl.SelectAll();
286+
control.Browser.SelectAll();
287287
}
288288
}
289289

@@ -292,7 +292,7 @@ private void PrintToolStripMenuItemClick(object sender, EventArgs e)
292292
var control = GetCurrentTabControl();
293293
if (control != null)
294294
{
295-
control.BrowserControl.Print();
295+
control.Browser.Print();
296296
}
297297
}
298298

@@ -304,7 +304,7 @@ private async void ShowDevToolsMenuItemClick(object sender, EventArgs e)
304304
var isDevToolsOpen = await control.CheckIfDevToolsIsOpenAsync();
305305
if (!isDevToolsOpen)
306306
{
307-
control.BrowserControl.ShowDevTools();
307+
control.Browser.ShowDevTools();
308308
}
309309
}
310310
}
@@ -317,7 +317,7 @@ private async void ShowDevToolsDockedMenuItemClick(object sender, EventArgs e)
317317
var isDevToolsOpen = await control.CheckIfDevToolsIsOpenAsync();
318318
if (!isDevToolsOpen)
319319
{
320-
var chromiumWebBrowser = control.BrowserControl as ChromiumWebBrowser;
320+
var chromiumWebBrowser = control.Browser as ChromiumWebBrowser;
321321
if (chromiumWebBrowser != null && chromiumWebBrowser.LifeSpanHandler != null)
322322
{
323323
control.ShowDevToolsDocked();
@@ -337,7 +337,7 @@ private async void CloseDevToolsMenuItemClick(object sender, EventArgs e)
337337
var isDevToolsOpen = await control.CheckIfDevToolsIsOpenAsync();
338338
if (isDevToolsOpen)
339339
{
340-
control.BrowserControl.CloseDevTools();
340+
control.Browser.CloseDevTools();
341341
}
342342
}
343343
}
@@ -347,14 +347,14 @@ private void ZoomInToolStripMenuItemClick(object sender, EventArgs e)
347347
var control = GetCurrentTabControl();
348348
if (control != null)
349349
{
350-
var task = control.BrowserControl.GetZoomLevelAsync();
350+
var task = control.Browser.GetZoomLevelAsync();
351351

352352
task.ContinueWith(previous =>
353353
{
354354
if (previous.Status == TaskStatus.RanToCompletion)
355355
{
356356
var currentLevel = previous.Result;
357-
control.BrowserControl.SetZoomLevel(currentLevel + ZoomIncrement);
357+
control.Browser.SetZoomLevel(currentLevel + ZoomIncrement);
358358
}
359359
else
360360
{
@@ -369,13 +369,13 @@ private void ZoomOutToolStripMenuItemClick(object sender, EventArgs e)
369369
var control = GetCurrentTabControl();
370370
if (control != null)
371371
{
372-
var task = control.BrowserControl.GetZoomLevelAsync();
372+
var task = control.Browser.GetZoomLevelAsync();
373373
task.ContinueWith(previous =>
374374
{
375375
if (previous.Status == TaskStatus.RanToCompletion)
376376
{
377377
var currentLevel = previous.Result;
378-
control.BrowserControl.SetZoomLevel(currentLevel - ZoomIncrement);
378+
control.Browser.SetZoomLevel(currentLevel - ZoomIncrement);
379379
}
380380
else
381381
{
@@ -390,7 +390,7 @@ private void CurrentZoomLevelToolStripMenuItemClick(object sender, EventArgs e)
390390
var control = GetCurrentTabControl();
391391
if (control != null)
392392
{
393-
var task = control.BrowserControl.GetZoomLevelAsync();
393+
var task = control.Browser.GetZoomLevelAsync();
394394
task.ContinueWith(previous =>
395395
{
396396
if (previous.Status == TaskStatus.RanToCompletion)
@@ -411,7 +411,7 @@ private void DoesActiveElementAcceptTextInputToolStripMenuItemClick(object sende
411411
var control = GetCurrentTabControl();
412412
if (control != null)
413413
{
414-
var frame = control.BrowserControl.GetFocusedFrame();
414+
var frame = control.Browser.GetFocusedFrame();
415415

416416
//Execute extension method
417417
frame.ActiveElementAcceptsTextInput().ContinueWith(task =>
@@ -450,7 +450,7 @@ private void DoesElementWithIdExistToolStripMenuItemClick(object sender, EventAr
450450
var control = GetCurrentTabControl();
451451
if (control != null)
452452
{
453-
var frame = control.BrowserControl.GetFocusedFrame();
453+
var frame = control.Browser.GetFocusedFrame();
454454

455455
//Execute extension method
456456
frame.ElementWithIdExists(dialog.Value).ContinueWith(task =>
@@ -486,7 +486,7 @@ private void GoToDemoPageToolStripMenuItemClick(object sender, EventArgs e)
486486
var control = GetCurrentTabControl();
487487
if (control != null)
488488
{
489-
control.BrowserControl.LoadUrl("custom://cefsharp/ScriptedMethodsTest.html");
489+
control.Browser.LoadUrl("custom://cefsharp/ScriptedMethodsTest.html");
490490
}
491491
}
492492

@@ -495,7 +495,7 @@ private void InjectJavascriptCodeToolStripMenuItemClick(object sender, EventArgs
495495
var control = GetCurrentTabControl();
496496
if (control != null)
497497
{
498-
var frame = control.BrowserControl.GetFocusedFrame();
498+
var frame = control.Browser.GetFocusedFrame();
499499

500500
//Execute extension method
501501
frame.ListenForEvent("test-button", "click");
@@ -515,7 +515,7 @@ private async void PrintToPdfToolStripMenuItemClick(object sender, EventArgs e)
515515

516516
if (dialog.ShowDialog() == DialogResult.OK)
517517
{
518-
var success = await control.BrowserControl.PrintToPdfAsync(dialog.FileName, new PdfPrintSettings
518+
var success = await control.Browser.PrintToPdfAsync(dialog.FileName, new PdfPrintSettings
519519
{
520520
MarginType = CefPdfPrintMarginType.Custom,
521521
MarginBottom = 10,
@@ -544,7 +544,7 @@ private void OpenDataUrlToolStripMenuItemClick(object sender, EventArgs e)
544544
if (control != null)
545545
{
546546
const string html = "<html><head><title>Test</title></head><body><h1>Html Encoded in URL!</h1></body></html>";
547-
control.BrowserControl.LoadHtml(html, false);
547+
control.Browser.LoadHtml(html, false);
548548
}
549549
}
550550

@@ -553,7 +553,7 @@ private void OpenHttpBinOrgToolStripMenuItemClick(object sender, EventArgs e)
553553
var control = GetCurrentTabControl();
554554
if (control != null)
555555
{
556-
control.BrowserControl.LoadUrl("https://httpbin.org/");
556+
control.Browser.LoadUrl("https://httpbin.org/");
557557
}
558558
}
559559

@@ -562,7 +562,7 @@ private void RunFileDialogToolStripMenuItemClick(object sender, EventArgs e)
562562
var control = GetCurrentTabControl();
563563
if (control != null)
564564
{
565-
control.BrowserControl.GetBrowserHost().RunFileDialog(CefFileDialogMode.Open, "Open", null, new List<string> { "*.*" }, 0, new RunFileDialogCallback());
565+
control.Browser.GetBrowserHost().RunFileDialog(CefFileDialogMode.Open, "Open", null, new List<string> { "*.*" }, 0, new RunFileDialogCallback());
566566
}
567567
}
568568

@@ -572,9 +572,9 @@ private void LoadExtensionsToolStripMenuItemClick(object sender, EventArgs e)
572572
if (control != null)
573573
{
574574
//The sample extension only works for http(s) schemes
575-
if (control.BrowserControl.GetMainFrame().Url.StartsWith("http"))
575+
if (control.Browser.GetMainFrame().Url.StartsWith("http"))
576576
{
577-
var requestContext = control.BrowserControl.GetBrowserHost().RequestContext;
577+
var requestContext = control.Browser.GetBrowserHost().RequestContext;
578578

579579
const string cefSharpExampleResourcesFolder =
580580
#if !NETCOREAPP
@@ -612,7 +612,7 @@ private void LoadExtensionsToolStripMenuItemClick(object sender, EventArgs e)
612612
GetActiveBrowser = (extension, isIncognito) =>
613613
{
614614
//Return the active browser for which the extension will act upon
615-
return control.BrowserControl.BrowserCore;
615+
return control.Browser.BrowserCore;
616616
}
617617
};
618618

@@ -630,16 +630,16 @@ private void JavascriptBindingStressTestToolStripMenuItemClick(object sender, Ev
630630
var control = GetCurrentTabControl();
631631
if (control != null)
632632
{
633-
control.BrowserControl.LoadUrl(CefExample.BindingTestUrl);
634-
control.BrowserControl.LoadingStateChanged += (o, args) =>
633+
control.Browser.LoadUrl(CefExample.BindingTestUrl);
634+
control.Browser.LoadingStateChanged += (o, args) =>
635635
{
636636
if (args.IsLoading == false)
637637
{
638638
Task.Delay(10000).ContinueWith(t =>
639639
{
640-
if (control.BrowserControl != null)
640+
if (control.Browser != null)
641641
{
642-
control.BrowserControl.Reload();
642+
control.Browser.Reload();
643643
}
644644
});
645645
}

CefSharp.WinForms.Example/BrowserTabUserControl.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ namespace CefSharp.WinForms.Example
2020
{
2121
public partial class BrowserTabUserControl : UserControl
2222
{
23-
public IChromiumHostControl BrowserControl { get; private set; }
23+
public IChromiumWebBrowserBase Browser { get; private set; }
2424
private ChromiumWidgetNativeWindow messageInterceptor;
2525
private bool multiThreadedMessageLoopEnabled;
2626

2727
public BrowserTabUserControl(ChromiumHostControl chromiumHostControl)
2828
{
2929
InitializeComponent();
3030

31-
BrowserControl = chromiumHostControl;
31+
Browser = chromiumHostControl;
3232

3333
browserPanel.Controls.Add(chromiumHostControl);
3434

@@ -52,7 +52,7 @@ public BrowserTabUserControl(Action<string, int?> openNewTab, string url, bool m
5252

5353
browserPanel.Controls.Add(browser);
5454

55-
BrowserControl = browser;
55+
Browser = browser;
5656

5757
browser.MenuHandler = new MenuHandler();
5858
browser.RequestHandler = new WinFormsRequestHandler(openNewTab);
@@ -288,7 +288,7 @@ private void SetIsLoading(bool isLoading)
288288
private void OnIsBrowserInitializedChanged(object sender, EventArgs e)
289289
{
290290
//Get the underlying browser host wrapper
291-
var browserHost = BrowserControl.BrowserCore.GetHost();
291+
var browserHost = Browser.BrowserCore.GetHost();
292292
var requestContext = browserHost.RequestContext;
293293
string errorMessage;
294294
// Browser must be initialized before getting/setting preferences
@@ -335,9 +335,9 @@ private void SetupMessageInterceptor()
335335
while (true)
336336
{
337337
IntPtr chromeWidgetHostHandle;
338-
if (ChromiumRenderWidgetHandleFinder.TryFindHandle(BrowserControl.BrowserCore, out chromeWidgetHostHandle))
338+
if (ChromiumRenderWidgetHandleFinder.TryFindHandle(Browser.BrowserCore, out chromeWidgetHostHandle))
339339
{
340-
messageInterceptor = new ChromiumWidgetNativeWindow((Control)BrowserControl, chromeWidgetHostHandle);
340+
messageInterceptor = new ChromiumWidgetNativeWindow((Control)Browser, chromeWidgetHostHandle);
341341

342342
messageInterceptor.OnWndProc(message =>
343343
{
@@ -434,12 +434,12 @@ private void GoButtonClick(object sender, EventArgs e)
434434

435435
private void BackButtonClick(object sender, EventArgs e)
436436
{
437-
BrowserControl.GoBack();
437+
Browser.Back();
438438
}
439439

440440
private void ForwardButtonClick(object sender, EventArgs e)
441441
{
442-
BrowserControl.GoForward();
442+
Browser.Forward();
443443
}
444444

445445
private void UrlTextBoxKeyUp(object sender, KeyEventArgs e)
@@ -456,20 +456,20 @@ private void LoadUrl(string url)
456456
{
457457
if (Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute))
458458
{
459-
BrowserControl.LoadUrl(url);
459+
Browser.LoadUrl(url);
460460
}
461461
else
462462
{
463463
var searchUrl = "https://www.google.com/search?q=" + Uri.EscapeDataString(url);
464464

465-
BrowserControl.LoadUrl(searchUrl);
465+
Browser.LoadUrl(searchUrl);
466466
}
467467

468468
}
469469

470470
public async void CopySourceToClipBoardAsync()
471471
{
472-
var htmlSource = await BrowserControl.GetSourceAsync();
472+
var htmlSource = await Browser.GetSourceAsync();
473473

474474
Clipboard.SetText(htmlSource);
475475
DisplayOutput("HTML Source copied to clipboard");
@@ -479,7 +479,7 @@ private void ToggleBottomToolStrip()
479479
{
480480
if (toolStrip2.Visible)
481481
{
482-
BrowserControl.StopFinding(true);
482+
Browser.StopFinding(true);
483483
toolStrip2.Visible = false;
484484
}
485485
else
@@ -503,7 +503,7 @@ private void Find(bool next)
503503
{
504504
if (!string.IsNullOrEmpty(findTextBox.Text))
505505
{
506-
BrowserControl.Find(0, findTextBox.Text, next, false, false);
506+
Browser.Find(0, findTextBox.Text, next, false, false);
507507
}
508508
}
509509

@@ -542,7 +542,7 @@ public void ShowDevToolsDocked()
542542

543543
if (devToolsControl == null || devToolsControl.IsDisposed)
544544
{
545-
devToolsControl = BrowserControl.ShowDevToolsDocked(
545+
devToolsControl = Browser.ShowDevToolsDocked(
546546
parentControl: browserSplitContainer.Panel2,
547547
controlName: nameof(devToolsControl));
548548

@@ -563,7 +563,7 @@ public Task<bool> CheckIfDevToolsIsOpenAsync()
563563
{
564564
return Cef.UIThreadTaskFactory.StartNew(() =>
565565
{
566-
return BrowserControl.GetBrowserHost().HasDevTools;
566+
return Browser.GetBrowserHost().HasDevTools;
567567
});
568568
}
569569
}

0 commit comments

Comments
 (0)