Bug 1169653 - Patch limits use of the speech recognition API in JS to certified apps or apps with the proper flags set. r=smaug

This commit is contained in:
Kelly Davis 2015-06-10 02:20:00 -04:00
Родитель 53184296fe
Коммит 284e30b335
11 изменённых файлов: 28 добавлений и 22 удалений

Просмотреть файл

@ -9,6 +9,7 @@
#include "nsCOMPtr.h"
#include "nsCycleCollectionParticipant.h"
#include "mozilla/dom/BindingUtils.h"
#include "mozilla/dom/SpeechRecognitionBinding.h"
#include "mozilla/dom/MediaStreamTrackBinding.h"
#include "mozilla/dom/MediaStreamError.h"
@ -143,6 +144,15 @@ SpeechRecognition::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
return SpeechRecognitionBinding::Wrap(aCx, this, aGivenProto);
}
bool
SpeechRecognition::IsAuthorized(JSContext* aCx, JSObject* aGlobal)
{
bool enableTests = Preferences::GetBool(TEST_PREFERENCE_ENABLE);
bool enableRecognitionEnable = Preferences::GetBool(TEST_PREFERENCE_RECOGNITION_ENABLE);
bool enableRecognitionForceEnable = Preferences::GetBool(TEST_PREFERENCE_RECOGNITION_FORCE_ENABLE);
return (IsInCertifiedApp(aCx, aGlobal) || enableRecognitionForceEnable || enableTests) && enableRecognitionEnable;
}
already_AddRefed<SpeechRecognition>
SpeechRecognition::Constructor(const GlobalObject& aGlobal,
ErrorResult& aRv)

Просмотреть файл

@ -38,6 +38,8 @@ namespace dom {
#define TEST_PREFERENCE_ENABLE "media.webspeech.test.enable"
#define TEST_PREFERENCE_FAKE_FSM_EVENTS "media.webspeech.test.fake_fsm_events"
#define TEST_PREFERENCE_FAKE_RECOGNITION_SERVICE "media.webspeech.test.fake_recognition_service"
#define TEST_PREFERENCE_RECOGNITION_ENABLE "media.webspeech.recognition.enable"
#define TEST_PREFERENCE_RECOGNITION_FORCE_ENABLE "media.webspeech.recognition.force_enable"
#define SPEECH_RECOGNITION_TEST_EVENT_REQUEST_TOPIC "SpeechRecognitionTest:RequestEvent"
#define SPEECH_RECOGNITION_TEST_END_TOPIC "SpeechRecognitionTest:End"
@ -65,6 +67,8 @@ public:
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
static bool IsAuthorized(JSContext* aCx, JSObject* aGlobal);
static already_AddRefed<SpeechRecognition>
Constructor(const GlobalObject& aGlobal, ErrorResult& aRv);

Просмотреть файл

@ -938,22 +938,6 @@ var interfaceNamesInGlobalScope =
{name: "SourceBuffer", linux: false, release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SourceBufferList", linux: false, release: false},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechRecognition", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechRecognitionError", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechRecognitionAlternative", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechRecognitionResult", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechRecognitionResultList", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechRecognitionEvent", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechGrammar", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechGrammarList", b2g: true, nightly: true},
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "SpeechSynthesisEvent", b2g: true},
// IMPORTANT: Do not change this list without review from a DOM peer!

Просмотреть файл

@ -11,7 +11,8 @@
*/
[Constructor,
Pref="media.webspeech.recognition.enable"]
Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized"]
interface SpeechGrammar {
[Throws]
attribute DOMString src;

Просмотреть файл

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Constructor, Pref="media.webspeech.recognition.enable"]
[Constructor, Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized"]
interface SpeechGrammarList {
readonly attribute unsigned long length;
[Throws]

Просмотреть файл

@ -11,7 +11,8 @@
*/
[Constructor,
Pref="media.webspeech.recognition.enable"]
Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized"]
interface SpeechRecognition : EventTarget {
// recognition parameters
[Throws]

Просмотреть файл

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Pref="media.webspeech.recognition.enable"]
[Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized"]
interface SpeechRecognitionAlternative {
readonly attribute DOMString transcript;
readonly attribute float confidence;

Просмотреть файл

@ -16,6 +16,7 @@ enum SpeechRecognitionErrorCode {
};
[Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized",
Constructor(DOMString type, optional SpeechRecognitionErrorInit eventInitDict)]
interface SpeechRecognitionError : Event
{

Просмотреть файл

@ -6,6 +6,7 @@
interface nsISupports;
[Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized",
Constructor(DOMString type, optional SpeechRecognitionEventInit eventInitDict)]
interface SpeechRecognitionEvent : Event
{

Просмотреть файл

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Pref="media.webspeech.recognition.enable"]
[Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized"]
interface SpeechRecognitionResult {
readonly attribute unsigned long length;
getter SpeechRecognitionAlternative item(unsigned long index);

Просмотреть файл

@ -10,7 +10,8 @@
* liability, trademark and document use rules apply.
*/
[Pref="media.webspeech.recognition.enable"]
[Pref="media.webspeech.recognition.enable",
Func="SpeechRecognition::IsAuthorized"]
interface SpeechRecognitionResultList {
readonly attribute unsigned long length;
getter SpeechRecognitionResult item(unsigned long index);