gecko/dom/plugins/ipc/PluginWidgetChild.cpp

95 lines
2.2 KiB
C++

/* 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/plugins/PluginWidgetParent.h"
#include "PluginWidgetProxy.h"
#include "mozilla/DebugOnly.h"
#include "nsDebug.h"
#if defined(XP_WIN)
#include "mozilla/plugins/PluginInstanceParent.h"
using mozilla::plugins::PluginInstanceParent;
#endif
#define PWLOG(...)
// #define PWLOG(...) printf_stderr(__VA_ARGS__)
namespace mozilla {
namespace plugins {
PluginWidgetChild::PluginWidgetChild() :
mWidget(nullptr)
{
MOZ_COUNT_CTOR(PluginWidgetChild);
}
PluginWidgetChild::~PluginWidgetChild()
{
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) {
SendDestroy();
mWidget = nullptr;
}
}
void
PluginWidgetChild::KillWidget()
{
PWLOG("PluginWidgetChild::KillWidget()\n");
if (mWidget) {
mWidget->ChannelDestroyed();
}
mWidget = nullptr;
}
void
PluginWidgetChild::ActorDestroy(ActorDestroyReason aWhy)
{
PWLOG("PluginWidgetChild::ActorDestroy()\n");
KillWidget();
}
bool
PluginWidgetChild::RecvParentShutdown(const uint16_t& aType)
{
PWLOG("PluginWidgetChild::RecvParentShutdown()\n");
KillWidget();
if (aType == PluginWidgetParent::CONTENT) {
Send__delete__(this);
}
return true;
}
bool
PluginWidgetChild::RecvUpdateWindow(const uintptr_t& aChildId)
{
#if defined(XP_WIN)
NS_ASSERTION(aChildId, "Expected child hwnd value for remote plugin instance.");
PluginInstanceParent* parentInstance =
PluginInstanceParent::LookupPluginInstanceByID(aChildId);
NS_ASSERTION(parentInstance, "Expected matching plugin instance");
if (parentInstance) {
// sync! update call to the plugin instance that forces the
// plugin to paint its child window.
parentInstance->CallUpdateWindow();
}
return true;
#else
NS_NOTREACHED("PluginWidgetChild::RecvUpdateWindow calls unexpected on this platform.");
return false;
#endif
}
} // namespace plugins
} // namespace mozilla