guest_view_container.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright (c) 2015 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #include "shell/renderer/guest_view_container.h"
  5. #include <map>
  6. #include <utility>
  7. #include "base/bind.h"
  8. #include "base/lazy_instance.h"
  9. #include "base/threading/thread_task_runner_handle.h"
  10. #include "ui/gfx/geometry/size.h"
  11. namespace electron {
  12. namespace {
  13. using GuestViewContainerMap = std::map<int, GuestViewContainer*>;
  14. static base::LazyInstance<GuestViewContainerMap>::DestructorAtExit
  15. g_guest_view_container_map = LAZY_INSTANCE_INITIALIZER;
  16. } // namespace
  17. GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame)
  18. : weak_ptr_factory_(this) {}
  19. GuestViewContainer::~GuestViewContainer() {
  20. if (element_instance_id_ > 0)
  21. g_guest_view_container_map.Get().erase(element_instance_id_);
  22. }
  23. // static
  24. GuestViewContainer* GuestViewContainer::FromID(int element_instance_id) {
  25. GuestViewContainerMap* guest_view_containers =
  26. g_guest_view_container_map.Pointer();
  27. auto it = guest_view_containers->find(element_instance_id);
  28. return it == guest_view_containers->end() ? nullptr : it->second;
  29. }
  30. void GuestViewContainer::RegisterElementResizeCallback(
  31. const ResizeCallback& callback) {
  32. element_resize_callback_ = callback;
  33. }
  34. void GuestViewContainer::SetElementInstanceID(int element_instance_id) {
  35. element_instance_id_ = element_instance_id;
  36. g_guest_view_container_map.Get().insert(
  37. std::make_pair(element_instance_id, this));
  38. }
  39. void GuestViewContainer::DidResizeElement(const gfx::Size& new_size) {
  40. if (element_resize_callback_.is_null())
  41. return;
  42. base::ThreadTaskRunnerHandle::Get()->PostTask(
  43. FROM_HERE, base::BindOnce(element_resize_callback_, new_size));
  44. }
  45. base::WeakPtr<content::BrowserPluginDelegate> GuestViewContainer::GetWeakPtr() {
  46. return weak_ptr_factory_.GetWeakPtr();
  47. }
  48. } // namespace electron