Index: chrome/browser/plugins/plugin_observer.cc |
diff --git a/chrome/browser/plugins/plugin_observer.cc b/chrome/browser/plugins/plugin_observer.cc |
index 50a4ea55dd11019b2d9d98a3e69887e8feacf219..99aad60f61933c28b8463a42207313fe9d17762e 100644 |
--- a/chrome/browser/plugins/plugin_observer.cc |
+++ b/chrome/browser/plugins/plugin_observer.cc |
@@ -13,6 +13,7 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/content_settings/host_content_settings_map.h" |
#include "chrome/browser/infobars/infobar_tab_helper.h" |
+#include "chrome/browser/lifetime/application_lifetime.h" |
#include "chrome/browser/metrics/metrics_service.h" |
#include "chrome/browser/plugins/plugin_finder.h" |
#include "chrome/browser/plugins/plugin_infobar_delegates.h" |
@@ -216,6 +217,8 @@ bool PluginObserver::OnMessageReceived(const IPC::Message& message) { |
OnOpenAboutPlugins) |
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CouldNotLoadPlugin, |
OnCouldNotLoadPlugin) |
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_NPAPINotSupported, |
+ OnNPAPINotSupported) |
IPC_MESSAGE_UNHANDLED(return false) |
IPC_END_MESSAGE_MAP() |
@@ -296,8 +299,11 @@ void PluginObserver::OnFindMissingPlugin(int placeholder_id, |
callback); |
#else |
delegate = base::win::IsMetroProcess() ? |
- PluginMetroModeInfoBarDelegate::Create( |
- infobar_helper, plugin_metadata->name()) : |
+ new PluginMetroModeInfoBarDelegate( |
+ infobar_helper, |
+ l10n_util::GetStringFUTF16(IDS_METRO_MISSING_PLUGIN_PROMPT, |
+ plugin_metadata->name()), |
+ l10n_util::GetStringUTF16(IDS_WIN8_DESKTOP_RESTART)) : |
PluginInstallerInfoBarDelegate::Create( |
infobar_helper, installer, |
plugin_metadata.Pass(), |
@@ -354,3 +360,29 @@ void PluginObserver::OnCouldNotLoadPlugin(const FilePath& plugin_path) { |
true /* auto_expire */)); |
} |
+void PluginObserver::OnNPAPINotSupported(const std::string& identifier) { |
+#if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION) |
+ Profile* profile = |
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
+ if (profile->IsOffTheRecord()) |
+ return; |
+ |
+ scoped_ptr<PluginMetadata> plugin; |
+ if (!PluginFinder::GetInstance()->FindPluginWithIdentifier( |
+ identifier, NULL, &plugin)) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ InfoBarTabHelper* infobar_helper = |
+ InfoBarTabHelper::FromWebContents(web_contents()); |
+ infobar_helper->AddInfoBar( |
+ new PluginMetroModeInfoBarDelegate( |
+ infobar_helper, |
+ l10n_util::GetStringFUTF16(IDS_METRO_NPAPI_PLUGIN_PROMPT, |
+ plugin->name()), |
+ l10n_util::GetStringUTF16(IDS_WIN8_RESTART))); |
+#else |
+ NOTREACHED(); |
+#endif |
+} |