From f028a9879674f326a7bb21e54fbeb2700afc0def Mon Sep 17 00:00:00 2001 From: Per Lundberg Date: Tue, 10 Feb 2015 15:43:29 +0200 Subject: [PATCH 1/3] Added a LoadStarted event handler to both the WPF and WinForms control. Also added an extra flag in the LoadCompletedEventArgs that indicates whether the load event relates to the main frame or not. --- CefSharp.WinForms/WebView.cpp | 9 ++++++--- CefSharp.WinForms/WebView.h | 5 +++-- CefSharp.Wpf/WebView.cpp | 9 ++++++--- CefSharp.Wpf/WebView.h | 5 +++-- CefSharp/CefSharp.vcxproj | 1 + CefSharp/CefSharp.vcxproj.filters | 3 +++ CefSharp/ClientAdapter.cpp | 4 ++-- CefSharp/IWebBrowser.h | 5 +++-- CefSharp/LoadCompletedEventArgs.h | 5 +++-- CefSharp/LoadStartedEventArgs.h | 21 +++++++++++++++++++++ 10 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 CefSharp/LoadStartedEventArgs.h diff --git a/CefSharp.WinForms/WebView.cpp b/CefSharp.WinForms/WebView.cpp index 3d32e76b4f..b8b8a63140 100644 --- a/CefSharp.WinForms/WebView.cpp +++ b/CefSharp.WinForms/WebView.cpp @@ -332,16 +332,19 @@ namespace WinForms ConsoleMessage(this, gcnew ConsoleMessageEventArgs(message, source, line)); } - void WebView::OnFrameLoadStart(String^ url) + void WebView::OnFrameLoadStart(String^ url, bool isMainFrame) { _browserCore->OnFrameLoadStart(); + + LoadStartedEventArgs^ args = gcnew LoadStartedEventArgs(url, isMainFrame); + LoadStarted(this, args); } - void WebView::OnFrameLoadEnd(String^ url) + void WebView::OnFrameLoadEnd(String^ url, bool isMainFrame) { _browserCore->OnFrameLoadEnd(); - LoadCompletedEventArgs^ args = gcnew LoadCompletedEventArgs(url); + LoadCompletedEventArgs^ args = gcnew LoadCompletedEventArgs(url, isMainFrame); LoadCompleted(this, args); } diff --git a/CefSharp.WinForms/WebView.h b/CefSharp.WinForms/WebView.h index 61753a060d..e95bdb4b2d 100644 --- a/CefSharp.WinForms/WebView.h +++ b/CefSharp.WinForms/WebView.h @@ -46,6 +46,7 @@ namespace WinForms virtual event ConsoleMessageEventHandler^ ConsoleMessage; virtual event KeyEventHandler^ BrowserKey; virtual event LoadCompletedEventHandler^ LoadCompleted; + virtual event LoadStartedEventHandler^ LoadStarted; WebView() { @@ -181,8 +182,8 @@ namespace WinForms virtual void SetNavState(bool isLoading, bool canGoBack, bool canGoForward); - virtual void OnFrameLoadStart(String^ url); - virtual void OnFrameLoadEnd(String^ url); + virtual void OnFrameLoadStart(String^ url, bool isMainFrame); + virtual void OnFrameLoadEnd(String^ url, bool isMainFrame); virtual void OnTakeFocus(bool next); virtual void OnConsoleMessage(String^ message, String^ source, int line); diff --git a/CefSharp.Wpf/WebView.cpp b/CefSharp.Wpf/WebView.cpp index 536a49cfa3..e316b55800 100644 --- a/CefSharp.Wpf/WebView.cpp +++ b/CefSharp.Wpf/WebView.cpp @@ -623,16 +623,19 @@ namespace CefSharp return _browserCore->GetBoundObjects(); } - void WebView::OnFrameLoadStart(String^ url) + void WebView::OnFrameLoadStart(String^ url, bool isMainFrame) { _browserCore->OnFrameLoadStart(); + + LoadStartedEventArgs^ args = gcnew LoadStartedEventArgs(url, isMainFrame); + LoadStarted(this, args); } - void WebView::OnFrameLoadEnd(String^ url) + void WebView::OnFrameLoadEnd(String^ url, bool isMainFrame) { _browserCore->OnFrameLoadEnd(); - LoadCompletedEventArgs^ args = gcnew LoadCompletedEventArgs(url); + LoadCompletedEventArgs^ args = gcnew LoadCompletedEventArgs(url, isMainFrame); LoadCompleted(this, args); } diff --git a/CefSharp.Wpf/WebView.h b/CefSharp.Wpf/WebView.h index 0640f96f30..cc6f8f4426 100644 --- a/CefSharp.Wpf/WebView.h +++ b/CefSharp.Wpf/WebView.h @@ -128,6 +128,7 @@ namespace CefSharp virtual event ConsoleMessageEventHandler^ ConsoleMessage; virtual event KeyEventHandler^ BrowserKey; virtual event LoadCompletedEventHandler^ LoadCompleted; + virtual event LoadStartedEventHandler^ LoadStarted; WebView() { @@ -291,8 +292,8 @@ namespace CefSharp virtual void SetNavState(bool isLoading, bool canGoBack, bool canGoForward); - virtual void OnFrameLoadStart(String^ url); - virtual void OnFrameLoadEnd(String^ url); + virtual void OnFrameLoadStart(String^ url, bool isMainFrame); + virtual void OnFrameLoadEnd(String^ url, bool isMainFrame); virtual void OnTakeFocus(bool next); virtual void OnConsoleMessage(String^ message, String^ source, int line); diff --git a/CefSharp/CefSharp.vcxproj b/CefSharp/CefSharp.vcxproj index d4f00492ed..f87554c413 100644 --- a/CefSharp/CefSharp.vcxproj +++ b/CefSharp/CefSharp.vcxproj @@ -165,6 +165,7 @@ + diff --git a/CefSharp/CefSharp.vcxproj.filters b/CefSharp/CefSharp.vcxproj.filters index d1a64aff73..b9cbe2e32d 100644 --- a/CefSharp/CefSharp.vcxproj.filters +++ b/CefSharp/CefSharp.vcxproj.filters @@ -190,5 +190,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/CefSharp/ClientAdapter.cpp b/CefSharp/ClientAdapter.cpp index e6ab734195..53c4ffd2f8 100644 --- a/CefSharp/ClientAdapter.cpp +++ b/CefSharp/ClientAdapter.cpp @@ -123,7 +123,7 @@ namespace CefSharp _browserControl->SetNavState(true, false, false); } - _browserControl->OnFrameLoadStart(toClr(frame->GetURL())); + _browserControl->OnFrameLoadStart(toClr(frame->GetURL()), frame->IsMain()); } void ClientAdapter::OnLoadEnd(CefRefPtr browser, CefRefPtr frame, int httpStatusCode) @@ -139,7 +139,7 @@ namespace CefSharp _browserControl->SetNavState(false, browser->CanGoBack(), browser->CanGoForward()); } - _browserControl->OnFrameLoadEnd(toClr(frame->GetURL())); + _browserControl->OnFrameLoadEnd(toClr(frame->GetURL()), frame->IsMain()); } bool ClientAdapter::OnLoadError(CefRefPtr browser, CefRefPtr frame, ErrorCode errorCode, const CefString& failedUrl, CefString& errorText) diff --git a/CefSharp/IWebBrowser.h b/CefSharp/IWebBrowser.h index e5eb1ef7b4..83da2fe28b 100644 --- a/CefSharp/IWebBrowser.h +++ b/CefSharp/IWebBrowser.h @@ -4,6 +4,7 @@ #include "BrowserCore.h" #include "ConsoleMessageEventArgs.h" #include "LoadCompletedEventArgs.h" +#include "LoadStartedEventArgs.h" using namespace System; using namespace System::ComponentModel; @@ -65,8 +66,8 @@ namespace CefSharp void SetNavState(bool isLoading, bool canGoBack, bool canGoForward); - void OnFrameLoadStart(String^ url); - void OnFrameLoadEnd(String^ url); + void OnFrameLoadStart(String^ url, bool isMainFrame); + void OnFrameLoadEnd(String^ url, bool isMainFrame); void OnTakeFocus(bool next); void OnConsoleMessage(String^ message, String^ source, int line); diff --git a/CefSharp/LoadCompletedEventArgs.h b/CefSharp/LoadCompletedEventArgs.h index c370116e51..6f83ab118a 100644 --- a/CefSharp/LoadCompletedEventArgs.h +++ b/CefSharp/LoadCompletedEventArgs.h @@ -8,10 +8,11 @@ namespace CefSharp public ref class LoadCompletedEventArgs : EventArgs { String^ _url; + bool _isMainFrame; public: - LoadCompletedEventArgs(String^ url) - : _url(url) {} + LoadCompletedEventArgs(String^ url, bool isMainFrame) + : _url(url), _isMainFrame(isMainFrame) {} property String^ Url { String^ get() { return _url; } } }; diff --git a/CefSharp/LoadStartedEventArgs.h b/CefSharp/LoadStartedEventArgs.h new file mode 100644 index 0000000000..3a91fb8091 --- /dev/null +++ b/CefSharp/LoadStartedEventArgs.h @@ -0,0 +1,21 @@ +#include "Stdafx.h" +#pragma once + +using namespace System; + +namespace CefSharp +{ + public ref class LoadStartedEventArgs : EventArgs + { + String^ _url; + bool _isMainFrame; + + public: + LoadStartedEventArgs(String^ url, bool isMainFrame) + : _url(url), _isMainFrame(isMainFrame) {} + + property String^ Url { String^ get() { return _url; } } + }; + + public delegate void LoadStartedEventHandler(Object^ sender, LoadStartedEventArgs^ url); +} \ No newline at end of file From 3fe27c8196628b98d8350cef8a8f5958d2d26294 Mon Sep 17 00:00:00 2001 From: Per Lundberg Date: Tue, 10 Feb 2015 16:03:21 +0200 Subject: [PATCH 2/3] Exposing this might be nice of course. :) --- CefSharp/LoadCompletedEventArgs.h | 1 + CefSharp/LoadStartedEventArgs.h | 1 + 2 files changed, 2 insertions(+) diff --git a/CefSharp/LoadCompletedEventArgs.h b/CefSharp/LoadCompletedEventArgs.h index 6f83ab118a..4dcacf7502 100644 --- a/CefSharp/LoadCompletedEventArgs.h +++ b/CefSharp/LoadCompletedEventArgs.h @@ -15,6 +15,7 @@ namespace CefSharp : _url(url), _isMainFrame(isMainFrame) {} property String^ Url { String^ get() { return _url; } } + property bool IsMainFrame { bool get() { return _isMainFrame; } }; public delegate void LoadCompletedEventHandler(Object^ sender, LoadCompletedEventArgs^ url); diff --git a/CefSharp/LoadStartedEventArgs.h b/CefSharp/LoadStartedEventArgs.h index 3a91fb8091..dbf370615e 100644 --- a/CefSharp/LoadStartedEventArgs.h +++ b/CefSharp/LoadStartedEventArgs.h @@ -15,6 +15,7 @@ namespace CefSharp : _url(url), _isMainFrame(isMainFrame) {} property String^ Url { String^ get() { return _url; } } + property bool IsMainFrame { bool get() { return _isMainFrame; } }; public delegate void LoadStartedEventHandler(Object^ sender, LoadStartedEventArgs^ url); From 15085de1daa3c49609ba732a10e81116291adb11 Mon Sep 17 00:00:00 2001 From: Per Lundberg Date: Tue, 10 Feb 2015 16:04:37 +0200 Subject: [PATCH 3/3] It's usually best to commit code that compiles... --- CefSharp/LoadCompletedEventArgs.h | 2 +- CefSharp/LoadStartedEventArgs.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CefSharp/LoadCompletedEventArgs.h b/CefSharp/LoadCompletedEventArgs.h index 4dcacf7502..aaf54c3af0 100644 --- a/CefSharp/LoadCompletedEventArgs.h +++ b/CefSharp/LoadCompletedEventArgs.h @@ -15,7 +15,7 @@ namespace CefSharp : _url(url), _isMainFrame(isMainFrame) {} property String^ Url { String^ get() { return _url; } } - property bool IsMainFrame { bool get() { return _isMainFrame; } + property bool IsMainFrame { bool get() { return _isMainFrame; } } }; public delegate void LoadCompletedEventHandler(Object^ sender, LoadCompletedEventArgs^ url); diff --git a/CefSharp/LoadStartedEventArgs.h b/CefSharp/LoadStartedEventArgs.h index dbf370615e..6fef173efc 100644 --- a/CefSharp/LoadStartedEventArgs.h +++ b/CefSharp/LoadStartedEventArgs.h @@ -15,7 +15,7 @@ namespace CefSharp : _url(url), _isMainFrame(isMainFrame) {} property String^ Url { String^ get() { return _url; } } - property bool IsMainFrame { bool get() { return _isMainFrame; } + property bool IsMainFrame { bool get() { return _isMainFrame; } } }; public delegate void LoadStartedEventHandler(Object^ sender, LoadStartedEventArgs^ url);