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#include "chrome/browser/infobars/infobar_delegate.h"
6
7#include "base/logging.h"
8#include "build/build_config.h"
9#include "chrome/browser/infobars/infobar.h"
10#include "chrome/browser/infobars/infobar_service.h"
11#include "content/public/browser/navigation_controller.h"
12#include "content/public/browser/navigation_details.h"
13#include "content/public/browser/navigation_entry.h"
14#include "content/public/browser/web_contents.h"
15#include "ui/base/resource/resource_bundle.h"
16
17using content::NavigationEntry;
18
19// InfoBarDelegate ------------------------------------------------------------
20
21const int InfoBarDelegate::kNoIconID = 0;
22
23InfoBarDelegate::~InfoBarDelegate() {
24}
25
26InfoBarDelegate::InfoBarAutomationType
27    InfoBarDelegate::GetInfoBarAutomationType() const {
28  return UNKNOWN_INFOBAR;
29}
30
31bool InfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
32  return false;
33}
34
35bool InfoBarDelegate::ShouldExpire(
36    const content::LoadCommittedDetails& details) const {
37  if (!details.is_navigation_to_different_page())
38    return false;
39
40  return ShouldExpireInternal(details);
41}
42
43void InfoBarDelegate::InfoBarDismissed() {
44}
45
46int InfoBarDelegate::GetIconID() const {
47  return kNoIconID;
48}
49
50InfoBarDelegate::Type InfoBarDelegate::GetInfoBarType() const {
51  return WARNING_TYPE;
52}
53
54AutoLoginInfoBarDelegate* InfoBarDelegate::AsAutoLoginInfoBarDelegate() {
55  return NULL;
56}
57
58ConfirmInfoBarDelegate* InfoBarDelegate::AsConfirmInfoBarDelegate() {
59  return NULL;
60}
61
62ExtensionInfoBarDelegate* InfoBarDelegate::AsExtensionInfoBarDelegate() {
63  return NULL;
64}
65
66InsecureContentInfoBarDelegate*
67    InfoBarDelegate::AsInsecureContentInfoBarDelegate() {
68  return NULL;
69}
70
71MediaStreamInfoBarDelegate* InfoBarDelegate::AsMediaStreamInfoBarDelegate() {
72  return NULL;
73}
74
75PopupBlockedInfoBarDelegate* InfoBarDelegate::AsPopupBlockedInfoBarDelegate() {
76  return NULL;
77}
78
79RegisterProtocolHandlerInfoBarDelegate*
80    InfoBarDelegate::AsRegisterProtocolHandlerInfoBarDelegate() {
81  return NULL;
82}
83
84ScreenCaptureInfoBarDelegate*
85    InfoBarDelegate::AsScreenCaptureInfoBarDelegate() {
86  return NULL;
87}
88
89ThemeInstalledInfoBarDelegate*
90    InfoBarDelegate::AsThemePreviewInfobarDelegate() {
91  return NULL;
92}
93
94ThreeDAPIInfoBarDelegate* InfoBarDelegate::AsThreeDAPIInfoBarDelegate() {
95  return NULL;
96}
97
98TranslateInfoBarDelegate* InfoBarDelegate::AsTranslateInfoBarDelegate() {
99  return NULL;
100}
101
102void InfoBarDelegate::StoreActiveEntryUniqueID() {
103  DCHECK(web_contents());
104  NavigationEntry* active_entry =
105      web_contents()->GetController().GetActiveEntry();
106  contents_unique_id_ = active_entry ? active_entry->GetUniqueID() : 0;
107}
108
109gfx::Image InfoBarDelegate::GetIcon() const {
110  int icon_id = GetIconID();
111  return (icon_id == kNoIconID) ? gfx::Image() :
112      ResourceBundle::GetSharedInstance().GetNativeImageNamed(icon_id);
113}
114
115content::WebContents* InfoBarDelegate::web_contents() {
116  return (infobar_ && infobar_->owner()) ?
117      infobar_->owner()->web_contents() : NULL;
118}
119
120InfoBarDelegate::InfoBarDelegate() : contents_unique_id_(0) {
121}
122
123bool InfoBarDelegate::ShouldExpireInternal(
124    const content::LoadCommittedDetails& details) const {
125  // NOTE: If you change this, be sure to check and adjust the behavior of
126  // anyone who overrides this as necessary!
127  return (contents_unique_id_ != details.entry->GetUniqueID()) ||
128      (content::PageTransitionStripQualifier(
129          details.entry->GetTransitionType()) ==
130              content::PAGE_TRANSITION_RELOAD);
131}
132