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 "extensions/renderer/guest_view/extensions_guest_view_container.h" | 5 #include "extensions/renderer/guest_view/extensions_guest_view_container.h" |
6 | 6 |
7 #include "content/public/renderer/render_frame.h" | 7 #include "content/public/renderer/render_frame.h" |
8 #include "content/public/renderer/render_view.h" | 8 #include "content/public/renderer/render_view.h" |
9 #include "extensions/common/extension_messages.h" | 9 #include "extensions/common/extension_messages.h" |
10 #include "extensions/common/guest_view/guest_view_constants.h" | 10 #include "extensions/common/guest_view/guest_view_constants.h" |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 blink::WebScopedMicrotaskSuppression suppression; | 140 blink::WebScopedMicrotaskSuppression suppression; |
141 | 141 |
142 // Call the DetachGuest's callback. | 142 // Call the DetachGuest's callback. |
143 callback->Call(context->Global(), 0 /* argc */, nullptr); | 143 callback->Call(context->Global(), 0 /* argc */, nullptr); |
144 } | 144 } |
145 | 145 |
146 ExtensionsGuestViewContainer::ExtensionsGuestViewContainer( | 146 ExtensionsGuestViewContainer::ExtensionsGuestViewContainer( |
147 content::RenderFrame* render_frame) | 147 content::RenderFrame* render_frame) |
148 : GuestViewContainer(render_frame), | 148 : GuestViewContainer(render_frame), |
149 ready_(false), | 149 ready_(false), |
150 destruction_isolate_(nullptr) { | 150 destruction_isolate_(nullptr), |
| 151 element_resize_isolate_(nullptr) { |
151 } | 152 } |
152 | 153 |
153 ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() { | 154 ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() { |
154 if (element_instance_id() != guestview::kInstanceIDNone) { | 155 if (element_instance_id() != guestview::kInstanceIDNone) { |
155 g_guest_view_container_map.Get().erase(element_instance_id()); | 156 g_guest_view_container_map.Get().erase(element_instance_id()); |
156 } | 157 } |
157 | 158 |
158 // Call the destruction callback, if one is registered. | 159 // Call the destruction callback, if one is registered. |
159 if (destruction_callback_.IsEmpty()) | 160 if (destruction_callback_.IsEmpty()) |
160 return; | 161 return; |
161 v8::HandleScope handle_scope(destruction_isolate_); | 162 v8::HandleScope handle_scope(destruction_isolate_); |
162 v8::Handle<v8::Function> callback = | 163 v8::Handle<v8::Function> callback = |
163 destruction_callback_.NewHandle(destruction_isolate_); | 164 destruction_callback_.NewHandle(destruction_isolate_); |
164 v8::Handle<v8::Context> context = callback->CreationContext(); | 165 v8::Handle<v8::Context> context = callback->CreationContext(); |
165 if (context.IsEmpty()) | 166 if (context.IsEmpty()) |
166 return; | 167 return; |
167 | 168 |
168 v8::Context::Scope context_scope(context); | 169 v8::Context::Scope context_scope(context); |
169 blink::WebScopedMicrotaskSuppression suppression; | 170 blink::WebScopedMicrotaskSuppression suppression; |
170 | 171 |
171 callback->Call(context->Global(), 0, nullptr); | 172 callback->Call(context->Global(), 0 /* argc */, nullptr); |
172 } | 173 } |
173 | 174 |
174 ExtensionsGuestViewContainer* ExtensionsGuestViewContainer::FromID( | 175 ExtensionsGuestViewContainer* ExtensionsGuestViewContainer::FromID( |
175 int element_instance_id) { | 176 int element_instance_id) { |
176 ExtensionsGuestViewContainerMap* guest_view_containers = | 177 ExtensionsGuestViewContainerMap* guest_view_containers = |
177 g_guest_view_container_map.Pointer(); | 178 g_guest_view_container_map.Pointer(); |
178 auto it = guest_view_containers->find(element_instance_id); | 179 auto it = guest_view_containers->find(element_instance_id); |
179 return it == guest_view_containers->end() ? nullptr : it->second; | 180 return it == guest_view_containers->end() ? nullptr : it->second; |
180 } | 181 } |
181 | 182 |
182 void ExtensionsGuestViewContainer::IssueRequest(linked_ptr<Request> request) { | 183 void ExtensionsGuestViewContainer::IssueRequest(linked_ptr<Request> request) { |
183 EnqueueRequest(request); | 184 EnqueueRequest(request); |
184 PerformPendingRequest(); | 185 PerformPendingRequest(); |
185 } | 186 } |
186 | 187 |
187 void ExtensionsGuestViewContainer::RegisterDestructionCallback( | 188 void ExtensionsGuestViewContainer::RegisterDestructionCallback( |
188 v8::Handle<v8::Function> callback, | 189 v8::Handle<v8::Function> callback, |
189 v8::Isolate* isolate) { | 190 v8::Isolate* isolate) { |
190 destruction_callback_.reset(callback); | 191 destruction_callback_.reset(callback); |
191 destruction_isolate_ = isolate; | 192 destruction_isolate_ = isolate; |
192 } | 193 } |
193 | 194 |
| 195 void ExtensionsGuestViewContainer::RegisterElementResizeCallback( |
| 196 v8::Handle<v8::Function> callback, |
| 197 v8::Isolate* isolate) { |
| 198 element_resize_callback_.reset(callback); |
| 199 element_resize_isolate_ = isolate; |
| 200 } |
| 201 |
| 202 void ExtensionsGuestViewContainer::DidResizeElement(const gfx::Size& old_size, |
| 203 const gfx::Size& new_size) { |
| 204 // TODO(paulmeyer): Call the |element_resize_callback_| callback here. |
| 205 } |
| 206 |
194 bool ExtensionsGuestViewContainer::OnMessageReceived( | 207 bool ExtensionsGuestViewContainer::OnMessageReceived( |
195 const IPC::Message& message) { | 208 const IPC::Message& message) { |
196 OnHandleCallback(message); | 209 OnHandleCallback(message); |
197 return true; | 210 return true; |
198 } | 211 } |
199 | 212 |
200 void ExtensionsGuestViewContainer::SetElementInstanceID( | 213 void ExtensionsGuestViewContainer::SetElementInstanceID( |
201 int element_instance_id) { | 214 int element_instance_id) { |
202 GuestViewContainer::SetElementInstanceID(element_instance_id); | 215 GuestViewContainer::SetElementInstanceID(element_instance_id); |
203 | 216 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 249 } |
237 | 250 |
238 void ExtensionsGuestViewContainer::HandlePendingResponseCallback( | 251 void ExtensionsGuestViewContainer::HandlePendingResponseCallback( |
239 const IPC::Message& message) { | 252 const IPC::Message& message) { |
240 CHECK(pending_response_.get()); | 253 CHECK(pending_response_.get()); |
241 linked_ptr<Request> pending_response(pending_response_.release()); | 254 linked_ptr<Request> pending_response(pending_response_.release()); |
242 pending_response->HandleResponse(message); | 255 pending_response->HandleResponse(message); |
243 } | 256 } |
244 | 257 |
245 } // namespace extensions | 258 } // namespace extensions |
OLD | NEW |