1// Copyright (c) 2011 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/custom_handlers/register_protocol_handler_infobar_delegate.h"
6
7#include "base/utf_string_conversions.h"
8#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
9#include "grit/generated_resources.h"
10#include "ui/base/l10n/l10n_util.h"
11
12RegisterProtocolHandlerInfoBarDelegate::RegisterProtocolHandlerInfoBarDelegate(
13    TabContents* tab_contents,
14    ProtocolHandlerRegistry* registry,
15    ProtocolHandler* handler)
16    : ConfirmInfoBarDelegate(tab_contents),
17      tab_contents_(tab_contents),
18      registry_(registry),
19      handler_(handler) {
20}
21
22bool RegisterProtocolHandlerInfoBarDelegate::ShouldExpire(
23    const NavigationController::LoadCommittedDetails& details) const {
24  // The user has submitted a form, causing the page to navigate elsewhere. We
25  // don't want the infobar to be expired at this point, because the user won't
26  // get a chance to answer the question.
27  return false;
28}
29
30void RegisterProtocolHandlerInfoBarDelegate::InfoBarClosed() {
31  delete this;
32}
33
34InfoBarDelegate::Type
35    RegisterProtocolHandlerInfoBarDelegate::GetInfoBarType() const {
36  return PAGE_ACTION_TYPE;
37}
38
39string16 RegisterProtocolHandlerInfoBarDelegate::GetMessageText() const {
40  ProtocolHandler* old_handler = registry_->GetHandlerFor(handler_->protocol());
41  return old_handler ?
42      l10n_util::GetStringFUTF16(IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE,
43          handler_->title(), UTF8ToUTF16(handler_->url().host()),
44          UTF8ToUTF16(handler_->protocol()), old_handler->title()) :
45      l10n_util::GetStringFUTF16(IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM,
46          handler_->title(), UTF8ToUTF16(handler_->url().host()),
47          UTF8ToUTF16(handler_->protocol()));
48}
49
50string16 RegisterProtocolHandlerInfoBarDelegate::GetButtonLabel(
51    InfoBarButton button) const {
52  return (button == BUTTON_OK) ?
53      l10n_util::GetStringFUTF16(IDS_REGISTER_PROTOCOL_HANDLER_ACCEPT,
54                                 handler_->title()) :
55      l10n_util::GetStringUTF16(IDS_REGISTER_PROTOCOL_HANDLER_DENY);
56}
57
58bool RegisterProtocolHandlerInfoBarDelegate::Accept() {
59  registry_->OnAcceptRegisterProtocolHandler(handler_);
60  return true;
61}
62
63bool RegisterProtocolHandlerInfoBarDelegate::Cancel() {
64  registry_->OnDenyRegisterProtocolHandler(handler_);
65  return true;
66}
67
68string16 RegisterProtocolHandlerInfoBarDelegate::GetLinkText() {
69  // TODO(koz): Make this a 'learn more' link.
70  return string16();
71}
72
73bool RegisterProtocolHandlerInfoBarDelegate::LinkClicked(
74    WindowOpenDisposition disposition) {
75  return false;
76}
77