| Index: ipc/ipc_sync_message_filter.h
|
| diff --git a/ipc/ipc_sync_message_filter.h b/ipc/ipc_sync_message_filter.h
|
| index 3818ab2a9178821fadc9dff6c099a498ae10ac2b..4e3f9b8bf926984dd7cdf8e4d9a2b46b04128701 100644
|
| --- a/ipc/ipc_sync_message_filter.h
|
| +++ b/ipc/ipc_sync_message_filter.h
|
| @@ -17,6 +17,10 @@
|
| #include "ipc/ipc_sync_message.h"
|
| #include "ipc/message_filter.h"
|
| #include "ipc/mojo_event.h"
|
| +#include "mojo/public/cpp/bindings/associated_group.h"
|
| +#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
|
| +#include "mojo/public/cpp/bindings/associated_interface_request.h"
|
| +#include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h"
|
|
|
| namespace base {
|
| class SingleThreadTaskRunner;
|
| @@ -42,6 +46,20 @@ class IPC_EXPORT SyncMessageFilter : public MessageFilter, public Sender {
|
| void OnChannelClosing() override;
|
| bool OnMessageReceived(const Message& message) override;
|
|
|
| + // Binds an associated interface proxy to an interface in the browser process.
|
| + // Interfaces acquired through this method are associated with the IPC Channel
|
| + // and as such retain FIFO with legacy IPC messages.
|
| + //
|
| + // NOTE: This must ONLY be called on the Channel's thread, after
|
| + // OnFilterAdded.
|
| + template <typename Interface>
|
| + void GetRemoteAssociatedInterface(
|
| + mojo::AssociatedInterfacePtr<Interface>* proxy) {
|
| + mojo::AssociatedInterfaceRequest<Interface> request =
|
| + mojo::GetProxy(proxy, &channel_associated_group_);
|
| + GetGenericRemoteAssociatedInterface(Interface::Name_, request.PassHandle());
|
| + }
|
| +
|
| protected:
|
| explicit SyncMessageFilter(base::WaitableEvent* shutdown_event);
|
| ~SyncMessageFilter() override;
|
| @@ -59,6 +77,11 @@ class IPC_EXPORT SyncMessageFilter : public MessageFilter, public Sender {
|
| void OnShutdownEventSignaled(base::WaitableEvent* event);
|
| void OnIOMessageLoopDestroyed();
|
|
|
| + // NOTE: This must ONLY be called on the Channel's thread.
|
| + void GetGenericRemoteAssociatedInterface(
|
| + const std::string& interface_name,
|
| + mojo::ScopedInterfaceEndpointHandle handle);
|
| +
|
| // The channel to which this filter was added.
|
| Channel* channel_;
|
|
|
| @@ -89,6 +112,10 @@ class IPC_EXPORT SyncMessageFilter : public MessageFilter, public Sender {
|
|
|
| scoped_refptr<IOMessageLoopObserver> io_message_loop_observer_;
|
|
|
| + // The AssociatedGroup for the underlying channel, used to construct new
|
| + // associated interface endpoints.
|
| + mojo::AssociatedGroup channel_associated_group_;
|
| +
|
| base::WeakPtrFactory<SyncMessageFilter> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SyncMessageFilter);
|
|
|