Backed out 4 changesets (bug 1879154) for causing bustage on nsUserCharacteristics...
[gecko.git] / dom / webbrowserpersist / WebBrowserPersistDocumentChild.cpp
blob00dbbef08f4797662f15f0ad31ab73336680c48f
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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/. */
7 #include "WebBrowserPersistDocumentChild.h"
9 #include "mozilla/dom/ContentChild.h"
10 #include "mozilla/ipc/IPCStreamUtils.h"
11 #include "mozilla/dom/Document.h"
12 #include "nsIInputStream.h"
13 #include "WebBrowserPersistLocalDocument.h"
14 #include "WebBrowserPersistResourcesChild.h"
15 #include "WebBrowserPersistSerializeChild.h"
16 #include "mozilla/StaticPrefs_fission.h"
17 #include "mozilla/net/CookieJarSettings.h"
19 namespace mozilla {
21 WebBrowserPersistDocumentChild::WebBrowserPersistDocumentChild() = default;
23 WebBrowserPersistDocumentChild::~WebBrowserPersistDocumentChild() = default;
25 void WebBrowserPersistDocumentChild::Start(dom::Document* aDocument) {
26 RefPtr<WebBrowserPersistLocalDocument> doc;
27 if (aDocument) {
28 doc = new WebBrowserPersistLocalDocument(aDocument);
30 Start(doc);
33 void WebBrowserPersistDocumentChild::Start(
34 nsIWebBrowserPersistDocument* aDocument) {
35 MOZ_ASSERT(!mDocument);
36 if (!aDocument) {
37 SendInitFailure(NS_ERROR_FAILURE);
38 return;
41 nsCOMPtr<nsIPrincipal> principal;
42 nsCOMPtr<nsIReferrerInfo> referrerInfo;
43 nsCOMPtr<nsICookieJarSettings> cookieJarSettings;
44 WebBrowserPersistDocumentAttrs attrs;
45 nsCOMPtr<nsIInputStream> postDataStream;
46 #define ENSURE(e) \
47 do { \
48 nsresult rv = (e); \
49 if (NS_FAILED(rv)) { \
50 SendInitFailure(rv); \
51 return; \
52 } \
53 } while (0)
54 ENSURE(aDocument->GetIsPrivate(&(attrs.isPrivate())));
55 ENSURE(aDocument->GetDocumentURI(attrs.documentURI()));
56 ENSURE(aDocument->GetBaseURI(attrs.baseURI()));
57 ENSURE(aDocument->GetContentType(attrs.contentType()));
58 ENSURE(aDocument->GetCharacterSet(attrs.characterSet()));
59 ENSURE(aDocument->GetTitle(attrs.title()));
60 ENSURE(aDocument->GetContentDisposition(attrs.contentDisposition()));
62 attrs.sessionHistoryCacheKey() = aDocument->GetCacheKey();
64 ENSURE(aDocument->GetPersistFlags(&(attrs.persistFlags())));
66 ENSURE(aDocument->GetPrincipal(getter_AddRefs(principal)));
67 ENSURE(ipc::PrincipalToPrincipalInfo(principal, &(attrs.principal())));
69 ENSURE(aDocument->GetReferrerInfo(getter_AddRefs(referrerInfo)));
70 attrs.referrerInfo() = referrerInfo;
72 ENSURE(aDocument->GetCookieJarSettings(getter_AddRefs(cookieJarSettings)));
73 net::CookieJarSettings::Cast(cookieJarSettings)
74 ->Serialize(attrs.cookieJarSettings());
76 ENSURE(aDocument->GetPostData(getter_AddRefs(postDataStream)));
77 #undef ENSURE
79 Maybe<mozilla::ipc::IPCStream> stream;
80 mozilla::ipc::SerializeIPCStream(postDataStream.forget(), stream,
81 /* aAllowLazy */ false);
83 mDocument = aDocument;
84 SendAttributes(attrs, stream);
87 mozilla::ipc::IPCResult WebBrowserPersistDocumentChild::RecvSetPersistFlags(
88 const uint32_t& aNewFlags) {
89 mDocument->SetPersistFlags(aNewFlags);
90 return IPC_OK();
93 PWebBrowserPersistResourcesChild*
94 WebBrowserPersistDocumentChild::AllocPWebBrowserPersistResourcesChild() {
95 auto* actor = new WebBrowserPersistResourcesChild();
96 NS_ADDREF(actor);
97 return actor;
100 mozilla::ipc::IPCResult
101 WebBrowserPersistDocumentChild::RecvPWebBrowserPersistResourcesConstructor(
102 PWebBrowserPersistResourcesChild* aActor) {
103 RefPtr<WebBrowserPersistResourcesChild> visitor =
104 static_cast<WebBrowserPersistResourcesChild*>(aActor);
105 nsresult rv = mDocument->ReadResources(visitor);
106 if (NS_FAILED(rv)) {
107 // This is a sync failure on the child side but an async
108 // failure on the parent side -- it already got NS_OK from
109 // ReadResources, so the error has to be reported via the
110 // visitor instead.
111 visitor->EndVisit(mDocument, rv);
113 return IPC_OK();
116 bool WebBrowserPersistDocumentChild::DeallocPWebBrowserPersistResourcesChild(
117 PWebBrowserPersistResourcesChild* aActor) {
118 auto* castActor = static_cast<WebBrowserPersistResourcesChild*>(aActor);
119 NS_RELEASE(castActor);
120 return true;
123 PWebBrowserPersistSerializeChild*
124 WebBrowserPersistDocumentChild::AllocPWebBrowserPersistSerializeChild(
125 const WebBrowserPersistURIMap& aMap,
126 const nsACString& aRequestedContentType, const uint32_t& aEncoderFlags,
127 const uint32_t& aWrapColumn) {
128 auto* actor = new WebBrowserPersistSerializeChild(aMap);
129 NS_ADDREF(actor);
130 return actor;
133 mozilla::ipc::IPCResult
134 WebBrowserPersistDocumentChild::RecvPWebBrowserPersistSerializeConstructor(
135 PWebBrowserPersistSerializeChild* aActor,
136 const WebBrowserPersistURIMap& aMap,
137 const nsACString& aRequestedContentType, const uint32_t& aEncoderFlags,
138 const uint32_t& aWrapColumn) {
139 auto* castActor = static_cast<WebBrowserPersistSerializeChild*>(aActor);
140 // This actor performs the roles of: completion, URI map, and output stream.
141 nsresult rv =
142 mDocument->WriteContent(castActor, castActor, aRequestedContentType,
143 aEncoderFlags, aWrapColumn, castActor);
144 if (NS_FAILED(rv)) {
145 castActor->OnFinish(mDocument, castActor, aRequestedContentType, rv);
147 return IPC_OK();
150 bool WebBrowserPersistDocumentChild::DeallocPWebBrowserPersistSerializeChild(
151 PWebBrowserPersistSerializeChild* aActor) {
152 auto* castActor = static_cast<WebBrowserPersistSerializeChild*>(aActor);
153 NS_RELEASE(castActor);
154 return true;
157 } // namespace mozilla