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_COPRESENCE_CHROME_WHISPERNET_CLIENT_H_
  #define CHROME_BROWSER_COPRESENCE_CHROME_WHISPERNET_CLIENT_H_
  
  #include <string>
  #include <vector>
  
  #include "base/callback.h"
  #include "base/macros.h"
  #include "components/copresence/public/copresence_constants.h"
  #include "components/copresence/public/whispernet_client.h"
  
  namespace content {
  class BrowserContext;
  }
  
  namespace extensions {
  namespace api {
  namespace copresence_private {
  struct AudioParameters;
  }
  }
  }
  
  namespace media {
  class AudioBusRefCounted;
  }
  
  // This class is responsible for communication with our ledger_proxy extension
  // that talks to the whispernet audio library.
  class ChromeWhispernetClient final : public copresence::WhispernetClient {
   public:
    // The browser context needs to outlive this class.
    explicit ChromeWhispernetClient(content::BrowserContext* browser_context);
    ~ChromeWhispernetClient() override;
  
    // WhispernetClient overrides:
    void Initialize(const copresence::SuccessCallback& init_callback) override;
    void Shutdown() override;
  
    void EncodeToken(const std::string& token,
                     copresence::AudioType type) override;
    void DecodeSamples(copresence::AudioType type,
                       const std::string& samples) override;
    void DetectBroadcast() override;
  
    void RegisterTokensCallback(
        const copresence::TokensCallback& tokens_callback) override;
    void RegisterSamplesCallback(
        const copresence::SamplesCallback& samples_callback) override;
    void RegisterDetectBroadcastCallback(
        const copresence::SuccessCallback& db_callback) override;
  
    copresence::TokensCallback GetTokensCallback() override;
    copresence::SamplesCallback GetSamplesCallback() override;
    copresence::SuccessCallback GetDetectBroadcastCallback() override;
    copresence::SuccessCallback GetInitializedCallback() override;
  
    static const char kWhispernetProxyExtensionId[];
  
   private:
    // Fire an event to initialize whispernet with the given parameters.
    void InitializeWhispernet(
        const extensions::api::copresence_private::AudioParameters& params);
  
    // This gets called twice; once when the proxy extension loads, the second
    // time when we have initialized the proxy extension's encoder and decoder.
    void OnExtensionLoaded(bool success);
  
    content::BrowserContext* browser_context_;
  
    copresence::SuccessCallback extension_loaded_callback_;
    copresence::SuccessCallback init_callback_;
  
    copresence::TokensCallback tokens_callback_;
    copresence::SamplesCallback samples_callback_;
    copresence::SuccessCallback db_callback_;
  
    bool extension_loaded_;
  
    DISALLOW_COPY_AND_ASSIGN(ChromeWhispernetClient);
  };
  
  #endif  // CHROME_BROWSER_COPRESENCE_CHROME_WHISPERNET_CLIENT_H_
  