1// Copyright 2014 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 CONTENT_SHELL_IPC_ECHO_H_
6#define CONTENT_SHELL_IPC_ECHO_H_
7
8#include <utility>
9#include <vector>
10#include "base/compiler_specific.h"
11#include "base/memory/weak_ptr.h"
12#include "third_party/WebKit/public/web/WebDocument.h"
13
14namespace blink {
15class WebFrame;
16}
17
18namespace IPC {
19class Sender;
20}
21
22namespace content {
23
24// This class is for writing micro benchmarks exercising underlying
25// IPC::Channel using HTML and JavaScript.
26//
27// TODO(morrita): The benchmark effort tries to makesure that
28// IPC::ChannelMojo is as performant as native IPC::Channel
29// implementations. Currently IPC::ChannelMojo is hidden behind
30// "--enable-renderer-mojo-channel". Once it is turned on by default.
31// we no longer need this class and should remove it.
32class IPCEcho : public base::SupportsWeakPtr<IPCEcho> {
33 public:
34  IPCEcho(blink::WebDocument document, IPC::Sender* sender, int routing_id);
35  ~IPCEcho();
36
37  void RequestEcho(int id, int size);
38  void DidRespondEcho(int id, int size);
39  void Install(blink::WebFrame*);
40
41  int last_echo_id() const { return last_echo_id_; }
42  int last_echo_size() const { return last_echo_size_; }
43
44  blink::WebDocument document_;
45  IPC::Sender* sender_;
46  int routing_id_;
47  int last_echo_id_;
48  int last_echo_size_;
49
50  base::WeakPtrFactory<IPCEcho> weak_factory_;
51
52};
53
54}  // namespace content
55
56#endif  // CONTENT_SHELL_IPC_ECHO_DISPATCHER_H_
57