plugin_infobar_delegates.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
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 std::string& identifier);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PluginInfoBarDelegate();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetLearnMoreURL() const = 0;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadBlockedPlugins();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual int GetIconID() const OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetLinkText() const OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string identifier_;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginInfoBarDelegate);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Infobar that's shown when a plug-in requires user authorization to run.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UnauthorizedPluginInfoBarDelegate : public PluginInfoBarDelegate {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates an unauthorized plugin delegate and adds it to |infobar_service|.
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     HostContentSettingsMap* content_settings,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const string16& name,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const std::string& identifier);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnauthorizedPluginInfoBarDelegate(InfoBarService* infobar_service,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    HostContentSettingsMap* content_settings,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const string16& name,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const std::string& identifier);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UnauthorizedPluginInfoBarDelegate();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInfoBarDelegate:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Cancel() OVERRIDE;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBarDismissed() OVERRIDE;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetLearnMoreURL() const OVERRIDE;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HostContentSettingsMap* content_settings_;
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  string16 name_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(UnauthorizedPluginInfoBarDelegate);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_PLUGIN_INSTALLATION)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Infobar that's shown when a plug-in is out of date.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OutdatedPluginInfoBarDelegate : public PluginInfoBarDelegate,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      public WeakPluginInstallerObserver {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates an outdated plugin delegate and adds it to |infobar_service|.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     PluginInstaller* installer,
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     scoped_ptr<PluginMetadata> metadata);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OutdatedPluginInfoBarDelegate(InfoBarService* infobar_service,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                PluginInstaller* installer,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                scoped_ptr<PluginMetadata> metadata,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const string16& message);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~OutdatedPluginInfoBarDelegate();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInfoBarDelegate:
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Cancel() OVERRIDE;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBarDismissed() OVERRIDE;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetLearnMoreURL() const OVERRIDE;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInstallerObserver:
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadStarted() OVERRIDE;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadError(const std::string& message) OVERRIDE;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadCancelled() OVERRIDE;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadFinished() OVERRIDE;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WeakPluginInstallerObserver:
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnlyWeakObserversLeft() OVERRIDE;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Replaces this infobar with one showing |message|. The new infobar will
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not have any buttons (and not call the callback).
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReplaceWithInfoBar(const string16& message);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PluginMetadata> plugin_metadata_;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 message_;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OutdatedPluginInfoBarDelegate);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The main purpose for this class is to popup/close the infobar when there is
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a missing plugin.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginInstallerInfoBarDelegate : public ConfirmInfoBarDelegate,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       public WeakPluginInstallerObserver {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef base::Callback<void(const PluginMetadata*)> InstallCallback;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows an infobar asking whether to install the plugin represented by
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |installer|. When the user accepts, |callback| is called.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // During installation of the plug-in, the infobar will change to reflect the
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // installation state.
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     PluginInstaller* installer,
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     scoped_ptr<PluginMetadata> plugin_metadata,
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const InstallCallback& callback);
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Replaces |infobar|, which must currently be owned, with an infobar asking
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the user to install or update a particular plugin.
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Replace(InfoBarDelegate* infobar,
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      PluginInstaller* installer,
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      scoped_ptr<PluginMetadata> metadata,
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      bool new_install,
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      const string16& message);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginInstallerInfoBarDelegate(InfoBarService* infobar_service,
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 PluginInstaller* installer,
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 scoped_ptr<PluginMetadata> plugin_metadata,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const InstallCallback& callback,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 bool new_install,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const string16& message);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PluginInstallerInfoBarDelegate();
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
16190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual int GetIconID() const OVERRIDE;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetButtons() const OVERRIDE;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetLinkText() const OVERRIDE;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PluginInstallerObserver:
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadStarted() OVERRIDE;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadError(const std::string& message) OVERRIDE;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadCancelled() OVERRIDE;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DownloadFinished() OVERRIDE;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WeakPluginInstallerObserver:
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnlyWeakObserversLeft() OVERRIDE;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Replaces this infobar with one showing |message|. The new infobar will
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not have any buttons (and not call the callback).
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReplaceWithInfoBar(const string16& message);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<PluginMetadata> plugin_metadata_;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InstallCallback callback_;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True iff the plug-in isn't installed yet.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool new_install_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 message_;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginInstallerInfoBarDelegate);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(ENABLE_PLUGIN_INSTALLATION)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PluginMetroModeInfoBarDelegate : public ConfirmInfoBarDelegate {
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The infobar can be used for two purposes: to inform the user about a
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // missing plugin or to note that a plugin only works in desktop mode.  These
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // purposes require different messages, buttons, etc.
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum Mode {
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    MISSING_PLUGIN,
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DESKTOP_MODE_REQUIRED,
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a metro mode infobar and delegate and adds the infobar to
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |infobar_service|.
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service,
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     Mode mode,
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                     const string16& name);
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PluginMetroModeInfoBarDelegate(InfoBarService* infobar_service,
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 Mode mode,
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 const string16& name);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PluginMetroModeInfoBarDelegate();
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
21990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual int GetIconID() const OVERRIDE;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetMessageText() const OVERRIDE;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetButtons() const OVERRIDE;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool Cancel() OVERRIDE;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual string16 GetLinkText() const OVERRIDE;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Mode mode_;
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const string16 name_;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PluginMetroModeInfoBarDelegate);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_PLUGINS_PLUGIN_INFOBAR_DELEGATES_H_
236