15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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_INFOBARS_INSECURE_CONTENT_INFOBAR_DELEGATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_INFOBARS_INSECURE_CONTENT_INFOBAR_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/infobars/core/confirm_infobar_delegate.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass InfoBarService;
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for delegates that show warnings on HTTPS pages which try to
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// display or run insecure content.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InsecureContentInfoBarDelegate : public ConfirmInfoBarDelegate {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum InfoBarType {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISPLAY,  // Shown when "inactive" content (e.g. images) has been blocked.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RUN,      // Shown when "active" content (e.g. script) has been blocked.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Depending on the |type| requested and whether an insecure content infobar
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is already present in |infobar_service|, may do nothing; otherwise, creates
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // an insecure content infobar and delegate and either adds the infobar to
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // |infobar_service| or replaces the existing infobar.
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Create(InfoBarService* infobar_service, InfoBarType type);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum HistogramEvents {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISPLAY_INFOBAR_SHOWN = 0,  // Infobar was displayed.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISPLAY_USER_OVERRIDE,      // User clicked allow anyway button.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISPLAY_USER_DID_NOT_LOAD,  // User clicked the don't load button.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISPLAY_INFOBAR_DISMISSED,  // User clicked close button.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RUN_INFOBAR_SHOWN,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RUN_USER_OVERRIDE,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RUN_USER_DID_NOT_LOAD,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RUN_INFOBAR_DISMISSED,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NUM_EVENTS
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  explicit InsecureContentInfoBarDelegate(InfoBarType type);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~InsecureContentInfoBarDelegate();
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfirmInfoBarDelegate:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBarDismissed() OVERRIDE;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual InsecureContentInfoBarDelegate*
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AsInsecureContentInfoBarDelegate() OVERRIDE;
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetMessageText() const OVERRIDE;
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Accept() OVERRIDE;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Cancel() OVERRIDE;
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetLinkText() const OVERRIDE;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InfoBarType type_;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_IMPLICIT_CONSTRUCTORS(InsecureContentInfoBarDelegate);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_INFOBARS_INSECURE_CONTENT_INFOBAR_DELEGATE_H_
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61