WebBrowserPersistRemoteDocument.cpp 4.9 KB

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