plugin_infobar_delegates.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_PLUGINS_PLUGIN_INFOBAR_DELEGATES_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_PLUGINS_PLUGIN_INFOBAR_DELEGATES_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/confirm_infobar_delegate.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PLUGIN_INSTALLATION)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_installer_observer.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(ENABLE_PLUGIN_INSTALLATION)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InfoBarService;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostContentSettingsMap;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginMetadata;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for blocked plug-in infobars.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginInfoBarDelegate : public ConfirmInfoBarDelegate {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginInfoBarDelegate(InfoBarService* infobar_service,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const string16& name,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const std::string& identifier);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PluginInfoBarDelegate();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetLearnMoreURL() const = 0;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadBlockedPlugins();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 name_;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual int GetIconID() const OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetLinkText() const OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string identifier_;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginInfoBarDelegate);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Infobar that's shown when a plug-in requires user authorization to run.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UnauthorizedPluginInfoBarDelegate : public PluginInfoBarDelegate {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates an unauthorized plugin delegate and adds it to |infobar_service|.
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     HostContentSettingsMap* content_settings,
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const string16& name,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const std::string& identifier);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnauthorizedPluginInfoBarDelegate(InfoBarService* infobar_service,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    HostContentSettingsMap* content_settings,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const string16& name,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const std::string& identifier);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UnauthorizedPluginInfoBarDelegate();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInfoBarDelegate:
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Cancel() OVERRIDE;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBarDismissed() OVERRIDE;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetLearnMoreURL() const OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HostContentSettingsMap* content_settings_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(UnauthorizedPluginInfoBarDelegate);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PLUGIN_INSTALLATION)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Infobar that's shown when a plug-in is out of date.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OutdatedPluginInfoBarDelegate : public PluginInfoBarDelegate,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      public WeakPluginInstallerObserver {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates an outdated plugin delegate and adds it to |infobar_service|.
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     PluginInstaller* installer,
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     scoped_ptr<PluginMetadata> metadata);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OutdatedPluginInfoBarDelegate(InfoBarService* infobar_service,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                PluginInstaller* installer,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                scoped_ptr<PluginMetadata> metadata,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const string16& message);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~OutdatedPluginInfoBarDelegate();
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInfoBarDelegate:
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Cancel() OVERRIDE;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBarDismissed() OVERRIDE;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetLearnMoreURL() const OVERRIDE;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInstallerObserver:
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadStarted() OVERRIDE;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadError(const std::string& message) OVERRIDE;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadCancelled() OVERRIDE;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadFinished() OVERRIDE;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WeakPluginInstallerObserver:
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnlyWeakObserversLeft() OVERRIDE;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Replaces this infobar with one showing |message|. The new infobar will
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not have any buttons (and not call the callback).
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReplaceWithInfoBar(const string16& message);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PluginMetadata> plugin_metadata_;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 message_;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OutdatedPluginInfoBarDelegate);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The main purpose for this class is to popup/close the infobar when there is
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a missing plugin.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginInstallerInfoBarDelegate : public ConfirmInfoBarDelegate,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       public WeakPluginInstallerObserver {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef base::Callback<void(const PluginMetadata*)> InstallCallback;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows an infobar asking whether to install the plugin represented by
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |installer|. When the user accepts, |callback| is called.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // During installation of the plug-in, the infobar will change to reflect the
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // installation state.
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     PluginInstaller* installer,
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     scoped_ptr<PluginMetadata> plugin_metadata,
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const InstallCallback& callback);
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Replaces |infobar|, which must currently be owned, with an infobar asking
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the user to install or update a particular plugin.
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Replace(InfoBarDelegate* infobar,
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      PluginInstaller* installer,
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      scoped_ptr<PluginMetadata> metadata,
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      bool new_install,
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      const string16& message);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginInstallerInfoBarDelegate(InfoBarService* infobar_service,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PluginInstaller* installer,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 scoped_ptr<PluginMetadata> plugin_metadata,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const InstallCallback& callback,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 bool new_install,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const string16& message);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PluginInstallerInfoBarDelegate();
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
16390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual int GetIconID() const OVERRIDE;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetButtons() const OVERRIDE;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetLinkText() const OVERRIDE;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInstallerObserver:
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadStarted() OVERRIDE;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadError(const std::string& message) OVERRIDE;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadCancelled() OVERRIDE;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadFinished() OVERRIDE;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WeakPluginInstallerObserver:
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnlyWeakObserversLeft() OVERRIDE;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Replaces this infobar with one showing |message|. The new infobar will
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not have any buttons (and not call the callback).
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReplaceWithInfoBar(const string16& message);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PluginMetadata> plugin_metadata_;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InstallCallback callback_;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True iff the plug-in isn't installed yet.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool new_install_;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 message_;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginInstallerInfoBarDelegate);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(ENABLE_PLUGIN_INSTALLATION)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginMetroModeInfoBarDelegate : public ConfirmInfoBarDelegate {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The infobar can be used for two purposes: to inform the user about a
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // missing plugin or to note that a plugin only works in desktop mode.  These
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // purposes require different messages, buttons, etc.
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum Mode {
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    MISSING_PLUGIN,
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DESKTOP_MODE_REQUIRED,
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a metro mode infobar and delegate and adds the infobar to
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |infobar_service|.
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     Mode mode,
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const string16& name);
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PluginMetroModeInfoBarDelegate(InfoBarService* infobar_service,
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 Mode mode,
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 const string16& name);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PluginMetroModeInfoBarDelegate();
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual int GetIconID() const OVERRIDE;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetButtons() const OVERRIDE;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool Cancel() OVERRIDE;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetLinkText() const OVERRIDE;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Mode mode_;
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const string16 name_;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginMetroModeInfoBarDelegate);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_PLUGINS_PLUGIN_INFOBAR_DELEGATES_H_
238