Fixes part of: #12553
We don't believe that this is needed anymore. We no longer call
OnAfterRender when you're prerendering, so the main use case of this
type is gone.
* Does not produce warnings when receiving invalid event arguments.
* Does not produce warnings when receiving an invalid event handler id.
* Does not produce warnings when receiving an ack for an unknown batch.
Fixes: #11610
I took the approach here of building this into `ComponentBase` instead
of `IHandleAfterRender` - *because* my reasoning is that `firstTime` is
an opinionated construct. There's nothing fundamental about `firstTime`
that requires tracking by the rendering, it's simply an opinion that
it's going to be useful for component authors, and reinforces a common
technique.
Feedback on this is welcome.
* Add empty Authorization src and test projects
* Add references
* Move auth types into .Authorization project
* Move auth tests
* Fix Mvc.ViewFeatures
* Remove the reference from .Web to .Authorization, so it's truly optional
* Add empty Forms src and test projects
* Remove dependencies from Components.csproj
* Move forms sources and tests
* Reference .Forms from .Web (needed unless we also have .Forms.Web)
* Rebase on #12936
* Update reference assemblies
* CR: Add Authorization namespace
* Update ref sources
* Add missing using
* Add another missing using
* Remove IVTs from Microsoft.AspNetCore.Components.Web to .Blazor/.Server
* Eliminate RendererRegistry from .Web, as it's not needed for server-side Blazor
* Reintroduce RendererRegistry as a WebAssembly-specific concept. Refactor event data parsing.
* Remove redundant guard
* Corresponding test updates
* Update ref sources
* CR: Remove renderer ID fully from server-side Blazor code
* CR: Make WebEventData internal and shared-source
* Hub test updates
* Clean whitespace
* Update binaries
* Regenerate binaries AGAIN
* Update Jest test
* CR: Replace constructor with static parse
* Yet again attempt to refresh the .js binaries
* Fix ref assembly
* Fix test
* Adds a new API endpoint to trigger graceful disconnection from blazor clients.
* Uses the sendBeacon API on the Blazor client to trigger graceful disconnections on the client when the document gets unloaded, which happens when closing the window, navigating away from the page or refreshing the page.
[Blazor][Fixes#11964] Limit the amount of pending renders
* Adds a default limit of 10 queued pending renders per application.
* Stops producing new render batches after that limit is hit.
* Resumes producing render batches as soon as the client acknowledges a batch.
This change adds a fail-fast mechanism to our E2E tests based on
the browser console. This will fail super hard if an unhandled exception
is thrown.
I think it would be interesting to also see if we could do the same
thing for 404s.
The goal of this change is to make it so that the E2E tests can fail
faster (3-4s) than the 30s timeout in the case that something
catastrophic happens. As a nice side benefit you get to see the
exception message.
* Rename IUriHelper -> NavigationManager
- Remove IUriHelper interface
- Rename to NavigationManager
- Remove all traces of old naming
There's no functional or design change in this commit - just removing
all traces of the old name. The next few iterations will try to improve
the design.
* Minor API tweaks to NavigationManager
Making Initialize protected causes problems because right now the
server-side code needs to deal with one of two different
implementations, hence an exchange type is used. I followed the same
pattern that was used for auth for symmetry but I have some *cool*
thoughts.
- We can remove this when we remove stateful prerendering
- I have another idea to banish this pattern to the land of wind and
ghosts
If this ends up sticking around longer than a week in the code, lets
discuss other ideas and try to improve the pattern.
* Use hub method for server-side navigation
* Get rid of async local
* Add hub method test
* Misc bikeshedding
* Update src/Components/Server/src/Circuits/DefaultCircuitFactory.cs
Co-Authored-By: campersau <buchholz.bastian@googlemail.com>
* PR feedback
Fixes: #12245Fixes: #12630
This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.
This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
* Immediately releases the circuit when the client disconnects gracefully.
* This functionality is limited to websockets.
* We are able to release the circuit in the following situations:
* The user closes the browser.
* The user navigates away.
* The user reloads the page.
Fixes: #12548
Renaming properties to drop 'Content' as a suffix. We haven't been
consistent in using this, and we're removing it instead of adding it
elsewhere.
Fixes: #12550
Removes UIEventArgs in favor of EventArgs as the base class.
Moving Type into all of our event args types - this is important because
many of the events types are used for multiple events.
The only think about this that isn't perfect is that we have keep
special casing change because of how binding works. I renamed the type
to drop the `UI` prefix. It's not possible to define a subclass in the
Web project because of the way covariance works (or doesn't work) in
.NET.
Fixes: #12631
These mappings were missing and adding them restores the correct
behaviour. Mixing up the usage of `@bind` vs `@bind-value` so we have
more coverage of this.
[Blazor] [Fixes#11847] Renderer.DispatchEventAsync throws null
reference exception if event handler throws synchronously
* Returns after handling the exception.
* Adds a unit test and an E2E test to validate expected behavior.
* E2E test to show current behavior
* Actually support base-relative, root-relative, and absolute redirections during prerendering
* Fix MVC functional test
We used to be inconsistent between what we'd do when formatting a value
based on whether or not you specified a format.
This change brings us back into consistency.
For a `default` DateTime/DateTimeOffset we will just call ToString on
it. For a `default` nullable of these types we will return the empty
string.
While it's definitly intended for `@bind` to have culture-sensitive
output for most cases, we want the tests to behave consistently for all
developers.
So this is an attempt to use a fixed culture for all of our testing.
* Make E2E prerendering test use static prerendering (we no longer need coverage for stateful prerendering)
* Use authentication state during static prerendering. This replicates issue #11799 in the E2E test
* Initialize the authentication state provider during static prerendering
* Update ref assembly
* Update unit test
* [Blazor][Fixes#12054] ComponentHub reliability improvements.
* Validates StartCircuit is called once per circuit.
* NOOPs when other hub methods are called before start circuit and
returns an error to the client.