Source code

Revision control

Copy as Markdown

Other Tools

Constants
=========
Shared constants for the IP Protection feature live in
``content/ipprotection-constants.mjs`` and are imported by both the
chrome-side modules and the content-side UI components.
Error Codes
-----------
The ``ERRORS`` object collects all error string constants used across the
feature. Each value is a stable identifier that travels as a rejection
reason or a state payload through the proxy activation pipeline and into
the UI layer.
``ERRORS.GENERIC``
Catch-all fallback used when no more-specific code is available.
The UI surfaces a generic error message.
``ERRORS.NETWORK``
The device is offline at activation time. The UI renders a dedicated
network error message distinct from the generic one.
``ERRORS.TIMEOUT``
Activation exceeded the 30-second deadline. The activation is aborted
and the proxy moves to the ``ERROR`` state.
``ERRORS.PASS_UNAVAILABLE``
The server did not return a valid proxy pass during activation.
``ERRORS.SERVER_NOT_FOUND``
No proxy server is available for the default location.
``ERRORS.MISSING_PROMISE``
Internal consistency guard: the activation promise was unexpectedly
absent while the proxy was in the ``ACTIVATING`` state. Should never
occur in normal operation.
``ERRORS.MISSING_ABORT``
Internal consistency guard: the abort controller was unexpectedly
absent while stopping an in-progress activation. Should never occur
in normal operation.
Error propagation
~~~~~~~~~~~~~~~~~
Errors thrown inside ``IPPProxyManager.start()`` are caught by the activation
promise. The proxy reverts to its previous state (typically ``READY``) and the
promise resolves with ``{ started: false, error }``. The panel reads the error
code from this result to determine which message to show.
Errors that occur while the proxy is already ``ACTIVE`` (such as a pass
rotation failure) move the state machine to ``IPPProxyStates.ERROR``; in that
case the panel always surfaces them as a generic error.
``ERRORS.NETWORK`` is the only code that maps to a dedicated network error
message in the UI; all other codes surface as a generic error.
``ERRORS.MISSING_PROMISE`` and ``ERRORS.MISSING_ABORT`` are thrown directly
from ``start()`` or ``stop()`` as ``Error`` objects and bypass the activation
promise; they represent internal consistency violations and do not affect proxy
state.