Skip to content

Commit c255f41

Browse files
author
Christoph Kerschbaumer
committed
Bug 1179505 - Make LoadInfo arguments optional in ipdl (r=bent,sicking)
1 parent 915d878 commit c255f41

12 files changed

+79
-59
lines changed

ipc/glue/BackgroundUtils.cpp

Lines changed: 50 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818
#include "nsString.h"
1919

2020
namespace mozilla {
21+
namespace net {
22+
class OptionalLoadInfoArgs;
23+
}
24+
25+
using namespace mozilla::net;
26+
2127
namespace ipc {
2228

2329
already_AddRefed<nsIPrincipal>
@@ -220,66 +226,70 @@ PrincipalToPrincipalInfo(nsIPrincipal* aPrincipal,
220226

221227
nsresult
222228
LoadInfoToLoadInfoArgs(nsILoadInfo *aLoadInfo,
223-
mozilla::net::LoadInfoArgs* aLoadInfoArgs)
229+
OptionalLoadInfoArgs* aOptionalLoadInfoArgs)
224230
{
225-
nsresult rv = NS_OK;
226-
227-
if (aLoadInfo) {
228-
rv = PrincipalToPrincipalInfo(aLoadInfo->LoadingPrincipal(),
229-
&aLoadInfoArgs->requestingPrincipalInfo());
230-
NS_ENSURE_SUCCESS(rv, rv);
231-
rv = PrincipalToPrincipalInfo(aLoadInfo->TriggeringPrincipal(),
232-
&aLoadInfoArgs->triggeringPrincipalInfo());
233-
NS_ENSURE_SUCCESS(rv, rv);
234-
aLoadInfoArgs->securityFlags() = aLoadInfo->GetSecurityFlags();
235-
aLoadInfoArgs->contentPolicyType() = aLoadInfo->GetContentPolicyType();
236-
aLoadInfoArgs->upgradeInsecureRequests() = aLoadInfo->GetUpgradeInsecureRequests();
237-
aLoadInfoArgs->innerWindowID() = aLoadInfo->GetInnerWindowID();
238-
aLoadInfoArgs->outerWindowID() = aLoadInfo->GetOuterWindowID();
239-
aLoadInfoArgs->parentOuterWindowID() = aLoadInfo->GetParentOuterWindowID();
231+
if (!aLoadInfo) {
232+
// if there is no loadInfo, then there is nothing to serialize
233+
*aOptionalLoadInfoArgs = void_t();
240234
return NS_OK;
241235
}
242236

243-
// use default values if no loadInfo is provided
244-
rv = PrincipalToPrincipalInfo(nsContentUtils::GetSystemPrincipal(),
245-
&aLoadInfoArgs->requestingPrincipalInfo());
246-
NS_ENSURE_SUCCESS(rv, rv);
247-
rv = PrincipalToPrincipalInfo(nsContentUtils::GetSystemPrincipal(),
248-
&aLoadInfoArgs->triggeringPrincipalInfo());
237+
nsresult rv = NS_OK;
238+
PrincipalInfo requestingPrincipalInfo;
239+
rv = PrincipalToPrincipalInfo(aLoadInfo->LoadingPrincipal(),
240+
&requestingPrincipalInfo);
249241
NS_ENSURE_SUCCESS(rv, rv);
250-
aLoadInfoArgs->securityFlags() = nsILoadInfo::SEC_NORMAL;
251-
aLoadInfoArgs->contentPolicyType() = nsIContentPolicy::TYPE_OTHER;
252-
aLoadInfoArgs->upgradeInsecureRequests() = false;
253-
aLoadInfoArgs->innerWindowID() = 0;
254-
aLoadInfoArgs->outerWindowID() = 0;
255-
aLoadInfoArgs->parentOuterWindowID() = 0;
242+
243+
PrincipalInfo triggeringPrincipalInfo;
244+
rv = PrincipalToPrincipalInfo(aLoadInfo->TriggeringPrincipal(),
245+
&triggeringPrincipalInfo);
246+
247+
*aOptionalLoadInfoArgs =
248+
LoadInfoArgs(
249+
requestingPrincipalInfo,
250+
triggeringPrincipalInfo,
251+
aLoadInfo->GetSecurityFlags(),
252+
aLoadInfo->GetContentPolicyType(),
253+
aLoadInfo->GetUpgradeInsecureRequests(),
254+
aLoadInfo->GetInnerWindowID(),
255+
aLoadInfo->GetOuterWindowID(),
256+
aLoadInfo->GetParentOuterWindowID());
257+
256258
return NS_OK;
257259
}
258260

259261
nsresult
260-
LoadInfoArgsToLoadInfo(const mozilla::net::LoadInfoArgs& aLoadInfoArgs,
262+
LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
261263
nsILoadInfo** outLoadInfo)
262264
{
265+
if (aOptionalLoadInfoArgs.type() == OptionalLoadInfoArgs::Tvoid_t) {
266+
*outLoadInfo = nullptr;
267+
return NS_OK;
268+
}
269+
270+
const LoadInfoArgs& loadInfoArgs =
271+
aOptionalLoadInfoArgs.get_LoadInfoArgs();
272+
263273
nsresult rv = NS_OK;
264274
nsCOMPtr<nsIPrincipal> requestingPrincipal =
265-
PrincipalInfoToPrincipal(aLoadInfoArgs.requestingPrincipalInfo(), &rv);
275+
PrincipalInfoToPrincipal(loadInfoArgs.requestingPrincipalInfo(), &rv);
266276
NS_ENSURE_SUCCESS(rv, rv);
267277
nsCOMPtr<nsIPrincipal> triggeringPrincipal =
268-
PrincipalInfoToPrincipal(aLoadInfoArgs.triggeringPrincipalInfo(), &rv);
278+
PrincipalInfoToPrincipal(loadInfoArgs.triggeringPrincipalInfo(), &rv);
269279
NS_ENSURE_SUCCESS(rv, rv);
270280

271281
nsCOMPtr<nsILoadInfo> loadInfo =
272282
new mozilla::LoadInfo(requestingPrincipal,
273283
triggeringPrincipal,
274-
aLoadInfoArgs.securityFlags(),
275-
aLoadInfoArgs.contentPolicyType(),
276-
aLoadInfoArgs.upgradeInsecureRequests(),
277-
aLoadInfoArgs.innerWindowID(),
278-
aLoadInfoArgs.outerWindowID(),
279-
aLoadInfoArgs.parentOuterWindowID());
280-
281-
loadInfo.forget(outLoadInfo);
282-
return NS_OK;
284+
loadInfoArgs.securityFlags(),
285+
loadInfoArgs.contentPolicyType(),
286+
loadInfoArgs.upgradeInsecureRequests(),
287+
loadInfoArgs.innerWindowID(),
288+
loadInfoArgs.outerWindowID(),
289+
loadInfoArgs.parentOuterWindowID());
290+
291+
loadInfo.forget(outLoadInfo);
292+
return NS_OK;
283293
}
284294

285295
} // namespace ipc

ipc/glue/BackgroundUtils.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ struct ParamTraits<mozilla::OriginAttributes>
4040

4141
namespace mozilla {
4242
namespace net {
43-
class LoadInfoArgs;
43+
class OptionalLoadInfoArgs;
4444
} // namespace net
4545

46+
using namespace mozilla::net;
47+
4648
namespace ipc {
4749

4850
class PrincipalInfo;
@@ -70,17 +72,15 @@ PrincipalToPrincipalInfo(nsIPrincipal* aPrincipal,
7072
*/
7173
nsresult
7274
LoadInfoToLoadInfoArgs(nsILoadInfo *aLoadInfo,
73-
mozilla::net::LoadInfoArgs* outLoadInfoArgs);
75+
OptionalLoadInfoArgs* outOptionalLoadInfoArgs);
7476

7577
/**
7678
* Convert LoadInfoArgs to a LoadInfo.
7779
*/
7880
nsresult
79-
LoadInfoArgsToLoadInfo(const mozilla::net::LoadInfoArgs& aLoadInfoArgs,
81+
LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
8082
nsILoadInfo** outLoadInfo);
8183

82-
83-
8484
} // namespace ipc
8585
} // namespace mozilla
8686

netwerk/base/LoadInfo.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ class nsINode;
1818
namespace mozilla {
1919

2020
namespace net {
21-
class LoadInfoArgs;
21+
class OptionalLoadInfoArgs;
2222
} // namespace net
2323

2424
namespace ipc {
2525
// we have to forward declare that function so we can use it as a friend.
2626
nsresult
27-
LoadInfoArgsToLoadInfo(const mozilla::net::LoadInfoArgs& aLoadInfoArgs,
27+
LoadInfoArgsToLoadInfo(const mozilla::net::OptionalLoadInfoArgs& aLoadInfoArgs,
2828
nsILoadInfo** outLoadInfo);
2929
} // namespace ipc
3030

@@ -64,8 +64,9 @@ class MOZ_EXPORT LoadInfo final : public nsILoadInfo
6464
uint64_t aParentOuterWindowID);
6565

6666
friend nsresult
67-
mozilla::ipc::LoadInfoArgsToLoadInfo(const mozilla::net::LoadInfoArgs& aLoadInfoArgs,
68-
nsILoadInfo** outLoadInfo);
67+
mozilla::ipc::LoadInfoArgsToLoadInfo(
68+
const mozilla::net::OptionalLoadInfoArgs& aLoadInfoArgs,
69+
nsILoadInfo** outLoadInfo);
6970

7071
~LoadInfo();
7172

netwerk/ipc/NeckoChannelParams.ipdlh

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ struct LoadInfoArgs
3636
uint64_t parentOuterWindowID;
3737
};
3838

39+
/**
40+
* Not every channel necessarily has a loadInfo attached.
41+
*/
42+
union OptionalLoadInfoArgs
43+
{
44+
void_t;
45+
LoadInfoArgs;
46+
};
47+
3948
//-----------------------------------------------------------------------------
4049
// HTTP IPDL structs
4150
//-----------------------------------------------------------------------------
@@ -77,7 +86,7 @@ struct HttpChannelOpenArgs
7786
bool allowSpdy;
7887
bool allowAltSvc;
7988
OptionalFileDescriptorSet fds;
80-
LoadInfoArgs loadInfo;
89+
OptionalLoadInfoArgs loadInfo;
8190
OptionalHttpResponseHead synthesizedResponseHead;
8291
uint32_t cacheKey;
8392
};
@@ -104,7 +113,7 @@ struct FTPChannelOpenArgs
104113
uint64_t startPos;
105114
nsCString entityID;
106115
OptionalInputStreamParams uploadStream;
107-
LoadInfoArgs loadInfo;
116+
OptionalLoadInfoArgs loadInfo;
108117
};
109118

