browser_init_params.cc 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2022 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 "chromeos/startup/browser_init_params.h"
  5. #include <string>
  6. #include "chromeos/startup/startup.h"
  7. #include "third_party/abseil-cpp/absl/types/optional.h"
  8. namespace chromeos {
  9. namespace {
  10. // Reads and parses the startup data to BrowserInitParams.
  11. // If data is missing, or failed to parse, returns a null StructPtr.
  12. crosapi::mojom::BrowserInitParamsPtr ReadStartupBrowserInitParams() {
  13. absl::optional<std::string> content = ReadStartupData();
  14. if (!content)
  15. return {};
  16. crosapi::mojom::BrowserInitParamsPtr result;
  17. if (!crosapi::mojom::BrowserInitParams::Deserialize(
  18. content->data(), content->size(), &result)) {
  19. LOG(ERROR) << "Failed to parse startup data";
  20. return {};
  21. }
  22. return result;
  23. }
  24. } // namespace
  25. BrowserInitParams::BrowserInitParams()
  26. : init_params_(disable_crosapi_for_testing_
  27. ? crosapi::mojom::BrowserInitParams::New()
  28. : ReadStartupBrowserInitParams()) {
  29. if (!init_params_) {
  30. LOG(WARNING) << "BrowserInitParams is not set. "
  31. << "This message should not appear except for testing. "
  32. << "For testing, consider setting "
  33. << "BrowserInitParams::disable_crosapi_for_testing_ "
  34. << "to true if crosapi is not required.";
  35. init_params_ = crosapi::mojom::BrowserInitParams::New();
  36. }
  37. }
  38. // static
  39. const crosapi::mojom::BrowserInitParams* BrowserInitParams::GetForTests() {
  40. return Get();
  41. }
  42. // static
  43. const crosapi::mojom::BrowserInitParams* BrowserInitParams::Get() {
  44. return GetInstance()->init_params_.get();
  45. }
  46. // static
  47. void BrowserInitParams::SetInitParamsForTests(
  48. crosapi::mojom::BrowserInitParamsPtr init_params) {
  49. GetInstance()->init_params_ = std::move(init_params);
  50. }
  51. // static
  52. base::ScopedFD BrowserInitParams::CreateStartupData() {
  53. DCHECK(GetInstance()->init_params_);
  54. return chromeos::CreateMemFDFromBrowserInitParams(
  55. GetInstance()->init_params_);
  56. }
  57. // static
  58. BrowserInitParams* BrowserInitParams::GetInstance() {
  59. static base::NoDestructor<BrowserInitParams> browser_init_params;
  60. return browser_init_params.get();
  61. }
  62. // static
  63. bool BrowserInitParams::disable_crosapi_for_testing_ = false;
  64. } // namespace chromeos