Add position_ids bounds validation to WebGPU/JS RotaryEmbedding kernels (#28214)
This PR adds position_ids bounds checking to WebGPU and JS
RotaryEmbedding implementations, completing the security fix started in
PR #27597 (commit 056bab35e7) which covered CPU and CUDA.
## Problem
The `com.microsoft::RotaryEmbedding` kernel uses position_ids as row
indices into cos_cache/sin_cache without bounds validation. While PR
#27597 fixed CPU and CUDA paths, WebGPU and JS implementations were
still missing bounds checks, which could produce silently wrong results
(WebGPU hardware clamps OOB reads).
## Changes
- **contrib_ops/webgpu/bert/rotary_embedding.cc**: Host-side validation
(ORT_MAKE_STATUS) + shader-side defense-in-depth (pass-through on OOB)
- **core/providers/webgpu/llm/rotary_embedding.cc**: Host-side
validation with format-0 awareness
- **js/web/lib/wasm/jsep/webgpu/ops/rotary-embedding.ts**: TypeScript
validation using getBigInt64Array
- **7 new C++ OOB test cases** across contrib and ONNX domains targeting
WebGPU EP
## Security
Addresses the same vulnerability as #27597 (OOB read via position_ids,
CVSS 7.5-9.1) for WebGPU/JS execution providers.
## Testing
- 7 new unit tests (3 contrib + 4 ONNX domain) with GTEST_SKIP when
WebGPU EP unavailable
- JS/TS error tests not feasible with current JSONC test format
(documented)
- Build environment lacks C++20/emsdk for full compilation verification;
validated structurally
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>