172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_PAGE_INFO_BUBBLE_VIEW_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_PAGE_INFO_BUBBLE_VIEW_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/page_info_model.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/views/bubble/bubble.h"
113f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/animation_delegate.h"
123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/slide_animation.h"
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/link.h"
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/view.h"
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views {
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Label;
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass PageInfoBubbleView : public views::View,
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                           public PageInfoModel::PageInfoModelObserver,
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                           public BubbleDelegate,
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                           public views::LinkController,
243f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen                           public ui::AnimationDelegate {
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  PageInfoBubbleView(gfx::NativeWindow parent_window,
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                     Profile* profile,
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                     const GURL& url,
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                     const NavigationEntry::SSLStatus& ssl,
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                     bool show_history);
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~PageInfoBubbleView();
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Show the certificate dialog.
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void ShowCertDialog();
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void set_bubble(Bubble* bubble) { bubble_ = bubble; }
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // View methods:
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual gfx::Size GetPreferredSize();
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // PageInfoModel::PageInfoModelObserver methods:
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ModelChanged();
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // BubbleDelegate methods:
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape);
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual bool CloseOnEscape();
47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual bool FadeInOnShow();
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual std::wstring accessible_name();
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // LinkController methods:
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void LinkActivated(views::Link* source, int event_flags);
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  // Overridden from ui::AnimationDelegate.
543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void AnimationEnded(const ui::Animation* animation);
553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void AnimationProgressed(const ui::Animation* animation);
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Layout the sections within the bubble.
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void LayoutSections();
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Global pointer to the bubble that is hosting our view.
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static Bubble* bubble_;
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The model providing the various section info.
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  PageInfoModel model_;
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The parent window of the Bubble showing this view.
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::NativeWindow parent_window_;
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The id of the certificate for this page.
714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  int cert_id_;
724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The Help Center link at the bottom of the bubble.
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Link* help_center_link_;
754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Animation that helps us change size smoothly as more data comes in.
773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  ui::SlideAnimation resize_animation_;
784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The height of the info bubble at the start of the resize animation.
804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  int animation_start_height_;
814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(PageInfoBubbleView);
834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_PAGE_INFO_BUBBLE_VIEW_H_
86