Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: docshell/base/nsAboutRedirector.cpp

Issue 29322687: Issue 2807 - MOBILE3901_2015070622_RELBRANCH merge conflicts (Closed)
Patch Set: Created July 20, 2015, 4:53 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=4 sw=4 sts=4 et cindent: */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public 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 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/. */ 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 6
7 #include "nsAboutRedirector.h" 7 #include "nsAboutRedirector.h"
8 #include "nsNetUtil.h" 8 #include "nsNetUtil.h"
9 #include "nsAboutProtocolUtils.h" 9 #include "nsAboutProtocolUtils.h"
10 #include "mozilla/ArrayUtils.h" 10 #include "mozilla/ArrayUtils.h"
11 #include "nsDOMString.h" 11 #include "nsDOMString.h"
12 12
13 NS_IMPL_ISUPPORTS(nsAboutRedirector, nsIAboutModule) 13 NS_IMPL_ISUPPORTS(nsAboutRedirector, nsIAboutModule)
14 14
15 struct RedirEntry { 15 struct RedirEntry
16 const char* id; 16 {
17 const char* url; 17 const char* id;
18 uint32_t flags; 18 const char* url;
19 uint32_t flags;
19 }; 20 };
20 21
21 /* 22 /*
22 Entries which do not have URI_SAFE_FOR_UNTRUSTED_CONTENT will run with chrome 23 Entries which do not have URI_SAFE_FOR_UNTRUSTED_CONTENT will run with chrome
23 privileges. This is potentially dangerous. Please use 24 privileges. This is potentially dangerous. Please use
24 URI_SAFE_FOR_UNTRUSTED_CONTENT in the third argument to each map item below 25 URI_SAFE_FOR_UNTRUSTED_CONTENT in the third argument to each map item below
25 unless your about: page really needs chrome privileges. Security review is 26 unless your about: page really needs chrome privileges. Security review is
26 required before adding new map entries without 27 required before adding new map entries without
27 URI_SAFE_FOR_UNTRUSTED_CONTENT. Also note, however, that adding 28 URI_SAFE_FOR_UNTRUSTED_CONTENT. Also note, however, that adding
28 URI_SAFE_FOR_UNTRUSTED_CONTENT will allow random web sites to link to that 29 URI_SAFE_FOR_UNTRUSTED_CONTENT will allow random web sites to link to that
29 URI. Perhaps we should separate the two concepts out... 30 URI. Perhaps we should separate the two concepts out...
30 */ 31 */
31 static RedirEntry kRedirMap[] = { 32 static RedirEntry kRedirMap[] = {
32 { "", "chrome://global/content/about.xhtml", 33 {
33 nsIAboutModule::ALLOW_SCRIPT }, 34 "", "chrome://global/content/about.xhtml",
34 { "about", "chrome://global/content/aboutAbout.xhtml", 0 }, 35 nsIAboutModule::ALLOW_SCRIPT
36 },
37 { "about", "chrome://global/content/aboutAbout.xhtml", 0 },
35 /* 38 /*
36 Removed as part of https://issues.adblockplus.org/ticket/2531 39 Removed as part of https://issues.adblockplus.org/ticket/2531
37 { "credits", "http://www.mozilla.org/credits/", 40 {
38 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, 41 "credits", "http://www.mozilla.org/credits/",
39 { "mozilla", "chrome://global/content/mozilla.xhtml", 42 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
40 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, 43 },
44 {
45 "mozilla", "chrome://global/content/mozilla.xhtml",
46 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
47 },
41 */ 48 */
42 { "plugins", "chrome://global/content/plugins.html", 0 }, 49 {
43 { "config", "chrome://global/content/config.xul", 0 }, 50 "plugins", "chrome://global/content/plugins.html",
51 nsIAboutModule::URI_MUST_LOAD_IN_CHILD
52 },
53 { "config", "chrome://global/content/config.xul", 0 },
44 #ifdef MOZ_CRASHREPORTER 54 #ifdef MOZ_CRASHREPORTER
45 { "crashes", "chrome://global/content/crashes.xhtml", 0 }, 55 { "crashes", "chrome://global/content/crashes.xhtml", 0 },
46 #endif 56 #endif
47 { "logo", "chrome://branding/content/about.png", 57 {
48 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT}, 58 "logo", "chrome://branding/content/about.png",
49 { "buildconfig", "chrome://global/content/buildconfig.html", 59 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
50 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, 60 },
61 {
62 "buildconfig", "chrome://global/content/buildconfig.html",
63 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
64 },
51 /* 65 /*
52 Removed as part of https://issues.adblockplus.org/ticket/2531 66 Removed as part of https://issues.adblockplus.org/ticket/2531
53 { "license", "chrome://global/content/license.html", 67 {
54 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT }, 68 "license", "chrome://global/content/license.html",
69 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
70 },
55 */ 71 */
56 { "neterror", "chrome://global/content/netError.xhtml", 72 {
57 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | 73 "neterror", "chrome://global/content/netError.xhtml",
74 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
75 nsIAboutModule::URI_CAN_LOAD_IN_CHILD |
58 nsIAboutModule::ALLOW_SCRIPT | 76 nsIAboutModule::ALLOW_SCRIPT |
59 nsIAboutModule::HIDE_FROM_ABOUTABOUT }, 77 nsIAboutModule::HIDE_FROM_ABOUTABOUT
60 { "compartments", "chrome://global/content/aboutCompartments.xhtml", 78 },
61 nsIAboutModule::ALLOW_SCRIPT | 79 {
62 nsIAboutModule::HIDE_FROM_ABOUTABOUT }, 80 "memory", "chrome://global/content/aboutMemory.xhtml",
Felix Dahlke 2015/07/22 16:19:18 We should check about:memory and about:compartment
63 { "memory", "chrome://global/content/aboutMemory.xhtml", 81 nsIAboutModule::ALLOW_SCRIPT
64 nsIAboutModule::ALLOW_SCRIPT }, 82 },
83 {
84 "compartments", "chrome://global/content/aboutCompartments.xhtml",
85 nsIAboutModule::ALLOW_SCRIPT
86 },
65 /* 87 /*
66 Removed as part of https://issues.adblockplus.org/ticket/2531 88 Removed as part of https://issues.adblockplus.org/ticket/2531
67 { "addons", "chrome://mozapps/content/extensions/extensions.xul", 89 {
68 nsIAboutModule::ALLOW_SCRIPT }, 90 "addons", "chrome://mozapps/content/extensions/extensions.xul",
91 nsIAboutModule::ALLOW_SCRIPT
92 },
69 */ 93 */
70 { "newaddon", "chrome://mozapps/content/extensions/newaddon.xul", 94 {
71 nsIAboutModule::ALLOW_SCRIPT | 95 "newaddon", "chrome://mozapps/content/extensions/newaddon.xul",
72 nsIAboutModule::HIDE_FROM_ABOUTABOUT }, 96 nsIAboutModule::ALLOW_SCRIPT |
97 nsIAboutModule::HIDE_FROM_ABOUTABOUT
98 },
73 /* 99 /*
74 Removed as part of https://issues.adblockplus.org/ticket/2531 100 Removed as part of https://issues.adblockplus.org/ticket/2531
75 { "support", "chrome://global/content/aboutSupport.xhtml", 101 {
76 nsIAboutModule::ALLOW_SCRIPT }, 102 "support", "chrome://global/content/aboutSupport.xhtml",
77 { "telemetry", "chrome://global/content/aboutTelemetry.xhtml", 103 nsIAboutModule::ALLOW_SCRIPT
78 nsIAboutModule::ALLOW_SCRIPT }, 104 },
105 {
106 "telemetry", "chrome://global/content/aboutTelemetry.xhtml",
107 nsIAboutModule::ALLOW_SCRIPT
108 },
79 */ 109 */
80 { "networking", "chrome://global/content/aboutNetworking.xhtml", 110 {
81 nsIAboutModule::ALLOW_SCRIPT }, 111 "networking", "chrome://global/content/aboutNetworking.xhtml",
82 { "webrtc", "chrome://global/content/aboutwebrtc/aboutWebrtc.xhtml", 112 nsIAboutModule::ALLOW_SCRIPT
83 nsIAboutModule::ALLOW_SCRIPT }, 113 },
84 // about:srcdoc is unresolvable by specification. It is included here 114 {
85 // because the security manager would disallow srcdoc iframes otherwise. 115 "webrtc", "chrome://global/content/aboutwebrtc/aboutWebrtc.xhtml",
86 { "srcdoc", "about:blank", 116 nsIAboutModule::ALLOW_SCRIPT
87 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | 117 },
88 nsIAboutModule::HIDE_FROM_ABOUTABOUT } 118 // about:srcdoc is unresolvable by specification. It is included here
119 // because the security manager would disallow srcdoc iframes otherwise.
120 {
121 "srcdoc", "about:blank",
122 nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
123 nsIAboutModule::HIDE_FROM_ABOUTABOUT
124 }
89 }; 125 };
90 static const int kRedirTotal = mozilla::ArrayLength(kRedirMap); 126 static const int kRedirTotal = mozilla::ArrayLength(kRedirMap);
91 127
92 NS_IMETHODIMP 128 NS_IMETHODIMP
93 nsAboutRedirector::NewChannel(nsIURI* aURI, 129 nsAboutRedirector::NewChannel(nsIURI* aURI,
94 nsILoadInfo* aLoadInfo, 130 nsILoadInfo* aLoadInfo,
95 nsIChannel** result) 131 nsIChannel** aResult)
96 { 132 {
97 NS_ENSURE_ARG_POINTER(aURI); 133 NS_ENSURE_ARG_POINTER(aURI);
98 NS_ASSERTION(result, "must not be null"); 134 NS_ASSERTION(aResult, "must not be null");
99 135
100 nsAutoCString path; 136 nsAutoCString path;
101 nsresult rv = NS_GetAboutModuleName(aURI, path); 137 nsresult rv = NS_GetAboutModuleName(aURI, path);
102 NS_ENSURE_SUCCESS(rv, rv); 138 NS_ENSURE_SUCCESS(rv, rv);
103 139
104 nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv); 140 nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv);
105 NS_ENSURE_SUCCESS(rv, rv); 141 NS_ENSURE_SUCCESS(rv, rv);
106 142
143 for (int i = 0; i < kRedirTotal; i++) {
144 if (!strcmp(path.get(), kRedirMap[i].id)) {
145 nsCOMPtr<nsIChannel> tempChannel;
146 nsCOMPtr<nsIURI> tempURI;
147 rv = NS_NewURI(getter_AddRefs(tempURI), kRedirMap[i].url);
148 NS_ENSURE_SUCCESS(rv, rv);
149 rv = NS_NewChannelInternal(getter_AddRefs(tempChannel),
150 tempURI,
151 aLoadInfo);
152 if (NS_FAILED(rv)) {
153 return rv;
154 }
107 155
108 for (int i=0; i<kRedirTotal; i++) 156 tempChannel->SetOriginalURI(aURI);
109 {
110 if (!strcmp(path.get(), kRedirMap[i].id))
111 {
112 nsCOMPtr<nsIChannel> tempChannel;
113 nsCOMPtr<nsIURI> tempURI;
114 rv = NS_NewURI(getter_AddRefs(tempURI), kRedirMap[i].url);
115 NS_ENSURE_SUCCESS(rv, rv);
116 // Bug 1087720 (and Bug 1099296):
117 // Once all callsites have been updated to call NewChannel2()
118 // instead of NewChannel() we should have a non-null loadInfo
119 // consistently. Until then we have to branch on the loadInfo.
120 if (aLoadInfo) {
121 rv = NS_NewChannelInternal(getter_AddRefs(tempChannel),
122 tempURI,
123 aLoadInfo);
124 }
125 else {
126 rv = ioService->NewChannelFromURI(tempURI,
127 getter_AddRefs(tempChannel));
128 }
129 if (NS_FAILED(rv))
130 return rv;
131 157
132 tempChannel->SetOriginalURI(aURI); 158 NS_ADDREF(*aResult = tempChannel);
159 return rv;
160 }
161 }
133 162
134 NS_ADDREF(*result = tempChannel); 163 NS_ERROR("nsAboutRedirector called for unknown case");
135 return rv; 164 return NS_ERROR_ILLEGAL_VALUE;
136 }
137 }
138
139 NS_ERROR("nsAboutRedirector called for unknown case");
140 return NS_ERROR_ILLEGAL_VALUE;
141 } 165 }
142 166
143 NS_IMETHODIMP 167 NS_IMETHODIMP
144 nsAboutRedirector::GetURIFlags(nsIURI *aURI, uint32_t *result) 168 nsAboutRedirector::GetURIFlags(nsIURI* aURI, uint32_t* aResult)
145 { 169 {
146 NS_ENSURE_ARG_POINTER(aURI); 170 NS_ENSURE_ARG_POINTER(aURI);
147 171
148 nsAutoCString name; 172 nsAutoCString name;
149 nsresult rv = NS_GetAboutModuleName(aURI, name); 173 nsresult rv = NS_GetAboutModuleName(aURI, name);
150 NS_ENSURE_SUCCESS(rv, rv); 174 NS_ENSURE_SUCCESS(rv, rv);
151 175
152 for (int i=0; i < kRedirTotal; i++) 176 for (int i = 0; i < kRedirTotal; i++) {
153 { 177 if (name.EqualsASCII(kRedirMap[i].id)) {
154 if (name.EqualsASCII(kRedirMap[i].id)) 178 *aResult = kRedirMap[i].flags;
155 { 179 return NS_OK;
156 *result = kRedirMap[i].flags;
157 return NS_OK;
158 }
159 } 180 }
181 }
160 182
161 NS_ERROR("nsAboutRedirector called for unknown case"); 183 NS_ERROR("nsAboutRedirector called for unknown case");
162 return NS_ERROR_ILLEGAL_VALUE; 184 return NS_ERROR_ILLEGAL_VALUE;
163 } 185 }
164 186
165 NS_IMETHODIMP 187 NS_IMETHODIMP
166 nsAboutRedirector::GetIndexedDBOriginPostfix(nsIURI *aURI, nsAString &result) 188 nsAboutRedirector::GetIndexedDBOriginPostfix(nsIURI* aURI, nsAString& aResult)
167 { 189 {
168 SetDOMStringToNull(result); 190 SetDOMStringToNull(aResult);
169 return NS_ERROR_NOT_IMPLEMENTED; 191 return NS_ERROR_NOT_IMPLEMENTED;
170 } 192 }
171 193
172 nsresult 194 nsresult
173 nsAboutRedirector::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) 195 nsAboutRedirector::Create(nsISupports* aOuter, REFNSIID aIID, void** aResult)
174 { 196 {
175 nsAboutRedirector* about = new nsAboutRedirector(); 197 nsAboutRedirector* about = new nsAboutRedirector();
176 if (about == nullptr) 198 NS_ADDREF(about);
177 return NS_ERROR_OUT_OF_MEMORY; 199 nsresult rv = about->QueryInterface(aIID, aResult);
178 NS_ADDREF(about); 200 NS_RELEASE(about);
179 nsresult rv = about->QueryInterface(aIID, aResult); 201 return rv;
180 NS_RELEASE(about);
181 return rv;
182 } 202 }
OLDNEW
« no previous file with comments | « config/milestone.txt ('k') | mobile/android/app/mobile.js » ('j') | mobile/android/app/mobile.js » ('J')

Powered by Google App Engine
This is Rietveld