110119
struct FTPChannelConnectArgs

netwerk/protocol/ftp/FTPChannelParent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ FTPChannelParent::DoAsyncOpen(const URIParams& aURI,
107107
const uint64_t& aStartPos,
108108
const nsCString& aEntityID,
109109
const OptionalInputStreamParams& aUploadStream,
110-
const LoadInfoArgs& aLoadInfoArgs)
110+
const OptionalLoadInfoArgs& aLoadInfoArgs)
111111
{
112112
nsCOMPtr<nsIURI> uri = DeserializeURI(aURI);
113113
if (!uri)

netwerk/protocol/ftp/FTPChannelParent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class FTPChannelParent final : public PFTPChannelParent
6565
bool DoAsyncOpen(const URIParams& aURI, const uint64_t& aStartPos,
6666
const nsCString& aEntityID,
6767
const OptionalInputStreamParams& aUploadStream,
68-
const LoadInfoArgs& aLoadInfoArgs);
68+
const OptionalLoadInfoArgs& aLoadInfoArgs);
6969

7070
// used to connect redirected-to channel in parent with just created
7171
// ChildChannel. Used during HTTP->FTP redirects.

netwerk/protocol/http/HttpChannelParent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ HttpChannelParent::DoAsyncOpen( const URIParams& aURI,
274274
const bool& allowSpdy,
275275
const bool& allowAltSvc,
276276
const OptionalFileDescriptorSet& aFds,
277-
const LoadInfoArgs& aLoadInfoArgs,
277+
const OptionalLoadInfoArgs& aLoadInfoArgs,
278278
const OptionalHttpResponseHead& aSynthesizedResponseHead,
279279
const uint32_t& aCacheKey)
280280
{

netwerk/protocol/http/HttpChannelParent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class HttpChannelParent final : public PHttpChannelParent
116116
const bool& allowSpdy,
117117
const bool& allowAltSvc,
118118
const OptionalFileDescriptorSet& aFds,
119-
const LoadInfoArgs& aLoadInfoArgs,
119+
const OptionalLoadInfoArgs& aLoadInfoArgs,
120120
const OptionalHttpResponseHead& aSynthesizedResponseHead,
121121
const uint32_t& aCacheKey);
122122

