summaryrefslogtreecommitdiffstats
path: root/dom/localstorage/PBackgroundLSSharedTypes.ipdlh
blob: d71b0e61116144b02a14141f240516434be6071a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/* 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 PBackgroundSharedTypes;
include ProtocolTypes;

include "mozilla/dom/localstorage/SerializationHelpers.h";

using mozilla::dom::LSValue
  from "mozilla/dom/LSValue.h";

namespace mozilla {
namespace dom {

struct LSRequestCommonParams
{
  PrincipalInfo principalInfo;
  PrincipalInfo storagePrincipalInfo;
  nsCString originKey;
};

struct LSRequestPreloadDatastoreParams
{
  LSRequestCommonParams commonParams;
};

struct LSRequestPrepareDatastoreParams
{
  LSRequestCommonParams commonParams;
  nsID? clientId;
  PrincipalInfo? clientPrincipalInfo;
};

/**
 * In order to validate the principal with the client, we need to provide an
 * additional principalInfo for the client. The client is using the foreign
 * principal, see StoragePrincipalHelper.h for details, which is different from
 * the principalInfo. So, we need to pass the principalInfo from the client So
 * that we can verify it with the given client Id.
 *
 * Note that the storagePrincipalInfo is used to access the right cookie jar
 * according to the Storage Access. This is passed in order to access the
 * correct local storage. Essentially, the storage principal and the client
 * principal are using the PartitionKey in their OriginAttributes. But, the
 * existence of the PartitionKey between them is depending on different
 * conditions. Namely, the storage principal depends on the Storage Access but
 * the client principal depends on whether it's in a third party.
 */
struct LSRequestPrepareObserverParams
{
  PrincipalInfo principalInfo;
  PrincipalInfo storagePrincipalInfo;
  nsID? clientId;
  PrincipalInfo? clientPrincipalInfo;
};

union LSRequestParams
{
  LSRequestPreloadDatastoreParams;
  LSRequestPrepareDatastoreParams;
  LSRequestPrepareObserverParams;
};

struct LSSimpleRequestPreloadedParams
{
  PrincipalInfo principalInfo;
  PrincipalInfo storagePrincipalInfo;
};

struct LSSimpleRequestGetStateParams
{
  PrincipalInfo principalInfo;
  PrincipalInfo storagePrincipalInfo;
};

union LSSimpleRequestParams
{
  LSSimpleRequestPreloadedParams;
  LSSimpleRequestGetStateParams;
};

/**
 * LocalStorage key/value pair wire representations.  `value` may be void in
 * cases where there is a value but it is not being sent for memory/bandwidth
 * conservation purposes.  (It's not possible to have a null/undefined `value`
 * as Storage is defined explicitly as a String store.)
 */
struct LSItemInfo
{
  nsString key;
  LSValue value;
};

} // namespace dom
} // namespace mozilla