blob: a66a98d476256eb3970dbbde2badc23cbebc797e [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_RENDERER_MOJO_MOJO_RENDER_PROCESS_OBSERVER_H_
#define CONTENT_RENDERER_MOJO_MOJO_RENDER_PROCESS_OBSERVER_H_
#include "base/memory/scoped_ptr.h"
#include "content/common/mojo/render_process.mojom.h"
#include "content/public/renderer/render_process_observer.h"
#include "ipc/ipc_platform_file.h"
#include "mojo/public/cpp/bindings/remote_ptr.h"
namespace mojo {
namespace common {
class MojoChannelInit;
}
namespace embedder {
struct ChannelInfo;
}
}
namespace content {
class RenderThread;
// RenderProcessObserver implementation that initializes the mojo channel when
// the right IPC is seen.
// MojoRenderProcessObserver deletes itself when the RenderProcess is shutdown.
class MojoRenderProcessObserver
: public content::RenderProcessObserver,
public RenderProcessMojo {
public:
MojoRenderProcessObserver(RenderThread* render_thread);
// RenderProcessObserver overrides:
virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void OnRenderProcessShutdown() OVERRIDE;
private:
virtual ~MojoRenderProcessObserver();
void OnChannelCreated(const IPC::PlatformFileForTransit& file);
// RenderProcessMojo overrides:
virtual void SetWebUIHandle(
int32 view_routing_id,
mojo::ScopedMessagePipeHandle web_ui_handle) OVERRIDE;
content::RenderThread* render_thread_;
scoped_ptr<mojo::common::MojoChannelInit> channel_init_;
mojo::RemotePtr<content::RenderProcessHostMojo> render_process_host_mojo_;
DISALLOW_COPY_AND_ASSIGN(MojoRenderProcessObserver);
};
} // namespace content
#endif // CONTENT_RENDERER_MOJO_MOJO_RENDER_PROCESS_OBSERVER_H_