Skip to content
  • Lina Cambridge's avatar
    Pass redirect source and target flags to history tracking delegates. · 15b873fe
    Lina Cambridge authored
    There's some confusion in `GeckoEngineSession` about redirect flags.
    The `VISIT_REDIRECT_SOURCE` and `VISIT_REDIRECT_SOURCE_PERMANENT` flags
    that we get from GeckoView's history delegate are for the redirect
    _source_, not the visit type. They indicate if the URL passed to
    `onVisited` is redirecting _to_ another URL, most likely because the
    server returned an HTTP 3xy status code with a `Location` header.
    Rust Places decides whether to mark the URL as hidden based on
    these flags.
    
    `VISIT_REDIRECT_{PERMANENT, TEMPORARY}`, however, indicate if the
    URL passed to `onVisited` is the _target_ of a redirect (in other
    words, the page that's _in_ the `Location` header). These get
    translated into `VisitType` flags, which Rust Places stores as the
    visit transition type. These two flags don't affect whether a URL
    is hidden.
    
    Note that, in a redirect chain, the middle links are both sources and
    targets. For example, in "mozilla.org" -> "www.mozilla.org" ->
    "www.mozilla.org/en-US", "www.mozilla.org" is both a redirect target
    (since "mozilla.org" redirected to it), and a source (it redirected
    to "www.mozilla.org/en-US").
    
    See mozilla-mobile/fenix#3526.
    15b873fe