mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
95 lines
2.2 KiB
C++
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
|