File: Infrastructure\TestWebViewManager.cs
Web Access
Project: src\src\Components\WebView\WebView\test\Microsoft.AspNetCore.Components.WebView.Test.csproj (Microsoft.AspNetCore.Components.WebView.Test)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.Extensions.FileProviders;
 
namespace Microsoft.AspNetCore.Components.WebView;
 
public class TestWebViewManager : WebViewManager
{
    private static readonly Uri AppBaseUri = new Uri("app://testhost/");
    private readonly List<string> _sentIpcMessages = new();
 
    public TestWebViewManager(IServiceProvider provider, IFileProvider fileProvider)
        : base(provider, Dispatcher.CreateDefault(), AppBaseUri, fileProvider, new(), hostPageRelativePath: "index.html")
    {
    }
 
    public IReadOnlyList<string> SentIpcMessages => _sentIpcMessages;
 
    protected override void SendMessage(string message)
    {
        _sentIpcMessages.Add(message);
    }
 
    protected override void NavigateCore(Uri absoluteUri)
    {
        throw new NotImplementedException();
    }
 
    internal void ReceiveIpcMessage(IpcCommon.IncomingMessageType messageType, params object[] args)
    {
        // Same serialization convention as used by blazor.webview.js
        MessageReceived(new Uri(AppBaseUri, "/page"), IpcCommon.Serialize(messageType, args));
    }
 
    public void ReceiveAttachPageMessage()
    {
        ReceiveIpcMessage(IpcCommon.IncomingMessageType.AttachPage, "http://example/", "http://example/testStartUrl");
    }
}