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

Side by Side Diff: chrome/browser/search/hotword_service.cc

Issue 647083003: Reinstall the hotword shared module on a lanuage change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Split common extension condition into function. Created 6 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/search/hotword_service.h" 5 #include "chrome/browser/search/hotword_service.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/i18n/case_conversion.h" 8 #include "base/i18n/case_conversion.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 HotwordServiceFactory::GetInstance()->UpdateMicrophoneState(); 254 HotwordServiceFactory::GetInstance()->UpdateMicrophoneState();
255 } 255 }
256 } 256 }
257 257
258 void HotwordService::OnExtensionUninstalled( 258 void HotwordService::OnExtensionUninstalled(
259 content::BrowserContext* browser_context, 259 content::BrowserContext* browser_context,
260 const extensions::Extension* extension, 260 const extensions::Extension* extension,
261 extensions::UninstallReason reason) { 261 extensions::UninstallReason reason) {
262 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 262 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
263 263
264 if (extension->id() != extension_misc::kHotwordExtensionId || 264 if ((extension->id() != extension_misc::kHotwordExtensionId &&
265 profile_ != Profile::FromBrowserContext(browser_context) || 265 extension->id() != extension_misc::kHotwordSharedModuleId) ||
266 profile_ != Profile::FromBrowserContext(browser_context) ||
266 !GetExtensionService(profile_)) 267 !GetExtensionService(profile_))
267 return; 268 return;
268 269
269 // If the extension wasn't uninstalled due to language change, don't try to 270 // If the extension wasn't uninstalled due to language change, don't try to
270 // reinstall it. 271 // reinstall it.
271 if (!reinstall_pending_) 272 if (!reinstall_pending_)
272 return; 273 return;
273 274
274 InstallHotwordExtensionFromWebstore(); 275 InstallHotwordExtensionFromWebstore();
275 SetPreviousLanguagePref(); 276 SetPreviousLanguagePref();
276 } 277 }
277 278
279 std::string HotwordService::ReinstalledExtensionId() {
280 if (IsExperimentalHotwordingEnabled())
281 return extension_misc::kHotwordSharedModuleId;
282
283 return extension_misc::kHotwordExtensionId;
284 }
285
278 void HotwordService::InstallHotwordExtensionFromWebstore() { 286 void HotwordService::InstallHotwordExtensionFromWebstore() {
279 installer_ = new extensions::WebstoreStartupInstaller( 287 installer_ = new extensions::WebstoreStartupInstaller(
280 extension_misc::kHotwordExtensionId, 288 ReinstalledExtensionId(),
281 profile_, 289 profile_,
282 false, 290 false,
283 extensions::WebstoreStandaloneInstaller::Callback()); 291 extensions::WebstoreStandaloneInstaller::Callback());
284 installer_->BeginInstall(); 292 installer_->BeginInstall();
285 } 293 }
286 294
287 void HotwordService::OnExtensionInstalled( 295 void HotwordService::OnExtensionInstalled(
288 content::BrowserContext* browser_context, 296 content::BrowserContext* browser_context,
289 const extensions::Extension* extension, 297 const extensions::Extension* extension,
290 bool is_update) { 298 bool is_update) {
291 299
292 if (extension->id() != extension_misc::kHotwordExtensionId || 300 if ((extension->id() != extension_misc::kHotwordExtensionId &&
293 profile_ != Profile::FromBrowserContext(browser_context)) 301 extension->id() != extension_misc::kHotwordSharedModuleId) ||
302 profile_ != Profile::FromBrowserContext(browser_context))
294 return; 303 return;
295 304
296 // If the previous locale pref has never been set, set it now since 305 // If the previous locale pref has never been set, set it now since
297 // the extension has been installed. 306 // the extension has been installed.
298 if (!profile_->GetPrefs()->HasPrefPath(prefs::kHotwordPreviousLanguage)) 307 if (!profile_->GetPrefs()->HasPrefPath(prefs::kHotwordPreviousLanguage))
299 SetPreviousLanguagePref(); 308 SetPreviousLanguagePref();
300 309
301 // If MaybeReinstallHotwordExtension already triggered an uninstall, we 310 // If MaybeReinstallHotwordExtension already triggered an uninstall, we
302 // don't want to loop and trigger another uninstall-install cycle. 311 // don't want to loop and trigger another uninstall-install cycle.
303 // However, if we arrived here via an uninstall-triggered-install (and in 312 // However, if we arrived here via an uninstall-triggered-install (and in
(...skipping 19 matching lines...) Expand all
323 } 332 }
324 333
325 bool HotwordService::MaybeReinstallHotwordExtension() { 334 bool HotwordService::MaybeReinstallHotwordExtension() {
326 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 335 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
327 336
328 ExtensionService* extension_service = GetExtensionService(profile_); 337 ExtensionService* extension_service = GetExtensionService(profile_);
329 if (!extension_service) 338 if (!extension_service)
330 return false; 339 return false;
331 340
332 const extensions::Extension* extension = extension_service->GetExtensionById( 341 const extensions::Extension* extension = extension_service->GetExtensionById(
333 extension_misc::kHotwordExtensionId, true); 342 ReinstalledExtensionId(), true);
334 if (!extension) 343 if (!extension)
335 return false; 344 return false;
336 345
337 // If the extension is currently pending, return and we'll check again 346 // If the extension is currently pending, return and we'll check again
338 // after the install is finished. 347 // after the install is finished.
339 extensions::PendingExtensionManager* pending_manager = 348 extensions::PendingExtensionManager* pending_manager =
340 extension_service->pending_extension_manager(); 349 extension_service->pending_extension_manager();
341 if (pending_manager->IsIdPending(extension->id())) 350 if (pending_manager->IsIdPending(extension->id()))
342 return false; 351 return false;
343 352
(...skipping 10 matching lines...) Expand all
354 // Ensure the call to OnExtensionUninstalled was triggered by a language 363 // Ensure the call to OnExtensionUninstalled was triggered by a language
355 // change so it's okay to reinstall. 364 // change so it's okay to reinstall.
356 reinstall_pending_ = true; 365 reinstall_pending_ = true;
357 366
358 return UninstallHotwordExtension(extension_service); 367 return UninstallHotwordExtension(extension_service);
359 } 368 }
360 369
361 bool HotwordService::UninstallHotwordExtension( 370 bool HotwordService::UninstallHotwordExtension(
362 ExtensionService* extension_service) { 371 ExtensionService* extension_service) {
363 base::string16 error; 372 base::string16 error;
373 std::string extension_id = ReinstalledExtensionId();
364 if (!extension_service->UninstallExtension( 374 if (!extension_service->UninstallExtension(
365 extension_misc::kHotwordExtensionId, 375 extension_id,
366 extensions::UNINSTALL_REASON_INTERNAL_MANAGEMENT, 376 extensions::UNINSTALL_REASON_INTERNAL_MANAGEMENT,
367 base::Bind(&base::DoNothing), 377 base::Bind(&base::DoNothing),
368 &error)) { 378 &error)) {
369 LOG(WARNING) << "Cannot uninstall extension with id " 379 LOG(WARNING) << "Cannot uninstall extension with id "
370 << extension_misc::kHotwordExtensionId 380 << extension_id
371 << ": " << error; 381 << ": " << error;
372 reinstall_pending_ = false; 382 reinstall_pending_ = false;
373 return false; 383 return false;
374 } 384 }
375 return true; 385 return true;
376 } 386 }
377 387
378 bool HotwordService::IsServiceAvailable() { 388 bool HotwordService::IsServiceAvailable() {
379 error_message_ = 0; 389 error_message_ = 0;
380 390
381 // Determine if the extension is available. 391 // Determine if the extension is available.
382 extensions::ExtensionSystem* system = 392 extensions::ExtensionSystem* system =
383 extensions::ExtensionSystem::Get(profile_); 393 extensions::ExtensionSystem::Get(profile_);
384 ExtensionService* service = system->extension_service(); 394 ExtensionService* service = system->extension_service();
385 // Include disabled extensions (true parameter) since it may not be enabled 395 // Include disabled extensions (true parameter) since it may not be enabled
386 // if the user opted out. 396 // if the user opted out.
387 std::string extensionId;
388 if (IsExperimentalHotwordingEnabled()) {
389 // TODO(amistry): Handle reloading on language change as the old extension
390 // does.
391 extensionId = extension_misc::kHotwordSharedModuleId;
392 } else {
393 extensionId = extension_misc::kHotwordExtensionId;
394 }
395 const extensions::Extension* extension = 397 const extensions::Extension* extension =
396 service->GetExtensionById(extensionId, true); 398 service->GetExtensionById(ReinstalledExtensionId(), true);
397 if (!extension) 399 if (!extension)
398 error_message_ = IDS_HOTWORD_GENERIC_ERROR_MESSAGE; 400 error_message_ = IDS_HOTWORD_GENERIC_ERROR_MESSAGE;
399 401
400 RecordExtensionAvailabilityMetrics(service, extension); 402 RecordExtensionAvailabilityMetrics(service, extension);
401 RecordLoggingMetrics(profile_); 403 RecordLoggingMetrics(profile_);
402 404
403 // Determine if NaCl is available. 405 // Determine if NaCl is available.
404 bool nacl_enabled = false; 406 bool nacl_enabled = false;
405 base::FilePath path; 407 base::FilePath path;
406 if (PathService::Get(chrome::FILE_NACL_PLUGIN, &path)) { 408 if (PathService::Get(chrome::FILE_NACL_PLUGIN, &path)) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 return false; 533 return false;
532 534
533 std::string previous_locale = 535 std::string previous_locale =
534 profile_->GetPrefs()->GetString(prefs::kHotwordPreviousLanguage); 536 profile_->GetPrefs()->GetString(prefs::kHotwordPreviousLanguage);
535 std::string locale = GetCurrentLocale(profile_); 537 std::string locale = GetCurrentLocale(profile_);
536 538
537 // If it's a new locale, then the old extension should be uninstalled. 539 // If it's a new locale, then the old extension should be uninstalled.
538 return locale != previous_locale && 540 return locale != previous_locale &&
539 HotwordService::DoesHotwordSupportLanguage(profile_); 541 HotwordService::DoesHotwordSupportLanguage(profile_);
540 } 542 }
OLDNEW
« no previous file with comments | « chrome/browser/search/hotword_service.h ('k') | chrome/browser/search/hotword_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698