[workspace] Make UISourceCode a SafeContentProvider

This CL implements 'requestContentData' for UISourceCode and also
changes the internal implementation to use the safer ContentData instead
of a DeferredContent.

The CL has to add some helper methods. In particular the
'checkContentUpdated' method checks whether content changed. To this
end it decodes any base64 encoded content into binary string. This
is somewhat ok as long as this unsafely decoded content is only used
for comparison but not actually show it to the user or store it.

The CL also updates the UISourceCode unit tests. It used 'setContent'
with non-base64 content but set the 'isBase64' flag. With the new
implementation this causes issues for several reasons: 1) The
test doesn't set up a proper mime type so the ContentData assumes
it's binary data that can't be decoded. So attempting to access the
ContentData as text throws an error. 2) The strings used in the
test are not actually valid base64 so decoding would fail in any
case.

R=kimanh@chromium.org, leese@chromium.org

Bug: 342529015
Change-Id: Ie71d30d2e4fbaeb0e4bd3e64ea06a73123d1ba13
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5570126
Reviewed-by: Philip Pfaffe <pfaffe@chromium.org>
Commit-Queue: Simon Zünd <szuend@chromium.org>
2 files changed
tree: db4c5cb0a0909a1636f4c8909bee6b99e2e14cf7
  1. .vscode/
  2. build_overrides/
  3. config/
  4. docs/
  5. extension-api/
  6. extensions/
  7. front_end/
  8. inspector_overlay/
  9. node_modules/
  10. scripts/
  11. test/
  12. third_party/
  13. v8/
  14. .clang-format
  15. .editorconfig
  16. .eslintignore
  17. .eslintrc.js
  18. .git-blame-ignore-revs
  19. .gitattributes
  20. .gitignore
  21. .gitmodules
  22. .gn
  23. .mailmap
  24. .npmignore
  25. .npmrc
  26. .style.yapf
  27. .stylelintignore
  28. .stylelintrc.json
  29. AUTHORS
  30. BUILD.gn
  31. codereview.settings
  32. DEPS
  33. LICENSE
  34. OWNERS
  35. package-lock.json
  36. package.json
  37. PRESUBMIT.py
  38. README.md
  39. tsconfig.json
  40. WATCHLISTS
README.md

Chrome DevTools frontend

npm package

The client-side of the Chrome DevTools, including all TypeScript & CSS to run the DevTools webapp.

Source code and documentation

The frontend is available on chromium.googlesource.com. Check out the project documentation for instructions to set up, use, and maintain a DevTools front-end checkout, as well as design guidelines, and architectural documentation.

Additional references

Source mirrors

DevTools frontend repository is mirrored on GitHub.

DevTools frontend is also available on NPM as the chrome-devtools-frontend package. It's not currently available via CJS or ES modules, so consuming this package in other tools may require some effort.

The version number of the npm package (e.g. 1.0.373466) refers to the Chromium commit position of latest frontend git commit. It's incremented with every Chromium commit, however the package is updated roughly daily.

Getting in touch