1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef MOJO_SPY_SPY_SERVER_IMPL_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MOJO_SPY_SPY_SERVER_IMPL_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <map>
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/compiler_specific.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/ref_counted.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/system/core.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/spy/public/spy.mojom.h"
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "url/gurl.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SpyServerImpl :
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public base::RefCounted<SpyServerImpl>,
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public InterfaceImpl<spy_api::SpyServer> {
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SpyServerImpl();
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // spy_api::SpyServer implementation.
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void StartSession(
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      spy_api::VersionPtr version,
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const mojo::Callback<void(spy_api::Result,
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                mojo::String)>& callback) OVERRIDE;
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void StopSession(
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const mojo::Callback<void(spy_api::Result)>& callback) OVERRIDE;
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void TrackConnection(
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      uint32_t id,
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      spy_api::ConnectionOptions options,
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const mojo::Callback<void(spy_api::Result)>& callback) OVERRIDE;
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnConnectionError() OVERRIDE;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // SpyServerImpl own methods.
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnIntercept(const GURL& url);
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ScopedMessagePipeHandle ServerPipe();
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  friend class base::RefCounted<SpyServerImpl>;
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~SpyServerImpl();
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Item models the entities that we track by IDs.
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  struct Item;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MessagePipe pipe_;
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool has_session_;
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::map<uint32_t, Item*> items_;
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace mojo
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // MOJO_SPY_SPY_SERVER_IMPL_H_
60