embedded_component_loader_test_helper.cc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include <stdint.h>
  5. #include <map>
  6. #include <memory>
  7. #include <string>
  8. #include <utility>
  9. #include <vector>
  10. #include "android_webview/test/webview_instrumentation_test_native_jni/EmbeddedComponentLoaderFactory_jni.h"
  11. #include "android_webview/test/webview_instrumentation_test_native_jni/EmbeddedComponentLoaderTest_jni.h"
  12. #include "base/android/jni_android.h"
  13. #include "base/android/jni_array.h"
  14. #include "base/android/jni_string.h"
  15. #include "base/containers/flat_map.h"
  16. #include "base/files/scoped_file.h"
  17. #include "base/values.h"
  18. #include "base/version.h"
  19. #include "components/component_updater/android/component_loader_policy.h"
  20. namespace component_updater {
  21. namespace {
  22. // This hash corresponds to "jebgalgnebhfojomionfpkfelancnnkf".
  23. constexpr uint8_t kAvailableSha256Hash[] = {
  24. 0x94, 0x16, 0x0b, 0x6d, 0x41, 0x75, 0xe9, 0xec, 0x8e, 0xd5, 0xfa,
  25. 0x54, 0xb0, 0xd2, 0xdd, 0xa5, 0x6e, 0x05, 0x6b, 0xe8, 0x73, 0x47,
  26. 0xf6, 0xc4, 0x11, 0x9f, 0xbc, 0xb3, 0x09, 0xb3, 0x5b, 0x40};
  27. // This hash corresponds to "abcdefjhijk".
  28. constexpr uint8_t kUnavailableComponentSha256Hash[] = {
  29. 0x6a, 0xcc, 0xdf, 0xdb, 0x7b, 0xa0, 0xe9, 0x61, 0x14, 0x94, 0x27,
  30. 0x29, 0xe0, 0x11, 0xaa, 0x24, 0xe8, 0x58, 0xe9, 0x9f, 0x78, 0x03,
  31. 0x13, 0x40, 0x95, 0x2e, 0x65, 0xc3, 0x9c, 0x68, 0xa9, 0xcc};
  32. // Check that `condition` is `true` otherwise send an error message to java that
  33. // will trigger a failure at the end of the java test with the given `error`
  34. // message.
  35. static void ExpectTrueToJava(bool condition, const std::string& error) {
  36. if (!condition) {
  37. JNIEnv* env = base::android::AttachCurrentThread();
  38. Java_EmbeddedComponentLoaderTest_fail(
  39. env, base::android::ConvertUTF8ToJavaString(env, error));
  40. }
  41. }
  42. class AvailableComponentLoaderPolicy : public ComponentLoaderPolicy {
  43. public:
  44. AvailableComponentLoaderPolicy() = default;
  45. ~AvailableComponentLoaderPolicy() override = default;
  46. void ComponentLoaded(
  47. const base::Version& version,
  48. base::flat_map<std::string, base::ScopedFD>& fd_map,
  49. std::unique_ptr<base::DictionaryValue> manifest) override {
  50. // Make sure these values match the values in the
  51. // EmbeddedComponentLoaderTest.
  52. ExpectTrueToJava(version.GetString() == "123.456.789",
  53. "version != 123.456.789");
  54. ExpectTrueToJava(fd_map.size() == 1u, "fd_map.size != 1");
  55. ExpectTrueToJava(fd_map.find("file.test") != fd_map.end(),
  56. "file.test is not found in the fd_map");
  57. Java_EmbeddedComponentLoaderTest_onComponentLoaded(
  58. base::android::AttachCurrentThread());
  59. }
  60. void ComponentLoadFailed(ComponentLoadResult /*error*/) override {
  61. ExpectTrueToJava(
  62. false, "AvailableComponentLoaderPolicy#ComponentLoadFailed is called");
  63. }
  64. void GetHash(std::vector<uint8_t>* hash) const override {
  65. hash->assign(std::begin(kAvailableSha256Hash),
  66. std::end(kAvailableSha256Hash));
  67. }
  68. std::string GetMetricsSuffix() const override { return "AvailableComponent"; }
  69. };
  70. class UnavailableComponentLoaderPolicy : public ComponentLoaderPolicy {
  71. public:
  72. UnavailableComponentLoaderPolicy() = default;
  73. ~UnavailableComponentLoaderPolicy() override = default;
  74. void ComponentLoaded(
  75. const base::Version& version,
  76. base::flat_map<std::string, base::ScopedFD>& fd_map,
  77. std::unique_ptr<base::DictionaryValue> manifest) override {
  78. ExpectTrueToJava(
  79. false, "UnavailableComponentLoaderPolicy#ComponentLoaded is called");
  80. }
  81. void ComponentLoadFailed(ComponentLoadResult /*error*/) override {
  82. Java_EmbeddedComponentLoaderTest_onComponentLoadFailed(
  83. base::android::AttachCurrentThread());
  84. }
  85. void GetHash(std::vector<uint8_t>* hash) const override {
  86. hash->assign(std::begin(kUnavailableComponentSha256Hash),
  87. std::end(kUnavailableComponentSha256Hash));
  88. }
  89. std::string GetMetricsSuffix() const override {
  90. return "UnavailableComponent";
  91. }
  92. };
  93. } // namespace
  94. static base::android::ScopedJavaLocalRef<jobjectArray>
  95. JNI_EmbeddedComponentLoaderFactory_GetComponentLoaderPolicies(JNIEnv* env) {
  96. ComponentLoaderPolicyVector loaders;
  97. loaders.push_back(std::make_unique<AvailableComponentLoaderPolicy>());
  98. loaders.push_back(std::make_unique<UnavailableComponentLoaderPolicy>());
  99. return AndroidComponentLoaderPolicy::
  100. ToJavaArrayOfAndroidComponentLoaderPolicy(env, std::move(loaders));
  101. }
  102. } // namespace component_updater