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

Side by Side Diff: chrome/browser/speech/extension_api/tts_engine_extension_api.cc

Issue 58513003: Disable remote TTS services when offline. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/speech/extension_api/tts_engine_extension_api.h" 5 #include "chrome/browser/speech/extension_api/tts_engine_extension_api.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/browser/extensions/event_router.h" 11 #include "chrome/browser/extensions/event_router.h"
12 #include "chrome/browser/extensions/extension_host.h" 12 #include "chrome/browser/extensions/extension_host.h"
13 #include "chrome/browser/extensions/extension_process_manager.h" 13 #include "chrome/browser/extensions/extension_process_manager.h"
14 #include "chrome/browser/extensions/extension_service.h" 14 #include "chrome/browser/extensions/extension_service.h"
15 #include "chrome/browser/extensions/extension_system.h" 15 #include "chrome/browser/extensions/extension_system.h"
16 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/speech/extension_api/tts_extension_api.h" 17 #include "chrome/browser/speech/extension_api/tts_extension_api.h"
18 #include "chrome/browser/speech/extension_api/tts_extension_api_constants.h" 18 #include "chrome/browser/speech/extension_api/tts_extension_api_constants.h"
19 #include "chrome/browser/speech/tts_controller.h" 19 #include "chrome/browser/speech/tts_controller.h"
20 #include "chrome/common/extensions/api/speech/tts_engine_manifest_handler.h" 20 #include "chrome/common/extensions/api/speech/tts_engine_manifest_handler.h"
21 #include "chrome/common/extensions/extension.h" 21 #include "chrome/common/extensions/extension.h"
22 #include "chrome/common/extensions/extension_messages.h" 22 #include "chrome/common/extensions/extension_messages.h"
23 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
24 #include "content/public/browser/render_view_host.h" 24 #include "content/public/browser/render_view_host.h"
25 #include "content/public/common/console_message_level.h" 25 #include "content/public/common/console_message_level.h"
26 #include "net/base/network_change_notifier.h"
26 27
27 using extensions::EventRouter; 28 using extensions::EventRouter;
28 using extensions::Extension; 29 using extensions::Extension;
29 using extensions::ExtensionSystem; 30 using extensions::ExtensionSystem;
30 31
31 namespace constants = tts_extension_api_constants; 32 namespace constants = tts_extension_api_constants;
32 33
33 namespace tts_engine_events { 34 namespace tts_engine_events {
34 const char kOnSpeak[] = "ttsEngine.onSpeak"; 35 const char kOnSpeak[] = "ttsEngine.onSpeak";
35 const char kOnStop[] = "ttsEngine.onStop"; 36 const char kOnStop[] = "ttsEngine.onStop";
(...skipping 22 matching lines...) Expand all
58 }; 59 };
59 } // anonymous namespace 60 } // anonymous namespace
60 61
61 void GetExtensionVoices(Profile* profile, std::vector<VoiceData>* out_voices) { 62 void GetExtensionVoices(Profile* profile, std::vector<VoiceData>* out_voices) {
62 ExtensionService* service = profile->GetExtensionService(); 63 ExtensionService* service = profile->GetExtensionService();
63 DCHECK(service); 64 DCHECK(service);
64 EventRouter* event_router = 65 EventRouter* event_router =
65 ExtensionSystem::Get(profile)->event_router(); 66 ExtensionSystem::Get(profile)->event_router();
66 DCHECK(event_router); 67 DCHECK(event_router);
67 68
69 bool is_offline = (net::NetworkChangeNotifier::GetConnectionType() ==
70 net::NetworkChangeNotifier::CONNECTION_NONE);
David Tseng 2013/11/04 23:55:17 What happens if you go offline after retrieving vo
dmazzoni 2013/11/05 18:11:14 Yes, that will happen automatically, because when
71
68 const ExtensionSet* extensions = service->extensions(); 72 const ExtensionSet* extensions = service->extensions();
69 ExtensionSet::const_iterator iter; 73 ExtensionSet::const_iterator iter;
70 for (iter = extensions->begin(); iter != extensions->end(); ++iter) { 74 for (iter = extensions->begin(); iter != extensions->end(); ++iter) {
71 const Extension* extension = iter->get(); 75 const Extension* extension = iter->get();
72 76
73 if (!event_router->ExtensionHasEventListener( 77 if (!event_router->ExtensionHasEventListener(
74 extension->id(), tts_engine_events::kOnSpeak) || 78 extension->id(), tts_engine_events::kOnSpeak) ||
75 !event_router->ExtensionHasEventListener( 79 !event_router->ExtensionHasEventListener(
76 extension->id(), tts_engine_events::kOnStop)) { 80 extension->id(), tts_engine_events::kOnStop)) {
77 continue; 81 continue;
78 } 82 }
79 83
80 const std::vector<extensions::TtsVoice>* tts_voices = 84 const std::vector<extensions::TtsVoice>* tts_voices =
81 extensions::TtsVoice::GetTtsVoices(extension); 85 extensions::TtsVoice::GetTtsVoices(extension);
82 if (!tts_voices) 86 if (!tts_voices)
83 continue; 87 continue;
84 88
85 for (size_t i = 0; i < tts_voices->size(); ++i) { 89 for (size_t i = 0; i < tts_voices->size(); ++i) {
86 const extensions::TtsVoice& voice = tts_voices->at(i); 90 const extensions::TtsVoice& voice = tts_voices->at(i);
87 91
92 // Don't return remote voices when the system is offline.
93 if (voice.remote && is_offline)
94 continue;
95
88 out_voices->push_back(VoiceData()); 96 out_voices->push_back(VoiceData());
89 VoiceData& result_voice = out_voices->back(); 97 VoiceData& result_voice = out_voices->back();
90 98
91 result_voice.native = false; 99 result_voice.native = false;
92 result_voice.name = voice.voice_name; 100 result_voice.name = voice.voice_name;
93 result_voice.lang = voice.lang; 101 result_voice.lang = voice.lang;
94 result_voice.remote = voice.remote; 102 result_voice.remote = voice.remote;
95 result_voice.extension_id = extension->id(); 103 result_voice.extension_id = extension->id();
96 if (voice.gender == constants::kGenderMale) 104 if (voice.gender == constants::kGenderMale)
97 result_voice.gender = TTS_GENDER_MALE; 105 result_voice.gender = TTS_GENDER_MALE;
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 utterance_id, TTS_EVENT_PAUSE, char_index, std::string()); 260 utterance_id, TTS_EVENT_PAUSE, char_index, std::string());
253 } else if (event_type == constants::kEventTypeResume) { 261 } else if (event_type == constants::kEventTypeResume) {
254 controller->OnTtsEvent( 262 controller->OnTtsEvent(
255 utterance_id, TTS_EVENT_RESUME, char_index, std::string()); 263 utterance_id, TTS_EVENT_RESUME, char_index, std::string());
256 } else { 264 } else {
257 EXTENSION_FUNCTION_VALIDATE(false); 265 EXTENSION_FUNCTION_VALIDATE(false);
258 } 266 }
259 267
260 return true; 268 return true;
261 } 269 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698