Skip to main content

src/plume@cross_origin_opener_policy.erl

-module(plume@cross_origin_opener_policy).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/plume/cross_origin_opener_policy.gleam").
-export([to_string/1]).
-export_type([cross_origin_opener_policy/0]).

-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.

?MODULEDOC(
    " Cross-Origin Opener Policy (COOP)\n"
    "\n"
    " This response header controls whether a top-level document shares a\n"
    " browsing context group with cross-origin documents that open it or that\n"
    " it opens. Required alongside `Cross-Origin-Embedder-Policy` to enable\n"
    " cross-origin isolation.\n"
    "\n"
    " See the [MDN docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cross-Origin-Opener-Policy).\n"
).

-type cross_origin_opener_policy() :: unsafe_none |
    same_origin |
    same_origin_allow_popups |
    no_opener_allow_popups.

-file("src/plume/cross_origin_opener_policy.gleam", 29).
?DOC(" Encode as the `Cross-Origin-Opener-Policy` header value.\n").
-spec to_string(cross_origin_opener_policy()) -> binary().
to_string(Value) ->
    case Value of
        unsafe_none ->
            <<"unsafe-none"/utf8>>;

        same_origin ->
            <<"same-origin"/utf8>>;

        same_origin_allow_popups ->
            <<"same-origin-allow-popups"/utf8>>;

        no_opener_allow_popups ->
            <<"noopener-allow-popups"/utf8>>
    end.