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

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: fixes threading issues Created 6 years, 1 month 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..b46c7f322dcc62e549ab533d4d33017374984712 100644
--- a/content/browser/speech/speech_recognition_dispatcher_host.h
+++ b/content/browser/speech/speech_recognition_dispatcher_host.h
@@ -8,28 +8,34 @@
#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/speech_recognition_event_listener.h"
-#include "net/url_request/url_request_context_getter.h"
+#include "content/public/browser/web_contents_observer.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).
+// WebContents. 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).
+// It MUST be deleted from the BrowserThread::IO thread.
class CONTENT_EXPORT SpeechRecognitionDispatcherHost
- : public BrowserMessageFilter,
+ : public WebContentsObserver,
Charlie Reis 2014/12/01 23:49:43 What benefits are we getting from making this a We
mlamouri (slow - plz ping) 2014/12/08 17:41:04 The only real benefit from using WebContentsObserv
Charlie Reis 2014/12/08 20:02:57 Ah, I see. Yes, I think we can handle that more c
mlamouri (slow - plz ping) 2014/12/08 21:08:00 Done. I haven't done anything with RenderFrameDele
Charlie Reis 2014/12/09 00:52:33 Is this a bug, though? We're now tracking things
public SpeechRecognitionEventListener {
public:
- SpeechRecognitionDispatcherHost(
- int render_process_id,
- net::URLRequestContextGetter* context_getter);
+ explicit SpeechRecognitionDispatcherHost(WebContents* web_contents);
+ virtual ~SpeechRecognitionDispatcherHost();
base::WeakPtr<SpeechRecognitionDispatcherHost> AsWeakPtr();
@@ -49,34 +55,30 @@ class CONTENT_EXPORT SpeechRecognitionDispatcherHost
float volume,
float noise_volume) override;
- // BrowserMessageFilter implementation.
- void OnDestruct() const override;
- bool OnMessageReceived(const IPC::Message& message) override;
- void OverrideThreadForMessage(const IPC::Message& message,
- BrowserThread::ID* thread) override;
-
- void OnChannelClosing() override;
+ // WebContentsObserver implementation.
+ bool OnMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host) override;
+ void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
private:
- friend class base::DeleteHelper<SpeechRecognitionDispatcherHost>;
- friend class BrowserThread;
-
- ~SpeechRecognitionDispatcherHost() override;
-
void OnStartRequest(
+ RenderFrameHost* render_frame_host,
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);
-
- int render_process_id_;
- scoped_refptr<net::URLRequestContextGetter> context_getter_;
+ void OnAbortRequest(RenderFrameHost* render_frame_host, int request_id);
+ void OnAbortRequestIO(int render_process_id,
Charlie Reis 2014/12/01 23:49:43 nit: AbortRequestOnIO (similar below)
+ int render_frame_id,
+ int request_id);
+ void OnStopCaptureRequest(RenderFrameHost* render_frame_host, int request_id);
+ void OnStopCaptureRequestIO(int render_process_id,
+ int render_frame_id,
+ int request_id);
+ void OnAbortAllRequests(RenderFrameHost* render_frame_host);
+ void OnAbortAllRequestsIO(int render_process_id, 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)

Powered by Google App Engine
This is Rietveld 408576698