Objective

Migrate the rtc_base/byte_order.h API from unsafe void* pointers to webrtc::ArrayView<uint8_t> to improve type safety and bounds checking. This migration follows a multi-phase approach to ensure backward compatibility for external consumers, provide clear deprecation warnings, and eventually remove the unsafe API.

Key Files & Context

  • rtc_base/byte_order.h: The target API for conversion.
  • api/array_view.h: The replacement type for buffer spans.
  • 19 identified files with internal usages of the legacy API.

Implementation Steps

Phase 0: Documentation

  • Create g3doc/todo/byte_order_safety.md and store this migration plan there for tracking.

Phase 1: Introduce New API

  • Modify rtc_base/byte_order.h to include #include "api/array_view.h".
  • Implement ArrayView overloads for all Get/Set functions (Get8, Set8, GetBE16, etc.).
  • Ensure new implementations include RTC_DCHECK_GE(data.size(), ...) for safety.
  • Note: Do not add deprecation attributes yet.

Phase 2: Migrate Internal Usages

  • Replace all internal usages of the legacy void* API in the WebRTC codebase with the new ArrayView API.
  • This ensures that WebRTC itself does not trigger deprecation warnings/errors once the attributes are added.

Phase 3: Deprecation and External Notice

  • Add ABSL_DEPRECATE_AND_INLINE() to the legacy void* overloads in rtc_base/byte_order.h.
  • External Action (Human): Send a deprecation notice to relevant mailing lists (e.g., discuss-webrtc) informing external consumers of the new ArrayView API and the impending removal of the void* API.
  • Allow for a transition period for external projects to update their code.

Phase 4: Final Deletion

  • After the transition period, remove the deprecated void* functions and the associated deprecation attributes, leaving only the ArrayView API.

Verification & Testing

  • Compilation: Perform a full build (autoninja -C out/Default) to ensure no internal usages of deprecated functions remain.
  • Unit Tests: Run out/Default/rtc_unittests --gtest_filter=ByteOrderTest.* and verify all tests pass with the new API.
  • Presubmit: Run git cl format and git cl presubmit -u --force.