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 "atom/renderer/guest_view_container.h"
  5. #include <map>
  6. #include "base/bind.h"
  7. #include "base/lazy_instance.h"
  8. #include "base/threading/thread_task_runner_handle.h"
  9. #include "ui/gfx/geometry/size.h"
  10. namespace atom {
  11. namespace {
  12. using GuestViewContainerMap = std::map<int, GuestViewContainer*>;
  13. static base::LazyInstance<GuestViewContainerMap>::DestructorAtExit
  14. g_guest_view_container_map = LAZY_INSTANCE_INITIALIZER;
  15. } // namespace
  16. GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame)
  17. : weak_ptr_factory_(this) {}
  18. GuestViewContainer::~GuestViewContainer() {
  19. if (element_instance_id_ > 0)
  20. g_guest_view_container_map.Get().erase(element_instance_id_);
  21. }
  22. // static
  23. GuestViewContainer* GuestViewContainer::FromID(int element_instance_id) {
  24. GuestViewContainerMap* guest_view_containers =
  25. g_guest_view_container_map.Pointer();
  26. auto it = guest_view_containers->find(element_instance_id);
  27. return it == guest_view_containers->end() ? nullptr : it->second;
  28. }
  29. void GuestViewContainer::RegisterElementResizeCallback(
  30. const ResizeCallback& callback) {
  31. element_resize_callback_ = callback;
  32. }
  33. void GuestViewContainer::SetElementInstanceID(int element_instance_id) {
  34. element_instance_id_ = element_instance_id;
  35. g_guest_view_container_map.Get().insert(
  36. std::make_pair(element_instance_id, this));
  37. }
  38. void GuestViewContainer::DidResizeElement(const gfx::Size& new_size) {
  39. if (element_resize_callback_.is_null())
  40. return;
  41. base::ThreadTaskRunnerHandle::Get()->PostTask(
  42. FROM_HERE, base::BindOnce(element_resize_callback_, new_size));
  43. }
  44. base::WeakPtr<content::BrowserPluginDelegate> GuestViewContainer::GetWeakPtr() {
  45. return weak_ptr_factory_.GetWeakPtr();
  46. }
  47. } // namespace atom