Because the subscription to the image events must occur on the dispatcher thread, the native module calls to ImageLoader are by neccessity asynchronous from the subscription to the image. To avoid a race condition where the image reference is disposed before the subscription occurs, this changeset adds a single-assignment disposable wrapper for the subscription.
Fixes#521
* fix(Image): Prevent race conditon between event and subject disposal
Even with the SingleAssignmentDisposable, there's a race condition between the loaded/error event firing and the subject getting disposed. If the event makes it to the subject, it would throw an ObjectDisposedException. By disposing the ObserverWrapper before the subject, we ensure that no events will flow to the subject after it has been disposed.
VisualTreeHelper is able to find the parent dependency object in cases where the FrameworkElement.Parent property may be null. This is a useful way to ensure we can find the RootView for measurement.
Hacking this helper, however, breaks certain views like SplitView, which currently depend on the pointer not being captured by React to close the view when the lightweight Rect layer is overlayed adjacent to the pane. For now, only using the VisualTreeHelper in the root view search case, however we may want to use it more generally and have a better "opt-out" mechanism for view managers like SplitView.
Adds support for perspective transforms. One noticeable difference with Windows and Android is that the axis of rotation is the top-left corner of the view, rather than the center of the view.
Tools like VS Code need to be able to launch the app from the command line with remote debugging enabled. This change allows arguments to be passed from powershell to the app and down to the DevSupportManager.
Android supports inline images, and iOS supports arbitrary inline views (that are bound by width and height). We added similar support for bounded inline views for UWP.
The approach required a shift away from the virtual approach that we were previously using for text. Previously, text was fully managed in the shadow node hierarchy, and used the UpdateExtraData API on IViewManager to funnel the inline from shadow node to the view. Now the virtual text nodes use proper view managers, although this required that we reduce the base class for views to DependencyObjecy, the least common denominator between FrameworkElement and Inline.
We also had to shift from using TextBlock to RichTextBlock to support paragraphs and InlineUIElement instances.
Fixes#189
Previously, the native event count was not updated until the TextChanged event fired, which could be interrupted by a previous props update. When this occurred, we could potentially replace the text with the state of a previous event.
Now, the native event count is pre-incremented in th TextChanging event. This seems to resolve the race condition.
Fixes#490
In order for the server-side symbolicate feature to work, Chakra needs to report the correct source filename. Threading through the SourceUrl to the RunScript function to ensure this is correct for exceptions.
Fixes#433
* feat(NetworkModule) - Add URI support
* perf(NetworkingModule): Reduce number of closures allocated in NetworkingModule
While the LINQ approach is elegant, many C# developers understand async/await better than the syntactic sugar behind LINQ. These changes are more imperative and also more efficient.