netwerk/protocol/websocket/PWebSocket.ipdl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ parent:
3333
bool aClientSetPingInterval,
3434
uint32_t aPingTimeout,
3535
bool aClientSetPingTimeout,
36-
LoadInfoArgs aLoadInfoArgs);
36+
OptionalLoadInfoArgs aLoadInfoArgs);
3737
Close(uint16_t code, nsCString reason);
3838
SendMsg(nsCString aMsg);
3939
SendBinaryMsg(nsCString aMsg);

netwerk/protocol/websocket/WebSocketChannelChild.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ WebSocketChannelChild::AsyncOpen(nsIURI *aURI,
483483
// Corresponding release in DeallocPWebSocket
484484
AddIPDLReference();
485485

486-
LoadInfoArgs loadInfoArgs;
486+
OptionalLoadInfoArgs loadInfoArgs;
487487
nsresult rv = LoadInfoToLoadInfoArgs(mLoadInfo, &loadInfoArgs);
488488
NS_ENSURE_SUCCESS(rv, rv);
489489

netwerk/protocol/websocket/WebSocketChannelParent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ WebSocketChannelParent::RecvAsyncOpen(const URIParams& aURI,
6666
const bool& aClientSetPingInterval,
6767
const uint32_t& aPingTimeout,
6868
const bool& aClientSetPingTimeout,
69-
const LoadInfoArgs& aLoadInfoArgs)
69+
const OptionalLoadInfoArgs& aLoadInfoArgs)
7070
{
7171
LOG(("WebSocketChannelParent::RecvAsyncOpen() %p\n", this));
7272

netwerk/protocol/websocket/WebSocketChannelParent.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class WebSocketChannelParent : public PWebSocketParent,
4646
const bool& aClientSetPingInterval,
4747
const uint32_t& aPingTimeout,
4848
const bool& aClientSetPingTimeout,
49-
const LoadInfoArgs& aLoadInfoArgs) override;
49+
const OptionalLoadInfoArgs& aLoadInfoArgs) override;
5050
bool RecvClose(const uint16_t & code, const nsCString & reason) override;
5151
bool RecvSendMsg(const nsCString& aMsg) override;
5252
bool RecvSendBinaryMsg(const nsCString& aMsg) override;

0 commit comments

Comments
 (0)