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_UI_VIEWS_SIGNED_CERTIFICATE_TIMESTAMPS_VIEWS_H_
6#define CHROME_BROWSER_UI_VIEWS_SIGNED_CERTIFICATE_TIMESTAMPS_VIEWS_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "content/public/browser/notification_observer.h"
10#include "net/cert/signed_certificate_timestamp.h"
11#include "net/ssl/signed_certificate_timestamp_and_status.h"
12#include "ui/views/controls/combobox/combobox_listener.h"
13#include "ui/views/window/dialog_delegate.h"
14
15namespace content {
16class WebContents;
17}
18
19namespace views {
20class Combobox;
21class Widget;
22}
23
24class SignedCertificateTimestampInfoView;
25class SCTListModel;
26
27// The Views implementation of the signed certificate timestamps viewer.
28class SignedCertificateTimestampsViews : public views::DialogDelegateView,
29                                         public content::NotificationObserver,
30                                         public views::ComboboxListener {
31 public:
32  // Use ShowSignedCertificateTimestampsViewer to show.
33  SignedCertificateTimestampsViews(
34      content::WebContents* web_contents,
35      const net::SignedCertificateTimestampAndStatusList& sct_list);
36  virtual ~SignedCertificateTimestampsViews();
37
38  // views::DialogDelegate:
39  virtual base::string16 GetWindowTitle() const OVERRIDE;
40  virtual int GetDialogButtons() const OVERRIDE;
41  virtual ui::ModalType GetModalType() const OVERRIDE;
42
43  // views::View:
44  virtual void ViewHierarchyChanged(const ViewHierarchyChangedDetails& details)
45      OVERRIDE;
46
47 private:
48  void Init();
49
50  void ShowSCTInfo(int sct_index);
51
52  // views::ComboboxListener:
53  virtual void OnPerformAction(views::Combobox* combobox) OVERRIDE;
54
55  // content::NotificationObserver:
56  virtual void Observe(int type,
57                       const content::NotificationSource& source,
58                       const content::NotificationDetails& details) OVERRIDE;
59
60  SignedCertificateTimestampInfoView* sct_info_view_;
61
62  scoped_ptr<SCTListModel> sct_list_model_;
63  // The Combobox used to select the SCT to display. This class owns the pointer
64  // as it has to be deleted explicitly before the views c'tor is called:
65  // The Combobox d'tor refers to the model it holds, which will be destructed
66  // as part of tearing down this class. So it will not be available when the
67  // Views d'tor destroys the Combobox, leading to a crash.
68  // Must be deleted before the model.
69  scoped_ptr<views::Combobox> sct_selector_box_;
70  net::SignedCertificateTimestampAndStatusList sct_list_;
71
72  DISALLOW_COPY_AND_ASSIGN(SignedCertificateTimestampsViews);
73};
74
75#endif  // CHROME_BROWSER_UI_VIEWS_SIGNED_CERTIFICATE_TIMESTAMPS_VIEWS_H_
76