Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 4; 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/. */
6
7
#include "WebBrowserPersistRemoteDocument.h"
8
#include "WebBrowserPersistDocumentParent.h"
9
#include "WebBrowserPersistResourcesParent.h"
10
#include "WebBrowserPersistSerializeParent.h"
11
#include "mozilla/Unused.h"
12
#include "mozilla/ipc/BackgroundUtils.h"
13
14
#include "nsIPrincipal.h"
15
16
namespace mozilla {
17
18
NS_IMPL_ISUPPORTS(WebBrowserPersistRemoteDocument,
19
                  nsIWebBrowserPersistDocument)
20
21
WebBrowserPersistRemoteDocument
22
::WebBrowserPersistRemoteDocument(WebBrowserPersistDocumentParent* aActor,
23
                                  const Attrs& aAttrs,
24
                                  nsIInputStream* aPostData)
25
: mActor(aActor)
26
, mAttrs(aAttrs)
27
, mPostData(aPostData)
28
0
{
29
0
  nsresult rv;
30
0
  mPrincipal = ipc::PrincipalInfoToPrincipal(mAttrs.principal(), &rv);
31
0
}
32
33
WebBrowserPersistRemoteDocument::~WebBrowserPersistRemoteDocument()
34
0
{
35
0
    if (mActor) {
36
0
        Unused << WebBrowserPersistDocumentParent::Send__delete__(mActor);
37
0
        // That will call mActor->ActorDestroy, which calls this->ActorDestroy
38
0
        // (whether or not the IPC send succeeds).
39
0
    }
40
0
    MOZ_ASSERT(!mActor);
41
0
}
42
43
void
44
WebBrowserPersistRemoteDocument::ActorDestroy(void)
45
0
{
46
0
    mActor = nullptr;
47
0
}
48
49
NS_IMETHODIMP
50
WebBrowserPersistRemoteDocument::GetIsPrivate(bool* aIsPrivate)
51
0
{
52
0
    *aIsPrivate = mAttrs.isPrivate();
53
0
    return NS_OK;
54
0
}
55
56
NS_IMETHODIMP
57
WebBrowserPersistRemoteDocument::GetDocumentURI(nsACString& aURISpec)
58
0
{
59
0
    aURISpec = mAttrs.documentURI();
60
0
    return NS_OK;
61
0
}
62
63
NS_IMETHODIMP
64
WebBrowserPersistRemoteDocument::GetBaseURI(nsACString& aURISpec)
65
0
{
66
0
    aURISpec = mAttrs.baseURI();
67
0
    return NS_OK;
68
0
}
69
70
NS_IMETHODIMP
71
WebBrowserPersistRemoteDocument::GetContentType(nsACString& aContentType)
72
0
{
73
0
    aContentType = mAttrs.contentType();
74
0
    return NS_OK;
75
0
}
76
77
NS_IMETHODIMP
78
WebBrowserPersistRemoteDocument::GetCharacterSet(nsACString& aCharSet)
79
0
{
80
0
    aCharSet = mAttrs.characterSet();
81
0
    return NS_OK;
82
0
}
83
84
NS_IMETHODIMP
85
WebBrowserPersistRemoteDocument::GetTitle(nsAString& aTitle)
86
0
{
87
0
    aTitle = mAttrs.title();
88
0
    return NS_OK;
89
0
}
90
91
NS_IMETHODIMP
92
WebBrowserPersistRemoteDocument::GetReferrer(nsAString& aReferrer)
93
0
{
94
0
    aReferrer = mAttrs.referrer();
95
0
    return NS_OK;
96
0
}
97
98
NS_IMETHODIMP
99
WebBrowserPersistRemoteDocument::GetContentDisposition(nsAString& aDisp)
100
0
{
101
0
    aDisp = mAttrs.contentDisposition();
102
0
    return NS_OK;
103
0
}
104
105
NS_IMETHODIMP
106
WebBrowserPersistRemoteDocument::GetCacheKey(uint32_t* aCacheKey)
107
0
{
108
0
    *aCacheKey = mAttrs.cacheKey();
109
0
    return NS_OK;
110
0
}
111
112
NS_IMETHODIMP
113
WebBrowserPersistRemoteDocument::GetPersistFlags(uint32_t* aFlags)
114
0
{
115
0
    *aFlags = mAttrs.persistFlags();
116
0
    return NS_OK;
117
0
}
118
119
NS_IMETHODIMP
120
WebBrowserPersistRemoteDocument::SetPersistFlags(uint32_t aFlags)
121
0
{
122
0
    if (!mActor) {
123
0
        return NS_ERROR_FAILURE;
124
0
    }
125
0
    if (!mActor->SendSetPersistFlags(aFlags)) {
126
0
        return NS_ERROR_FAILURE;
127
0
    }
128
0
    mAttrs.persistFlags() = aFlags;
129
0
    return NS_OK;
130
0
}
131
132
NS_IMETHODIMP
133
WebBrowserPersistRemoteDocument::GetPostData(nsIInputStream** aStream)
134
0
{
135
0
    nsCOMPtr<nsIInputStream> stream = mPostData;
136
0
    stream.forget(aStream);
137
0
    return NS_OK;
138
0
}
139
140
NS_IMETHODIMP
141
WebBrowserPersistRemoteDocument::GetPrincipal(nsIPrincipal** aPrincipal)
142
0
{
143
0
    nsCOMPtr<nsIPrincipal> nodePrincipal = mPrincipal;
144
0
    nodePrincipal.forget(aPrincipal);
145
0
    return NS_OK;
146
0
}
147
148
NS_IMETHODIMP
149
WebBrowserPersistRemoteDocument::ReadResources(nsIWebBrowserPersistResourceVisitor* aVisitor)
150
0
{
151
0
    if (!mActor) {
152
0
        return NS_ERROR_FAILURE;
153
0
    }
154
0
    RefPtr<WebBrowserPersistResourcesParent> subActor =
155
0
        new WebBrowserPersistResourcesParent(this, aVisitor);
156
0
    return mActor->SendPWebBrowserPersistResourcesConstructor(
157
0
        subActor.forget().take())
158
0
        ? NS_OK : NS_ERROR_FAILURE;
159
0
}
160
161
NS_IMETHODIMP
162
WebBrowserPersistRemoteDocument::WriteContent(
163
    nsIOutputStream* aStream,
164
    nsIWebBrowserPersistURIMap* aMap,
165
    const nsACString& aRequestedContentType,
166
    uint32_t aEncoderFlags,
167
    uint32_t aWrapColumn,
168
    nsIWebBrowserPersistWriteCompletion* aCompletion)
169
0
{
170
0
    if (!mActor) {
171
0
        return NS_ERROR_FAILURE;
172
0
    }
173
0
174
0
    nsresult rv;
175
0
    WebBrowserPersistURIMap map;
176
0
    uint32_t numMappedURIs;
177
0
    if (aMap) {
178
0
        rv = aMap->GetTargetBaseURI(map.targetBaseURI());
179
0
        NS_ENSURE_SUCCESS(rv, rv);
180
0
        rv = aMap->GetNumMappedURIs(&numMappedURIs);
181
0
        NS_ENSURE_SUCCESS(rv, rv);
182
0
        for (uint32_t i = 0; i < numMappedURIs; ++i) {
183
0
            WebBrowserPersistURIMapEntry& nextEntry =
184
0
                *(map.mapURIs().AppendElement());
185
0
            rv = aMap->GetURIMapping(i, nextEntry.mapFrom(), nextEntry.mapTo());
186
0
            NS_ENSURE_SUCCESS(rv, rv);
187
0
        }
188
0
    }
189
0
190
0
    auto* subActor = new WebBrowserPersistSerializeParent(this,
191
0
                                                          aStream,
192
0
                                                          aCompletion);
193
0
    nsCString requestedContentType(aRequestedContentType); // Sigh.
194
0
    return mActor->SendPWebBrowserPersistSerializeConstructor(
195
0
        subActor, map, requestedContentType, aEncoderFlags, aWrapColumn)
196
0
        ? NS_OK : NS_ERROR_FAILURE;
197
0
}
198
199
} // namespace mozilla