1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
// 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.
#ifndef CHROME_BROWSER_PLUGINS_PLUGIN_INFOBAR_DELEGATES_H_
#define CHROME_BROWSER_PLUGINS_PLUGIN_INFOBAR_DELEGATES_H_
#include "base/callback.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
#include "url/gurl.h"
#if defined(ENABLE_PLUGIN_INSTALLATION)
#include "chrome/browser/plugins/plugin_installer_observer.h"
#endif
class InfoBarService;
class HostContentSettingsMap;
class PluginMetadata;
namespace content {
class WebContents;
}
// Base class for blocked plugin infobars.
class PluginInfoBarDelegate : public ConfirmInfoBarDelegate {
protected:
explicit PluginInfoBarDelegate(const std::string& identifier);
~PluginInfoBarDelegate() override;
// ConfirmInfoBarDelegate:
bool LinkClicked(WindowOpenDisposition disposition) override;
virtual std::string GetLearnMoreURL() const = 0;
void LoadBlockedPlugins();
private:
// ConfirmInfoBarDelegate:
int GetIconID() const override;
base::string16 GetLinkText() const override;
std::string identifier_;
DISALLOW_COPY_AND_ASSIGN(PluginInfoBarDelegate);
};
#if defined(ENABLE_PLUGIN_INSTALLATION)
// Infobar that's shown when a plugin is out of date.
class OutdatedPluginInfoBarDelegate : public PluginInfoBarDelegate,
public WeakPluginInstallerObserver {
public:
// Creates an outdated plugin infobar and delegate and adds the infobar to
// |infobar_service|.
static void Create(InfoBarService* infobar_service,
PluginInstaller* installer,
scoped_ptr<PluginMetadata> metadata);
// Replaces |infobar|, which must currently be owned, with an infobar asking
// the user to update a particular plugin.
static void Replace(infobars::InfoBar* infobar,
PluginInstaller* installer,
scoped_ptr<PluginMetadata> plugin_metadata,
const base::string16& message);
private:
OutdatedPluginInfoBarDelegate(PluginInstaller* installer,
scoped_ptr<PluginMetadata> metadata,
const base::string16& message);
~OutdatedPluginInfoBarDelegate() override;
// PluginInfoBarDelegate:
void InfoBarDismissed() override;
base::string16 GetMessageText() const override;
base::string16 GetButtonLabel(InfoBarButton button) const override;
bool Accept() override;
bool Cancel() override;
bool LinkClicked(WindowOpenDisposition disposition) override;
std::string GetLearnMoreURL() const override;
// PluginInstallerObserver:
void DownloadStarted() override;
void DownloadError(const std::string& message) override;
void DownloadCancelled() override;
void DownloadFinished() override;
// WeakPluginInstallerObserver:
void OnlyWeakObserversLeft() override;
// Replaces this infobar with one showing |message|. The new infobar will
// not have any buttons (and not call the callback).
void ReplaceWithInfoBar(const base::string16& message);
scoped_ptr<PluginMetadata> plugin_metadata_;
base::string16 message_;
DISALLOW_COPY_AND_ASSIGN(OutdatedPluginInfoBarDelegate);
};
#endif // defined(ENABLE_PLUGIN_INSTALLATION)
#if defined(OS_WIN)
class PluginMetroModeInfoBarDelegate : public ConfirmInfoBarDelegate {
public:
// The infobar can be used for two purposes: to inform the user about a
// missing plugin or to note that a plugin only works in desktop mode. These
// purposes require different messages, buttons, etc.
enum Mode {
MISSING_PLUGIN,
DESKTOP_MODE_REQUIRED,
};
// Creates a metro mode infobar and delegate and adds the infobar to
// |infobar_service|.
static void Create(InfoBarService* infobar_service,
Mode mode,
const base::string16& name);
private:
PluginMetroModeInfoBarDelegate(Mode mode, const base::string16& name);
~PluginMetroModeInfoBarDelegate() override;
// ConfirmInfoBarDelegate:
int GetIconID() const override;
base::string16 GetMessageText() const override;
int GetButtons() const override;
base::string16 GetButtonLabel(InfoBarButton button) const override;
bool Accept() override;
base::string16 GetLinkText() const override;
bool LinkClicked(WindowOpenDisposition disposition) override;
const Mode mode_;
const base::string16 name_;
DISALLOW_COPY_AND_ASSIGN(PluginMetroModeInfoBarDelegate);
};
#endif // defined(OS_WIN)
#endif // CHROME_BROWSER_PLUGINS_PLUGIN_INFOBAR_DELEGATES_H_
|