Commit Graph
18520 Commits
Author SHA1 Message Date
Valentin SherginandFacebook Github Bot 41cf6da074 Fabric: Implementation of RCTMountingTransactionObserving protocol
Summary:
This diff finally uses all facilities from the previous diffs to build an implementation of  `RCTMountingTransactionObserving` protocol which does *not* require using expensive Objective-C runtime features.

In the coming diffs, we will see how it can/should be used.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18217101

fbshipit-source-id: 34f411dcb527dc81570c2f2833ce13b40e1450db
2019-11-01 09:38:25 -07:00
Valentin SherginandFacebook Github Bot 20a0f224ba Fabric: Introducing RCTMountingTransactionObserving protocol
Summary:
See the comment in RCTMountingTransactionObserving first.

I think we have to add this to the iOS mounting layer to be able reasonably easy implement things like:

* MovableNavigationBar: seems, currently we don't handle the situation when the container was mounted first and the nested scroll view second.
* TTI component: It does not have access to telemetry.

The protocol is meant to replace `RCTSurfacePresenterObserver`.

Changelog: [Internal] Fabric-specific change.

Reviewed By: mdvacca

Differential Revision: D16270107

fbshipit-source-id: 2d4bdb7d0092cc214cc433fc633e41e58f6677df
2019-11-01 09:38:25 -07:00
Valentin SherginandFacebook Github Bot c583822504 Fabric: Introducing RCTComponentViewClassDescriptor
Summary:
RCTComponentViewClassDescriptor is a pretty much the same as RCTComponentViewDescriptor but for *classes*. RCTComponentViewFactory uses a map of those data structures to create RCTComponentViewDescriptor instances (which reflects the same properties) efficiently.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18217103

fbshipit-source-id: ab7ab6b0712048d0085b61a3604b284b1fb5a68b
2019-11-01 09:38:25 -07:00
Valentin SherginandFacebook Github Bot 93ded152d9 Fabric: Introducing RCTComponentViewDescriptor
Summary:
This diff introduces RCTComponentViewDescriptor - the container for a view and associated with this view properties which mounting infra uses for bookkeeping (and recycling) views.
The previous implementation used raw Objective-C pointers to `UIView`s to store and manipulate them. The new way has a bunch of advantages:
* It allows using high-performant C++ data collections for storing views and their properties (in future diffs).
* The new approach allows us to avoid hacks around NSMapTable (such as ` [_registry setObject:componentView forKey:(__bridge id)(void *)tag];`) that were needed because NSMapTable wasn't designed for our use-case.
* Dealing with `RCTComponentViewDescriptor` which stores a pointer to a view sometimes is actually more efficient than dealing with those pointers themselfs because we can deal with `const &` to a descriptor which does not require a ref-counter bump.
* A new approach is much more flexible, it allows us to store additional data alongside view instances which we will use in coming diffs.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18217102

fbshipit-source-id: 063e6c7df794a2e1fd690c194fb31ad6833eaba7
2019-11-01 09:38:24 -07:00
Valentin SherginandFacebook Github Bot 8a1937ace6 Fabric: RCTComponentViewRegistry::findComponentViewWithTag was split into two methods
Summary:
In addition to already exiting method `componentViewByTag`, this diff adds a new one `findComponentViewWithTag` which does pretty much the same thing but returns `nil` in a case when it cannot find a view with a given tag. The first method now returns a non-nullable object, whereas the second (new) one return nullable.

We need this to explicitly designate call-sites that are resilient to such kind of errors, where such errors are expected because of still-existing consistency problems (because of some legacy implementation approaches).
At the same time, for the call-sites where a missing view situation is unrecoverable, we should throw early and stop paying for nullability overhead.
In the future diffs, we will change the internal implementation of the registry where the price for dealing with nullability will be actually meaningful.

This is the first diff on the road to an implementation of `RCTMountingTransactionObserving` protocol.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18217099

fbshipit-source-id: dc50033ecadd43c43c5a65fed62649a1a7acf2b5
2019-11-01 09:38:24 -07:00
Valentin SherginandFacebook Github Bot 746e697038 Fabric: Removing RCTComponentViewRegistry::tagByComponentView
Summary:
This method has no any usages.

Changelog: [Internal] Fabric-specific, internal change.

Reviewed By: sammy-SC

Differential Revision: D18217100

fbshipit-source-id: 7aabd9e83413c2a1040bdd6c1510d6e4a4c6446a
2019-11-01 09:38:24 -07:00
Tim YungandFacebook Github Bot 548aad4ff1 RN: Delete Apple TV Props
Summary:
With tvOS (Apple TV) now residing in a separately maintained fork, this removes the residual props from React Native. This only includes the JavaScript changes. The Objective-C changes will come later.

Specifically, the following props have been removed:

- `isTVSelectable`
- `tvParallaxProperties`
- `tvParallaxShiftDistanceX`
- `tvParallaxShiftDistanceY`
- `tvParallaxTiltAngle`
- `tvParallaxMagnification`

Note that `hasTVPreferredFocus` is still being used by Android TV, so it remains.

Changelog:
[Removed] Apple TV View Props

Reviewed By: TheSavior

Differential Revision: D18266278

