1// Copyright 2014 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_CONTENT_SETTINGS_PERMISSION_INFOBAR_DELEGATE_H_
6#define CHROME_BROWSER_CONTENT_SETTINGS_PERMISSION_INFOBAR_DELEGATE_H_
7
8#include "chrome/browser/infobars/infobar_service.h"
9#include "components/content_settings/core/common/content_settings_types.h"
10#include "components/content_settings/core/common/permission_request_id.h"
11#include "components/infobars/core/confirm_infobar_delegate.h"
12#include "content/public/browser/web_contents.h"
13
14class NavigationDetails;
15class PermissionQueueController;
16
17// Base class for permission infobars, it implements the default behavior
18// so that the accept/deny buttons grant/deny the relevant permission.
19// A basic implementor only needs to implement the methods that
20// provide an icon and a message text to the infobar.
21class PermissionInfobarDelegate : public ConfirmInfoBarDelegate {
22
23 protected:
24  PermissionInfobarDelegate(PermissionQueueController* controller,
25                            const PermissionRequestID& id,
26                            const GURL& requesting_origin,
27                            ContentSettingsType type);
28  virtual ~PermissionInfobarDelegate();
29
30  // ConfirmInfoBarDelegate:
31  virtual base::string16 GetMessageText() const = 0;
32
33  virtual infobars::InfoBarDelegate::Type GetInfoBarType() const OVERRIDE;
34  virtual base::string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
35
36  // Remember to call RegisterActionTaken for these methods if you are
37  // overriding them.
38  virtual void InfoBarDismissed() OVERRIDE;
39  virtual bool Accept() OVERRIDE;
40  virtual bool Cancel() OVERRIDE;
41
42 private:
43  void SetPermission(bool update_content_setting, bool allowed);
44
45  PermissionQueueController* controller_; // not owned by us
46  const PermissionRequestID id_;
47  GURL requesting_origin_;
48  bool action_taken_;
49  ContentSettingsType type_;
50
51  DISALLOW_COPY_AND_ASSIGN(PermissionInfobarDelegate);
52};
53
54#endif  // CHROME_BROWSER_CONTENT_SETTINGS_PERMISSION_INFOBAR_DELEGATE_H_
55