summaryrefslogtreecommitdiffstats
path: root/dom/plugins/ipc/PluginWidgetChild.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/plugins/ipc/PluginWidgetChild.cpp')
-rw-r--r--dom/plugins/ipc/PluginWidgetChild.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/dom/plugins/ipc/PluginWidgetChild.cpp b/dom/plugins/ipc/PluginWidgetChild.cpp
new file mode 100644
index 000000000..263082981
--- /dev/null
+++ b/dom/plugins/ipc/PluginWidgetChild.cpp
@@ -0,0 +1,71 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/plugins/PluginWidgetChild.h"
+
+#include "mozilla/dom/TabChild.h"
+#include "mozilla/plugins/PluginWidgetParent.h"
+#include "PluginWidgetProxy.h"
+
+#include "mozilla/Unused.h"
+#include "mozilla/DebugOnly.h"
+#include "nsDebug.h"
+
+#if defined(XP_WIN)
+#include "mozilla/plugins/PluginInstanceParent.h"
+#endif
+
+#define PWLOG(...)
+//#define PWLOG(...) printf_stderr(__VA_ARGS__)
+
+namespace mozilla {
+namespace plugins {
+
+PluginWidgetChild::PluginWidgetChild() :
+ mWidget(nullptr)
+{
+ PWLOG("PluginWidgetChild::PluginWidgetChild()\n");
+ MOZ_COUNT_CTOR(PluginWidgetChild);
+}
+
+PluginWidgetChild::~PluginWidgetChild()
+{
+ PWLOG("PluginWidgetChild::~PluginWidgetChild()\n");
+ MOZ_COUNT_DTOR(PluginWidgetChild);
+}
+
+// Called by the proxy widget when it is destroyed by layout. Only gets
+// called once.
+void
+PluginWidgetChild::ProxyShutdown()
+{
+ PWLOG("PluginWidgetChild::ProxyShutdown()\n");
+ if (mWidget) {
+ mWidget = nullptr;
+ auto tab = static_cast<mozilla::dom::TabChild*>(Manager());
+ if (!tab->IsDestroyed()) {
+ Unused << Send__delete__(this);
+ }
+ }
+}
+
+void
+PluginWidgetChild::KillWidget()
+{
+ PWLOG("PluginWidgetChild::KillWidget()\n");
+ if (mWidget) {
+ mWidget->ChannelDestroyed();
+ }
+ mWidget = nullptr;
+}
+
+void
+PluginWidgetChild::ActorDestroy(ActorDestroyReason aWhy)
+{
+ PWLOG("PluginWidgetChild::ActorDestroy(%d)\n", aWhy);
+ KillWidget();
+}
+
+} // namespace plugins
+} // namespace mozilla