fbshipit-source-id: 9d1448bf2f434a74e6eb23c70d3a37971e406768
2019-11-01 08:49:26 -07:00
Priyanshu2001andFacebook Github Bot 5a4d68feb5 Update README.md (#26879)
Summary:
Omitted 'own'.. from 2nd para 3rd line.
Added comma in 3rd line after 'developing tools' under the "Upgrading" topic.
bugfixes>> Bug fixes in 7th line under topic "How to contribute".

## Changelog

[CATEGORY] [TYPE] - Message
Pull Request resolved: https://github.com/facebook/react-native/pull/26879

Differential Revision: D18268598

Pulled By: cpojer

fbshipit-source-id: fa64854cd7fbf049524042effe7a5f4a1d0d6a04
2019-11-01 04:49:25 -07:00
Tim YungandFacebook Github Bot 95158ec692 RN: Export Focus / Blur / Mouse Events
Summary:
Exports these events in a canonical manner so that they can be used in future refactors.

Changelog:
[Internal]

Reviewed By: TheSavior

Differential Revision: D18257693

fbshipit-source-id: aac40277df8a88224c8df29caa04ffc9a6db0a22
2019-10-31 23:44:53 -07:00
Valentin SherginandFacebook Github Bot 1a520e7b5a Fabric: Fixing a typo in RCTSurfacePresenterBridgeAdapter
Summary:
Shameful copy-pasta error.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18220281

fbshipit-source-id: 96a6babc2abb654b0fc8463d151307fe9ef97037
2019-10-31 21:41:11 -07:00
Samuel SuslaandFacebook Github Bot a82ebeb6f3 Fabric: Use padding instead of size for SafeAreaView
Summary:
Use padding instead of setting size of SafeAreaView, this should make it more consistent with Paper component.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D18225793

fbshipit-source-id: 08dccbdae0e4f7a7847501a06e17d4c26473462a
2019-10-31 21:25:37 -07:00
Samuel SuslaandFacebook Github Bot cd1abb3bca Fabric: Fix order of arguments in RCTEdgeInsetsFromUIEdgeInsets
Summary:
Order of arguments for `RectangleEdges` was incorrect

changelog: [internal]

Reviewed By: shergin

Differential Revision: D18231825

fbshipit-source-id: 188d7af405ce801437ff67999a8f7dae77ae03c0
2019-10-31 21:25:37 -07:00
Rick HanlonandFacebook Github Bot 038353b89c LogBox - switch to array filter
Summary:
Fixes a bug for old versions of JSC that do not support `for of` syntax

Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D18265611

fbshipit-source-id: 4643b6e2571c57ddd982661d188c3449f17a151e
2019-10-31 21:10:26 -07:00
Jacob ThorntonandFacebook Github Bot a7437710d2 Fix for: You cannot blur a text-input if you tab to it. (#27038)
Summary:
I've been working on a new iOS experience with lots of text inputs and this has been driving me a bit nuts…

If you're in a scrollview with `keyboardShouldPersistTaps="handled"` and you tab through your text-inputs, you aren't able to tap outside of a given text-input to blur it (and dismiss the keyboard).

I wrote up a quick explanation and some repo steps here: https://snack.expo.io/BJBcKgrqB

The patch i came up with, after poking around for a little bit seems terrifying - so almost certainly not it. But if it's helpful at all - decided to just got ahead and submit it.

## Changelog

[iOS] [Fixed] - TextInput blur when tabbing in iOS simulator.
Pull Request resolved: https://github.com/facebook/react-native/pull/27038

Test Plan:
I tried to think of a way to test this in jest… but i didn't get very far sorry 😢

I did create a snack here so you can demo the issue: https://snack.expo.io/BJBcKgrqB

I also created two videos…

**Here's the text input not working when i try to blur it after tabbing in simulator**
![ezgif-1-dc85b405c760](https://user-images.githubusercontent.com/169705/67726290-8e5d2d00-f9a2-11e9-98c9-29c0b0bb25b9.gif)

**Here's it working after I applied this patch**
![ezgif-1-ed9f6b19653d](https://user-images.githubusercontent.com/169705/67726309-97e69500-f9a2-11e9-9992-c2a79d0bd408.gif)

Thanks!

Differential Revision: D18262867

Pulled By: TheSavior

fbshipit-source-id: 4087f3a27a7e6a146f7f84d7c6e9e8e2b6adc75d
2019-10-31 18:17:59 -07:00
David VaccaandFacebook Github Bot 00266693b3 Avoid copying vector in mounting layer of Fabric
Summary:
easy diff to avoid the constant copy of a vector when calling the method Binding.createRemoveAndDeleteMultiMountItem. Since we are not modifing the vector inside the method createRemoveAndDeleteMultiMountItem it's not necessary to copy it.

Changelog: Improve performance in mounting of Fabric views

Reviewed By: JoshuaGross

Differential Revision: D18250376

fbshipit-source-id: c984214a8148bab521cec51d42ba54a4b73e3e67
2019-10-31 17:21:14 -07:00
David VaccaandFacebook Github Bot 2afc4e2482 Remove unused variable in ReactTextInputManager
Summary:
quick diff to remove unused variable in ReactTextInputManager

Changelog: Remove unused variable in ReactTextInputManager

Reviewed By: JoshuaGross

Differential Revision: D18250377

fbshipit-source-id: 93c0dc9384fda811d53b078715101f3317af9753
2019-10-31 17:21:14 -07:00
Rick HanlonandFacebook Github Bot a09ab64874 Don't pass through ignored warnings to console
Summary:
This diff check if warnings are ignored before calling through to the wrapped console.warn implementation below, thus preventing ignored logs from being sent to adb/metro/flipper and cleaning them up a bit.

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D18239936

fbshipit-source-id: 533beced3e66ad1a4d0810933862c63a0b88628c
2019-10-31 16:26:44 -07:00
Rick HanlonandFacebook Github Bot 93f4bb23e2 LogBox - Don't show native redbox for JS errors on Android
Summary:
Will not show native redboxes when LogBox handles them

Changelog: [Internal]

Reviewed By: motiz88

Differential Revision: D18236608

fbshipit-source-id: 1c60c69419b1a823594caf650d67693d4ad2076b
2019-10-31 16:26:44 -07:00
Rick HanlonandFacebook Github Bot 1807a6afee LogBox - Dismiss errors and warnings independently
Summary:
This diff makes the warning and error notifications independently dismissible

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D18218937

fbshipit-source-id: 198b18d7f177fcb59506a4adfed5b1ce0a331aba
2019-10-31 16:26:43 -07:00
Rick HanlonandFacebook Github Bot b2bafa06fa LogBox - Better error support
Summary:
This diff adds support for thrown exceptions to redboxes, and hides the native redbox when we show an error in LogBox.

Changelog: [Internal]

Reviewed By: cpojer

Differential Revision: D18212064

fbshipit-source-id: 92031d554968bcb079f81568673ae85697c8f5ad
2019-10-31 16:26:43 -07:00
Rick HanlonandFacebook Github Bot 6b783b4fb0 LogBox - Don't show native redbox for JS errors
Summary:
This diff switches the exception manager over to the reportException native module function on iOS and adds a new field `extraData.showRedbox` as a temporary hack to control hiding/showing native redboxes for LogBox.

Once LogBox is rolled out we'll remove this field, so we're hacking it into the available unused and untyped extraData bag, which will simplify gutting it in the future.

Changelog: [Internal]

Reviewed By: motiz88

Differential Revision: D18212047

fbshipit-source-id: f14e31d90359b7d455a73c2368ce010c28364a5c
2019-10-31 16:26:42 -07:00
Rick HanlonandFacebook Github Bot 4265daa790 LogBox - Schedule logs to unblock rendering
Summary:
Currently if you land of a surface with a lot of logs, we're basically blocked until they stop. This diff schedules the log parsing in LogBox to free up the app to do other things.

Changelog: [Internal]

Reviewed By: motiz88

Differential Revision: D18203391

fbshipit-source-id: 35c5f03316a1106a3a48e7770d5bb59c62a3694f
2019-10-31 16:26:42 -07:00
Rick HanlonandFacebook Github Bot 8524b6182d LogBox - Optimistically symbolicate
Summary:
This diff adds optimistic loading for symbolicated stack traces by so that we (almost) never show a loading state for stack traces. Because of this, we also remove the "Stack Trace" status except when it is loading or failed. Also refactored the related components to hooks 🎣

Changelog: [Internal]

Reviewed By: mmmulani

Differential Revision: D18110403

fbshipit-source-id: a93b0a63e1c9490fea73ca6ec7c5707670bdea53
2019-10-31 16:26:42 -07:00
Riley DulinandFacebook Github Bot f91a21b2c0 Remove compact parameter from heap snapshots
Summary:
This parameter used to be useful for a custom format hermes was developing,
but since Hermes now outputs the Chrome format it isn't useful.
Chrome actually disallows prettified JSON, and requires a special version that is faster to parse.
Therefore, `compact` was the only supported mode.

Changelog: [Internal] Remove compact parameter from `createSnapshotToFile`

Reviewed By: willholen

Differential Revision: D17726742

fbshipit-source-id: 6f39af9046dff2f3b4fba822312a9a89c939ed89
2019-10-31 14:48:01 -07:00
Samuel SuslaandFacebook Github Bot 8c7ec51981 Add StickerInputView to interop white list
Summary: changelog: [internal]

Reviewed By: shergin

Differential Revision: D17955113

fbshipit-source-id: 8c9e7271a1eb5e503dd273e963e9fbffb4a950bf
2019-10-31 14:42:48 -07:00
Samuel SuslaandFacebook Github Bot fbfce92e97 Use ReactTag to map events to component view
Summary:
Use `reactTag` instead of address of `UIView` to map events from paper components to Fabric.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D17954974

fbshipit-source-id: 0d8bf748e58f4cb6769e107bc7fd0e66b93d8f12
2019-10-31 14:42:47 -07:00
Samuel SuslaandFacebook Github Bot 03fd80c937 Refactor RCTLegacyViewInteropComponentView
Summary:
Simplify logic in `RCTLegacyViewManagerInteropComponentView` by caching views that are mounted and unmounted and applying it in finalise.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D17954975

fbshipit-source-id: 11c8ec9e6eabb8a838a83f5fc2428912f4ec9523
2019-10-31 14:42:47 -07:00
Samuel SuslaandFacebook Github Bot 19f58f4935 Add FBGroupsLandingView to LegacyViewManagerInterop whitelist
Summary:
Allow components outside of React-Native core to be registered with LegacyViewManagerInterop

changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D17912238

fbshipit-source-id: 67a9109c427c5e3efb8ebb6c6f8c13c2931461a3
2019-10-31 14:42:47 -07:00
David VaccaandFacebook Github Bot afd836957f Fix Text paddings in Fabric
Summary:
Text paddings in Fabric are managed by LayoutMetrics, the current implementation of Fabric is incorrectly using padding data from Text Props to set the padding in the view.
This diff refactors the update of Text in Fabric in order to avoid using padding prop data

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D18211638

fbshipit-source-id: de05e7daa6185d854ce1b6580a1e44ae55d3176e
2019-10-31 14:02:49 -07:00
David VaccaandFacebook Github Bot 67a1743e20 Enable codegen ViewConfig in production
Summary:
This diff enables the codegen ViewConfig in production, which have been running in Dev mode for 4+ months withouth any issue

Changelog: [Internal]

Reviewed By: rickhanlonii, ejanzer

Differential Revision: D18218546

fbshipit-source-id: cc74a89db1b1f8d9770a0b7dacb2fbfa6fd3a2d7
2019-10-31 12:09:04 -07:00
Eli WhiteandFacebook Github Bot bb29cd92cc Partial React Sync for revisions 4eeee358e12c...2b18a13d2bf
Summary:
This sync includes the following commits:

- **[2b18a13d2](https://github.com/facebook/react/commit/2b18a13d2 )**: Revert "Dispatch commands to both UIManagers from both renderers (#17211)" (#17232) //<Eli White>//
- **[ab69a4d7e](https://github.com/facebook/react/commit/ab69a4d7e )**: Rename findHostInstance_deprecated to findHostInstance_DEPRECATED (#17228) //<Eli White>//
- **[d26ed2e42](https://github.com/facebook/react/commit/d26ed2e42 )**: Add findHostInstance_deprecated to the React Native Renderer (#17224) //<Eli White>//
- **[5ec25817c](https://github.com/facebook/react/commit/5ec25817c )**: Dispatch commands to both UIManagers from both renderers (#17211) //<Eli White>//
- **[f68f5fcee](https://github.com/facebook/react/commit/f68f5fcee )**: Update RN typings for a shim (#17138) //<Dan Abramov>//

Changelog:
[General][Changed] Partial React Sync for revisions 4eeee358e12c...2b18a13d2bf

Reviewed By: gaearon

Differential Revision: D18233299

fbshipit-source-id: 0adbc51d8a69de8b95f5efa4be011be88bc450aa
2019-10-31 12:00:55 -07:00
Essam EwaishaandFacebook Github Bot 4b487ba500 Upgrade metro version to 0.56.3
Summary: Pulls the `0.56.3` release tag internally, by adding the same changes and upgrading react-native-github metro dependencies to `0.56.3`.

Reviewed By: motiz88

Differential Revision: D18114219

fbshipit-source-id: 0be58255eb8c79267e8ea30ab2e9e3d96a794b92
2019-10-31 10:08:46 -07:00
Elisa LouandFacebook Github Bot 27d7d3fed5 update android AppearanceModule to support dark mode in all OS versions
Summary:
We no longer need to gate by OS version since we want to allow in-app theming. This diff ensures that we are passing in the updated system context to retrieve the correct app theme.

Changelog:
[Android] Enable AppearanceModule for all OS versions

Reviewed By: mdvacca

Differential Revision: D18224915

fbshipit-source-id: 42d5db8497d8bead32c49e3e2a25d4ba779e2b33
2019-10-31 10:05:38 -07:00
Valentin SherginandFacebook Github Bot b5080f7d77 Fabric: Fixing arbitrary-node-replacing (aka RootShadowNode::clone) algorithm
Summary:
This diff changes how arbitrary-node-replacing (aka `RootShadowNode::clone`) algorithm works.
Original implementation worked this way: We specified a node that needs to be replaced and a new replacement node. Then the algorithm finds a node with *the same family* as given the to-be-replaced node and replaced that with a given replacement.
The problem with this approach is that we are replacing a node that we have very little info about (we only know that it shares the same family as specified one). At the same time, we build the replacement based on the exact node that we have. Then imagine the case in which the "target" node can progress/change between a moment where we get a reference to it and a moment where we are trying to clone the tree. In this case, we will replace a "progressed" node with a modified version of the obsolete node.
Practically speaking, it was possible that during a state update we were replacing a node that just got new children with a bit older version of that with old children but with a new state.

How to deal with it? This diff introduces a new interface for this method that allows separating the target node and the actual act of cloning the corresponding node. Instead of specifying actual replacement, we now specify a function that performs the cloning/transformation on-demand on the very exact node that was in the tree at the moment of cloning.

This change does not change/affect any ownership-related relationships between trees and/or nodes.

Ideally, probably, the interface should accept ShadowNodeFamily instance instead of a ShadowNode instance to make the behavior very clear but that requires a bunch of low-level changes that it out of the scope of this fix.

```

                                                                   The old approach.

                     ┌─────────────────┐                          ┌─────────────────┐                          ┌─────────────────┐
                     │                 │                          │                 │                          │                 │
                     │      A(r0)      │                          │      A(r1)      │                          │      A(r2)      │
                     │                 │                          │                 │                          │                 │
                     └─────────────────┘                          └─────────────────┘                          └─────────────────┘
                              │                                            │                                            │
                              │          Let's update the                  │   Meanwhile the node B                     │
                              ▼           state of this                    ▼    gets new children.                      ▼
                     ┌─────────────────┐   node to s1.            ┌─────────────────┐                          ┌─────────────────┐
                     │                 │                          │                 │                          │                 │   Created
                     │    B(r0, s0)    │         ───────▶         │    B(r1, s0)    │         ───────▶         │    B(r2, s1)    │     from
                     │                 │                          │                 │                          │                 │    B(r0).
                     └─────────────────┘                          └─────────────────┘                          └─────────────────┘
                              │                                            │                                            │
                       ┌──────┴──────┐                       ┌─────────────┼─────────────┐                       ┌──────┴──────┐
                       │             │                       │             │             │                       │             │    What just
                       ▼             ▼                       ▼             ▼             ▼                       ▼             ▼     happe..?
                 ┌───────────┐ ┌───────────┐           ┌───────────┐ ┌───────────┐ ┌───────────┐           ┌───────────┐ ┌───────────┐
                 │           │ │           │           │           │ │           │ │           │           │           │ │           │
                 │   C(r0)   │ │   D(r0)   │           │   C(r1)   │ │   D(r1)   │ │   X(r0)   │           │   C(r0)   │ │   D(r0)   │
                 │           │ │           │           │           │ │           │ │           │           │           │ │           │
                 └───────────┘ └───────────┘           └───────────┘ └───────────┘ └───────────┘           └───────────┘ └───────────┘

                                                                   The new approach.

                     ┌─────────────────┐                          ┌─────────────────┐                           ┌─────────────────┐
                     │                 │                          │                 │                           │                 │
                     │      A(r0)      │                          │      A(r1)      │                           │      A(r2)      │
                     │                 │                          │                 │                           │                 │
                     └─────────────────┘                          └─────────────────┘                           └─────────────────┘
                              │                                            │                                             │
                              │         Let's update the                   │                                             │
                              ▼          state of this                     ▼                                             ▼
                     ┌─────────────────┐  node to s1.             ┌─────────────────┐                           ┌─────────────────┐
                     │                 │                          │                 │                           │                 │   Created
                     │    B(r0, s0)    │         ───────▶         │    B(r1, s0)    │         ───────▶          │    B(r2, s1)    │     from
                     │                 │                          │                 │                           │                 │    B(r1).
                     └─────────────────┘                          └─────────────────┘                           └─────────────────┘
                              │                                            │                                             │
                       ┌──────┴──────┐                       ┌─────────────┼─────────────┐                 ┌─────────────┼─────────────┐
                       │             │                       │             │             │                 │             │             │
                       ▼             ▼                       ▼             ▼             ▼                 ▼             ▼             ▼
                 ┌───────────┐ ┌───────────┐           ┌───────────┐ ┌───────────┐ ┌───────────┐     ┌───────────┐ ┌───────────┐ ┌───────────┐
                 │           │ │           │           │           │ │           │ │           │     │           │ │           │ │           │
                 │   C(r0)   │ │   D(r0)   │           │   C(r1)   │ │   D(r1)   │ │   X(r0)   │     │   C(r1)   │ │   D(r1)   │ │   X(r0)   │
                 │           │ │           │           │           │ │           │ │           │     │           │ │           │ │           │
                 └───────────┘ └───────────┘           └───────────┘ └───────────┘ └───────────┘     └───────────┘ └───────────┘ └───────────┘

```

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D18229704

fbshipit-source-id: face6d0e5c240224ce49e93e783cff3172b60529
2019-10-31 09:38:39 -07:00
Valentin SherginandFacebook Github Bot 6ffc93d657 Fabric: Use ShadowNode::sameFamily instead of getTag() to check for same family
Summary:
We used to use `getTag` to check that some two nodes are clones of each other, not we have a dedicated method for that that exactly ensures that without reling  on a sideeffect (wich tag equality is).
That is just much less error-prone.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D18231006

fbshipit-source-id: 6b247ed0eaded1fed8fd7fa820e80cd58602110c
2019-10-31 09:38:39 -07:00
Eli WhiteandFacebook Github Bot c5980a4b0f Move ReactNativeTypes-flowtest.js out of the Renderer folder
Summary:
The renderer folder gets replaced by react syncs but we don't want to lose this flow test. It would make sense to move this file into the React repo as it is trying to test `ReactNativeTypes.js` which lives there. However, the React repo is on Flow 0.72 which apparently doesn't catch this issue.

Changelog: [Internal]

(Note: this ignores all push blocking failures!)

Reviewed By: gaearon

Differential Revision: D18231354

fbshipit-source-id: 69f4617899c06118c74a8991f061e3bb3fdc88fb
2019-10-30 14:35:02 -07:00
Peter ArganyandFacebook Github Bot 2a13f12106 Re-implement reload reason [7/n]
Summary:
This diff adds back RN reload reason, which was removed earlier in the stack. cc/Rick

For callsites which already had a reason, I kept the string exactly the same. For callsites which didn't have a reason, I made up something reasonable.

Changelog: [Internal][Fixed] Re-implemented bridge reload reason text.

Reviewed By: RSNara

Differential Revision: D18074478

fbshipit-source-id: 64a3cd7718674a7ba7228a80e34791ce9f153f9f
2019-10-30 12:23:25 -07:00
Peter ArganyandFacebook Github Bot 5ca0df64a1 Deprecate RCTBridgeWillReloadNotification [3/n]
Summary:
`RCTBridgeWillReloadNotification` has one job: whenever bridge reloads - trigger a reload in `RCTSurfacePresenter`.

Diff 1/2 deprecated bridge reloading APIs, and replaced them with `RCTReloadCommand`. Use that in `RCTSurfacePresenter` instead .

Changelog: [iOS][Deprecate] Deprecate RCTBridgeWillReloadNotification

Reviewed By: shergin

Differential Revision: D17880926

fbshipit-source-id: 00adc4d56d11d40ab371d81bb17a05609c184769
2019-10-30 12:23:24 -07:00
Peter ArganyandFacebook Github Bot d98cd7d3a1 Migrate bridge reload to RCTReloadCommand [2/n]
Summary:
Motivation described in diff 1/N.

This diff replaces calls to `[bridge reload]` with calls to `RCTReloadCommand`. This shouldn't have any change in behaviour since RCTBridge listens to RCTReloadCommand and calls `[bridge reload]` [here](https://fburl.com/diffusion/kemzkrei).

It will allow us to customize who listens and reacts to RN lifecycle.

Changelog: [Internal][Changed] - Migrated [bridge reload] calls to RCTReloadCommand

Reviewed By: shergin

Differential Revision: D17880909

fbshipit-source-id: 80b26c6badd4b216656fed6dd04554e9877f4bb7
2019-10-30 12:23:24 -07:00
Peter ArganyandFacebook Github Bot ffe2306164 Deprecate bridge reload API [1/n]
Summary:
Testing the waters with an idea for unifying RN lifecycle with/without bridge.

### Motivation/Background

RN bridge is being reloaded from [several different places](https://fburl.com/codesearch/ae3zeatt). When this happens, the bridge does a bunch of things:
1. Post `RCTBridgeWillReloadNotification` (RCTSurfacePresenter listens to this and reloads)
2. Invalidate batched bridge, which does:
    a. invalidate display link
    b. post `RCTBridgeWillInvalidateModules/RCTBridgeDidInvalidateModules` (TurboModuleManager listens to this and reloads modules)
    c. clear js thread state
    d. clear some local caches
3. Set up (reload bundle and batched bridge)

In a bridgeless world, there isn't one thing which owns all these peices of infra, and can reload them.

### Plan

Use `RCTReloadCommand` to handle reloads. This light class previously only handled CMD+R. The new workflow looks like this:
1. Anything which cares about reloads can register itself as a listener. (RCTBridge, RCTSurfacePresenter, TurboModuleManager...)
2. Anything that previously called `bridge reload` now calls `RCTTriggerReloadCommandListeners`.
3. Delete old notifications

### Alternate Plan

Use yet another NSNotification. I like `RCTReloadCommand` better.

### Unknowns

Looks like we log the reason for bridge reloading [here](https://fburl.com/diffusion/lc9jj8la), do we want to save this behaviour? Does anyone look at why bridge is being reloaded cc/Rick? If so, I can add back that functionality to `RCTReloadCommand`.

It should be possible to customize the order/priority of what gets reloaded first. There may be some racy behaviour that I haven't thought about yet.

Changelog: [iOS][Deprecated] Deprecate [bridge reload] API - prefer RCTReloadCommand

Reviewed By: shergin

Differential Revision: D17869635

fbshipit-source-id: 81f39eaa2c3ce08ea1bc6f2193684c2630d81a2d
2019-10-30 12:23:24 -07:00
Andrew MonshizadehandFacebook Github Bot 35b8b06db9 Fix unrecognized selector for iOS 9
Summary:
Refresh control is only available in iOS 10+

> https://developer.apple.com/documentation/uikit/uiscrollview/2127691-refreshcontrol?language=objc

changelog: Fix crash in RCTPullToRefreshViewComponentView on iOS 10

Reviewed By: sammy-SC

Differential Revision: D18201528

fbshipit-source-id: 0dd3dad7cabe08589a597039c1dae44da868e1e5
2019-10-30 11:23:58 -07:00
Mike GrabowskiandFacebook Github Bot 2c7a907b08 Update integration snapshots (#27059)
Summary:
This commit https://github.com/facebook/react-native/commit/a397d330a4cf7e08095faa0e751e38d5106ed5c7 changes colors in the RNTester slightly and makes snapshots to fail.

I have re-generated them and made sure it was just the background color (and few other minor gray shades) that were different.

I haven't spotted any other visual changes.
Pull Request resolved: https://github.com/facebook/react-native/pull/27059

Differential Revision: D18223898

Pulled By: cpojer

fbshipit-source-id: ccc269bba0023233bc27254bd1a6bc0fb09a390a
2019-10-30 11:04:53 -07:00
Adam FoxmanandFacebook Github Bot fe9cba74fa Expose [RCTBundleURLProvider isPackagerRunning] publicly (#27012)
Summary:
The private API isPackagerRunning is useful. Rather than duplicating it, I am exposing it here so that I can make use of it in future PRs, and so others can do the same.

## Changelog

[iOS] [Changed] - Expose the isPackagerRunning methods on RCTBundleURLProvider
Pull Request resolved: https://github.com/facebook/react-native/pull/27012

Test Plan: This change doesn't impact any runtime code, though it does impact build. I used a vanilla test app (react-native init) and built it using xcode as well as react-native run-ios.

Differential Revision: D18174316

Pulled By: cpojer

fbshipit-source-id: 523d134882303f68a1f69521e31f29d7dbfb666c
2019-10-30 08:36:45 -07:00
dr2009andFacebook Github Bot af8ea06bb4 Add WebSocket to eslint globals (#27044)
Summary:
WebSocket is giving an error by eslint. ('WebSocket is not defined').

[websocket-support](https://facebook.github.io/react-native/docs/network#websocket-support)

## Changelog
[General] [Fixed] - Add WebSocket to eslint globals
Pull Request resolved: https://github.com/facebook/react-native/pull/27044

Test Plan: Run eslint on a react native project using WebSocket. Eslint verification should pass.

Differential Revision: D18223891

Pulled By: cpojer

fbshipit-source-id: c4adfde07078133930aa0ed80be5615d128f4148
2019-10-30 08:32:52 -07:00
Ramanpreet NaraandFacebook Github Bot cb1171b37a Update iOS Simulator OS version to 12.4
Summary:
It looks like Sandcastle is now using version iOS v12.4 for the iOS simulator. This is causing `test-react-native-oss-ios-legocastle.sh` to fail. See [this build failure](https://our.intern.facebook.com/intern/sandcastle/job/31525197549441452/).

```
Failure Found: react-native-oss-ios - Test: Run RNTesterPods Integration Tests
stdout:
User defaults from command line:
    IDETestRunOnlyIdentifiers = (
    RNTesterUnitTests
)
    IDETestRunSkipIdentifiers = (
    "RNTesterIntegrationTests/RNTesterSnapshotTests",
    "RNTesterIntegrationTests/RNTesterIntegrationTests/testWebSocketTest"
)
Build settings from command line:
    RN_BUNDLE_PREFIX = react-native-github/
    SDKROOT = iphonesimulator12.4
stderr:
xcodebuild: error: Unable to find a destination matching the provided destination specifier:
		{ platform:iOS Simulator, OS:12.2, name:iPhone 6s }
	The requested device could not be found because no available devices matched the request.
	Available destinations for the "RNTester" scheme:
		{ platform:iOS Simulator, id:5E437CA6-5FB6-4AB3-BF7B-F04B2BEACE3A, OS:12.4, name:iPad (5th generation) }
		{ platform:iOS Simulator, id:054F7E3D-F1BC-48BF-8C0E-FD047CD8145D, OS:12.4, name:iPad (6th generation) }
		{ platform:iOS Simulator, id:FF1DE07E-6DB8-43DB-AF89-A788054639EB, OS:12.4, name:iPad Air }
		{ platform:iOS Simulator, id:257E7F9D-436C-4D3F-934F-AF87C3FD9C57, OS:12.4, name:iPad Air (3rd generation) }
		{ platform:iOS Simulator, id:8CA6B68A-A191-406A-B75C-6EA61762E503, OS:12.4, name:iPad Air 2 }
		{ platform:iOS Simulator, id:2250ACFE-B7C9-47F8-AB9D-76BCAD2EA623, OS:12.4, name:iPad Pro (9.7-inch) }
		{ platform:iOS Simulator, id:89BA7B06-DA47-4EB3-8154-282BC9606884, OS:12.4, name:iPad Pro (10.5-inch) }
		{ platform:iOS Simulator, id:5AFD752C-7994-4343-8936-3045D4EA4098, OS:12.4, name:iPad Pro (11-inch) }
		{ platform:iOS Simulator, id:BE6D8220-5E32-47DB-9403-91F4649851EA, OS:12.4, name:iPad Pro (12.9-inch) }
		{ platform:iOS Simulator, id:820B2496-B679-4EE9-950B-826BF129817E, OS:12.4, name:iPad Pro (12.9-inch) (2nd generation) }
		{ platform:iOS Simulator, id:0F257958-76B4-43B8-BA9D-C7E2C1137D19, OS:12.4, name:iPad Pro (12.9-inch) (3rd generation) }
		{ platform:iOS Simulator, id:CAF47FC7-A1A8-4503-958E-F6A3094650C4, OS:12.4, name:iPad mini (5th generation) }
		{ platform:iOS Simulator, id:855BEDAC-6E5F-4638-85B3-B52A538CCB44, OS:12.4, name:iPad mini 2 }
		{ platform:iOS Simulator, id:C0060E26-DBC0-4904-B60A-825FA610BA12, OS:12.4, name:iPad mini 3 }
		{ platform:iOS Simulator, id:5A56D7DD-14A7-4E1F-B672-969C67D0BC5D, OS:12.4, name:iPad mini 4 }
		{ platform:iOS Simulator, id:17E11CDB-62CD-4CFA-827C-9499233845AF, OS:12.4, name:iPhone 5s }
		{ platform:iOS Simulator, id:9D0E91A4-B302-4262-A4B8-700D77187739, OS:12.4, name:iPhone 6 }
		{ platform:iOS Simulator, id:3A02CF93-4216-4294-BCA4-8D373DEA773F, OS:12.4, name:iPhone 6 Plus }
		{ platform:iOS Simulator, id:8B07790E-16E6-4469-9523-4AD7A7C89683, OS:12.4, name:iPhone 6s }
		{ platform:iOS Simulator, id:097F6248-9244-487C-B0E3-D4BA1878B2A6, OS:12.4, name:iPhone 6s Plus }
		{ platform:iOS Simulator, id:450708A9-08E0-48A4-8581-B0B13AE5B705, OS:12.4, name:iPhone 7 }
		{ platform:iOS Simulator, id:C6A991EC-6A3A-4E9F-91F5-701F72594E00, OS:12.4, name:iPhone 7 Plus }
		{ platform:iOS Simulator, id:5F40F20C-88F4-4C00-A793-916CE9F6AB36, OS:12.4, name:iPhone 8 }
		{ platform:iOS Simulator, id:464700B3-E305-4A89-9FEC-462FC157FBF2, OS:12.4, name:iPhone 8 Plus }
		{ platform:iOS Simulator, id:66C1DB35-A629-4F2F-A312-FF589E0CEF7F, OS:12.4, name:iPhone SE }
		{ platform:iOS Simulator, id:71121451-3E76-465F-9DDC-26B935A7828B, OS:12.4, name:iPhone X }
		{ platform:iOS Simulator, id:1E0BE5F8-2075-4E19-A9F1-A307E0EF4808, OS:12.4, name:iPhone Xs }
		{ platform:iOS Simulator, id:646D550E-770B-4D00-84B1-BF711C978E80, OS:12.4, name:iPhone Xs Max }
		{ platform:iOS Simulator, id:B0511543-649C-43E8-9782-17C559C19E65, OS:12.4, name:iPhone Xʀ }
	Ineligible destinations for the "RNTester" scheme:
		{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
		{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }
```

This diff updates the version to 12.4, as suggested by the above logs.

build-break
overriding_review_checks_triggers_an_audit_and_retroactive_review

Differential Revision: D18218399

fbshipit-source-id: 6625f94f249721396ef82641f628f399ebfd5302
2019-10-29 18:10:58 -07:00
Joshua GrossandFacebook Github Bot 426868b6c2 Add enable_nullify_catalyst_instance_on_destroy MC and gate setting mCatalystInstance to null in ReactContext
Summary:
Mostly for easing open-source migration and not making a backwards-incompatible change (yet), we'll set this to false by default. Every app can opt-in to this if wanted but it's not necessary. This change is part of experiments surrounding more-aggressive teardown for Fabric and Bridgeless mode.

Changelog: [Internal] - This has the effect of (by default) disabling the previous diff which caused ReactContext teardown to always set mCatalystInstance to null. Now that is opt-in behavior and off by default, so it's not longer a breaking change.

Reviewed By: mdvacca

Differential Revision: D18207302

fbshipit-source-id: 7acfc894415e966f652c7049849eef79c440a135
2019-10-29 16:21:12 -07:00
Christoph NakazawaandFacebook Github Bot 55e974d9fa Revert D18173919: fix(eslint-config): Clashes with prettier
Differential Revision:
D18173919

Original commit changeset: b333469652b4

fbshipit-source-id: 819d484101be132ae3f2d3bf8e3ba008a9d91d83
2019-10-29 13:18:49 -07:00
Maurus CuelenaereandFacebook Github Bot c2c4b43dfe Add Android support for fontVariant prop (#27006)
Summary:
Android was missing support for the `fontVariant` prop in TextViews, this PR adds that.

## Changelog

[Android] [Added] - Add Android support for fontVariant prop
Pull Request resolved: https://github.com/facebook/react-native/pull/27006

Test Plan:
Since I can't get RNTester to work locally (it crashes when loading `libyoga.so` on `No implementation found for long com.facebook.yoga.YogaNative.jni_YGConfigNew()`), I'll post some screenshots below of our app showing the difference.

We are using a slightly different [version](https://github.com/getdelta/react-native/commit/10cafcaa0798e5dbe8b56d461885fa84c6953739) of this commit, since we're still on 0.60, but the gist remains the same when rebased on master.

Before:
![Screenshot_20191025-130325__01](https://user-images.githubusercontent.com/1682432/67566586-7b3f2880-f728-11e9-85c0-57667d645153.jpg)

After:
![Screenshot_20191025-130444__01](https://user-images.githubusercontent.com/1682432/67566599-842ffa00-f728-11e9-988a-1b12ee393b83.jpg)

Differential Revision: D18179642

Pulled By: mdvacca

fbshipit-source-id: 03a050aa76e7bafa0343354dfa778cf74af5abd2
2019-10-29 00:29:20 -07:00
Marco MunizagaandFacebook Github Bot 6ebd3b046e Cap selection indices when text changes (#26680)
Summary:
This PR https://github.com/facebook/react-native/pull/22723 cached selections, so if you had a cached selection indicies, but updated the text to be an empty string, then this would crash.

As reported in https://github.com/facebook/react-native/issues/25265 and other issues of `setSpan(4 ... 4) ends beyond length`

## Changelog

[Android] [fixed] - Crash in TextInput
Pull Request resolved: https://github.com/facebook/react-native/pull/26680

Test Plan:
```
input.setNativeProps({ text: "xxx", selection: {"begin": 0, "end": 3}});
input.setNativeProps({ text: ""});
```

Differential Revision: D18189703

Pulled By: cpojer

fbshipit-source-id: 67d9615a863fd22598be8d6d4553dec5ac8837ed
2019-10-28 22:38:53 -07:00
Joshua GrossandFacebook Github Bot 0bea6a9b19 Work around ancient race condition in ReactInstanceManager
Summary:
See T55861104. In rare cases if `removeReactInstanceEventListener` is called right after (like, a small number of CPU instructions later, on a different thread) we allocate the `listeners` array with a certain size, then we could have one or more `null` listeners in the array, which is what we've been seeing in prod, at very low volumes, for several years. Without solving the root of the race condition we can just add a null check here.

Maybe it's also possible that if `addReactInstanceEventListener` is called on another thread in a racey way, that the size will be incremented on the array before we can access the additional member. That seems crazy, but maybe.

While this has been firing for multiple years it seems like a more recent change caused a regression. This diff doesn't address that and only resolves the crash.

Changelog: [Internal]

Reviewed By: ejanzer

Differential Revision: D18192801

fbshipit-source-id: c1000cfcdf6f251b03061d1386eabb9f0617a7d3
2019-10-28 19:28:01 -07:00