15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_delegate.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_details.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// InfoBarDelegate ------------------------------------------------------------
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const int InfoBarDelegate::kNoIconID = 0;
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InfoBarDelegate::~InfoBarDelegate() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InfoBarDelegate::InfoBarAutomationType
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InfoBarDelegate::GetInfoBarAutomationType() const {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return UNKNOWN_INFOBAR;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InfoBarDelegate::ShouldExpire(
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::LoadCommittedDetails& details) const {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!details.is_navigation_to_different_page())
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return ShouldExpireInternal(details);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InfoBarDelegate::InfoBarDismissed() {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int InfoBarDelegate::GetIconID() const {
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return kNoIconID;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InfoBarDelegate::Type InfoBarDelegate::GetInfoBarType() const {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return WARNING_TYPE;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutoLoginInfoBarDelegate* InfoBarDelegate::AsAutoLoginInfoBarDelegate() {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ConfirmInfoBarDelegate* InfoBarDelegate::AsConfirmInfoBarDelegate() {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionInfoBarDelegate* InfoBarDelegate::AsExtensionInfoBarDelegate() {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InsecureContentInfoBarDelegate*
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InfoBarDelegate::AsInsecureContentInfoBarDelegate() {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MediaStreamInfoBarDelegate* InfoBarDelegate::AsMediaStreamInfoBarDelegate() {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RegisterProtocolHandlerInfoBarDelegate*
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InfoBarDelegate::AsRegisterProtocolHandlerInfoBarDelegate() {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScreenCaptureInfoBarDelegate*
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    InfoBarDelegate::AsScreenCaptureInfoBarDelegate() {
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ThemeInstalledInfoBarDelegate*
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    InfoBarDelegate::AsThemePreviewInfobarDelegate() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ThreeDAPIInfoBarDelegate* InfoBarDelegate::AsThreeDAPIInfoBarDelegate() {
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TranslateInfoBarDelegate* InfoBarDelegate::AsTranslateInfoBarDelegate() {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)gfx::Image InfoBarDelegate::GetIcon() const {
9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  int icon_id = GetIconID();
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return (icon_id == kNoIconID) ? gfx::Image() :
10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      ResourceBundle::GetSharedInstance().GetNativeImageNamed(icon_id);
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochInfoBarDelegate::InfoBarDelegate(InfoBarService* owner)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : contents_unique_id_(0),
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      owner_(owner) {
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (owner_)
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    StoreActiveEntryUniqueID();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InfoBarDelegate::StoreActiveEntryUniqueID() {
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK(web_contents());
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigationEntry* active_entry =
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents()->GetController().GetActiveEntry();
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  contents_unique_id_ = active_entry ? active_entry->GetUniqueID() : 0;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InfoBarDelegate::ShouldExpireInternal(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const content::LoadCommittedDetails& details) const {
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // NOTE: If you change this, be sure to check and adjust the behavior of
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // anyone who overrides this as necessary!
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (contents_unique_id_ != details.entry->GetUniqueID()) ||
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (content::PageTransitionStripQualifier(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          details.entry->GetTransitionType()) ==
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              content::PAGE_TRANSITION_RELOAD);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InfoBarDelegate::RemoveSelf() {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (owner_)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    owner_->RemoveInfoBar(this);  // Clears |owner_|.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
131