diff options
author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-31 16:33:58 +0000 |
---|---|---|
committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-31 16:33:58 +0000 |
commit | 67c052e53987c8ca3d09a259fab64c82787bb418 (patch) | |
tree | e27c57945f55caee9ba3a4f71b0633ea9c7af4bf | |
parent | 7822132061ad3d7bb671334b2afd2b80133a6415 (diff) | |
download | chromium_src-67c052e53987c8ca3d09a259fab64c82787bb418.zip chromium_src-67c052e53987c8ca3d09a259fab64c82787bb418.tar.gz chromium_src-67c052e53987c8ca3d09a259fab64c82787bb418.tar.bz2 |
Move plugin message handling from TabContents into PluginMessageFilter.
Also, close infobars after allowing plugins to run (regressed in http://crrev.com/72166).
BUG=71116
TEST=none
Review URL: http://codereview.chromium.org/6336021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73153 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/plugin_observer.cc | 290 | ||||
-rw-r--r-- | chrome/browser/plugin_observer.h | 39 | ||||
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.cc | 263 | ||||
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.h | 12 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 2 |
5 files changed, 337 insertions, 269 deletions
diff --git a/chrome/browser/plugin_observer.cc b/chrome/browser/plugin_observer.cc new file mode 100644 index 0000000..529f21e --- /dev/null +++ b/chrome/browser/plugin_observer.cc @@ -0,0 +1,290 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/plugin_observer.h" + +#include "base/utf_string_conversions.h" +#include "chrome/browser/content_settings/host_content_settings_map.h" +#include "chrome/browser/metrics/user_metrics.h" +#include "chrome/browser/plugin_installer_infobar_delegate.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/renderer_host/render_view_host.h" +#include "chrome/browser/tab_contents/infobar_delegate.h" +#include "chrome/browser/tab_contents/tab_contents.h" +#include "chrome/common/render_messages.h" +#include "grit/generated_resources.h" +#include "grit/theme_resources.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/base/resource/resource_bundle.h" +#include "webkit/plugins/npapi/plugin_list.h" +#include "webkit/plugins/npapi/webplugininfo.h" + +namespace { + +// PluginInfoBar -------------------------------------------------------------- + +class PluginInfoBar : public ConfirmInfoBarDelegate { + public: + PluginInfoBar(TabContents* tab_contents, const string16& name); + + // ConfirmInfoBarDelegate: + virtual SkBitmap* GetIcon() const; + virtual int GetButtons() const; + virtual string16 GetLinkText(); + + protected: + virtual ~PluginInfoBar(); + + void CommonCancel(); + void CommonClose(); + void CommonLearnMore(WindowOpenDisposition disposition); + + string16 name_; + TabContents* tab_contents_; + + private: + DISALLOW_COPY_AND_ASSIGN(PluginInfoBar); +}; + +PluginInfoBar::PluginInfoBar(TabContents* tab_contents, const string16& name) + : ConfirmInfoBarDelegate(tab_contents), + name_(name), + tab_contents_(tab_contents) { +} + +PluginInfoBar::~PluginInfoBar() { +} + +void PluginInfoBar::CommonClose() { + delete this; +} + +SkBitmap* PluginInfoBar::GetIcon() const { + return ResourceBundle::GetSharedInstance().GetBitmapNamed( + IDR_INFOBAR_PLUGIN_INSTALL); +} + +int PluginInfoBar::GetButtons() const { + return BUTTON_OK | BUTTON_CANCEL; +} + +void PluginInfoBar::CommonCancel() { + tab_contents_->render_view_host()->LoadBlockedPlugins(); +} + +string16 PluginInfoBar::GetLinkText() { + return l10n_util::GetStringUTF16(IDS_LEARN_MORE); +} + +void PluginInfoBar::CommonLearnMore(WindowOpenDisposition disposition) { + // TODO(bauerb): Navigate to a help page explaining why we disabled + // or blocked the plugin, once we have one. +} + +// BlockedPluginInfoBar ------------------------------------------------------- + +class BlockedPluginInfoBar : public PluginInfoBar { + public: + BlockedPluginInfoBar(TabContents* tab_contents, + const string16& name); + + // ConfirmInfoBarDelegate: + virtual string16 GetMessageText() const; + virtual string16 GetButtonLabel(InfoBarButton button) const; + virtual bool Accept(); + virtual bool Cancel(); + virtual void InfoBarClosed(); + virtual bool LinkClicked(WindowOpenDisposition disposition); + + protected: + virtual ~BlockedPluginInfoBar(); + + private: + DISALLOW_COPY_AND_ASSIGN(BlockedPluginInfoBar); +}; + +BlockedPluginInfoBar::BlockedPluginInfoBar(TabContents* tab_contents, + const string16& name) + : PluginInfoBar(tab_contents, name) { + tab_contents->AddInfoBar(this); + UserMetrics::RecordAction(UserMetricsAction("BlockedPluginInfobar.Shown")); +} + +BlockedPluginInfoBar::~BlockedPluginInfoBar() { +} + +string16 BlockedPluginInfoBar::GetMessageText() const { + return l10n_util::GetStringFUTF16(IDS_PLUGIN_NOT_AUTHORIZED, name_); +} + +string16 BlockedPluginInfoBar::GetButtonLabel(InfoBarButton button) const { + return l10n_util::GetStringUTF16((button == BUTTON_OK) ? + IDS_PLUGIN_ENABLE_ALWAYS : IDS_PLUGIN_ENABLE_TEMPORARILY); +} + +bool BlockedPluginInfoBar::Accept() { + UserMetrics::RecordAction( + UserMetricsAction("BlockedPluginInfobar.AlwaysAllow")); + tab_contents_->profile()->GetHostContentSettingsMap()->AddExceptionForURL( + tab_contents_->GetURL(), CONTENT_SETTINGS_TYPE_PLUGINS, std::string(), + CONTENT_SETTING_ALLOW); + tab_contents_->render_view_host()->LoadBlockedPlugins(); + return true; +} + +bool BlockedPluginInfoBar::Cancel() { + UserMetrics::RecordAction( + UserMetricsAction("BlockedPluginInfobar.AllowThisTime")); + CommonCancel(); + return true; +} + +void BlockedPluginInfoBar::InfoBarClosed() { + UserMetrics::RecordAction(UserMetricsAction("BlockedPluginInfobar.Closed")); + CommonClose(); +} + +bool BlockedPluginInfoBar::LinkClicked(WindowOpenDisposition disposition) { + UserMetrics::RecordAction( + UserMetricsAction("BlockedPluginInfobar.LearnMore")); + CommonLearnMore(disposition); + return false; +} + +// OutdatedPluginInfoBar ------------------------------------------------------ + +class OutdatedPluginInfoBar : public PluginInfoBar { + public: + OutdatedPluginInfoBar(TabContents* tab_contents, + const string16& name, + const GURL& update_url); + + // ConfirmInfoBarDelegate: + virtual string16 GetMessageText() const; + virtual string16 GetButtonLabel(InfoBarButton button) const; + virtual bool Accept(); + virtual bool Cancel(); + virtual void InfoBarClosed(); + virtual bool LinkClicked(WindowOpenDisposition disposition); + + protected: + virtual ~OutdatedPluginInfoBar(); + + private: + GURL update_url_; + + DISALLOW_COPY_AND_ASSIGN(OutdatedPluginInfoBar); +}; + +OutdatedPluginInfoBar::OutdatedPluginInfoBar(TabContents* tab_contents, + const string16& name, + const GURL& update_url) + : PluginInfoBar(tab_contents, name), update_url_(update_url) { + tab_contents->AddInfoBar(this); + UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Shown")); +} + +OutdatedPluginInfoBar::~OutdatedPluginInfoBar() { +} + +string16 OutdatedPluginInfoBar::GetMessageText() const { + return l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED_PROMPT, name_); +} + +string16 OutdatedPluginInfoBar::GetButtonLabel(InfoBarButton button) const { + return l10n_util::GetStringUTF16((button == BUTTON_OK) ? + IDS_PLUGIN_UPDATE : IDS_PLUGIN_ENABLE_TEMPORARILY); +} + +bool OutdatedPluginInfoBar::Accept() { + UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Update")); + tab_contents_->OpenURL(update_url_, GURL(), NEW_FOREGROUND_TAB, + PageTransition::LINK); + return false; +} + +bool OutdatedPluginInfoBar::Cancel() { + UserMetrics::RecordAction( + UserMetricsAction("OutdatedPluginInfobar.AllowThisTime")); + CommonCancel(); + return true; +} + +void OutdatedPluginInfoBar::InfoBarClosed() { + UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Closed")); + CommonClose(); +} + +bool OutdatedPluginInfoBar::LinkClicked(WindowOpenDisposition disposition) { + UserMetrics::RecordAction( + UserMetricsAction("OutdatedPluginInfobar.LearnMore")); + CommonLearnMore(disposition); + return false; +} + +} // namespace + +PluginObserver::PluginObserver(TabContents* tab_contents) + : tab_contents_(tab_contents) { } + +PluginObserver::~PluginObserver() { } + +bool PluginObserver::OnMessageReceived(const IPC::Message& message) { + IPC_BEGIN_MESSAGE_MAP(PluginObserver, message) + IPC_MESSAGE_HANDLER(ViewHostMsg_MissingPluginStatus, OnMissingPluginStatus) + IPC_MESSAGE_HANDLER(ViewHostMsg_CrashedPlugin, OnCrashedPlugin) + IPC_MESSAGE_HANDLER(ViewHostMsg_BlockedOutdatedPlugin, + OnBlockedOutdatedPlugin) + IPC_MESSAGE_UNHANDLED(return false) + IPC_END_MESSAGE_MAP() + + return true; +} + +PluginInstallerInfoBarDelegate* PluginObserver::GetPluginInstaller() { + if (plugin_installer_.get() == NULL) + plugin_installer_.reset(new PluginInstallerInfoBarDelegate(tab_contents_)); + return plugin_installer_.get(); +} + +void PluginObserver::OnMissingPluginStatus(int status) { +#if defined(OS_WIN) +// TODO(PORT): pull in when plug-ins work + GetPluginInstaller()->OnMissingPluginStatus(status); +#endif +} + +void PluginObserver::OnCrashedPlugin(const FilePath& plugin_path) { + DCHECK(!plugin_path.value().empty()); + + std::wstring plugin_name = plugin_path.ToWStringHack(); + webkit::npapi::WebPluginInfo plugin_info; + if (webkit::npapi::PluginList::Singleton()->GetPluginInfoByPath( + plugin_path, &plugin_info) && + !plugin_info.name.empty()) { + plugin_name = UTF16ToWide(plugin_info.name); +#if defined(OS_MACOSX) + // Many plugins on the Mac have .plugin in the actual name, which looks + // terrible, so look for that and strip it off if present. + const std::wstring plugin_extension(L".plugin"); + if (EndsWith(plugin_name, plugin_extension, true)) + plugin_name.erase(plugin_name.length() - plugin_extension.length()); +#endif // OS_MACOSX + } + SkBitmap* crash_icon = ResourceBundle::GetSharedInstance().GetBitmapNamed( + IDR_INFOBAR_PLUGIN_CRASHED); + tab_contents_->AddInfoBar(new SimpleAlertInfoBarDelegate( + tab_contents_, crash_icon, + l10n_util::GetStringFUTF16(IDS_PLUGIN_CRASHED_PROMPT, + WideToUTF16Hack(plugin_name)), true)); +} + +void PluginObserver::OnBlockedOutdatedPlugin(const string16& name, + const GURL& update_url) { + if (!update_url.is_empty()) + new OutdatedPluginInfoBar(tab_contents_, name, update_url); + else + new BlockedPluginInfoBar(tab_contents_, name); +} + diff --git a/chrome/browser/plugin_observer.h b/chrome/browser/plugin_observer.h new file mode 100644 index 0000000..97f0295 --- /dev/null +++ b/chrome/browser/plugin_observer.h @@ -0,0 +1,39 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_PLUGIN_OBSERVER_H_ +#define CHROME_BROWSER_PLUGIN_OBSERVER_H_ +#pragma once + +#include "chrome/browser/tab_contents/tab_contents_observer.h" + +class FilePath; +class GURL; +class PluginInstallerInfoBarDelegate; +class TabContents; + +class PluginObserver : public TabContentsObserver { + public: + explicit PluginObserver(TabContents* tab_contents); + ~PluginObserver(); + + // IPC::Channel::Listener implementation. + virtual bool OnMessageReceived(const IPC::Message& message); + + private: + // Returns the PluginInstallerInfoBarDelegate, creating it if necessary. + PluginInstallerInfoBarDelegate* GetPluginInstaller(); + + void OnMissingPluginStatus(int status); + void OnCrashedPlugin(const FilePath& plugin_path); + void OnBlockedOutdatedPlugin(const string16& name, const GURL& update_url); + + TabContents* tab_contents_; // Weak, owns us. + // PluginInstallerInfoBarDelegate, lazily created. + scoped_ptr<PluginInstallerInfoBarDelegate> plugin_installer_; + + DISALLOW_COPY_AND_ASSIGN(PluginObserver); +}; + +#endif // CHROME_BROWSER_PLUGIN_OBSERVER_H_ diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc index 536948a..8a941cd 100644 --- a/chrome/browser/tab_contents/tab_contents.cc +++ b/chrome/browser/tab_contents/tab_contents.cc @@ -50,7 +50,7 @@ #include "chrome/browser/omnibox_search_hint.h" #include "chrome/browser/pdf_unsupported_feature.h" #include "chrome/browser/platform_util.h" -#include "chrome/browser/plugin_installer_infobar_delegate.h" +#include "chrome/browser/plugin_observer.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/prerender/prerender_manager.h" #include "chrome/browser/prerender/prerender_plt_recorder.h" @@ -108,7 +108,6 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "webkit/glue/password_form.h" -#include "webkit/plugins/npapi/plugin_list.h" #include "webkit/glue/webpreferences.h" #if defined(OS_MACOSX) @@ -250,214 +249,6 @@ void MakeNavigateParams(const NavigationEntry& entry, params->request_time = base::Time::Now(); } -// PluginInfoBar -------------------------------------------------------------- - -class PluginInfoBar : public ConfirmInfoBarDelegate { - public: - PluginInfoBar(TabContents* tab_contents, const string16& name); - - // ConfirmInfoBarDelegate: - virtual void InfoBarClosed() = 0; - virtual SkBitmap* GetIcon() const; - virtual string16 GetMessageText() const = 0; - virtual int GetButtons() const; - virtual string16 GetButtonLabel(InfoBarButton button) const = 0; - virtual bool Accept() = 0; - virtual bool Cancel() = 0; - virtual string16 GetLinkText(); - virtual bool LinkClicked(WindowOpenDisposition disposition) = 0; - - protected: - virtual ~PluginInfoBar(); - - void CommonCancel(); - void CommonClose(); - void CommonLearnMore(WindowOpenDisposition disposition); - - string16 name_; - TabContents* tab_contents_; - - private: - DISALLOW_COPY_AND_ASSIGN(PluginInfoBar); -}; - -PluginInfoBar::PluginInfoBar(TabContents* tab_contents, const string16& name) - : ConfirmInfoBarDelegate(tab_contents), - name_(name), - tab_contents_(tab_contents) { -} - -PluginInfoBar::~PluginInfoBar() { -} - -void PluginInfoBar::CommonClose() { - delete this; -} - -SkBitmap* PluginInfoBar::GetIcon() const { - return ResourceBundle::GetSharedInstance().GetBitmapNamed( - IDR_INFOBAR_PLUGIN_INSTALL); -} - -int PluginInfoBar::GetButtons() const { - return BUTTON_OK | BUTTON_CANCEL; -} - -void PluginInfoBar::CommonCancel() { - tab_contents_->render_view_host()->LoadBlockedPlugins(); -} - -string16 PluginInfoBar::GetLinkText() { - return l10n_util::GetStringUTF16(IDS_LEARN_MORE); -} - -void PluginInfoBar::CommonLearnMore(WindowOpenDisposition disposition) { - // TODO(bauerb): Navigate to a help page explaining why we disabled - // or blocked the plugin, once we have one. -} - - -// BlockedPluginInfoBar ------------------------------------------------------- - -class BlockedPluginInfoBar : public PluginInfoBar { - public: - BlockedPluginInfoBar(TabContents* tab_contents, - const string16& name); - - // ConfirmInfoBarDelegate: - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); - virtual void InfoBarClosed(); - virtual bool LinkClicked(WindowOpenDisposition disposition); - - protected: - virtual ~BlockedPluginInfoBar(); - - private: - DISALLOW_COPY_AND_ASSIGN(BlockedPluginInfoBar); -}; - -BlockedPluginInfoBar::BlockedPluginInfoBar(TabContents* tab_contents, - const string16& name) - : PluginInfoBar(tab_contents, name) { - tab_contents->AddInfoBar(this); - UserMetrics::RecordAction(UserMetricsAction("BlockedPluginInfobar.Shown")); -} - -BlockedPluginInfoBar::~BlockedPluginInfoBar() { -} - -string16 BlockedPluginInfoBar::GetMessageText() const { - return l10n_util::GetStringFUTF16(IDS_PLUGIN_NOT_AUTHORIZED, name_); -} - -string16 BlockedPluginInfoBar::GetButtonLabel(InfoBarButton button) const { - return l10n_util::GetStringUTF16((button == BUTTON_OK) ? - IDS_PLUGIN_ENABLE_ALWAYS : IDS_PLUGIN_ENABLE_TEMPORARILY); -} - -bool BlockedPluginInfoBar::Accept() { - UserMetrics::RecordAction( - UserMetricsAction("BlockedPluginInfobar.AlwaysAllow")); - tab_contents_->profile()->GetHostContentSettingsMap()->AddExceptionForURL( - tab_contents_->GetURL(), CONTENT_SETTINGS_TYPE_PLUGINS, std::string(), - CONTENT_SETTING_ALLOW); - tab_contents_->render_view_host()->LoadBlockedPlugins(); - return false; -} - -bool BlockedPluginInfoBar::Cancel() { - UserMetrics::RecordAction( - UserMetricsAction("BlockedPluginInfobar.AllowThisTime")); - CommonCancel(); - return false; -} - -void BlockedPluginInfoBar::InfoBarClosed() { - UserMetrics::RecordAction(UserMetricsAction("BlockedPluginInfobar.Closed")); - CommonClose(); -} - -bool BlockedPluginInfoBar::LinkClicked(WindowOpenDisposition disposition) { - UserMetrics::RecordAction( - UserMetricsAction("BlockedPluginInfobar.LearnMore")); - CommonLearnMore(disposition); - return false; -} - -// OutdatedPluginInfoBar ------------------------------------------------------ - -class OutdatedPluginInfoBar : public PluginInfoBar { - public: - OutdatedPluginInfoBar(TabContents* tab_contents, - const string16& name, - const GURL& update_url); - - // ConfirmInfoBarDelegate: - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); - virtual void InfoBarClosed(); - virtual bool LinkClicked(WindowOpenDisposition disposition); - - protected: - virtual ~OutdatedPluginInfoBar(); - - private: - GURL update_url_; - - DISALLOW_COPY_AND_ASSIGN(OutdatedPluginInfoBar); -}; - -OutdatedPluginInfoBar::OutdatedPluginInfoBar(TabContents* tab_contents, - const string16& name, - const GURL& update_url) - : PluginInfoBar(tab_contents, name), update_url_(update_url) { - tab_contents->AddInfoBar(this); - UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Shown")); -} - -OutdatedPluginInfoBar::~OutdatedPluginInfoBar() { -} - -string16 OutdatedPluginInfoBar::GetMessageText() const { - return l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED_PROMPT, name_); -} - -string16 OutdatedPluginInfoBar::GetButtonLabel(InfoBarButton button) const { - return l10n_util::GetStringUTF16((button == BUTTON_OK) ? - IDS_PLUGIN_UPDATE : IDS_PLUGIN_ENABLE_TEMPORARILY); -} - -bool OutdatedPluginInfoBar::Accept() { - UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Update")); - tab_contents_->OpenURL(update_url_, GURL(), NEW_FOREGROUND_TAB, - PageTransition::LINK); - return false; -} - -bool OutdatedPluginInfoBar::Cancel() { - UserMetrics::RecordAction( - UserMetricsAction("OutdatedPluginInfobar.AllowThisTime")); - CommonCancel(); - return false; -} - -void OutdatedPluginInfoBar::InfoBarClosed() { - UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Closed")); - CommonClose(); -} - -bool OutdatedPluginInfoBar::LinkClicked(WindowOpenDisposition disposition) { - UserMetrics::RecordAction( - UserMetricsAction("OutdatedPluginInfobar.LearnMore")); - CommonLearnMore(disposition); - return false; -} - } // namespace @@ -485,7 +276,6 @@ TabContents::TabContents(Profile* profile, save_package_(), autocomplete_history_manager_(), autofill_manager_(), - plugin_installer_(), prerender_plt_recorder_(), bookmark_drag_(NULL), ALLOW_THIS_IN_INITIALIZER_LIST(fav_icon_helper_(this)), @@ -599,6 +389,8 @@ TabContents::TabContents(Profile* profile, desktop_notification_handler_.reset( new DesktopNotificationHandler(this, GetRenderProcessHost())); AddObserver(desktop_notification_handler_.get()); + plugin_observer_.reset(new PluginObserver(this)); + AddObserver(plugin_observer_.get()); } TabContents::~TabContents() { @@ -748,10 +540,6 @@ bool TabContents::OnMessageReceived(const IPC::Message& message) { OnPDFHasUnsupportedFeature) IPC_MESSAGE_HANDLER(ViewHostMsg_Find_Reply, OnFindReply) IPC_MESSAGE_HANDLER(ViewHostMsg_GoToEntryAtOffset, OnGoToEntryAtOffset) - IPC_MESSAGE_HANDLER(ViewHostMsg_MissingPluginStatus, OnMissingPluginStatus) - IPC_MESSAGE_HANDLER(ViewHostMsg_CrashedPlugin, OnCrashedPlugin) - IPC_MESSAGE_HANDLER(ViewHostMsg_BlockedOutdatedPlugin, - OnBlockedOutdatedPlugin) IPC_MESSAGE_HANDLER(ViewHostMsg_DidGetApplicationInfo, OnDidGetApplicationInfo) IPC_MESSAGE_HANDLER(ViewHostMsg_InstallApplication, @@ -778,12 +566,6 @@ bool TabContents::HostsExtension() const { return GetURL().SchemeIs(chrome::kExtensionScheme); } -PluginInstallerInfoBarDelegate* TabContents::GetPluginInstaller() { - if (plugin_installer_.get() == NULL) - plugin_installer_.reset(new PluginInstallerInfoBarDelegate(this)); - return plugin_installer_.get(); -} - TabContentsSSLHelper* TabContents::GetSSLHelper() { if (ssl_helper_.get() == NULL) ssl_helper_.reset(new TabContentsSSLHelper(this)); @@ -2443,37 +2225,6 @@ void TabContents::OnGoToEntryAtOffset(int offset) { } } -void TabContents::OnMissingPluginStatus(int status) { -#if defined(OS_WIN) -// TODO(PORT): pull in when plug-ins work - GetPluginInstaller()->OnMissingPluginStatus(status); -#endif -} - -void TabContents::OnCrashedPlugin(const FilePath& plugin_path) { - DCHECK(!plugin_path.value().empty()); - - std::wstring plugin_name = plugin_path.ToWStringHack(); - webkit::npapi::WebPluginInfo plugin_info; - if (webkit::npapi::PluginList::Singleton()->GetPluginInfoByPath( - plugin_path, &plugin_info) && - !plugin_info.name.empty()) { - plugin_name = UTF16ToWide(plugin_info.name); -#if defined(OS_MACOSX) - // Many plugins on the Mac have .plugin in the actual name, which looks - // terrible, so look for that and strip it off if present. - const std::wstring plugin_extension(L".plugin"); - if (EndsWith(plugin_name, plugin_extension, true)) - plugin_name.erase(plugin_name.length() - plugin_extension.length()); -#endif // OS_MACOSX - } - SkBitmap* crash_icon = ResourceBundle::GetSharedInstance().GetBitmapNamed( - IDR_INFOBAR_PLUGIN_CRASHED); - AddInfoBar(new SimpleAlertInfoBarDelegate(this, crash_icon, - l10n_util::GetStringFUTF16(IDS_PLUGIN_CRASHED_PROMPT, - WideToUTF16Hack(plugin_name)), true)); -} - void TabContents::OnDidGetApplicationInfo(int32 page_id, const WebApplicationInfo& info) { web_app_info_ = info; @@ -2487,14 +2238,6 @@ void TabContents::OnInstallApplication(const WebApplicationInfo& info) { delegate()->OnInstallApplication(this, info); } -void TabContents::OnBlockedOutdatedPlugin(const string16& name, - const GURL& update_url) { - if (!update_url.is_empty()) - new OutdatedPluginInfoBar(this, name, update_url); - else - new BlockedPluginInfoBar(this, name); -} - void TabContents::OnPageContents(const GURL& url, int32 page_id, const string16& contents, diff --git a/chrome/browser/tab_contents/tab_contents.h b/chrome/browser/tab_contents/tab_contents.h index 3f11028..fa7a6a5 100644 --- a/chrome/browser/tab_contents/tab_contents.h +++ b/chrome/browser/tab_contents/tab_contents.h @@ -66,7 +66,7 @@ class FileSelectHelper; class InfoBarDelegate; class LoadNotificationDetails; class OmniboxSearchHint; -class PluginInstallerInfoBarDelegate; +class PluginObserver; class Profile; class PrerenderManager; class PrerenderPLTRecorder; @@ -147,9 +147,6 @@ class TabContents : public PageNavigator, // Returns true if contains content rendered by an extension. bool HostsExtension() const; - // Returns the PluginInstallerInfoBarDelegate, creating it if necessary. - PluginInstallerInfoBarDelegate* GetPluginInstaller(); - // Returns the TabContentsSSLHelper, creating it if necessary. TabContentsSSLHelper* GetSSLHelper(); @@ -823,11 +820,8 @@ class TabContents : public PageNavigator, int active_match_ordinal, bool final_update); void OnGoToEntryAtOffset(int offset); - void OnMissingPluginStatus(int status); - void OnCrashedPlugin(const FilePath& plugin_path); void OnDidGetApplicationInfo(int32 page_id, const WebApplicationInfo& info); void OnInstallApplication(const WebApplicationInfo& info); - void OnBlockedOutdatedPlugin(const string16& name, const GURL& update_url); void OnPageContents(const GURL& url, int32 page_id, const string16& contents, @@ -1123,8 +1117,8 @@ class TabContents : public PageNavigator, // AutoFillManager. scoped_ptr<AutoFillManager> autofill_manager_; - // PluginInstallerInfoBarDelegate, lazily created. - scoped_ptr<PluginInstallerInfoBarDelegate> plugin_installer_; + // Handles plugin messages. + scoped_ptr<PluginObserver> plugin_observer_; // Prerender PageLoadTime Recorder. scoped_ptr<PrerenderPLTRecorder> prerender_plt_recorder_; diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index a134ba9..0dd7f81 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -1989,6 +1989,8 @@ 'browser/plugin_exceptions_table_model.h', 'browser/plugin_installer_infobar_delegate.cc', 'browser/plugin_installer_infobar_delegate.h', + 'browser/plugin_observer.cc', + 'browser/plugin_observer.h', 'browser/plugin_process_host.cc', 'browser/plugin_process_host.h', 'browser/plugin_process_host_mac.cc', |