summaryrefslogtreecommitdiffstats
path: root/netwerk/base/ChannelDiverterParent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/base/ChannelDiverterParent.cpp')
-rw-r--r--netwerk/base/ChannelDiverterParent.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/netwerk/base/ChannelDiverterParent.cpp b/netwerk/base/ChannelDiverterParent.cpp
new file mode 100644
index 000000000..3b66644ab
--- /dev/null
+++ b/netwerk/base/ChannelDiverterParent.cpp
@@ -0,0 +1,75 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/net/ChannelDiverterParent.h"
+#include "mozilla/net/NeckoChannelParams.h"
+#include "mozilla/net/HttpChannelParent.h"
+#include "mozilla/net/FTPChannelParent.h"
+#include "mozilla/net/PHttpChannelParent.h"
+#include "mozilla/net/PFTPChannelParent.h"
+#include "ADivertableParentChannel.h"
+
+namespace mozilla {
+namespace net {
+
+ChannelDiverterParent::ChannelDiverterParent()
+{
+}
+
+ChannelDiverterParent::~ChannelDiverterParent()
+{
+}
+
+bool
+ChannelDiverterParent::Init(const ChannelDiverterArgs& aArgs)
+{
+ switch (aArgs.type()) {
+ case ChannelDiverterArgs::THttpChannelDiverterArgs:
+ {
+ auto httpParent = static_cast<HttpChannelParent*>(
+ aArgs.get_HttpChannelDiverterArgs().mChannelParent());
+ httpParent->SetApplyConversion(aArgs.get_HttpChannelDiverterArgs().mApplyConversion());
+
+ mDivertableChannelParent =
+ static_cast<ADivertableParentChannel*>(httpParent);
+ break;
+ }
+ case ChannelDiverterArgs::TPFTPChannelParent:
+ {
+ mDivertableChannelParent = static_cast<ADivertableParentChannel*>(
+ static_cast<FTPChannelParent*>(aArgs.get_PFTPChannelParent()));
+ break;
+ }
+ default:
+ NS_NOTREACHED("unknown ChannelDiverterArgs type");
+ return false;
+ }
+ MOZ_ASSERT(mDivertableChannelParent);
+
+ nsresult rv = mDivertableChannelParent->SuspendForDiversion();
+ if (NS_WARN_IF(NS_FAILED(rv))) {
+ return false;
+ }
+ return true;
+}
+
+void
+ChannelDiverterParent::DivertTo(nsIStreamListener* newListener)
+{
+ MOZ_ASSERT(newListener);
+ MOZ_ASSERT(mDivertableChannelParent);
+
+ mDivertableChannelParent->DivertTo(newListener);
+}
+
+void
+ChannelDiverterParent::ActorDestroy(ActorDestroyReason aWhy)
+{
+ // Implement me! Bug 1005179
+}
+
+} // namespace net
+} // namespace mozilla