Index: extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
diff --git a/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc b/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
index 5a240f816a61d4918b74a06ce2caef81ee6d2b2b..738f00c799b50a95f5ee75f8dda9b0e1155834b9 100644 |
--- a/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
+++ b/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
@@ -47,6 +47,9 @@ GuestViewInternalCustomBindings::GuestViewInternalCustomBindings( |
RouteFunction("DetachGuest", |
base::Bind(&GuestViewInternalCustomBindings::DetachGuest, |
base::Unretained(this))); |
+ RouteFunction("DestroyContainer", |
+ base::Bind(&GuestViewInternalCustomBindings::DestroyContainer, |
+ base::Unretained(this))); |
RouteFunction("GetContentWindow", |
base::Bind(&GuestViewInternalCustomBindings::GetContentWindow, |
base::Unretained(this))); |
@@ -174,6 +177,30 @@ void GuestViewInternalCustomBindings::DetachGuest( |
args.GetReturnValue().Set(v8::Boolean::New(context()->isolate(), true)); |
} |
+void GuestViewInternalCustomBindings::DestroyContainer( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ args.GetReturnValue().SetNull(); |
+ |
+ if (args.Length() != 1) |
+ return; |
+ |
+ // Element Instance ID. |
+ if (!args[0]->IsInt32()) |
+ return; |
+ |
+ int element_instance_id = args[0]->Int32Value(); |
+ auto* guest_view_container = |
+ guest_view::GuestViewContainer::FromID(element_instance_id); |
+ if (!guest_view_container) |
+ return; |
+ |
+ // Note: |guest_view_container| is deleted. |
+ // GuestViewContainer::DidDestroyElement() currently also destroys |
+ // a GuestViewContainer. That won't be necessary once GuestViewContainer |
+ // always runs w/o plugin. |
+ guest_view_container->Destroy(); |
+} |
+ |
void GuestViewInternalCustomBindings::GetContentWindow( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
// Default to returning null. |