Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/guest_view/renderer/guest_view_container.h" | 5 #include "components/guest_view/renderer/guest_view_container.h" |
| 6 | 6 |
| 7 #include "components/guest_view/common/guest_view_constants.h" | 7 #include "components/guest_view/common/guest_view_constants.h" |
| 8 #include "components/guest_view/common/guest_view_messages.h" | 8 #include "components/guest_view/common/guest_view_messages.h" |
| 9 #include "components/guest_view/renderer/guest_view_request.h" | 9 #include "components/guest_view/renderer/guest_view_request.h" |
| 10 #include "content/public/renderer/render_frame.h" | 10 #include "content/public/renderer/render_frame.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 : content::RenderFrameObserver(render_frame), | 42 : content::RenderFrameObserver(render_frame), |
| 43 container_(container) {} | 43 container_(container) {} |
| 44 | 44 |
| 45 void GuestViewContainer::RenderFrameLifetimeObserver::OnDestruct() { | 45 void GuestViewContainer::RenderFrameLifetimeObserver::OnDestruct() { |
| 46 container_->RenderFrameDestroyed(); | 46 container_->RenderFrameDestroyed(); |
| 47 } | 47 } |
| 48 | 48 |
| 49 GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame) | 49 GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame) |
| 50 : element_instance_id_(guest_view::kInstanceIDNone), | 50 : element_instance_id_(guest_view::kInstanceIDNone), |
| 51 render_frame_(render_frame), | 51 render_frame_(render_frame), |
| 52 ready_(false) { | 52 ready_(false), |
| 53 in_destruction_(false) { | |
| 53 render_frame_lifetime_observer_.reset( | 54 render_frame_lifetime_observer_.reset( |
| 54 new RenderFrameLifetimeObserver(this, render_frame_)); | 55 new RenderFrameLifetimeObserver(this, render_frame_)); |
| 55 } | 56 } |
| 56 | 57 |
| 57 GuestViewContainer::~GuestViewContainer() { | 58 GuestViewContainer::~GuestViewContainer() { |
| 58 if (element_instance_id() != guest_view::kInstanceIDNone) | 59 if (element_instance_id() != guest_view::kInstanceIDNone) |
|
Fady Samuel
2015/06/05 18:52:33
Move all work out of the destructor to avoid futur
lazyboy
2015/06/05 21:24:01
Done.
| |
| 59 g_guest_view_container_map.Get().erase(element_instance_id()); | 60 g_guest_view_container_map.Get().erase(element_instance_id()); |
| 60 | 61 |
| 61 if (pending_response_.get()) | 62 if (pending_response_.get()) |
| 62 pending_response_->ExecuteCallbackIfAvailable(0 /* argc */, nullptr); | 63 pending_response_->ExecuteCallbackIfAvailable(0 /* argc */, nullptr); |
| 63 | 64 |
| 64 while (pending_requests_.size() > 0) { | 65 while (pending_requests_.size() > 0) { |
| 65 linked_ptr<GuestViewRequest> pending_request = pending_requests_.front(); | 66 linked_ptr<GuestViewRequest> pending_request = pending_requests_.front(); |
| 66 pending_requests_.pop_front(); | 67 pending_requests_.pop_front(); |
| 67 // Call the JavaScript callbacks with no arguments which implies an error. | 68 // Call the JavaScript callbacks with no arguments which implies an error. |
| 68 pending_request->ExecuteCallbackIfAvailable(0 /* argc */, nullptr); | 69 pending_request->ExecuteCallbackIfAvailable(0 /* argc */, nullptr); |
| 69 } | 70 } |
| 70 } | 71 } |
| 71 | 72 |
| 72 // static. | 73 // static. |
| 73 GuestViewContainer* GuestViewContainer::FromID(int element_instance_id) { | 74 GuestViewContainer* GuestViewContainer::FromID(int element_instance_id) { |
| 74 GuestViewContainerMap* guest_view_containers = | 75 GuestViewContainerMap* guest_view_containers = |
| 75 g_guest_view_container_map.Pointer(); | 76 g_guest_view_container_map.Pointer(); |
| 76 auto it = guest_view_containers->find(element_instance_id); | 77 auto it = guest_view_containers->find(element_instance_id); |
| 77 return it == guest_view_containers->end() ? nullptr : it->second; | 78 return it == guest_view_containers->end() ? nullptr : it->second; |
| 78 } | 79 } |
| 79 | 80 |
| 81 void GuestViewContainer::Destroy() { | |
| 82 if (in_destruction_) | |
| 83 return; | |
| 84 | |
| 85 in_destruction_ = true; | |
| 86 OnDestroy(); | |
|
Fady Samuel
2015/06/05 18:52:33
Add a comment here that this gives the derived cla
lazyboy
2015/06/05 21:24:01
Done.
| |
| 87 | |
| 88 delete this; | |
| 89 } | |
| 90 | |
| 80 void GuestViewContainer::RenderFrameDestroyed() { | 91 void GuestViewContainer::RenderFrameDestroyed() { |
| 81 OnRenderFrameDestroyed(); | 92 OnRenderFrameDestroyed(); |
| 82 render_frame_ = nullptr; | 93 render_frame_ = nullptr; |
|
Fady Samuel
2015/06/05 18:52:32
Call Destroy() here too?
lazyboy
2015/06/05 21:24:01
Done.
| |
| 83 } | 94 } |
| 84 | 95 |
| 85 void GuestViewContainer::IssueRequest(linked_ptr<GuestViewRequest> request) { | 96 void GuestViewContainer::IssueRequest(linked_ptr<GuestViewRequest> request) { |
| 86 EnqueueRequest(request); | 97 EnqueueRequest(request); |
| 87 PerformPendingRequest(); | 98 PerformPendingRequest(); |
| 88 } | 99 } |
| 89 | 100 |
| 90 void GuestViewContainer::EnqueueRequest(linked_ptr<GuestViewRequest> request) { | 101 void GuestViewContainer::EnqueueRequest(linked_ptr<GuestViewRequest> request) { |
| 91 pending_requests_.push_back(request); | 102 pending_requests_.push_back(request); |
| 92 } | 103 } |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 | 150 |
| 140 void GuestViewContainer::SetElementInstanceID(int element_instance_id) { | 151 void GuestViewContainer::SetElementInstanceID(int element_instance_id) { |
| 141 DCHECK_EQ(element_instance_id_, guest_view::kInstanceIDNone); | 152 DCHECK_EQ(element_instance_id_, guest_view::kInstanceIDNone); |
| 142 element_instance_id_ = element_instance_id; | 153 element_instance_id_ = element_instance_id; |
| 143 | 154 |
| 144 DCHECK(!g_guest_view_container_map.Get().count(element_instance_id)); | 155 DCHECK(!g_guest_view_container_map.Get().count(element_instance_id)); |
| 145 g_guest_view_container_map.Get().insert( | 156 g_guest_view_container_map.Get().insert( |
| 146 std::make_pair(element_instance_id, this)); | 157 std::make_pair(element_instance_id, this)); |
| 147 } | 158 } |
| 148 | 159 |
| 160 void GuestViewContainer::WillDestroy() { | |
|
Fady Samuel
2015/06/05 18:52:33
Call this maybe ElementDestroyed
lazyboy
2015/06/05 21:24:01
Done.
| |
| 161 OnDestroy(); | |
|
Fady Samuel
2015/06/05 18:52:32
Destroy()?
lazyboy
2015/06/05 21:24:01
Done.
| |
| 162 } | |
| 163 | |
| 149 } // namespace guest_view | 164 } // namespace guest_view |
| OLD | NEW |