Pass referrer on native (with an opt out) (#6648)

* Pass referer on native

* Add ChainLink3

* Add an opt out for sending utm

* Remove noreferrer on links

We do have <meta name="referrer" content="origin-when-cross-origin"> in HTML, should be sufficient.

* Narrow down the condition slightly

---------

Co-authored-by: Eric Bailey <git@esb.lol>
This commit is contained in:
dan
2024-11-22 23:28:45 +00:00
committed by GitHub
parent fee2f5daa2
commit ac5b2cf31f
9 changed files with 125 additions and 16 deletions
+2
View File
@@ -124,6 +124,7 @@ const schema = z.object({
subtitlesEnabled: z.boolean().optional(),
/** @deprecated */
mutedThreads: z.array(z.string()),
optOutOfUtm: z.boolean().optional(),
})
export type Schema = z.infer<typeof schema>
@@ -169,6 +170,7 @@ export const defaults: Schema = {
kawaii: false,
hasCheckedForStarterPack: false,
subtitlesEnabled: true,
optOutOfUtm: false,
}
export function tryParse(rawData: string): Schema | undefined {
+4 -1
View File
@@ -9,6 +9,7 @@ import {Provider as InAppBrowserProvider} from './in-app-browser'
import {Provider as KawaiiProvider} from './kawaii'
import {Provider as LanguagesProvider} from './languages'
import {Provider as LargeAltBadgeProvider} from './large-alt-badge'
import {Provider as OutOutOfUtmProvider} from './opt-out-of-utm'
import {Provider as SubtitlesProvider} from './subtitles'
import {Provider as UsedStarterPacksProvider} from './used-starter-packs'
@@ -39,7 +40,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
<AutoplayProvider>
<UsedStarterPacksProvider>
<SubtitlesProvider>
<KawaiiProvider>{children}</KawaiiProvider>
<OutOutOfUtmProvider>
<KawaiiProvider>{children}</KawaiiProvider>
</OutOutOfUtmProvider>
</SubtitlesProvider>
</UsedStarterPacksProvider>
</AutoplayProvider>
+42
View File
@@ -0,0 +1,42 @@
import React from 'react'
import * as persisted from '#/state/persisted'
type StateContext = boolean
type SetContext = (v: boolean) => void
const stateContext = React.createContext<StateContext>(
Boolean(persisted.defaults.optOutOfUtm),
)
const setContext = React.createContext<SetContext>((_: boolean) => {})
export function Provider({children}: {children: React.ReactNode}) {
const [state, setState] = React.useState(
Boolean(persisted.get('optOutOfUtm')),
)
const setStateWrapped = React.useCallback(
(optOutOfUtm: persisted.Schema['optOutOfUtm']) => {
setState(Boolean(optOutOfUtm))
persisted.write('optOutOfUtm', optOutOfUtm)
},
[setState],
)
React.useEffect(() => {
return persisted.onUpdate('optOutOfUtm', nextOptOutOfUtm => {
setState(Boolean(nextOptOutOfUtm))
})
}, [setStateWrapped])
return (
<stateContext.Provider value={state}>
<setContext.Provider value={setStateWrapped}>
{children}
</setContext.Provider>
</stateContext.Provider>
)
}
export const useOptOutOfUtm = () => React.useContext(stateContext)
export const useSetOptOutOfUtm = () => React.useContext(setContext)