1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_PEPPER_BROKER_INFOBAR_DELEGATE_H_
6#define CHROME_BROWSER_PEPPER_BROKER_INFOBAR_DELEGATE_H_
7
8#include "base/callback.h"
9#include "base/files/file_path.h"
10#include "components/infobars/core/confirm_infobar_delegate.h"
11#include "url/gurl.h"
12
13class HostContentSettingsMap;
14class InfoBarService;
15class TabSpecificContentSettings;
16
17namespace content {
18class WebContents;
19}
20
21// Shows an infobar that asks the user whether a Pepper plug-in is allowed
22// to connect to its (privileged) broker. The user decision is made "sticky"
23// by storing a content setting for the site.
24class PepperBrokerInfoBarDelegate : public ConfirmInfoBarDelegate {
25 public:
26  // Determines whether the broker setting is allow, deny, or ask.  In the first
27  // two cases, runs the callback directly.  In the third, creates a pepper
28  // broker infobar and delegate and adds the infobar to the InfoBarService
29  // associated with |web_contents|.
30  static void Create(content::WebContents* web_contents,
31                     const GURL& url,
32                     const base::FilePath& plugin_path,
33                     const base::Callback<void(bool)>& callback);
34
35 private:
36  PepperBrokerInfoBarDelegate(const GURL& url,
37                              const base::FilePath& plugin_path,
38                              const std::string& languages,
39                              HostContentSettingsMap* content_settings,
40                              TabSpecificContentSettings* tab_content_settings,
41                              const base::Callback<void(bool)>& callback);
42  virtual ~PepperBrokerInfoBarDelegate();
43
44  // ConfirmInfoBarDelegate:
45  virtual int GetIconID() const OVERRIDE;
46  virtual base::string16 GetMessageText() const OVERRIDE;
47  virtual base::string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
48  virtual bool Accept() OVERRIDE;
49  virtual bool Cancel() OVERRIDE;
50  virtual base::string16 GetLinkText() const OVERRIDE;
51  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
52
53  void DispatchCallback(bool result);
54
55  const GURL url_;
56  const base::FilePath plugin_path_;
57  const std::string languages_;
58  HostContentSettingsMap* content_settings_;
59  TabSpecificContentSettings* tab_content_settings_;
60  base::Callback<void(bool)> callback_;
61
62  DISALLOW_COPY_AND_ASSIGN(PepperBrokerInfoBarDelegate);
63};
64
65#endif  // CHROME_BROWSER_PEPPER_BROKER_INFOBAR_DELEGATE_H_
66