| Index: chrome/browser/tab_contents/tab_contents.cc
|
| ===================================================================
|
| --- chrome/browser/tab_contents/tab_contents.cc (revision 72559)
|
| +++ chrome/browser/tab_contents/tab_contents.cc (working copy)
|
| @@ -248,66 +248,183 @@
|
| 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 ConfirmInfoBarDelegate {
|
| +class OutdatedPluginInfoBar : public PluginInfoBar {
|
| public:
|
| OutdatedPluginInfoBar(TabContents* tab_contents,
|
| const string16& name,
|
| const GURL& update_url);
|
|
|
| - private:
|
| - virtual ~OutdatedPluginInfoBar();
|
| -
|
| // ConfirmInfoBarDelegate:
|
| - virtual void InfoBarClosed();
|
| - virtual SkBitmap* GetIcon() const;
|
| virtual string16 GetMessageText() const;
|
| - virtual int GetButtons() const;
|
| virtual string16 GetButtonLabel(InfoBarButton button) const;
|
| virtual bool Accept();
|
| virtual bool Cancel();
|
| - virtual string16 GetLinkText();
|
| + virtual void InfoBarClosed();
|
| virtual bool LinkClicked(WindowOpenDisposition disposition);
|
|
|
| - TabContents* tab_contents_;
|
| - string16 name_;
|
| + protected:
|
| + virtual ~OutdatedPluginInfoBar();
|
| +
|
| + private:
|
| GURL update_url_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(OutdatedPluginInfoBar);
|
| };
|
|
|
| OutdatedPluginInfoBar::OutdatedPluginInfoBar(TabContents* tab_contents,
|
| const string16& name,
|
| const GURL& update_url)
|
| - : ConfirmInfoBarDelegate(tab_contents),
|
| - tab_contents_(tab_contents),
|
| - name_(name),
|
| - update_url_(update_url) {
|
| + : PluginInfoBar(tab_contents, name), update_url_(update_url) {
|
| + tab_contents->AddInfoBar(this);
|
| UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Shown"));
|
| - tab_contents->AddInfoBar(this);
|
| }
|
|
|
| OutdatedPluginInfoBar::~OutdatedPluginInfoBar() {
|
| }
|
|
|
| -void OutdatedPluginInfoBar::InfoBarClosed() {
|
| - UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Closed"));
|
| - delete this;
|
| -}
|
| -
|
| -SkBitmap* OutdatedPluginInfoBar::GetIcon() const {
|
| - return ResourceBundle::GetSharedInstance().GetBitmapNamed(
|
| - IDR_INFOBAR_PLUGIN_INSTALL);
|
| -}
|
| -
|
| string16 OutdatedPluginInfoBar::GetMessageText() const {
|
| return l10n_util::GetStringFUTF16(IDS_PLUGIN_OUTDATED_PROMPT, name_);
|
| }
|
|
|
| -int OutdatedPluginInfoBar::GetButtons() const {
|
| - return BUTTON_OK | BUTTON_CANCEL;
|
| -}
|
| -
|
| string16 OutdatedPluginInfoBar::GetButtonLabel(InfoBarButton button) const {
|
| return l10n_util::GetStringUTF16((button == BUTTON_OK) ?
|
| IDS_PLUGIN_UPDATE : IDS_PLUGIN_ENABLE_TEMPORARILY);
|
| @@ -323,19 +440,19 @@
|
| bool OutdatedPluginInfoBar::Cancel() {
|
| UserMetrics::RecordAction(
|
| UserMetricsAction("OutdatedPluginInfobar.AllowThisTime"));
|
| - tab_contents_->render_view_host()->LoadBlockedPlugins();
|
| + CommonCancel();
|
| return false;
|
| }
|
|
|
| -string16 OutdatedPluginInfoBar::GetLinkText() {
|
| - return l10n_util::GetStringUTF16(IDS_LEARN_MORE);
|
| +void OutdatedPluginInfoBar::InfoBarClosed() {
|
| + UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Closed"));
|
| + CommonClose();
|
| }
|
|
|
| bool OutdatedPluginInfoBar::LinkClicked(WindowOpenDisposition disposition) {
|
| UserMetrics::RecordAction(
|
| UserMetricsAction("OutdatedPluginInfobar.LearnMore"));
|
| - // TODO(bauerb): Navigate to a help page explaining why we disabled
|
| - // the plugin, once we have one.
|
| + CommonLearnMore(disposition);
|
| return false;
|
| }
|
|
|
| @@ -2366,7 +2483,10 @@
|
|
|
| void TabContents::OnBlockedOutdatedPlugin(const string16& name,
|
| const GURL& update_url) {
|
| - new OutdatedPluginInfoBar(this, name, update_url);
|
| + if (!update_url.is_empty())
|
| + new OutdatedPluginInfoBar(this, name, update_url);
|
| + else
|
| + new BlockedPluginInfoBar(this, name);
|
| }
|
|
|
| void TabContents::OnPageContents(const GURL& url,
|
|
|