summaryrefslogtreecommitdiffstats
path: root/dom/ipc
diff options
context:
space:
mode:
Diffstat (limited to 'dom/ipc')
-rw-r--r--dom/ipc/PBrowser.ipdl20
-rw-r--r--dom/ipc/PDocumentRenderer.ipdl25
-rw-r--r--dom/ipc/TabChild.cpp52
-rw-r--r--dom/ipc/TabChild.h21
-rw-r--r--dom/ipc/TabParent.cpp19
-rw-r--r--dom/ipc/TabParent.h11
-rw-r--r--dom/ipc/moz.build1
7 files changed, 149 insertions, 0 deletions
diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl
index 9dfccbc5c..249657c26 100644
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -11,6 +11,7 @@ include protocol PContent;
include protocol PContentBridge;
include protocol PDatePicker;
include protocol PDocAccessible;
+include protocol PDocumentRenderer;
include protocol PFilePicker;
include protocol PIndexedDBPermissionRequest;
include protocol PRenderFrame;
@@ -118,6 +119,7 @@ nested(upto inside_cpow) sync protocol PBrowser
manages PColorPicker;
manages PDatePicker;
manages PDocAccessible;
+ manages PDocumentRenderer;
manages PFilePicker;
manages PIndexedDBPermissionRequest;
manages PRenderFrame;
@@ -737,6 +739,24 @@ child:
async LoadRemoteScript(nsString aURL, bool aRunInGlobalScope);
/**
+ * Create a asynchronous request to render whatever document is
+ * loaded in the child when this message arrives. When the
+ * request finishes, PDocumentRenderer:__delete__ is sent back to
+ * this side to notify completion.
+ *
+ * |documentRect| is the area of the remote document to draw,
+ * transformed by |transform|. The rendered area will have the
+ * default background color |bgcolor|. |renderFlags| are the
+ * nsIPresShell::RenderDocument() flags to use on the remote side,
+ * and if true, |flushLayout| will do just that before rendering
+ * the document. The rendered image will be of size |renderSize|.
+ */
+ async PDocumentRenderer(nsRect documentRect, Matrix transform,
+ nsString bgcolor,
+ uint32_t renderFlags, bool flushLayout,
+ IntSize renderSize);
+
+ /**
* Sent by the chrome process when it no longer wants this remote
* <browser>. The child side cleans up in response, then
* finalizing its death by sending back __delete__() to the
diff --git a/dom/ipc/PDocumentRenderer.ipdl b/dom/ipc/PDocumentRenderer.ipdl
new file mode 100644
index 000000000..bdaed45d7
--- /dev/null
+++ b/dom/ipc/PDocumentRenderer.ipdl
@@ -0,0 +1,25 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* 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 protocol PBrowser;
+
+include "mozilla/GfxMessageUtils.h";
+
+using nsIntSize from "nsSize.h";
+
+namespace mozilla {
+namespace ipc {
+
+protocol PDocumentRenderer
+{
+ manager PBrowser;
+
+parent:
+ // Returns the width and height, in pixels, of the returned ARGB32 data.
+ async __delete__(nsIntSize renderedSize, nsCString data);
+};
+
+} // namespace ipc
+} // namespace mozilla
diff --git a/dom/ipc/TabChild.cpp b/dom/ipc/TabChild.cpp
index f46a917d5..eaf4a32ed 100644
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/TabChild.cpp
@@ -22,6 +22,7 @@
#include "mozilla/dom/indexedDB/PIndexedDBPermissionRequestChild.h"
#include "mozilla/plugins/PluginWidgetChild.h"
#include "mozilla/IMEStateManager.h"
+#include "mozilla/ipc/DocumentRendererChild.h"
#include "mozilla/ipc/URIUtils.h"
#include "mozilla/layers/APZChild.h"
#include "mozilla/layers/APZCCallbackHelper.h"
@@ -2005,6 +2006,57 @@ TabChild::DeallocPDocAccessibleChild(a11y::PDocAccessibleChild* aChild)
return true;
}
+PDocumentRendererChild*
+TabChild::AllocPDocumentRendererChild(const nsRect& documentRect,
+ const mozilla::gfx::Matrix& transform,
+ const nsString& bgcolor,
+ const uint32_t& renderFlags,
+ const bool& flushLayout,
+ const nsIntSize& renderSize)
+{
+ return new DocumentRendererChild();
+}
+
+bool
+TabChild::DeallocPDocumentRendererChild(PDocumentRendererChild* actor)
+{
+ delete actor;
+ return true;
+}
+
+bool
+TabChild::RecvPDocumentRendererConstructor(PDocumentRendererChild* actor,
+ const nsRect& documentRect,
+ const mozilla::gfx::Matrix& transform,
+ const nsString& bgcolor,
+ const uint32_t& renderFlags,
+ const bool& flushLayout,
+ const nsIntSize& renderSize)
+{
+ DocumentRendererChild *render = static_cast<DocumentRendererChild *>(actor);
+
+ nsCOMPtr<nsIWebBrowser> browser = do_QueryInterface(WebNavigation());
+ if (!browser)
+ return true; // silently ignore
+ nsCOMPtr<mozIDOMWindowProxy> window;
+ if (NS_FAILED(browser->GetContentDOMWindow(getter_AddRefs(window))) ||
+ !window)
+ {
+ return true; // silently ignore
+ }
+
+ nsCString data;
+ bool ret = render->RenderDocument(nsPIDOMWindowOuter::From(window),
+ documentRect, transform,
+ bgcolor,
+ renderFlags, flushLayout,
+ renderSize, data);
+ if (!ret)
+ return true; // silently ignore
+
+ return PDocumentRendererChild::Send__delete__(actor, renderSize, data);
+}
+
PColorPickerChild*
TabChild::AllocPColorPickerChild(const nsString&, const nsString&)
{
diff --git a/dom/ipc/TabChild.h b/dom/ipc/TabChild.h
index 2232ffeaf..b23c7c19e 100644
--- a/dom/ipc/TabChild.h
+++ b/dom/ipc/TabChild.h
@@ -445,6 +445,27 @@ public:
virtual bool DeallocPDocAccessibleChild(PDocAccessibleChild*) override;
+ virtual PDocumentRendererChild*
+ AllocPDocumentRendererChild(const nsRect& aDocumentRect,
+ const gfx::Matrix& aTransform,
+ const nsString& aBggcolor,
+ const uint32_t& aRenderFlags,
+ const bool& aFlushLayout,
+ const nsIntSize& arenderSize) override;
+
+ virtual bool
+ DeallocPDocumentRendererChild(PDocumentRendererChild* aCctor) override;
+
+ virtual bool
+ RecvPDocumentRendererConstructor(PDocumentRendererChild* aActor,
+ const nsRect& aDocumentRect,
+ const gfx::Matrix& aTransform,
+ const nsString& aBgcolor,
+ const uint32_t& aRenderFlags,
+ const bool& aFlushLayout,
+ const nsIntSize& aRenderSize) override;
+
+
virtual PColorPickerChild*
AllocPColorPickerChild(const nsString& aTitle,
const nsString& aInitialColor) override;
diff --git a/dom/ipc/TabParent.cpp b/dom/ipc/TabParent.cpp
index 8e98de3ce..0df4c1253 100644
--- a/dom/ipc/TabParent.cpp
+++ b/dom/ipc/TabParent.cpp
@@ -28,6 +28,7 @@
#include "mozilla/gfx/GPUProcessManager.h"
#include "mozilla/Hal.h"
#include "mozilla/IMEStateManager.h"
+#include "mozilla/ipc/DocumentRendererParent.h"
#include "mozilla/jsipc/CrossProcessObjectWrappers.h"
#include "mozilla/layers/AsyncDragMetrics.h"
#include "mozilla/layers/InputAPZContext.h"
@@ -956,6 +957,24 @@ TabParent::GetTopLevelDocAccessible() const
return nullptr;
}
+PDocumentRendererParent*
+TabParent::AllocPDocumentRendererParent(const nsRect& documentRect,
+ const gfx::Matrix& transform,
+ const nsString& bgcolor,
+ const uint32_t& renderFlags,
+ const bool& flushLayout,
+ const nsIntSize& renderSize)
+{
+ return new DocumentRendererParent();
+}
+
+bool
+TabParent::DeallocPDocumentRendererParent(PDocumentRendererParent* actor)
+{
+ delete actor;
+ return true;
+}
+
PFilePickerParent*
TabParent::AllocPFilePickerParent(const nsString& aTitle, const int16_t& aMode)
{
diff --git a/dom/ipc/TabParent.h b/dom/ipc/TabParent.h
index 09bb999f3..43afb0538 100644
--- a/dom/ipc/TabParent.h
+++ b/dom/ipc/TabParent.h
@@ -473,6 +473,17 @@ public:
const ScrollableLayerGuid& aGuid,
uint64_t aInputBlockId);
+ virtual PDocumentRendererParent*
+ AllocPDocumentRendererParent(const nsRect& documentRect,
+ const gfx::Matrix& transform,
+ const nsString& bgcolor,
+ const uint32_t& renderFlags,
+ const bool& flushLayout,
+ const nsIntSize& renderSize) override;
+
+ virtual bool
+ DeallocPDocumentRendererParent(PDocumentRendererParent* actor) override;
+
virtual PFilePickerParent*
AllocPFilePickerParent(const nsString& aTitle,
const int16_t& aMode) override;
diff --git a/dom/ipc/moz.build b/dom/ipc/moz.build
index ff3880bc2..153bd3aae 100644
--- a/dom/ipc/moz.build
+++ b/dom/ipc/moz.build
@@ -96,6 +96,7 @@ IPDL_SOURCES += [
'PCrashReporter.ipdl',
'PCycleCollectWithLogs.ipdl',
'PDatePicker.ipdl',
+ 'PDocumentRenderer.ipdl',
'PFilePicker.ipdl',
'PMemoryReportRequest.ipdl',
'PPluginWidget.ipdl',