| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 
 | // Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_
#define CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_
#include <memory>
#include <string>
#include "base/memory/weak_ptr.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/speech_recognition_event_listener.h"
#include "media/mojo/mojom/speech_recognizer.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace network {
class PendingSharedURLLoaderFactory;
}
namespace url {
class Origin;
}
namespace content {
class SpeechRecognitionManager;
struct SpeechRecognitionSessionConfig;
struct SpeechRecognitionAudioForwarderConfig;
// SpeechRecognitionDispatcherHost is an implementation of the SpeechRecognizer
// interface that allows a RenderFrame to start a speech recognition session
// in the browser process, by communicating with SpeechRecognitionManager.
class SpeechRecognitionDispatcherHost : public media::mojom::SpeechRecognizer {
 public:
  SpeechRecognitionDispatcherHost(int render_process_id, int render_frame_id);
  SpeechRecognitionDispatcherHost(const SpeechRecognitionDispatcherHost&) =
      delete;
  SpeechRecognitionDispatcherHost& operator=(
      const SpeechRecognitionDispatcherHost&) = delete;
  ~SpeechRecognitionDispatcherHost() override;
  static void Create(
      int render_process_id,
      int render_frame_id,
      mojo::PendingReceiver<media::mojom::SpeechRecognizer> receiver);
  base::WeakPtr<SpeechRecognitionDispatcherHost> AsWeakPtr();
  // media::mojom::SpeechRecognizer implementation
  void Start(
      media::mojom::StartSpeechRecognitionRequestParamsPtr params) override;
 private:
  static void StartRequestOnUI(
      base::WeakPtr<SpeechRecognitionDispatcherHost>
          speech_recognition_dispatcher_host,
      int render_process_id,
      int render_frame_id,
      media::mojom::StartSpeechRecognitionRequestParamsPtr params);
  void StartSessionOnIO(
      media::mojom::StartSpeechRecognitionRequestParamsPtr params,
      int embedder_render_process_id,
      int embedder_render_frame_id,
      const url::Origin& origin,
      std::unique_ptr<network::PendingSharedURLLoaderFactory>
          pending_shared_url_loader_factory,
      const std::string& accept_language,
      bool can_render_frame_use_on_device);
  int CreateSession(
      const SpeechRecognitionSessionConfig& config,
      mojo::PendingReceiver<media::mojom::SpeechRecognitionSession>
          session_receiver,
      mojo::PendingRemote<media::mojom::SpeechRecognitionSessionClient>
          client_remote,
      std::optional<SpeechRecognitionAudioForwarderConfig>
          audio_forwarder_config,
      bool can_render_frame_use_on_device);
  const int render_process_id_;
  const int render_frame_id_;
  // Used for posting asynchronous tasks (on the IO thread) without worrying
  // about this class being destroyed in the meanwhile (due to browser shutdown)
  // since tasks pending on a destroyed WeakPtr are automatically discarded.
  base::WeakPtrFactory<SpeechRecognitionDispatcherHost> weak_factory_{this};
};
}  // namespace content
#endif  // CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_
 |