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