Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(948)

Unified Diff: content/browser/speech/speech_recognition_dispatcher_host.h

Issue 636863003: Make SpeechRecognition per RenderFrame instead of per RenderView. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/speech/speech_recognition_dispatcher_host.h
diff --git a/content/browser/speech/speech_recognition_dispatcher_host.h b/content/browser/speech/speech_recognition_dispatcher_host.h
index 34b333207e8e51f6dae30d29c513003fb873c947..5e0aac28bc4fcd5e96fd50312cd9810f56f0b7a5 100644
--- a/content/browser/speech/speech_recognition_dispatcher_host.h
+++ b/content/browser/speech/speech_recognition_dispatcher_host.h
@@ -5,31 +5,38 @@
#ifndef CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_
#define CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_DISPATCHER_HOST_H_
+#include <map>
+
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "content/common/content_export.h"
#include "content/public/browser/browser_message_filter.h"
+#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/speech_recognition_event_listener.h"
-#include "net/url_request/url_request_context_getter.h"
struct SpeechRecognitionHostMsg_StartRequest_Params;
+namespace net {
+class URLRequestContextGetter;
+} // namespace net
+
namespace content {
class SpeechRecognitionManager;
+class WebContents;
struct SpeechRecognitionResult;
+struct SpeechRecognitionSessionContext;
+struct SpeechRecognitionSessionConfig;
// SpeechRecognitionDispatcherHost is a delegate for Speech API messages used by
-// RenderMessageFilter. Basically it acts as a proxy, relaying the events coming
-// from the SpeechRecognitionManager to IPC messages (and vice versa).
-// It's the complement of SpeechRecognitionDispatcher (owned by RenderView).
+// BrowserMessageFilter. Basically it acts as a proxy, relaying the events
+// coming from the SpeechRecognitionManager to IPC messages (and vice versa).
+// It's the complement of SpeechRecognitionDispatcher (owned by RenderFrame).
class CONTENT_EXPORT SpeechRecognitionDispatcherHost
: public BrowserMessageFilter,
public SpeechRecognitionEventListener {
public:
- SpeechRecognitionDispatcherHost(
- int render_process_id,
- net::URLRequestContextGetter* context_getter);
+ explicit SpeechRecognitionDispatcherHost(int render_process_id);
base::WeakPtr<SpeechRecognitionDispatcherHost> AsWeakPtr();
@@ -51,32 +58,39 @@ class CONTENT_EXPORT SpeechRecognitionDispatcherHost
// BrowserMessageFilter implementation.
void OnDestruct() const override;
- bool OnMessageReceived(const IPC::Message& message) override;
+ void OnChannelClosing() override;
void OverrideThreadForMessage(const IPC::Message& message,
BrowserThread::ID* thread) override;
-
- void OnChannelClosing() override;
+ bool OnMessageReceived(const IPC::Message& message) override;
private:
friend class base::DeleteHelper<SpeechRecognitionDispatcherHost>;
friend class BrowserThread;
+ class FrameDeletedObserver;
+
~SpeechRecognitionDispatcherHost() override;
void OnStartRequest(
const SpeechRecognitionHostMsg_StartRequest_Params& params);
- void OnStartRequestOnIO(
- int embedder_render_process_id,
- int embedder_render_view_id,
+ void StartSession(
const SpeechRecognitionHostMsg_StartRequest_Params& params,
- int params_render_frame_id,
+ const SpeechRecognitionSessionContext& context,
+ net::URLRequestContextGetter* url_request_context_getter,
bool filter_profanities);
- void OnAbortRequest(int render_view_id, int request_id);
- void OnStopCaptureRequest(int render_view_id, int request_id);
- void OnAbortAllRequests(int render_view_id);
+ void OnAbortRequest(int render_frame_id, int request_id);
+ void OnStopCaptureRequest(int render_frame_id, int request_id);
+ void OnAbortAllRequests(int render_frame_id);
+
+ // These methods must be called on the UI thread.
+ void CreateObserverFor(WebContents* web_contents);
+ void RemoveObserverFor(WebContents* web_contents);
+ void AbortAllRequestsFromUI(int render_frame_id);
int render_process_id_;
- scoped_refptr<net::URLRequestContextGetter> context_getter_;
+
+ using FrameDeletedObservers = std::map<WebContents*, FrameDeletedObserver*>;
+ FrameDeletedObservers frame_deleted_observers_;
// Used for posting asynchronous tasks (on the IO thread) without worrying
// about this class being destroyed in the meanwhile (due to browser shutdown)

Powered by Google App Engine
This is Rietveld 408576698