Commit Graph

13569 Commits

Author SHA1 Message Date
Gustavo Saiani
5bdd4c8c60
Remove unused argument from call to jest method (#19546) 2020-08-06 16:55:01 +01:00
Mateusz Burzyński
a5fed98a96
Register more node types that are used later as JSXIdentifiers (#19514) 2020-08-06 16:37:32 +01:00
DaniAcu
50893dbcb7
fix(react-dom): unnecesary path on DOMEventProperties (#19544) 2020-08-06 16:37:06 +01:00
Dominic Gannaway
f77c7b9d76
Re-add discrete flushing timeStamp heuristic (behind flag) (#19540) 2020-08-06 13:21:05 +01:00
Brian Vaughn
e67a6b1603
Fix runtime error that happens if a passive destroy function throws within an unmounted tree (#19543)
A passive effect's cleanup function may throw after an unmount. In that event, React sometimes threw an uncaught runtime error trying to access a property on a null stateNode field. This commit fixes that (and adds a regression test).
2020-08-05 18:22:18 -04:00
Emilis Baliukonis
5cff775502
[Scheduler] Get current time from performance.now in non-DOM environments (#19532)
* Get current time from performance.now in non-DOM environments

* Use local references to native APIs for Date and Performance

* Refactored to read globals directly
2020-08-05 17:29:06 +01:00
Dan Abramov
e9721e14e4
Remove onScroll bubbling flag (#19535) 2020-08-05 16:07:58 +01:00
Dominic Gannaway
b61174fb7b
Remove the deprecated React Flare event system (#19520) 2020-08-05 15:13:29 +01:00
Halit Ogunc
8d57ca519a
fix: typo in React Release Scripts (#19524) 2020-08-04 13:22:50 -04:00
Ricky
a437f3ff30
Use RN fork in default branch of feature flags (#19522) 2020-08-03 17:40:58 -04:00
Ricky
86314d5b45
Turn off new component stacks for React Native (#19521) 2020-08-03 14:45:50 -04:00
Andrew Clark
5f1890f12b
Bugfix: Don't unmount siblings of deleted node (#19516)
* Test: Don't unmount siblings of deleted node

Adds a failing regression test. Will fix in the next commit.

* Refactor to accept deleted fiber, not child list

A deleted fiber is passed to
flushPassiveUnmountEffectsInsideOfDeletedTree, but the code is written
as if it accepts the first node of a child list. This is likely because
the function was based on similar functions like
`flushPassiveUnmountEffects`, which do accept a child list.

Unfortunately, types don't help here because we use the first node
in the list to represent the whole list, so in both cases, the type
is Fiber.

Might be worth changing the other functions to also accept individual
fibers instead of a child list, to help avoid confusion.

* Add layout effect to regression test, just in case
2020-08-03 08:57:41 -07:00
Andrew Clark
93a0c28305
Add static version of Passive subtree tag (#19510)
Creates new subtree tag, PassiveStatic, that represents whether a
tree contains any passive effect hooks.

It corresponds to the PassiveStatic effect tag, which represents the
same concept for an individual fiber.

This allows us to remove the PassiveStatic effect tag from PassiveMask.
Its presence was causing us to schedule a passive effect phase callback
on every render, instead of only when something changed. That's now
fixed; this is reflected in the SchedulerProfiler tests.

(The naming is getting really confusing. Need to do some bikeshedding.)
2020-08-01 08:15:46 -05:00
Dan Abramov
a1c0864d19
Support untagged releases (#19509) 2020-07-31 20:47:28 +01:00
Dan Abramov
5d271fc3b1
Revert "Support untagged releases (#19507)" (#19508)
This reverts commit 58b3ee7a88.
2020-07-31 19:57:32 +01:00
Dan Abramov
58b3ee7a88
Support untagged releases (#19507)
* Support untagged releases

* Fix
2020-07-31 19:18:37 +01:00
Dan Abramov
7543459a48
Allow publishing untagged releases (#19505) 2020-07-31 16:10:01 +01:00
Dan Abramov
3d0895557a
Disable onScroll bubbling statically except for WWW (#19503) 2020-07-31 15:09:24 +01:00
Dan Abramov
332eceface
Revert "Statically enable enableFilterEmptyStringAttributesDOM (#19502)" (#19504)
This reverts commit 815ee89bf5.
2020-07-31 15:01:27 +01:00
Dan Abramov
815ee89bf5
Statically enable enableFilterEmptyStringAttributesDOM (#19502) 2020-07-31 14:57:57 +01:00
Andrew Clark
ede9170648
Move passive logic out of layout phase (#19500)
* setCurrentFiber per fiber, instead of per effect

* Re-use safelyCallDestroy

Part of the code in flushPassiveUnmountEffects is a duplicate of the
code used for unmounting layout effects. I did some minor refactoring to
so we could use the same function in both places.

Closure will inline anyway so it doesn't affect code size or
performance, just maintainability.

* Don't check HookHasEffect during deletion

We don't need to check HookHasEffect during a deletion; all effects are
unmounted.

So we also don't have to set HookHasEffect during a deletion, either.

This allows us to remove the last remaining passive effect logic from
the synchronous layout phase.
2020-07-30 21:43:03 -07:00
Dan Abramov
22d16cc15d
Remove event constants (#19276)
* Remove opaque event type

* Rename type and merge files

* Use literals where we have Flow coverage

* Flowify some plugins

* Remove constants except necessary ones
2020-07-30 21:52:37 +01:00
Andrew Clark
6ef997b534
Check for passive effects on the root fiber (#19488)
The root fiber doesn't have a parent from which we can read the
`subtreeTag`, so we need to check its `effectTag` directly.

The root fiber previously did not have any pending passive effects,
but it does now that deleted fibers are cleaned up in the passive phase.

This allows us to remove a `schedulePassiveEffectCallback` call from the
synchronous unmount path.

Co-authored-by: Brian Vaughn <bvaughn@fb.com>
2020-07-30 09:17:22 -04:00
Andrew Clark
e1f96b82b4
Check PassiveStatic instead of Passive (#19489)
Saves us from having to set a flag on `current` during the layout phase.

Could result in some redundant traversal, since PassiveStatic includes
effects that don't need clean-up. But it's worth it to remove the work
from the layout phase.

While I was editing this, I also re-arranged it so that we check the
`effectTag` check before we check the `tag`, since the `effectTag` check
is the one that's more likely to fail.
2020-07-30 09:13:04 -04:00
Dan Abramov
dff97a6915
Fix onGot/LostPointerCapture events (#19487) 2020-07-29 21:54:48 +01:00
Brian Vaughn
eae90cdbe9
Effects list refactor continued: passive effects traversal (#19374)
* Adds new `Passive` subtree tag value.
* Adds recursive traversal for passive effects (mounts and unmounts).
* Removes `pendingPassiveHookEffectsMount` and `pendingPassiveHookEffectsUnmount` arrays from work loop.
* Re-adds sibling and child pointer detaching (temporarily removed in previous PR).
* Addresses some minor TODO comments left over from previous PRs.

---

Co-authored-by: Luna Ruan <luna@fb.com>
2020-07-29 16:54:22 -04:00
Ricky
74cd7e5f17
Use feature flags for React Native in the test renderer (#19486) 2020-07-29 16:31:05 -04:00
Dan Abramov
291db05a75
Add regression tests for all events (#19485) 2020-07-29 21:13:56 +01:00
Ricky
7c8cc4358e
Add postTask browser scheduler implementation (#19479)
* Reduce code to necessities

* Switch to postTask API

* Add SchedulerPostTask tests

* Updates from review

* Fix typo from review

* Generate build of unstable_post_task
2020-07-29 15:27:59 -04:00
Dan Abramov
0eea16601c
Event propagation test suite (#19483) 2020-07-29 15:34:57 +01:00
Brian Vaughn
5227a37868
Add "unstable_" prefix to experimental mutable source APIs (#19472)
* Add "unstbale_" prefix to mutable source APIs

* DebugHooks no longer calls useMutableSource() on init

This was causing an observable behavioral difference between experimental DEV and PROD builds.

We don't initialize stack position for other composite hooks (e.g. useDeferredValue, useTransition, useOpaqueIdentifier). If we did, it would cause the same obesrvable behavioral difference.
2020-07-28 12:38:13 -04:00
Ricky
52c5146274
Add SchedulerHostConfig fork for post task (#19470) 2020-07-28 11:11:31 -04:00
Andrew Clark
722bc046dc
Don't rely on didTimeout for SyncBatched (#19469)
Tasks with SyncBatchedPriority — used by Blocking Mode — should always
be rendered by the `peformSyncWorkOnRoot` path, not
`performConcurrentWorkOnRoot`.

Currently, they go through the `performConcurrentWorkOnRoot` callback.
Then, we check `didTimeout` to see if the task expired. Since
SyncBatchedPriority translates to ImmediatePriority in the Scheduler,
`didTimeout` is always `true`, so we mark it as expired. Then it exits
and re-enters in the `performSyncWorkOnRoot` path.

Aside from being overly convoluted, we shouldn't rely on Scheduler to
tell us that SyncBatchedPriority work is synchronous. We should handle
that ourselves.

This will allow us to remove the `didTimeout` check. And it further
decouples us from the Scheduler priority, so we can eventually remove
that, too.
2020-07-27 14:42:44 -07:00
Sebastian Silbermann
feb134c30d
feat(react-dom): Add enterKeyHint (#18634) 2020-07-27 21:07:08 +01:00
Andrew Clark
96ac799eac
Remove callbackId field from FiberRoot (#19458)
The old expiration times implementation used this field to infer when
the priority of a task had changed at a more granular level than a
Scheduler priority level.

Now that we have the LanePriority type, which is React-specific, we no
longer need the `callbackId` field.
2020-07-27 10:39:07 -07:00
Andrew Clark
c24b641b76
Remove timeout option from scheduleCallback (#19457)
Since the Lanes refactor landed, we no longer rely on this anywhere, so
we can remove it.

The `delay` option is still needed by our timer implementation
(setTimeout polyfill). We'll keep the feature, but we'll likely change
how it's exposed once we figure out the proper layering between the
various Scheduler APIs.
2020-07-27 09:56:25 -07:00
Dominic Gannaway
144297165b
Bail-out of attaching non-delegated listeners (#19466)
* Bail-out of attaching non-delegated listeners

Revise comment

* Fix tests/add tests

* Add onInvalid test
2020-07-27 17:47:14 +01:00
Dan Abramov
06d104e8ec
Don't emulate bubbling of the scroll event (#19464)
* Don't emulate bubbling of the scroll event

* Put behind a flag
2020-07-27 17:33:54 +01:00
Dominic Gannaway
217ecf581b
Re-added toggle event to non-delegated events (#19465) 2020-07-27 16:58:38 +01:00
Dominic Gannaway
6bb86fd162
Delegated all capture events (#19463) 2020-07-27 15:36:43 +01:00
Dominic Gannaway
05344faca4
Follow up fix to 19452 (#19454) 2020-07-27 15:03:11 +01:00
Ricky
d29bf59a6e
Update my mailmap entries (#19455) 2020-07-26 22:47:32 -04:00
Ashwin Ramaswami
5530f1ccfb
Upgrade art fixtures to babel 7 (#16235)
* chore: upgrade art fixtures to babel 7

* upgrade

* use yarn
2020-07-25 23:43:49 -04:00
Dominic Gannaway
242a50a652
Fix issue with capture phase non-bubbling events (#19452) 2020-07-25 12:32:21 +01:00
Dominic Gannaway
ef22aecfc5
Add invalid/close events to <dialog> element (#19439)
Support dialog

Fix
2020-07-24 20:36:46 +01:00
Robert Ferentz
b55f75d0a5
fix issue #19362 + test (#19412) 2020-07-24 14:34:16 -04:00
Sebastian Markbåge
d93c8faada
Move Persistent Mode Optimization away from firstEffect (#19381)
Persistent mode needs to clone a parent and add its children if a child has
changed.

We have an optimization in persistent mode where we don't do that if no
child could've changed. If there are no effects scheduled for any child
then there couldn't have been changes.

Instead of checking for this on firstEffect, we now check this on the
children's effectTag and subtreeTags.

This is quite unfortunate because if we could just do this check a little
bit later we would've already gotten it transferred to the completed work's
subtreeTag. Now we have to loop over all the children and if any of them
changed, we have to loop over them again. Doing at least two loops per
parent.
2020-07-24 09:31:30 -07:00
Ricky
909b612e27
Sync React Native types (#19437) 2020-07-22 22:56:05 -04:00
Dan Abramov
76ce685d0f
Remove SyntheticEvent subtypes (#19436)
* Remove SyntheticEvent subtypes

* Code golf
2020-07-23 01:02:59 +01:00
Dominic Gannaway
30e3cfe406
Fix scope issue (#19434) 2020-07-22 23:05:50 +01:00