/
tts.patch
173 lines (159 loc) · 6.86 KB
/
tts.patch
1
2
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Heilig Benedek <benecene@gmail.com>
Date: Thu, 18 Oct 2018 17:08:03 -0700
Subject: tts.patch
* Adds patch in //chrome/browser/speech/tts_controller_impl.cc
to disable calls using chrome profile class.
* Adds patch in //chrome/browser/speech/tts_message_filter.cc
to remove reference to browser context when its signaled for
destruction from content layer.
diff --git a/chrome/browser/speech/tts_controller_delegate_impl.cc b/chrome/browser/speech/tts_controller_delegate_impl.cc
index e96b0cef21bec8925d4adf1e8692dc00f5ec6f5f..7ec07534aa3628873c9fe784fa0235f3c5c7f15f 100644
--- a/chrome/browser/speech/tts_controller_delegate_impl.cc
+++ b/chrome/browser/speech/tts_controller_delegate_impl.cc
@@ -213,6 +213,7 @@ void TtsControllerDelegateImpl::UpdateUtteranceDefaultsFromPrefs(
const PrefService* TtsControllerDelegateImpl::GetPrefService(
content::TtsUtterance* utterance) {
const PrefService* prefs = nullptr;
+#if 0
// The utterance->GetBrowserContext() is null in tests.
if (utterance->GetBrowserContext()) {
const Profile* profile =
@@ -220,6 +221,7 @@ const PrefService* TtsControllerDelegateImpl::GetPrefService(
if (profile)
prefs = profile->GetPrefs();
}
+#endif
return prefs;
}
diff --git a/chrome/browser/speech/tts_message_filter.cc b/chrome/browser/speech/tts_message_filter.cc
index a7df91b0f6568215313899b577600feaa8c7ba31..8bccd503bb1648ef1ba07b7ff0fded6caaff8a65 100644
--- a/chrome/browser/speech/tts_message_filter.cc
+++ b/chrome/browser/speech/tts_message_filter.cc
@@ -10,8 +10,11 @@
#include "base/logging.h"
#include "base/task/post_task.h"
#include "chrome/browser/chrome_notification_types.h"
+#if 0
#include "chrome/browser/profiles/profile.h"
+#endif
#include "chrome/common/tts_messages.h"
+#include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/notification_service.h"
@@ -19,6 +22,29 @@
using content::BrowserThread;
+namespace {
+
+class TtsMessageFilterShutdownNotifierFactory
+ : public BrowserContextKeyedServiceShutdownNotifierFactory {
+ public:
+ static TtsMessageFilterShutdownNotifierFactory* GetInstance() {
+ return base::Singleton<TtsMessageFilterShutdownNotifierFactory>::get();
+ }
+
+ private:
+ friend struct base::DefaultSingletonTraits<
+ TtsMessageFilterShutdownNotifierFactory>;
+
+ TtsMessageFilterShutdownNotifierFactory()
+ : BrowserContextKeyedServiceShutdownNotifierFactory("TtsMessageFilter") {}
+
+ ~TtsMessageFilterShutdownNotifierFactory() override {}
+
+ DISALLOW_COPY_AND_ASSIGN(TtsMessageFilterShutdownNotifierFactory);
+};
+
+} // namespace
+
TtsMessageFilter::TtsMessageFilter(content::BrowserContext* browser_context)
: BrowserMessageFilter(TtsMsgStart),
browser_context_(browser_context),
@@ -26,28 +52,27 @@ TtsMessageFilter::TtsMessageFilter(content::BrowserContext* browser_context)
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
content::TtsController::GetInstance()->AddVoicesChangedDelegate(this);
- // TODO(dmazzoni): make it so that we can listen for a BrowserContext
- // being destroyed rather than a Profile. http://crbug.com/444668
- Profile* profile = Profile::FromBrowserContext(browser_context);
- notification_registrar_.Add(this,
- chrome::NOTIFICATION_PROFILE_DESTROYED,
- content::Source<Profile>(profile));
+ browser_context_shutdown_notifier_ =
+ TtsMessageFilterShutdownNotifierFactory::GetInstance()
+ ->Get(browser_context)
+ ->Subscribe(base::Bind(&TtsMessageFilter::BrowserContextDestroyed,
+ base::RetainedRef(this)));
// Balanced in OnChannelClosingInUIThread() to keep the ref-count be non-zero
// until all pointers to this class are invalidated.
AddRef();
}
-void TtsMessageFilter::OverrideThreadForMessage(
- const IPC::Message& message, BrowserThread::ID* thread) {
+void TtsMessageFilter::OverrideThreadForMessage(const IPC::Message& message,
+ BrowserThread::ID* thread) {
switch (message.type()) {
- case TtsHostMsg_InitializeVoiceList::ID:
- case TtsHostMsg_Speak::ID:
- case TtsHostMsg_Pause::ID:
- case TtsHostMsg_Resume::ID:
- case TtsHostMsg_Cancel::ID:
- *thread = BrowserThread::UI;
- break;
+ case TtsHostMsg_InitializeVoiceList::ID:
+ case TtsHostMsg_Speak::ID:
+ case TtsHostMsg_Pause::ID:
+ case TtsHostMsg_Resume::ID:
+ case TtsHostMsg_Cancel::ID:
+ *thread = BrowserThread::UI;
+ break;
}
}
@@ -211,10 +236,8 @@ void TtsMessageFilter::Cleanup() {
content::TtsController::GetInstance()->RemoveUtteranceEventDelegate(this);
}
-void TtsMessageFilter::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
+void TtsMessageFilter::BrowserContextDestroyed() {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
browser_context_ = nullptr;
- notification_registrar_.RemoveAll();
+ browser_context_shutdown_notifier_.reset();
}
diff --git a/chrome/browser/speech/tts_message_filter.h b/chrome/browser/speech/tts_message_filter.h
index ffb607fbb275b0a75dba592f2f5f5afb881214e2..99780e56674af749a231f0e85b89e6a6ed3743d6 100644
--- a/chrome/browser/speech/tts_message_filter.h
+++ b/chrome/browser/speech/tts_message_filter.h
@@ -8,6 +8,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/synchronization/lock.h"
+#include "components/keyed_service/core/keyed_service_shutdown_notifier.h"
#include "content/public/browser/browser_message_filter.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/notification_observer.h"
@@ -21,7 +22,6 @@ class BrowserContext;
struct TtsUtteranceRequest;
class TtsMessageFilter : public content::BrowserMessageFilter,
- public content::NotificationObserver,
public content::UtteranceEventDelegate,
public content::VoicesChangedDelegate {
public:
@@ -64,15 +64,13 @@ class TtsMessageFilter : public content::BrowserMessageFilter,
// about to be deleted.
bool Valid();
- // content::NotificationObserver implementation.
- void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) override;
+ void BrowserContextDestroyed();
+ std::unique_ptr<KeyedServiceShutdownNotifier::Subscription>
+ browser_context_shutdown_notifier_;
content::BrowserContext* browser_context_;
mutable base::Lock mutex_;
mutable bool valid_;
- content::NotificationRegistrar notification_registrar_;
DISALLOW_COPY_AND_ASSIGN(TtsMessageFilter);
};