1// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_CONTROL_MESSAGE_HANDLER_H_
6#define MOJO_PUBLIC_CPP_BINDINGS_LIB_CONTROL_MESSAGE_HANDLER_H_
7
8#include <stdint.h>
9
10#include "base/macros.h"
11#include "mojo/public/cpp/bindings/lib/serialization_context.h"
12#include "mojo/public/cpp/bindings/message.h"
13
14namespace mojo {
15namespace internal {
16
17// Handlers for request messages defined in interface_control_messages.mojom.
18class ControlMessageHandler : public MessageReceiverWithResponderStatus {
19 public:
20  static bool IsControlMessage(const Message* message);
21
22  explicit ControlMessageHandler(uint32_t interface_version);
23  ~ControlMessageHandler() override;
24
25  // Call the following methods only if IsControlMessage() returned true.
26  bool Accept(Message* message) override;
27  // Takes ownership of |responder|.
28  bool AcceptWithResponder(Message* message,
29                           MessageReceiverWithStatus* responder) override;
30
31 private:
32  bool Run(Message* message, MessageReceiverWithStatus* responder);
33  bool RunOrClosePipe(Message* message);
34
35  uint32_t interface_version_;
36  SerializationContext context_;
37
38  DISALLOW_COPY_AND_ASSIGN(ControlMessageHandler);
39};
40
41}  // namespace internal
42}  // namespace mojo
43
44#endif  // MOJO_PUBLIC_CPP_BINDINGS_LIB_CONTROL_MESSAGE_HANDLER_H_
45