ppapi: Add methods for sharing new shared memory classes with remote
This CL adds two new methods, ShareUnsafeSharedMemoryRegionWithRemote() and
ShareReadOnlySharedMemoryRegionWithRemote() to
ppapi::proxy::ProxyChannel::Delegate and to content::RendererPpapiHost classes
and all implementation classes.
These new methods are similar to the SharedSharedMemoryHandleWithRemote()
method in those classes but are supposed to work with the new shared memory
API.
Bug: 845985
Change-Id: I8ccd92a1c81dca9495c85119e9a4e40fd6b69abf
Reviewed-on: https://chromium-review.googlesource.com/1078847
Commit-Queue: Alexandr Ilin <[email protected]>
Reviewed-by: Antoine Labour <[email protected]>
Reviewed-by: Raymes Khoury <[email protected]>
Cr-Commit-Position: refs/heads/master@{#563571}
diff --git a/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc b/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc
index a727b4cf..f160c16 100644
--- a/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc
+++ b/components/pdf/renderer/pdf_accessibility_tree_browsertest.cc
@@ -58,6 +58,14 @@
const base::SharedMemoryHandle& handle) override {
return base::SharedMemoryHandle();
}
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region) override {
+ return base::UnsafeSharedMemoryRegion();
+ }
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region) override {
+ return base::ReadOnlySharedMemoryRegion();
+ }
bool IsRunningInProcess() const override { return false; }
std::string GetPluginName() const override { return std::string(); }
void SetToExternalPluginHost() override {}
diff --git a/content/ppapi_plugin/ppapi_thread.cc b/content/ppapi_plugin/ppapi_thread.cc
index bb0abafb..5e7da13 100644
--- a/content/ppapi_plugin/ppapi_thread.cc
+++ b/content/ppapi_plugin/ppapi_thread.cc
@@ -200,6 +200,22 @@
return base::SharedMemory::DuplicateHandle(handle);
}
+base::UnsafeSharedMemoryRegion
+PpapiThread::ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) {
+ DCHECK(remote_pid != base::kNullProcessId);
+ return region.Duplicate();
+}
+
+base::ReadOnlySharedMemoryRegion
+PpapiThread::ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) {
+ DCHECK(remote_pid != base::kNullProcessId);
+ return region.Duplicate();
+}
+
std::set<PP_Instance>* PpapiThread::GetGloballySeenInstanceIDSet() {
return &globally_seen_instance_ids_;
}
diff --git a/content/ppapi_plugin/ppapi_thread.h b/content/ppapi_plugin/ppapi_thread.h
index f3425cb..b54f470 100644
--- a/content/ppapi_plugin/ppapi_thread.h
+++ b/content/ppapi_plugin/ppapi_thread.h
@@ -89,6 +89,12 @@
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle,
base::ProcessId remote_pid) override;
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
uint32_t Register(ppapi::proxy::PluginDispatcher* plugin_dispatcher) override;
void Unregister(uint32_t plugin_dispatcher_id) override;
diff --git a/content/public/renderer/renderer_ppapi_host.h b/content/public/renderer/renderer_ppapi_host.h
index b376692d..5d56971 100644
--- a/content/public/renderer/renderer_ppapi_host.h
+++ b/content/public/renderer/renderer_ppapi_host.h
@@ -9,8 +9,10 @@
#include "base/callback_forward.h"
#include "base/files/file.h"
+#include "base/memory/read_only_shared_memory_region.h"
#include "base/memory/ref_counted.h"
#include "base/memory/shared_memory.h"
+#include "base/memory/unsafe_shared_memory_region.h"
#include "base/process/process.h"
#include "content/common/content_export.h"
#include "ipc/ipc_platform_file.h"
@@ -119,6 +121,12 @@
// message fails, the returned handle is properly closed by the IPC system.
virtual base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle) = 0;
+ virtual base::UnsafeSharedMemoryRegion
+ ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region) = 0;
+ virtual base::ReadOnlySharedMemoryRegion
+ ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region) = 0;
// Returns true if the plugin is running in process.
virtual bool IsRunningInProcess() const = 0;
diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.cc b/content/renderer/pepper/mock_renderer_ppapi_host.cc
index ad9a0df..80e59655 100644
--- a/content/renderer/pepper/mock_renderer_ppapi_host.cc
+++ b/content/renderer/pepper/mock_renderer_ppapi_host.cc
@@ -85,6 +85,20 @@
return base::SharedMemoryHandle();
}
+base::UnsafeSharedMemoryRegion
+MockRendererPpapiHost::ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region) {
+ NOTIMPLEMENTED();
+ return base::UnsafeSharedMemoryRegion();
+}
+
+base::ReadOnlySharedMemoryRegion
+MockRendererPpapiHost::ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region) {
+ NOTIMPLEMENTED();
+ return base::ReadOnlySharedMemoryRegion();
+}
+
bool MockRendererPpapiHost::IsRunningInProcess() const { return false; }
std::string MockRendererPpapiHost::GetPluginName() const {
diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.h b/content/renderer/pepper/mock_renderer_ppapi_host.h
index 375c212..fedbf7c9 100644
--- a/content/renderer/pepper/mock_renderer_ppapi_host.h
+++ b/content/renderer/pepper/mock_renderer_ppapi_host.h
@@ -48,6 +48,10 @@
bool should_close_source) override;
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle) override;
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region) override;
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region) override;
bool IsRunningInProcess() const override;
std::string GetPluginName() const override;
void SetToExternalPluginHost() override;
diff --git a/content/renderer/pepper/pepper_proxy_channel_delegate_impl.cc b/content/renderer/pepper/pepper_proxy_channel_delegate_impl.cc
index c97d6a5..e026b2fe 100644
--- a/content/renderer/pepper/pepper_proxy_channel_delegate_impl.cc
+++ b/content/renderer/pepper/pepper_proxy_channel_delegate_impl.cc
@@ -39,4 +39,18 @@
return base::SharedMemory::DuplicateHandle(handle);
}
+base::UnsafeSharedMemoryRegion
+PepperProxyChannelDelegateImpl::ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) {
+ return region.Duplicate();
+}
+
+base::ReadOnlySharedMemoryRegion
+PepperProxyChannelDelegateImpl::ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) {
+ return region.Duplicate();
+}
+
} // namespace content
diff --git a/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h b/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h
index 6bfd2a1b..147c68cc 100644
--- a/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h
+++ b/content/renderer/pepper/pepper_proxy_channel_delegate_impl.h
@@ -25,6 +25,12 @@
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle,
base::ProcessId remote_pid) override;
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
};
} // namespace content
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.cc b/content/renderer/pepper/renderer_ppapi_host_impl.cc
index 2e9658a..9568688 100644
--- a/content/renderer/pepper/renderer_ppapi_host_impl.cc
+++ b/content/renderer/pepper/renderer_ppapi_host_impl.cc
@@ -237,6 +237,26 @@
return dispatcher_->ShareSharedMemoryHandleWithRemote(handle);
}
+base::UnsafeSharedMemoryRegion
+RendererPpapiHostImpl::ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region) {
+ if (!dispatcher_) {
+ DCHECK(is_running_in_process_);
+ return region.Duplicate();
+ }
+ return dispatcher_->ShareUnsafeSharedMemoryRegionWithRemote(region);
+}
+
+base::ReadOnlySharedMemoryRegion
+RendererPpapiHostImpl::ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region) {
+ if (!dispatcher_) {
+ DCHECK(is_running_in_process_);
+ return region.Duplicate();
+ }
+ return dispatcher_->ShareReadOnlySharedMemoryRegionWithRemote(region);
+}
+
bool RendererPpapiHostImpl::IsRunningInProcess() const {
return is_running_in_process_;
}
diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.h b/content/renderer/pepper/renderer_ppapi_host_impl.h
index d8d6edda..a94ef56a 100644
--- a/content/renderer/pepper/renderer_ppapi_host_impl.h
+++ b/content/renderer/pepper/renderer_ppapi_host_impl.h
@@ -89,6 +89,10 @@
bool should_close_source) override;
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle) override;
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region) override;
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region) override;
bool IsRunningInProcess() const override;
std::string GetPluginName() const override;
void SetToExternalPluginHost() override;
diff --git a/ppapi/nacl_irt/ppapi_dispatcher.cc b/ppapi/nacl_irt/ppapi_dispatcher.cc
index 6045526..b1ec3a9 100644
--- a/ppapi/nacl_irt/ppapi_dispatcher.cc
+++ b/ppapi/nacl_irt/ppapi_dispatcher.cc
@@ -80,6 +80,20 @@
return base::SharedMemoryHandle();
}
+base::UnsafeSharedMemoryRegion
+PpapiDispatcher::ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) {
+ return base::UnsafeSharedMemoryRegion();
+}
+
+base::ReadOnlySharedMemoryRegion
+PpapiDispatcher::ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) {
+ return base::ReadOnlySharedMemoryRegion();
+}
+
std::set<PP_Instance>* PpapiDispatcher::GetGloballySeenInstanceIDSet() {
return &instances_;
}
diff --git a/ppapi/nacl_irt/ppapi_dispatcher.h b/ppapi/nacl_irt/ppapi_dispatcher.h
index 953db41..03eac07 100644
--- a/ppapi/nacl_irt/ppapi_dispatcher.h
+++ b/ppapi/nacl_irt/ppapi_dispatcher.h
@@ -64,6 +64,12 @@
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle,
base::ProcessId remote_pid) override;
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
std::set<PP_Instance>* GetGloballySeenInstanceIDSet() override;
uint32_t Register(proxy::PluginDispatcher* plugin_dispatcher) override;
void Unregister(uint32_t plugin_dispatcher_id) override;
diff --git a/ppapi/proxy/ppapi_proxy_test.cc b/ppapi/proxy/ppapi_proxy_test.cc
index 587d0de3..bdb0173c 100644
--- a/ppapi/proxy/ppapi_proxy_test.cc
+++ b/ppapi/proxy/ppapi_proxy_test.cc
@@ -261,6 +261,20 @@
return base::SharedMemory::DuplicateHandle(handle);
}
+base::UnsafeSharedMemoryRegion PluginProxyTestHarness::PluginDelegateMock::
+ ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId /* remote_pid */) {
+ return region.Duplicate();
+}
+
+base::ReadOnlySharedMemoryRegion PluginProxyTestHarness::PluginDelegateMock::
+ ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId /* remote_pid */) {
+ return region.Duplicate();
+}
+
std::set<PP_Instance>*
PluginProxyTestHarness::PluginDelegateMock::GetGloballySeenInstanceIDSet() {
return &instance_id_set_;
@@ -498,6 +512,20 @@
return base::SharedMemory::DuplicateHandle(handle);
}
+base::UnsafeSharedMemoryRegion
+HostProxyTestHarness::DelegateMock::ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId /*remote_pid*/) {
+ return region.Duplicate();
+}
+
+base::ReadOnlySharedMemoryRegion
+HostProxyTestHarness::DelegateMock::ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId /*remote_pid*/) {
+ return region.Duplicate();
+}
+
// HostProxyTest ---------------------------------------------------------------
HostProxyTest::HostProxyTest() : HostProxyTestHarness(SINGLETON_GLOBALS) {
diff --git a/ppapi/proxy/ppapi_proxy_test.h b/ppapi/proxy/ppapi_proxy_test.h
index fdb373c..01ac6a7 100644
--- a/ppapi/proxy/ppapi_proxy_test.h
+++ b/ppapi/proxy/ppapi_proxy_test.h
@@ -2,6 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#ifndef PPAPI_PROXY_PPAPI_PROXY_TEST_H_
+#define PPAPI_PROXY_PPAPI_PROXY_TEST_H_
+
#include <stdint.h>
#include <map>
@@ -147,6 +150,12 @@
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle,
base::ProcessId remote_pid) override;
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
// PluginDispatcher::PluginDelegate implementation.
std::set<PP_Instance>* GetGloballySeenInstanceIDSet() override;
@@ -290,6 +299,12 @@
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle,
base::ProcessId remote_pid) override;
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) override;
private:
base::SingleThreadTaskRunner* ipc_task_runner_; // Weak
@@ -383,3 +398,5 @@
} // namespace proxy
} // namespace ppapi
+
+#endif // PPAPI_PROXY_PPAPI_PROXY_TEST_H_
diff --git a/ppapi/proxy/proxy_channel.cc b/ppapi/proxy/proxy_channel.cc
index 7a4c0aa0f..6aa566f 100644
--- a/ppapi/proxy/proxy_channel.cc
+++ b/ppapi/proxy/proxy_channel.cc
@@ -77,6 +77,27 @@
return delegate_->ShareSharedMemoryHandleWithRemote(handle, peer_pid_);
}
+base::UnsafeSharedMemoryRegion
+ProxyChannel::ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region) {
+ if (!channel_.get())
+ return base::UnsafeSharedMemoryRegion();
+
+ DCHECK(peer_pid_ != base::kNullProcessId);
+ return delegate_->ShareUnsafeSharedMemoryRegionWithRemote(region, peer_pid_);
+}
+
+base::ReadOnlySharedMemoryRegion
+ProxyChannel::ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region) {
+ if (!channel_.get())
+ return base::ReadOnlySharedMemoryRegion();
+
+ DCHECK(peer_pid_ != base::kNullProcessId);
+ return delegate_->ShareReadOnlySharedMemoryRegionWithRemote(region,
+ peer_pid_);
+}
+
bool ProxyChannel::Send(IPC::Message* msg) {
if (test_sink_)
return test_sink_->Send(msg);
diff --git a/ppapi/proxy/proxy_channel.h b/ppapi/proxy/proxy_channel.h
index 8a6af71e..ca41f58 100644
--- a/ppapi/proxy/proxy_channel.h
+++ b/ppapi/proxy/proxy_channel.h
@@ -9,7 +9,9 @@
#include "base/files/scoped_file.h"
#include "base/macros.h"
+#include "base/memory/read_only_shared_memory_region.h"
#include "base/memory/shared_memory.h"
+#include "base/memory/unsafe_shared_memory_region.h"
#include "base/process/process.h"
#include "build/build_config.h"
#include "ipc/ipc_listener.h"
@@ -63,6 +65,14 @@
virtual base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle,
base::ProcessId remote_pid) = 0;
+ virtual base::UnsafeSharedMemoryRegion
+ ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region,
+ base::ProcessId remote_pid) = 0;
+ virtual base::ReadOnlySharedMemoryRegion
+ ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region,
+ base::ProcessId remote_pid) = 0;
};
~ProxyChannel() override;
@@ -90,6 +100,10 @@
// is not closed by this operation.
base::SharedMemoryHandle ShareSharedMemoryHandleWithRemote(
const base::SharedMemoryHandle& handle);
+ base::UnsafeSharedMemoryRegion ShareUnsafeSharedMemoryRegionWithRemote(
+ const base::UnsafeSharedMemoryRegion& region);
+ base::ReadOnlySharedMemoryRegion ShareReadOnlySharedMemoryRegionWithRemote(
+ const base::ReadOnlySharedMemoryRegion& region);
// IPC::Sender implementation.
bool Send(IPC::Message* msg) override;