The overall direction seems OK, but my main concern is to make sure the state model remains as simple as possible. In particular, I think after
https://codereview.chromium.org/2036833002, tracking active_delta_ and active_base_ separately should no longer be necessary, since the primary role of active_delta_ has been usurped by pending_delta_. I'd prefer that the two active values be merged into active_current_.
This implies SyncedProperty::ActiveBase() and SyncedProperty::Delta() will need to be deleted, which is a nice API cleanup anyway. Looks like there are no production callers of ActiveBase(), and there are only two remaining callers of SyncedProperty::Delta() that can feasibly be deleted:
A) the flooring hack in ScrollTree::PullDeltaForMainThread which I believe is equivalent to flooring directly on Current() instead
B) the changed_page_scale boolean in LayerTreeImpl::PushPageScaleFactorAndLimits which doesn't need to know a full delta value.