[NUI] Add WebView APIs for video playback notification.#7721
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces support for playback video events in WebView by adding P/Invoke callback registrations and exposing corresponding C# events (Ready, Started, Finished, Stopped, and Paused). The review feedback suggests using EventArgs.Empty instead of instantiating new EventArgs() when raising these events to avoid unnecessary allocations and reduce garbage collection pressure.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| private void OnPlaybackVideoReady() | ||
| { | ||
| playbackVideoReadyEventHandler?.Invoke(this, new EventArgs()); | ||
| } | ||
|
|
||
| private void OnPlaybackVideoStarted() | ||
| { | ||
| playbackVideoStartedEventHandler?.Invoke(this, new EventArgs()); | ||
| } | ||
|
|
||
| private void OnPlaybackVideoFinished() | ||
| { | ||
| playbackVideoFinishedEventHandler?.Invoke(this, new EventArgs()); | ||
| } | ||
|
|
||
| private void OnPlaybackVideoStopped() | ||
| { | ||
| playbackVideoStoppedEventHandler?.Invoke(this, new EventArgs()); | ||
| } | ||
|
|
||
| private void OnPlaybackVideoPaused() | ||
| { | ||
| playbackVideoPausedEventHandler?.Invoke(this, new EventArgs()); | ||
| } |
There was a problem hiding this comment.
Using new EventArgs() allocates a new instance of EventArgs every time the event is raised, which increases garbage collection pressure. Since EventArgs does not carry any event-specific data, it is highly recommended to use the cached EventArgs.Empty instead.
private void OnPlaybackVideoReady()
{
playbackVideoReadyEventHandler?.Invoke(this, EventArgs.Empty);
}
private void OnPlaybackVideoStarted()
{
playbackVideoStartedEventHandler?.Invoke(this, EventArgs.Empty);
}
private void OnPlaybackVideoFinished()
{
playbackVideoFinishedEventHandler?.Invoke(this, EventArgs.Empty);
}
private void OnPlaybackVideoStopped()
{
playbackVideoStoppedEventHandler?.Invoke(this, EventArgs.Empty);
}
private void OnPlaybackVideoPaused()
{
playbackVideoPausedEventHandler?.Invoke(this, EventArgs.Empty);
}
Internal API ChangedAdded: 5, Removed: 0, Changed: 0Added+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoFinished
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoPaused
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoReady
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoStarted
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoStopped
|
a9b4d66 to
81c4e97
Compare
Internal API ChangedAdded: 5, Removed: 0, Changed: 0Added+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoFinished
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoPaused
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoReady
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoStarted
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoStopped
|
81c4e97 to
1fd5084
Compare
Original-Author: yehyeon.kim@samsung.com Co-Authored-By: Cline SR <GaussO3.4>
Internal API ChangedAdded: 5, Removed: 0, Changed: 0Added+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoFinished
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoPaused
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoReady
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoStarted
+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.EventHandler Tizen.NUI.BaseComponents.WebView::PlaybackVideoStopped
|
|
🤖 [AI Review] Reviewed — no findings. Scope checked:
No 🔴 critical issues, no 🟡 suggestions to flag. Automated review — final merge decision rests with human reviewers. |
Description of Change
the related patch at binder side:
https://review.tizen.org/gerrit/c/platform/core/uifw/dali-csharp-binder/+/346532
API Changes