text: // 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 CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_MOCK_ADB_SERVER_H_
  #define CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_MOCK_ADB_SERVER_H_
  
  #include <string>
  
  #include "base/callback.h"
  
  // Single instance mock ADB server for use in browser tests. Runs on IO thread.
  
  // These methods can be called from any thread.
  enum FlushMode {
    FlushWithoutSize,
    FlushWithSize,
    FlushWithData
  };
  
  void StartMockAdbServer(FlushMode flush_mode);
  void StopMockAdbServer();
  
  // Part of mock server independent of transport.
  class MockAndroidConnection {
   public:
    class Delegate {
     public:
      virtual void SendSuccess(const std::string& message) {}
      virtual void SendRaw(const std::string& data) {}
      virtual void Close() {}
      virtual ~Delegate() {}
    };
    using Callback = base::Callback<void(const std::string&)>;
    MockAndroidConnection(Delegate* delegate,
                          const std::string& serial,
                          const std::string& command);
    virtual ~MockAndroidConnection();
  
    void Receive(const std::string& data);
  
   private:
    void ProcessCommand(const std::string& command);
    void SendHTTPResponse(const std::string& body);
  
    Delegate* delegate_;
    std::string serial_;
    std::string socket_name_;
    std::string request_;
  };
  
  #endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_MOCK_ADB_SERVER_H_
  