summaryrefslogtreecommitdiffstats
path: root/dom/plugins/ipc/PluginStreamChild.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/plugins/ipc/PluginStreamChild.cpp')
-rw-r--r--dom/plugins/ipc/PluginStreamChild.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/dom/plugins/ipc/PluginStreamChild.cpp b/dom/plugins/ipc/PluginStreamChild.cpp
new file mode 100644
index 000000000..7fbcd9f33
--- /dev/null
+++ b/dom/plugins/ipc/PluginStreamChild.cpp
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* 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 "PluginStreamChild.h"
+#include "mozilla/plugins/PluginInstanceChild.h"
+
+namespace mozilla {
+namespace plugins {
+
+PluginStreamChild::PluginStreamChild()
+ : mClosed(false)
+{
+ memset(&mStream, 0, sizeof(mStream));
+ mStream.ndata = static_cast<AStream*>(this);
+}
+
+bool
+PluginStreamChild::Answer__delete__(const NPReason& reason,
+ const bool& artificial)
+{
+ AssertPluginThread();
+ if (!artificial)
+ NPP_DestroyStream(reason);
+ return true;
+}
+
+int32_t
+PluginStreamChild::NPN_Write(int32_t length, void* buffer)
+{
+ AssertPluginThread();
+
+ int32_t written = 0;
+ CallNPN_Write(nsCString(static_cast<char*>(buffer), length),
+ &written);
+ if (written < 0)
+ PPluginStreamChild::Call__delete__(this, NPERR_GENERIC_ERROR, true);
+ // careful after here! |this| just got deleted
+
+ return written;
+}
+
+void
+PluginStreamChild::NPP_DestroyStream(NPError reason)
+{
+ AssertPluginThread();
+
+ if (mClosed)
+ return;
+
+ mClosed = true;
+ Instance()->mPluginIface->destroystream(
+ &Instance()->mData, &mStream, reason);
+}
+
+PluginInstanceChild*
+PluginStreamChild::Instance()
+{
+ return static_cast<PluginInstanceChild*>(Manager());
+}
+
+} // namespace plugins
+} // namespace mozilla