| OLD | NEW |
| 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/ui/webui/extensions/extension_settings_handler.h" | 5 #include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/metrics/histogram.h" | 14 #include "base/metrics/histogram.h" |
| 15 #include "base/prefs/pref_service.h" | 15 #include "base/prefs/pref_service.h" |
| 16 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 18 #include "base/values.h" | 18 #include "base/values.h" |
| 19 #include "base/version.h" | 19 #include "base/version.h" |
| 20 #include "chrome/browser/background/background_contents.h" | 20 #include "chrome/browser/background/background_contents.h" |
| 21 #include "chrome/browser/browser_process.h" | 21 #include "chrome/browser/browser_process.h" |
| 22 #include "chrome/browser/chrome_notification_types.h" | 22 #include "chrome/browser/chrome_notification_types.h" |
| 23 #include "chrome/browser/extensions/error_console/error_console.h" | |
| 24 #include "chrome/browser/extensions/extension_management.h" | 23 #include "chrome/browser/extensions/extension_management.h" |
| 25 #include "chrome/browser/extensions/extension_service.h" | 24 #include "chrome/browser/extensions/extension_service.h" |
| 26 #include "chrome/browser/extensions/extension_tab_util.h" | 25 #include "chrome/browser/extensions/extension_tab_util.h" |
| 27 #include "chrome/browser/extensions/extension_ui_util.h" | 26 #include "chrome/browser/extensions/extension_ui_util.h" |
| 28 #include "chrome/browser/extensions/install_verifier.h" | 27 #include "chrome/browser/extensions/install_verifier.h" |
| 29 #include "chrome/browser/extensions/updater/extension_updater.h" | 28 #include "chrome/browser/extensions/updater/extension_updater.h" |
| 30 #include "chrome/browser/extensions/webstore_reinstaller.h" | 29 #include "chrome/browser/extensions/webstore_reinstaller.h" |
| 31 #include "chrome/browser/platform_util.h" | 30 #include "chrome/browser/platform_util.h" |
| 32 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 31 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
| 33 #include "chrome/browser/profiles/profile.h" | 32 #include "chrome/browser/profiles/profile.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 /////////////////////////////////////////////////////////////////////////////// | 91 /////////////////////////////////////////////////////////////////////////////// |
| 93 | 92 |
| 94 ExtensionSettingsHandler::ExtensionSettingsHandler() | 93 ExtensionSettingsHandler::ExtensionSettingsHandler() |
| 95 : extension_service_(NULL), | 94 : extension_service_(NULL), |
| 96 ignore_notifications_(false), | 95 ignore_notifications_(false), |
| 97 deleting_rvh_(NULL), | 96 deleting_rvh_(NULL), |
| 98 deleting_rwh_id_(-1), | 97 deleting_rwh_id_(-1), |
| 99 deleting_rph_id_(-1), | 98 deleting_rph_id_(-1), |
| 100 registered_for_notifications_(false), | 99 registered_for_notifications_(false), |
| 101 warning_service_observer_(this), | 100 warning_service_observer_(this), |
| 102 error_console_observer_(this), | |
| 103 extension_prefs_observer_(this), | 101 extension_prefs_observer_(this), |
| 104 extension_registry_observer_(this), | |
| 105 extension_management_observer_(this) { | 102 extension_management_observer_(this) { |
| 106 } | 103 } |
| 107 | 104 |
| 108 ExtensionSettingsHandler::~ExtensionSettingsHandler() { | 105 ExtensionSettingsHandler::~ExtensionSettingsHandler() { |
| 109 } | 106 } |
| 110 | 107 |
| 111 // static | 108 // static |
| 112 void ExtensionSettingsHandler::RegisterProfilePrefs( | 109 void ExtensionSettingsHandler::RegisterProfilePrefs( |
| 113 user_prefs::PrefRegistrySyncable* registry) { | 110 user_prefs::PrefRegistrySyncable* registry) { |
| 114 registry->RegisterBooleanPref( | 111 registry->RegisterBooleanPref( |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 base::Bind(&ExtensionSettingsHandler::HandleAutoUpdateMessage, | 357 base::Bind(&ExtensionSettingsHandler::HandleAutoUpdateMessage, |
| 361 AsWeakPtr())); | 358 AsWeakPtr())); |
| 362 web_ui()->RegisterMessageCallback("extensionSettingsDismissADTPromo", | 359 web_ui()->RegisterMessageCallback("extensionSettingsDismissADTPromo", |
| 363 base::Bind(&ExtensionSettingsHandler::HandleDismissADTPromoMessage, | 360 base::Bind(&ExtensionSettingsHandler::HandleDismissADTPromoMessage, |
| 364 AsWeakPtr())); | 361 AsWeakPtr())); |
| 365 web_ui()->RegisterMessageCallback("extensionSettingsShowPath", | 362 web_ui()->RegisterMessageCallback("extensionSettingsShowPath", |
| 366 base::Bind(&ExtensionSettingsHandler::HandleShowPath, | 363 base::Bind(&ExtensionSettingsHandler::HandleShowPath, |
| 367 AsWeakPtr())); | 364 AsWeakPtr())); |
| 368 } | 365 } |
| 369 | 366 |
| 370 void ExtensionSettingsHandler::OnErrorAdded(const ExtensionError* error) { | |
| 371 MaybeUpdateAfterNotification(); | |
| 372 } | |
| 373 | |
| 374 void ExtensionSettingsHandler::Observe( | 367 void ExtensionSettingsHandler::Observe( |
| 375 int type, | 368 int type, |
| 376 const content::NotificationSource& source, | 369 const content::NotificationSource& source, |
| 377 const content::NotificationDetails& details) { | 370 const content::NotificationDetails& details) { |
| 378 Profile* profile = Profile::FromWebUI(web_ui()); | 371 Profile* profile = Profile::FromWebUI(web_ui()); |
| 379 Profile* source_profile = NULL; | 372 Profile* source_profile = NULL; |
| 380 switch (type) { | 373 switch (type) { |
| 381 // We listen for notifications that will result in the page being | 374 // We listen for notifications that will result in the page being |
| 382 // repopulated with data twice for the same event in certain cases. | 375 // repopulated with data twice for the same event in certain cases. |
| 383 // For instance, EXTENSION_LOADED & EXTENSION_HOST_CREATED because | 376 // For instance, EXTENSION_LOADED & EXTENSION_HOST_CREATED because |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 base::MessageLoop::current()->PostTask( | 410 base::MessageLoop::current()->PostTask( |
| 418 FROM_HERE, | 411 FROM_HERE, |
| 419 base::Bind(&ExtensionSettingsHandler::MaybeUpdateAfterNotification, | 412 base::Bind(&ExtensionSettingsHandler::MaybeUpdateAfterNotification, |
| 420 AsWeakPtr())); | 413 AsWeakPtr())); |
| 421 break; | 414 break; |
| 422 default: | 415 default: |
| 423 NOTREACHED(); | 416 NOTREACHED(); |
| 424 } | 417 } |
| 425 } | 418 } |
| 426 | 419 |
| 427 void ExtensionSettingsHandler::OnExtensionLoaded( | |
| 428 content::BrowserContext* browser_context, | |
| 429 const Extension* extension) { | |
| 430 MaybeUpdateAfterNotification(); | |
| 431 } | |
| 432 | |
| 433 void ExtensionSettingsHandler::OnExtensionUnloaded( | |
| 434 content::BrowserContext* browser_context, | |
| 435 const Extension* extension, | |
| 436 UnloadedExtensionInfo::Reason reason) { | |
| 437 MaybeUpdateAfterNotification(); | |
| 438 } | |
| 439 | |
| 440 void ExtensionSettingsHandler::OnExtensionUninstalled( | |
| 441 content::BrowserContext* browser_context, | |
| 442 const Extension* extension, | |
| 443 extensions::UninstallReason reason) { | |
| 444 MaybeUpdateAfterNotification(); | |
| 445 } | |
| 446 | |
| 447 void ExtensionSettingsHandler::OnExtensionDisableReasonsChanged( | 420 void ExtensionSettingsHandler::OnExtensionDisableReasonsChanged( |
| 448 const std::string& extension_id, int disable_reasons) { | 421 const std::string& extension_id, int disable_reasons) { |
| 449 MaybeUpdateAfterNotification(); | 422 MaybeUpdateAfterNotification(); |
| 450 } | 423 } |
| 451 | 424 |
| 452 void ExtensionSettingsHandler::OnExtensionManagementSettingsChanged() { | 425 void ExtensionSettingsHandler::OnExtensionManagementSettingsChanged() { |
| 453 MaybeUpdateAfterNotification(); | 426 MaybeUpdateAfterNotification(); |
| 454 } | 427 } |
| 455 | 428 |
| 456 void ExtensionSettingsHandler::ExtensionWarningsChanged() { | 429 void ExtensionSettingsHandler::ExtensionWarningsChanged() { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 | 489 |
| 517 MaybeRegisterForNotifications(); | 490 MaybeRegisterForNotifications(); |
| 518 | 491 |
| 519 scoped_ptr<ExtensionSet> extensions = | 492 scoped_ptr<ExtensionSet> extensions = |
| 520 registry->GenerateInstalledExtensionsSet(ExtensionRegistry::ENABLED | | 493 registry->GenerateInstalledExtensionsSet(ExtensionRegistry::ENABLED | |
| 521 ExtensionRegistry::DISABLED | | 494 ExtensionRegistry::DISABLED | |
| 522 ExtensionRegistry::TERMINATED); | 495 ExtensionRegistry::TERMINATED); |
| 523 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile); | 496 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile); |
| 524 bool should_do_verification_check = false; | 497 bool should_do_verification_check = false; |
| 525 for (const scoped_refptr<const Extension>& extension : *extensions) { | 498 for (const scoped_refptr<const Extension>& extension : *extensions) { |
| 526 if (ui_util::ShouldDisplayInExtensionSettings(extension.get(), profile) && | 499 if (ui_util::ShouldDisplayInExtensionSettings(extension.get(), profile)) { |
| 527 ((prefs->GetDisableReasons(extension->id()) & | 500 int disable_reasons = prefs->GetDisableReasons(extension->id()); |
| 528 Extension::DISABLE_NOT_VERIFIED) != 0)) { | 501 if ((disable_reasons & Extension::DISABLE_NOT_VERIFIED)) { |
| 529 should_do_verification_check = true; | 502 should_do_verification_check = true; |
| 530 break; | 503 break; |
| 504 } |
| 531 } | 505 } |
| 532 } | 506 } |
| 533 | 507 |
| 534 UMA_HISTOGRAM_BOOLEAN("ExtensionSettings.ShouldDoVerificationCheck", | 508 UMA_HISTOGRAM_BOOLEAN("ExtensionSettings.ShouldDoVerificationCheck", |
| 535 should_do_verification_check); | 509 should_do_verification_check); |
| 536 if (should_do_verification_check) | 510 if (should_do_verification_check) |
| 537 ExtensionSystem::Get(profile)->install_verifier()->VerifyAllExtensions(); | 511 ExtensionSystem::Get(profile)->install_verifier()->VerifyAllExtensions(); |
| 538 } | 512 } |
| 539 | 513 |
| 540 void ExtensionSettingsHandler::HandleToggleDeveloperMode( | 514 void ExtensionSettingsHandler::HandleToggleDeveloperMode( |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 this, | 628 this, |
| 655 extensions::NOTIFICATION_EXTENSION_BROWSER_ACTION_VISIBILITY_CHANGED, | 629 extensions::NOTIFICATION_EXTENSION_BROWSER_ACTION_VISIBILITY_CHANGED, |
| 656 content::Source<ExtensionPrefs>(ExtensionPrefs::Get(profile))); | 630 content::Source<ExtensionPrefs>(ExtensionPrefs::Get(profile))); |
| 657 registrar_.Add(this, | 631 registrar_.Add(this, |
| 658 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 632 extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, |
| 659 content::NotificationService::AllBrowserContextsAndSources()); | 633 content::NotificationService::AllBrowserContextsAndSources()); |
| 660 registrar_.Add(this, | 634 registrar_.Add(this, |
| 661 content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, | 635 content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, |
| 662 content::NotificationService::AllBrowserContextsAndSources()); | 636 content::NotificationService::AllBrowserContextsAndSources()); |
| 663 | 637 |
| 664 extension_registry_observer_.Add(ExtensionRegistry::Get(profile)); | |
| 665 | |
| 666 content::WebContentsObserver::Observe(web_ui()->GetWebContents()); | 638 content::WebContentsObserver::Observe(web_ui()->GetWebContents()); |
| 667 | 639 |
| 668 warning_service_observer_.Add(WarningService::Get(profile)); | 640 warning_service_observer_.Add(WarningService::Get(profile)); |
| 669 | 641 |
| 670 error_console_observer_.Add(ErrorConsole::Get(profile)); | |
| 671 | |
| 672 extension_management_observer_.Add( | 642 extension_management_observer_.Add( |
| 673 ExtensionManagementFactory::GetForBrowserContext(profile)); | 643 ExtensionManagementFactory::GetForBrowserContext(profile)); |
| 674 } | 644 } |
| 675 | 645 |
| 676 void ExtensionSettingsHandler::OnReinstallComplete( | 646 void ExtensionSettingsHandler::OnReinstallComplete( |
| 677 bool success, | 647 bool success, |
| 678 const std::string& error, | 648 const std::string& error, |
| 679 webstore_install::Result result) { | 649 webstore_install::Result result) { |
| 680 MaybeUpdateAfterNotification(); | 650 MaybeUpdateAfterNotification(); |
| 681 } | 651 } |
| 682 | 652 |
| 683 } // namespace extensions | 653 } // namespace extensions |
| OLD | NEW |