Thu, 15 Jan 2015 15:59:08 +0100
Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 *
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "nsIconChannel.h"
8 #include "nsIconURI.h"
9 #include "nsIconProtocolHandler.h"
10 #include "nsIURL.h"
11 #include "nsCRT.h"
12 #include "nsCOMPtr.h"
13 #include "nsIComponentManager.h"
14 #include "nsIServiceManager.h"
15 #include "nsNetCID.h"
17 ////////////////////////////////////////////////////////////////////////////////
19 nsIconProtocolHandler::nsIconProtocolHandler()
20 {
21 }
23 nsIconProtocolHandler::~nsIconProtocolHandler()
24 {}
26 NS_IMPL_ISUPPORTS(nsIconProtocolHandler, nsIProtocolHandler, nsISupportsWeakReference)
29 ////////////////////////////////////////////////////////////////////////////////
30 // nsIProtocolHandler methods:
32 NS_IMETHODIMP nsIconProtocolHandler::GetScheme(nsACString &result)
33 {
34 result = "moz-icon";
35 return NS_OK;
36 }
38 NS_IMETHODIMP nsIconProtocolHandler::GetDefaultPort(int32_t *result)
39 {
40 *result = 0;
41 return NS_OK;
42 }
44 NS_IMETHODIMP nsIconProtocolHandler::AllowPort(int32_t port, const char *scheme, bool *_retval)
45 {
46 // don't override anything.
47 *_retval = false;
48 return NS_OK;
49 }
51 NS_IMETHODIMP nsIconProtocolHandler::GetProtocolFlags(uint32_t *result)
52 {
53 *result = URI_NORELATIVE | URI_NOAUTH | URI_IS_UI_RESOURCE |
54 URI_IS_LOCAL_RESOURCE;
55 return NS_OK;
56 }
58 NS_IMETHODIMP nsIconProtocolHandler::NewURI(const nsACString &aSpec,
59 const char *aOriginCharset, // ignored
60 nsIURI *aBaseURI,
61 nsIURI **result)
62 {
64 nsCOMPtr<nsIURI> uri = new nsMozIconURI();
65 if (!uri) return NS_ERROR_OUT_OF_MEMORY;
67 nsresult rv = uri->SetSpec(aSpec);
68 if (NS_FAILED(rv)) return rv;
70 NS_ADDREF(*result = uri);
71 return NS_OK;
72 }
74 NS_IMETHODIMP nsIconProtocolHandler::NewChannel(nsIURI* url, nsIChannel* *result)
75 {
76 NS_ENSURE_ARG_POINTER(url);
77 nsIconChannel* channel = new nsIconChannel;
78 if (!channel)
79 return NS_ERROR_OUT_OF_MEMORY;
80 NS_ADDREF(channel);
82 nsresult rv = channel->Init(url);
83 if (NS_FAILED(rv)) {
84 NS_RELEASE(channel);
85 return rv;
86 }
88 *result = channel;
89 return NS_OK;
90 }
92 ////////////////////////////////////////////////////////////////////////////////