extensions_unittests_main.cc 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // Copyright 2014 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 <memory>
  5. #include "base/base_paths.h"
  6. #include "base/bind.h"
  7. #include "base/path_service.h"
  8. #include "base/test/launcher/unit_test_launcher.h"
  9. #include "base/test/test_io_thread.h"
  10. #include "build/buildflag.h"
  11. #include "content/public/common/content_client.h"
  12. #include "content/public/test/content_test_suite_base.h"
  13. #include "content/public/test/unittest_test_suite.h"
  14. #include "extensions/common/constants.h"
  15. #include "extensions/common/extension_paths.h"
  16. #include "extensions/test/test_extensions_client.h"
  17. #include "ui/base/resource/resource_bundle.h"
  18. #include "ui/gl/test/gl_surface_test_support.h"
  19. #include "url/url_util.h"
  20. namespace {
  21. // Content client that exists only to register chrome-extension:// scheme with
  22. // the url module.
  23. // TODO(jamescook): Should this be merged with ShellContentClient? Should this
  24. // be a persistent object available to tests?
  25. class ExtensionsContentClient : public content::ContentClient {
  26. public:
  27. ExtensionsContentClient() = default;
  28. ExtensionsContentClient(const ExtensionsContentClient&) = delete;
  29. ExtensionsContentClient& operator=(const ExtensionsContentClient&) = delete;
  30. ~ExtensionsContentClient() override = default;
  31. // content::ContentClient overrides:
  32. void AddAdditionalSchemes(Schemes* schemes) override {
  33. schemes->standard_schemes.push_back(extensions::kExtensionScheme);
  34. schemes->savable_schemes.push_back(extensions::kExtensionScheme);
  35. }
  36. };
  37. // The test suite for extensions_unittests.
  38. class ExtensionsTestSuite : public content::ContentTestSuiteBase {
  39. public:
  40. ExtensionsTestSuite(int argc, char** argv);
  41. ExtensionsTestSuite(const ExtensionsTestSuite&) = delete;
  42. ExtensionsTestSuite& operator=(const ExtensionsTestSuite&) = delete;
  43. ~ExtensionsTestSuite() override;
  44. private:
  45. // base::TestSuite:
  46. void Initialize() override;
  47. void Shutdown() override;
  48. std::unique_ptr<extensions::TestExtensionsClient> client_;
  49. };
  50. ExtensionsTestSuite::ExtensionsTestSuite(int argc, char** argv)
  51. : content::ContentTestSuiteBase(argc, argv) {}
  52. ExtensionsTestSuite::~ExtensionsTestSuite() {}
  53. void ExtensionsTestSuite::Initialize() {
  54. content::ContentTestSuiteBase::Initialize();
  55. gl::GLSurfaceTestSupport::InitializeOneOff();
  56. // Register the chrome-extension:// scheme via this circuitous path.
  57. {
  58. ExtensionsContentClient content_client;
  59. RegisterContentSchemes(&content_client);
  60. }
  61. RegisterInProcessThreads();
  62. extensions::RegisterPathProvider();
  63. base::FilePath extensions_shell_and_test_pak_path;
  64. base::PathService::Get(base::DIR_ASSETS, &extensions_shell_and_test_pak_path);
  65. ui::ResourceBundle::InitSharedInstanceWithPakPath(
  66. extensions_shell_and_test_pak_path.AppendASCII(
  67. "extensions_shell_and_test.pak"));
  68. client_ = std::make_unique<extensions::TestExtensionsClient>();
  69. extensions::ExtensionsClient::Set(client_.get());
  70. }
  71. void ExtensionsTestSuite::Shutdown() {
  72. extensions::ExtensionsClient::Set(NULL);
  73. client_.reset();
  74. ui::ResourceBundle::CleanupSharedInstance();
  75. content::ContentTestSuiteBase::Shutdown();
  76. }
  77. } // namespace
  78. int main(int argc, char** argv) {
  79. content::UnitTestTestSuite test_suite(
  80. new ExtensionsTestSuite(argc, argv),
  81. base::BindRepeating(
  82. content::UnitTestTestSuite::CreateTestContentClients));
  83. return base::LaunchUnitTests(argc, argv,
  84. base::BindOnce(&content::UnitTestTestSuite::Run,
  85. base::Unretained(&test_suite)));
  86. }