| Index: chrome/browser/plugin_observer.cc
|
| diff --git a/chrome/browser/plugin_observer.cc b/chrome/browser/plugin_observer.cc
|
| deleted file mode 100644
|
| index 885206b29bb8aab0b038092540c3c3294e9e8c85..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/plugin_observer.cc
|
| +++ /dev/null
|
| @@ -1,338 +0,0 @@
|
| -// Copyright (c) 2012 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/auto_reset.h"
|
| -#include "base/bind.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/api/infobars/confirm_infobar_delegate.h"
|
| -#include "chrome/browser/api/infobars/simple_alert_infobar_delegate.h"
|
| -#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/metrics/metrics_service.h"
|
| -#include "chrome/browser/plugin_finder.h"
|
| -#include "chrome/browser/plugin_infobar_delegates.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/browser_dialogs.h"
|
| -#include "chrome/browser/ui/tab_contents/tab_contents.h"
|
| -#include "chrome/common/render_messages.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "content/public/browser/plugin_service.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/browser/web_contents_delegate.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/webplugininfo.h"
|
| -
|
| -#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| -#include "chrome/browser/plugin_installer.h"
|
| -#include "chrome/browser/plugin_installer_observer.h"
|
| -#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
|
| -#endif // defined(ENABLE_PLUGIN_INSTALLATION)
|
| -
|
| -#if defined(OS_WIN)
|
| -#include "base/win/metro.h"
|
| -#endif
|
| -
|
| -using content::OpenURLParams;
|
| -using content::PluginService;
|
| -using content::Referrer;
|
| -using content::WebContents;
|
| -
|
| -namespace {
|
| -
|
| -#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| -
|
| -// ConfirmInstallDialogDelegate ------------------------------------------------
|
| -
|
| -class ConfirmInstallDialogDelegate : public TabModalConfirmDialogDelegate,
|
| - public WeakPluginInstallerObserver {
|
| - public:
|
| - ConfirmInstallDialogDelegate(TabContents* tab_contents,
|
| - PluginInstaller* installer);
|
| -
|
| - // TabModalConfirmDialogDelegate methods:
|
| - virtual string16 GetTitle() OVERRIDE;
|
| - virtual string16 GetMessage() OVERRIDE;
|
| - virtual string16 GetAcceptButtonTitle() OVERRIDE;
|
| - virtual void OnAccepted() OVERRIDE;
|
| - virtual void OnCanceled() OVERRIDE;
|
| -
|
| - // WeakPluginInstallerObserver methods:
|
| - virtual void DownloadStarted() OVERRIDE;
|
| - virtual void OnlyWeakObserversLeft() OVERRIDE;
|
| -
|
| - private:
|
| - TabContents* tab_contents_;
|
| -};
|
| -
|
| -ConfirmInstallDialogDelegate::ConfirmInstallDialogDelegate(
|
| - TabContents* tab_contents,
|
| - PluginInstaller* installer)
|
| - : TabModalConfirmDialogDelegate(tab_contents->web_contents()),
|
| - WeakPluginInstallerObserver(installer),
|
| - tab_contents_(tab_contents) {
|
| -}
|
| -
|
| -string16 ConfirmInstallDialogDelegate::GetTitle() {
|
| - return l10n_util::GetStringFUTF16(
|
| - IDS_PLUGIN_CONFIRM_INSTALL_DIALOG_TITLE, installer()->name());
|
| -}
|
| -
|
| -string16 ConfirmInstallDialogDelegate::GetMessage() {
|
| - return l10n_util::GetStringFUTF16(IDS_PLUGIN_CONFIRM_INSTALL_DIALOG_MSG,
|
| - installer()->name());
|
| -}
|
| -
|
| -string16 ConfirmInstallDialogDelegate::GetAcceptButtonTitle() {
|
| - return l10n_util::GetStringUTF16(
|
| - IDS_PLUGIN_CONFIRM_INSTALL_DIALOG_ACCEPT_BUTTON);
|
| -}
|
| -
|
| -void ConfirmInstallDialogDelegate::OnAccepted() {
|
| - installer()->StartInstalling(tab_contents_);
|
| -}
|
| -
|
| -void ConfirmInstallDialogDelegate::OnCanceled() {
|
| -}
|
| -
|
| -void ConfirmInstallDialogDelegate::DownloadStarted() {
|
| - Cancel();
|
| -}
|
| -
|
| -void ConfirmInstallDialogDelegate::OnlyWeakObserversLeft() {
|
| - Cancel();
|
| -}
|
| -#endif // defined(ENABLE_PLUGIN_INSTALLATION)
|
| -
|
| -} // namespace
|
| -
|
| -// PluginObserver -------------------------------------------------------------
|
| -
|
| -#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| -class PluginObserver::PluginPlaceholderHost : public PluginInstallerObserver {
|
| - public:
|
| - PluginPlaceholderHost(PluginObserver* observer,
|
| - int routing_id,
|
| - PluginInstaller* installer)
|
| - : PluginInstallerObserver(installer),
|
| - observer_(observer),
|
| - routing_id_(routing_id) {
|
| - DCHECK(installer);
|
| - switch (installer->state()) {
|
| - case PluginInstaller::INSTALLER_STATE_IDLE: {
|
| - observer->Send(new ChromeViewMsg_FoundMissingPlugin(routing_id_,
|
| - installer->name()));
|
| - break;
|
| - }
|
| - case PluginInstaller::INSTALLER_STATE_DOWNLOADING: {
|
| - DownloadStarted();
|
| - break;
|
| - }
|
| - }
|
| - }
|
| -
|
| - // PluginInstallerObserver methods:
|
| - virtual void DownloadStarted() OVERRIDE {
|
| - observer_->Send(new ChromeViewMsg_StartedDownloadingPlugin(routing_id_));
|
| - }
|
| -
|
| - virtual void DownloadError(const std::string& msg) OVERRIDE {
|
| - observer_->Send(new ChromeViewMsg_ErrorDownloadingPlugin(routing_id_, msg));
|
| - }
|
| -
|
| - virtual void DownloadCancelled() OVERRIDE {
|
| - observer_->Send(new ChromeViewMsg_CancelledDownloadingPlugin(routing_id_));
|
| - }
|
| -
|
| - virtual void DownloadFinished() OVERRIDE {
|
| - observer_->Send(new ChromeViewMsg_FinishedDownloadingPlugin(routing_id_));
|
| - }
|
| -
|
| - private:
|
| - // Weak pointer; owns us.
|
| - PluginObserver* observer_;
|
| -
|
| - int routing_id_;
|
| -};
|
| -#endif // defined(ENABLE_PLUGIN_INSTALLATION)
|
| -
|
| -PluginObserver::PluginObserver(TabContents* tab_contents)
|
| - : content::WebContentsObserver(tab_contents->web_contents()),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)),
|
| - tab_contents_(tab_contents) {
|
| -}
|
| -
|
| -PluginObserver::~PluginObserver() {
|
| -#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| - STLDeleteValues(&plugin_placeholders_);
|
| -#endif
|
| -}
|
| -
|
| -void PluginObserver::PluginCrashed(const FilePath& plugin_path) {
|
| - DCHECK(!plugin_path.value().empty());
|
| -
|
| - string16 plugin_name =
|
| - PluginService::GetInstance()->GetPluginDisplayNameByPath(plugin_path);
|
| - gfx::Image* icon = &ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| - IDR_INFOBAR_PLUGIN_CRASHED);
|
| - InfoBarTabHelper* infobar_helper = tab_contents_->infobar_tab_helper();
|
| - infobar_helper->AddInfoBar(
|
| - new SimpleAlertInfoBarDelegate(
|
| - infobar_helper,
|
| - icon,
|
| - l10n_util::GetStringFUTF16(IDS_PLUGIN_CRASHED_PROMPT, plugin_name),
|
| - true));
|
| -}
|
| -
|
| -bool PluginObserver::OnMessageReceived(const IPC::Message& message) {
|
| - IPC_BEGIN_MESSAGE_MAP(PluginObserver, message)
|
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_BlockedOutdatedPlugin,
|
| - OnBlockedOutdatedPlugin)
|
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_BlockedUnauthorizedPlugin,
|
| - OnBlockedUnauthorizedPlugin)
|
| -#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FindMissingPlugin,
|
| - OnFindMissingPlugin)
|
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_RemovePluginPlaceholderHost,
|
| - OnRemovePluginPlaceholderHost)
|
| -#endif
|
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_OpenAboutPlugins,
|
| - OnOpenAboutPlugins)
|
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_CouldNotLoadPlugin,
|
| - OnCouldNotLoadPlugin)
|
| -
|
| - IPC_MESSAGE_UNHANDLED(return false)
|
| - IPC_END_MESSAGE_MAP()
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void PluginObserver::OnBlockedUnauthorizedPlugin(
|
| - const string16& name,
|
| - const std::string& identifier) {
|
| - InfoBarTabHelper* infobar_helper = tab_contents_->infobar_tab_helper();
|
| - infobar_helper->AddInfoBar(
|
| - new UnauthorizedPluginInfoBarDelegate(
|
| - infobar_helper,
|
| - tab_contents_->profile()->GetHostContentSettingsMap(),
|
| - name, identifier));
|
| -}
|
| -
|
| -void PluginObserver::OnBlockedOutdatedPlugin(int placeholder_id,
|
| - const std::string& identifier) {
|
| -#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| - PluginFinder::Get(base::Bind(&PluginObserver::FindPluginToUpdate,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - placeholder_id, identifier));
|
| -#else
|
| - // If we don't support third-party plug-in installation, we shouldn't have
|
| - // outdated plug-ins.
|
| - NOTREACHED();
|
| -#endif // defined(ENABLE_PLUGIN_INSTALLATION)
|
| -}
|
| -
|
| -#if defined(ENABLE_PLUGIN_INSTALLATION)
|
| -void PluginObserver::FindPluginToUpdate(int placeholder_id,
|
| - const std::string& identifier,
|
| - PluginFinder* plugin_finder) {
|
| - PluginInstaller* installer =
|
| - plugin_finder->FindPluginWithIdentifier(identifier);
|
| - DCHECK(installer) << "Couldn't find PluginInstaller for identifier "
|
| - << identifier;
|
| - plugin_placeholders_[placeholder_id] =
|
| - new PluginPlaceholderHost(this, placeholder_id, installer);
|
| - InfoBarTabHelper* infobar_helper = tab_contents_->infobar_tab_helper();
|
| - infobar_helper->AddInfoBar(
|
| - OutdatedPluginInfoBarDelegate::Create(this, installer));
|
| -}
|
| -
|
| -void PluginObserver::OnFindMissingPlugin(int placeholder_id,
|
| - const std::string& mime_type) {
|
| -PluginFinder::Get(base::Bind(&PluginObserver::FindMissingPlugin,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - placeholder_id, mime_type));
|
| -}
|
| -
|
| -void PluginObserver::FindMissingPlugin(int placeholder_id,
|
| - const std::string& mime_type,
|
| - PluginFinder* plugin_finder) {
|
| - std::string lang = "en-US"; // Oh yes.
|
| - PluginInstaller* installer = plugin_finder->FindPlugin(mime_type, lang);
|
| - if (!installer) {
|
| - Send(new ChromeViewMsg_DidNotFindMissingPlugin(placeholder_id));
|
| - return;
|
| - }
|
| -
|
| - plugin_placeholders_[placeholder_id] =
|
| - new PluginPlaceholderHost(this, placeholder_id, installer);
|
| - InfoBarTabHelper* infobar_helper = tab_contents_->infobar_tab_helper();
|
| - InfoBarDelegate* delegate;
|
| -#if !defined(OS_WIN)
|
| - delegate = PluginInstallerInfoBarDelegate::Create(
|
| - infobar_helper, installer,
|
| - base::Bind(&PluginObserver::InstallMissingPlugin,
|
| - weak_ptr_factory_.GetWeakPtr(), installer));
|
| -#else
|
| - delegate = base::win::IsMetroProcess() ?
|
| - PluginMetroModeInfoBarDelegate::Create(
|
| - infobar_helper, installer->name()) :
|
| - PluginInstallerInfoBarDelegate::Create(
|
| - infobar_helper, installer,
|
| - base::Bind(&PluginObserver::InstallMissingPlugin,
|
| - weak_ptr_factory_.GetWeakPtr(), installer));
|
| -#endif
|
| - infobar_helper->AddInfoBar(delegate);
|
| -}
|
| -
|
| -void PluginObserver::InstallMissingPlugin(PluginInstaller* installer) {
|
| - if (installer->url_for_display()) {
|
| - installer->OpenDownloadURL(web_contents());
|
| - } else {
|
| - chrome::ShowTabModalConfirmDialog(
|
| - new ConfirmInstallDialogDelegate(tab_contents_, installer),
|
| - tab_contents_);
|
| - }
|
| -}
|
| -
|
| -void PluginObserver::OnRemovePluginPlaceholderHost(int placeholder_id) {
|
| - std::map<int, PluginPlaceholderHost*>::iterator it =
|
| - plugin_placeholders_.find(placeholder_id);
|
| - if (it == plugin_placeholders_.end()) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - delete it->second;
|
| - plugin_placeholders_.erase(it);
|
| -}
|
| -#endif // defined(ENABLE_PLUGIN_INSTALLATION)
|
| -
|
| -void PluginObserver::OnOpenAboutPlugins() {
|
| - web_contents()->OpenURL(OpenURLParams(
|
| - GURL(chrome::kAboutPluginsURL),
|
| - content::Referrer(web_contents()->GetURL(),
|
| - WebKit::WebReferrerPolicyDefault),
|
| - NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_AUTO_BOOKMARK, false));
|
| -}
|
| -
|
| -void PluginObserver::OnCouldNotLoadPlugin(const FilePath& plugin_path) {
|
| - g_browser_process->metrics_service()->LogPluginLoadingError(plugin_path);
|
| - string16 plugin_name =
|
| - PluginService::GetInstance()->GetPluginDisplayNameByPath(plugin_path);
|
| - InfoBarTabHelper* infobar_helper = tab_contents_->infobar_tab_helper();
|
| - infobar_helper->AddInfoBar(new SimpleAlertInfoBarDelegate(
|
| - infobar_helper,
|
| - &ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| - IDR_INFOBAR_PLUGIN_CRASHED),
|
| - l10n_util::GetStringFUTF16(IDS_PLUGIN_INITIALIZATION_ERROR_PROMPT,
|
| - plugin_name),
|
| - true /* auto_expire */));
|
| -}
|
| -
|
|
|