--- a/configure.in
+++ b/configure.in
@@ -4936,17 +4936,17 @@ MOZ_XSLT_STANDALONE=
MOZ_XTF=1
MOZ_XUL=1
MOZ_ZIPWRITER=1
NS_PRINTING=1
NSS_DISABLE_DBM=
NECKO_WIFI=1
NECKO_COOKIES=1
NECKO_DISK_CACHE=1
-NECKO_PROTOCOLS_DEFAULT="about data file ftp http res viewsource"
+NECKO_PROTOCOLS_DEFAULT="about data device file ftp http res viewsource"
USE_ARM_KUSER=
BUILD_CTYPES=1
XPC_IDISPATCH_SUPPORT=
case "$target_os" in
darwin*|*wince*|*winmo*)
ACCESSIBILITY=
--- a/netwerk/build/nsNetCID.h
+++ b/netwerk/build/nsNetCID.h
@@ -643,16 +643,29 @@
{ /* {B6ED3030-6183-11d3-A178-0050041CAF44} */ \
0xb6ed3030, \
0x6183, \
0x11d3, \
{0xa1, 0x78, 0x00, 0x50, 0x04, 0x1c, 0xaf, 0x44} \
}
/******************************************************************************
+ * netwerk/protocol/device classes
+ */
+#define NS_DEVICEPROTOCOLHANDLER_CLASSNAME \
+ "nsDeviceProtocolHandler"
+#define NS_DEVICEPROTOCOLHANDLER_CID \
+{ /* 6b0ffe9e-d114-486b-aeb7-da62e7273ed5 */ \
+ 0x60ffe9e, \
+ 0xd114, \
+ 0x486b, \
+ {0xae, 0xb7, 0xda, 0x62, 0xe7, 0x27, 0x3e, 0xd5} \
+}
+
+/******************************************************************************
* netwerk/protocol/viewsource/ classes
*/
// service implementing nsIProtocolHandler
#define NS_VIEWSOURCEHANDLER_CID \
{ /* {0x9c7ec5d1-23f9-11d5-aea8-8fcc0793e97f} */ \
0x9c7ec5d1, \
0x23f9, \
--- a/netwerk/build/nsNetModule.cpp
+++ b/netwerk/build/nsNetModule.cpp
@@ -250,16 +250,21 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsHttpDig
#ifdef NECKO_PROTOCOL_res
// resource
#include "nsResProtocolHandler.h"
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsResProtocolHandler, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsResURL)
#endif
+#ifdef NECKO_PROTOCOL_device
+#include "nsDeviceProtocolHandler.h"
+NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceProtocolHandler)
+#endif
+
#ifdef NECKO_PROTOCOL_viewsource
#include "nsViewSourceHandler.h"
NS_GENERIC_FACTORY_CONSTRUCTOR(nsViewSourceHandler)
#endif
#ifdef NECKO_PROTOCOL_data
#include "nsDataHandler.h"
#endif
@@ -701,16 +706,19 @@ NS_DEFINE_NAMED_CID(NS_COOKIEMANAGER_CID
NS_DEFINE_NAMED_CID(NS_COOKIESERVICE_CID);
#endif
#ifdef NECKO_WIFI
NS_DEFINE_NAMED_CID(NS_WIFI_MONITOR_COMPONENT_CID);
#endif
#ifdef NECKO_PROTOCOL_data
NS_DEFINE_NAMED_CID(NS_DATAPROTOCOLHANDLER_CID);
#endif
+#ifdef NECKO_PROTOCOL_device
+NS_DEFINE_NAMED_CID(NS_DEVICEPROTOCOLHANDLER_CID);
+#endif
#ifdef NECKO_PROTOCOL_viewsource
NS_DEFINE_NAMED_CID(NS_VIEWSOURCEHANDLER_CID);
#endif
#if defined(XP_WIN)
NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID);
#elif defined(MOZ_WIDGET_COCOA)
NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID);
#elif defined(MOZ_ENABLE_LIBCONIC)
@@ -816,16 +824,19 @@ static const mozilla::Module::CIDEntry k
{ &kNS_COOKIESERVICE_CID, false, NULL, nsICookieServiceConstructor },
#endif
#ifdef NECKO_WIFI
{ &kNS_WIFI_MONITOR_COMPONENT_CID, false, NULL, nsWifiMonitorConstructor },
#endif
#ifdef NECKO_PROTOCOL_data
{ &kNS_DATAPROTOCOLHANDLER_CID, false, NULL, nsDataHandler::Create },
#endif
+#ifdef NECKO_PROTOCOL_device
+ { &kNS_DEVICEPROTOCOLHANDLER_CID, false, NULL, nsDeviceProtocolHandlerConstructor},
+#endif
#ifdef NECKO_PROTOCOL_viewsource
{ &kNS_VIEWSOURCEHANDLER_CID, false, NULL, nsViewSourceHandlerConstructor },
#endif
#if defined(XP_WIN)
{ &kNS_NETWORK_LINK_SERVICE_CID, false, NULL, nsNotifyAddrListenerConstructor },
#elif defined(MOZ_WIDGET_COCOA)
{ &kNS_NETWORK_LINK_SERVICE_CID, false, NULL, nsNetworkLinkServiceConstructor },
#elif defined(MOZ_ENABLE_LIBCONIC)
@@ -938,16 +949,19 @@ static const mozilla::Module::ContractID
{ NS_COOKIESERVICE_CONTRACTID, &kNS_COOKIESERVICE_CID },
#endif
#ifdef NECKO_WIFI
{ NS_WIFI_MONITOR_CONTRACTID, &kNS_WIFI_MONITOR_COMPONENT_CID },
#endif
#ifdef NECKO_PROTOCOL_data
{ NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "data", &kNS_DATAPROTOCOLHANDLER_CID },
#endif
+#ifdef NECKO_PROTOCOL_device
+ { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "moz-device", &kNS_DEVICEPROTOCOLHANDLER_CID },
+#endif
#ifdef NECKO_PROTOCOL_viewsource
{ NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "view-source", &kNS_VIEWSOURCEHANDLER_CID },
#endif
#if defined(XP_WIN)
{ NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID },
#elif defined(MOZ_WIDGET_COCOA)
{ NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID },
#elif defined(MOZ_ENABLE_LIBCONIC)
--- a/netwerk/necko-config.h.in
+++ b/netwerk/necko-config.h.in
@@ -40,15 +40,16 @@
#undef NECKO_DISK_CACHE
#undef NECKO_COOKIES
#undef NECKO_WIFI
#undef NECKO_PROTOCOL_about
#undef NECKO_PROTOCOL_data
+#undef NECKO_PROTOCOL_device
#undef NECKO_PROTOCOL_file
#undef NECKO_PROTOCOL_ftp
#undef NECKO_PROTOCOL_http
#undef NECKO_PROTOCOL_res
#undef NECKO_PROTOCOL_viewsource
#endif
--- a/netwerk/protocol/Makefile.in
+++ b/netwerk/protocol/Makefile.in
@@ -40,16 +40,17 @@ topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
PARALLEL_DIRS = \
about \
data \
+ device \
file \
ftp \
http \
res \
viewsource \
$(NULL)
include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/netwerk/protocol/device/Makefile.in
@@ -0,0 +1,58 @@
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is mozilla.org code.
+#
+# The Initial Developer of the Original Code is
+# Mozilla Foundation
+# Portions created by the Initial Developer are Copyright (C) 2010
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH = ../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE = deviceprotocol
+LIBRARY_NAME = nkdevice_s
+FORCE_STATIC_LIB = 1
+LIBXUL_LIBRARY = 1
+
+CPPSRCS = \
+ nsDeviceChannel.cpp \
+ nsDeviceProtocolHandler.cpp \
+ $(NULL)
+
+LOCAL_INCLUDES = -I$(srcdir)/../../base/src/ \
+ -I$(srcdir)/../file \
+ $(NULL)
+
+include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/netwerk/protocol/device/nsDeviceCaptureProvider.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Brad Lassey <blassey@mozilla.com>
+ * Kyle Huey <me@kylehuey.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms or
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef nsDeviceCaptureProvider_h_
+#define nsDeviceCaptureProvider_h_
+
+#include "nsIInputStream.h"
+
+struct nsCaptureParams {
+ PRPackedBool captureAudio;
+ PRPackedBool captureVideo;
+ PRUint32 frameRate;
+ PRUint32 frameLimit;
+ PRUint32 timeLimit;
+ PRUint32 width;
+ PRUint32 height;
+ PRUint32 bpp;
+};
+
+class nsDeviceCaptureProvider : public nsISupports
+{
+public:
+ virtual nsresult Init(nsACString& aContentType,
+ nsCaptureParams* aParams,
+ nsIInputStream** aStream) = 0;
+};
+
+#endif
new file mode 100644
--- /dev/null
+++ b/netwerk/protocol/device/nsDeviceChannel.cpp
@@ -0,0 +1,158 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Camera.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Brad Lassey <blassey@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "plstr.h"
+#include "nsComponentManagerUtils.h"
+#include "nsDeviceChannel.h"
+#include "nsDeviceCaptureProvider.h"
+
+// Copied from modules/libpr0n/decoders/icon/nsIconURI.cpp
+// takes a string like ?size=32&contentType=text/html and returns a new string
+// containing just the attribute values. i.e you could pass in this string with
+// an attribute name of "size=", this will return 32
+// Assumption: attribute pairs are separated by &
+void extractAttributeValue(const char* searchString, const char* attributeName, nsCString& result)
+{
+ result.Truncate();
+
+ if (!searchString || !attributeName)
+ return;
+
+ PRUint32 attributeNameSize = strlen(attributeName);
+ const char *startOfAttribute = PL_strcasestr(searchString, attributeName);
+ if (!startOfAttribute ||
+ !( *(startOfAttribute-1) == '?' || *(startOfAttribute-1) == '&') )
+ return;
+
+ startOfAttribute += attributeNameSize; // Skip the attributeName
+ if (!*startOfAttribute)
+ return;
+
+ const char *endOfAttribute = strchr(startOfAttribute, '&');
+ if (endOfAttribute) {
+ result.Assign(Substring(startOfAttribute, endOfAttribute));
+ } else {
+ result.Assign(startOfAttribute);
+ }
+}
+
+NS_IMPL_ISUPPORTS_INHERITED1(nsDeviceChannel,
+ nsBaseChannel,
+ nsIChannel)
+
+// nsDeviceChannel methods
+nsDeviceChannel::nsDeviceChannel()
+{
+ SetContentType(NS_LITERAL_CSTRING("image/png"));
+}
+
+nsDeviceChannel::~nsDeviceChannel()
+{
+}
+
+nsresult
+nsDeviceChannel::Init(nsIURI* aUri)
+{
+ nsBaseChannel::Init();
+ nsBaseChannel::SetURI(aUri);
+ return NS_OK;
+}
+
+nsresult
+nsDeviceChannel::OpenContentStream(PRBool aAsync,
+ nsIInputStream** aStream,
+ nsIChannel** aChannel)
+{
+ if (!aAsync)
+ return NS_ERROR_NOT_IMPLEMENTED;
+
+ nsCOMPtr<nsIURI> uri = nsBaseChannel::URI();
+ *aStream = nsnull;
+ *aChannel = nsnull;
+ NS_NAMED_LITERAL_CSTRING(width, "width=");
+ NS_NAMED_LITERAL_CSTRING(height, "height=");
+
+ nsCAutoString spec;
+ uri->GetSpec(spec);
+
+ nsCAutoString type;
+ // Because no capture providers are implemented at the moment
+ // capture will always be null and this function will always fail
+ nsRefPtr<nsDeviceCaptureProvider> capture;
+ nsCaptureParams captureParams;
+ if (kNotFound != spec.Find(NS_LITERAL_CSTRING("type=image/png"),
+ PR_TRUE,
+ 0,
+ -1)) {
+ type.AssignLiteral("image/png");
+ SetContentType(type);
+ captureParams.captureAudio = PR_FALSE;
+ captureParams.captureVideo = PR_TRUE;
+ captureParams.timeLimit = 0;
+ captureParams.frameLimit = 1;
+ nsCAutoString buffer;
+ extractAttributeValue(spec.get(), "width=", buffer);
+ nsresult err;
+ captureParams.width = buffer.ToInteger(&err);
+ if (!captureParams.width)
+ captureParams.width = 640;
+ extractAttributeValue(spec.get(), "height=", buffer);
+ captureParams.height = buffer.ToInteger(&err);
+ if (!captureParams.height)
+ captureParams.height = 480;
+ captureParams.bpp = 32;
+ } else if (kNotFound != spec.Find(NS_LITERAL_CSTRING("type=video/x-raw-yuv"),
+ PR_TRUE,
+ 0,
+ -1)) {
+ type.AssignLiteral("video/x-raw-yuv");
+ SetContentType(type);
+ captureParams.captureAudio = PR_FALSE;
+ captureParams.captureVideo = PR_TRUE;
+ captureParams.width = 640;
+ captureParams.height = 480;
+ captureParams.bpp = 32;
+ captureParams.frameLimit = 6000;
+ } else {
+ return NS_ERROR_NOT_IMPLEMENTED;
+ }
+
+ if (!capture)
+ return NS_ERROR_FAILURE;
+
+ return capture->Init(type, &captureParams, aStream);
+}
new file mode 100644
--- /dev/null
+++ b/netwerk/protocol/device/nsDeviceChannel.h
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Camera.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Brad Lassey <blassey@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef nsDeviceChannel_h_
+#define nsDeviceChannel_h_
+
+#include "nsBaseChannel.h"
+
+class nsDeviceChannel : public nsBaseChannel
+{
+public:
+ NS_DECL_ISUPPORTS_INHERITED
+
+ nsDeviceChannel();
+ ~nsDeviceChannel();
+
+ nsresult Init(nsIURI* uri);
+ nsresult OpenContentStream(PRBool aAsync,
+ nsIInputStream **aStream,
+ nsIChannel **aChannel);
+};
+#endif
new file mode 100644
--- /dev/null
+++ b/netwerk/protocol/device/nsDeviceProtocolHandler.cpp
@@ -0,0 +1,108 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Camera.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Nino D'Aversa <ninodaversa@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsDeviceProtocolHandler.h"
+#include "nsDeviceChannel.h"
+#include "nsNetCID.h"
+#include "nsAutoPtr.h"
+#include "nsCOMPtr.h"
+#include "nsSimpleURI.h"
+
+//-----------------------------------------------------------------------------
+
+NS_IMPL_THREADSAFE_ISUPPORTS1(nsDeviceProtocolHandler,
+ nsIProtocolHandler)
+
+nsresult
+nsDeviceProtocolHandler::Init(){
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDeviceProtocolHandler::GetScheme(nsACString &aResult)
+{
+ aResult.AssignLiteral("moz-device");
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDeviceProtocolHandler::GetDefaultPort(PRInt32 *aResult)
+{
+ *aResult = -1; // no port for moz_device: URLs
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDeviceProtocolHandler::GetProtocolFlags(PRUint32 *aResult)
+{
+ *aResult = URI_NORELATIVE | URI_NOAUTH | URI_DANGEROUS_TO_LOAD;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDeviceProtocolHandler::NewURI(const nsACString &spec,
+ const char *originCharset,
+ nsIURI *baseURI,
+ nsIURI **result)
+{
+ nsRefPtr<nsSimpleURI> uri = new nsSimpleURI();
+
+ nsresult rv = uri->SetSpec(spec);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ return CallQueryInterface(uri, result);
+}
+
+NS_IMETHODIMP
+nsDeviceProtocolHandler::NewChannel(nsIURI* aURI, nsIChannel **aResult)
+{
+ nsRefPtr<nsDeviceChannel> channel = new nsDeviceChannel();
+ nsresult rv = channel->Init(aURI);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ return CallQueryInterface(channel, aResult);
+}
+
+NS_IMETHODIMP
+nsDeviceProtocolHandler::AllowPort(PRInt32 port,
+ const char *scheme,
+ PRBool *aResult)
+{
+ // don't override anything.
+ *aResult = PR_FALSE;
+ return NS_OK;
+}
new file mode 100644
--- /dev/null
+++ b/netwerk/protocol/device/nsDeviceProtocolHandler.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Camera.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corporation
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Nino D'Aversa <ninodaversa@gmail.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef nsDeviceProtocolHandler_h_
+#define nsDeviceProtocolHandler_h_
+
+#include "nsIProtocolHandler.h"
+#include "nsString.h"
+
+// {6b0ffe9e-d114-486b-aeb7-da62e7273ed5}
+#define NS_DEVICEPROTOCOLHANDLER_CID \
+{ 0x60ffe9e, 0xd114, 0x486b, \
+ {0xae, 0xb7, 0xda, 0x62, 0xe7, 0x27, 0x3e, 0xd5} }
+
+class nsDeviceProtocolHandler : public nsIProtocolHandler {
+public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIPROTOCOLHANDLER
+
+ nsDeviceProtocolHandler() {}
+ ~nsDeviceProtocolHandler() {}
+
+ nsresult Init();
+};
+
+#endif