Make SerializedScriptValue::Create take a span<const uint8_t>

This fixes a few issues:

First, every caller of the bytes-based
SerializedScriptValue::Create(const char *, size_t) overload actually
had a span of uint8_t and needed to cast. We should just fix the type.
Along the way, migrate it to base::span which is more convenient in most
cases.

Doing so ran into the String(const LChar*) constructor; by being
implicit, that constructor actually fires on uint8_t[N] because arrays
decay to pointers and LChar is the same type as uint8_t. This means
every String|span<uint8_t> overload set is ambiguous on byte arrays. To
mitigate this, I've made that constructor explicit. Ideally it'd be
called String::FromLatin1 or something, but I've left that alone here.

Finally, this fixes the SerializedValue() test helper function to no
longer require even-length input. This, as I understand, is a remnant of
when the serializer worked on Blink strings. But now this helper is
exactly the same as SerializedScriptValue::Create except it is slightly
shorter and works with initializer lists. I've stopped short of
completely removing it because the overload set makes an initializer
list not quite work right. (The language doesn't know the type of the
values in the initializer list.)

(The original motivation of this change was
https://chromium-review.googlesource.com/c/chromium/src/+/3930754 ran
into issues with SerializedValue's DCHECK. Tugging on that revealed a
chain of issues, so I've tried to chisel through a few of them.)

Bug: none
Change-Id: Icf571cfe3ec4dce7eaf29b28fb7021e615290129
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3960433
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Reviewed-by: Alex Gough <ajgo@chromium.org>
Commit-Queue: David Benjamin <davidben@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1061850}
11 files changed
tree: 34fc4fa4712f4d1c30cf424c4deaedf91f15ca49
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. DIR_METADATA
  68. ENG_REVIEW_OWNERS
  69. LICENSE
  70. LICENSE.chromium_os
  71. OWNERS
  72. PRESUBMIT.py
  73. PRESUBMIT_test.py
  74. PRESUBMIT_test_mocks.py
  75. README.md
  76. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.