| 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 |