Commit 5f6c57c8 authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

Migrate SpeechRecognitionController to use GC mojo wrappers.

No behavior change. This CL reduces potential risks of use-after-free bugs.

Bug: 1049056
Change-Id: Iac720bf6eed6f24e55fc017ce97eb7e2e4e52f54
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2132078Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756083}
parent 89abdb5d
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "third_party/blink/public/common/browser_interface_broker_proxy.h" #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
#include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/modules/speech/speech_grammar_list.h" #include "third_party/blink/renderer/modules/speech/speech_grammar_list.h"
#include "third_party/blink/renderer/modules/speech/speech_recognition.h" #include "third_party/blink/renderer/modules/speech/speech_recognition.h"
#include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/heap/heap.h"
...@@ -39,7 +40,7 @@ const char SpeechRecognitionController::kSupplementName[] = ...@@ -39,7 +40,7 @@ const char SpeechRecognitionController::kSupplementName[] =
"SpeechRecognitionController"; "SpeechRecognitionController";
SpeechRecognitionController::SpeechRecognitionController(LocalFrame& frame) SpeechRecognitionController::SpeechRecognitionController(LocalFrame& frame)
: Supplement<LocalFrame>(frame) {} : Supplement<LocalFrame>(frame), speech_recognizer_(frame.DomWindow()) {}
SpeechRecognitionController::~SpeechRecognitionController() { SpeechRecognitionController::~SpeechRecognitionController() {
// FIXME: Call m_client->pageDestroyed(); once we have implemented a client. // FIXME: Call m_client->pageDestroyed(); once we have implemented a client.
...@@ -72,18 +73,25 @@ void SpeechRecognitionController::Start( ...@@ -72,18 +73,25 @@ void SpeechRecognitionController::Start(
GetSpeechRecognizer()->Start(std::move(msg_params)); GetSpeechRecognizer()->Start(std::move(msg_params));
} }
void SpeechRecognitionController::Trace(Visitor* visitor) {
Supplement::Trace(visitor);
visitor->Trace(speech_recognizer_);
}
void ProvideSpeechRecognitionTo(LocalFrame& frame) { void ProvideSpeechRecognitionTo(LocalFrame& frame) {
SpeechRecognitionController::ProvideTo( SpeechRecognitionController::ProvideTo(
frame, MakeGarbageCollected<SpeechRecognitionController>(frame)); frame, MakeGarbageCollected<SpeechRecognitionController>(frame));
} }
mojo::Remote<mojom::blink::SpeechRecognizer>& mojom::blink::SpeechRecognizer*
SpeechRecognitionController::GetSpeechRecognizer() { SpeechRecognitionController::GetSpeechRecognizer() {
if (!speech_recognizer_) { if (!speech_recognizer_.is_bound()) {
GetSupplementable()->GetBrowserInterfaceBroker().GetInterface( GetSupplementable()->GetBrowserInterfaceBroker().GetInterface(
speech_recognizer_.BindNewPipeAndPassReceiver()); speech_recognizer_.BindNewPipeAndPassReceiver(
GetSupplementable()->DomWindow()->GetTaskRunner(
TaskType::kMiscPlatformAPI)));
} }
return speech_recognizer_; return speech_recognizer_.get();
} }
} // namespace blink } // namespace blink
...@@ -30,10 +30,11 @@ ...@@ -30,10 +30,11 @@
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/speech/speech_recognizer.mojom-blink.h" #include "third_party/blink/public/mojom/speech/speech_recognizer.mojom-blink.h"
#include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
namespace blink { namespace blink {
...@@ -64,10 +65,14 @@ class SpeechRecognitionController final ...@@ -64,10 +65,14 @@ class SpeechRecognitionController final
return Supplement<LocalFrame>::From<SpeechRecognitionController>(frame); return Supplement<LocalFrame>::From<SpeechRecognitionController>(frame);
} }
void Trace(Visitor* visitor) override;
private: private:
mojo::Remote<mojom::blink::SpeechRecognizer>& GetSpeechRecognizer(); mojom::blink::SpeechRecognizer* GetSpeechRecognizer();
mojo::Remote<mojom::blink::SpeechRecognizer> speech_recognizer_; HeapMojoRemote<mojom::blink::SpeechRecognizer,
HeapMojoWrapperMode::kWithoutContextObserver>
speech_recognizer_;
}; };
MODULES_EXPORT void ProvideSpeechRecognitionTo(LocalFrame& frame); MODULES_EXPORT void ProvideSpeechRecognitionTo(LocalFrame& frame);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment