get_per_context_data.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. // Copyright 2017 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. #ifndef EXTENSIONS_RENDERER_BINDINGS_GET_PER_CONTEXT_DATA_H_
  5. #define EXTENSIONS_RENDERER_BINDINGS_GET_PER_CONTEXT_DATA_H_
  6. #include "gin/per_context_data.h"
  7. #include "v8/include/v8.h"
  8. namespace extensions {
  9. enum CreatePerContextData { kCreateIfMissing, kDontCreateIfMissing };
  10. template <typename PerContextData, typename... ConstructorArgs>
  11. PerContextData* GetPerContextData(v8::Local<v8::Context> context,
  12. CreatePerContextData should_create,
  13. ConstructorArgs... constructor_args) {
  14. gin::PerContextData* per_context_data = gin::PerContextData::From(context);
  15. if (!per_context_data)
  16. return nullptr;
  17. auto* data = static_cast<PerContextData*>(
  18. per_context_data->GetUserData(PerContextData::kPerContextDataKey));
  19. if (!data && should_create == kCreateIfMissing) {
  20. auto created_data = std::make_unique<PerContextData>(constructor_args...);
  21. data = created_data.get();
  22. per_context_data->SetUserData(PerContextData::kPerContextDataKey,
  23. std::move(created_data));
  24. }
  25. return data;
  26. }
  27. } // namespace extensions
  28. #endif // EXTENSIONS_RENDERER_BINDINGS_GET_PER_CONTEXT_DATA_H_