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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
9fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "content/public/browser/navigation_controller.h"
10fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "content/public/browser/notification_source.h"
11fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "content/public/browser/web_contents.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochusing content::NavigationController;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17fb250657ef40d7500f20882d5c9909c1013367d3Ben MurdochTabModalConfirmDialogDelegate::TabModalConfirmDialogDelegate(
18fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch    WebContents* web_contents)
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    : close_delegate_(NULL),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      closing_(false) {
21fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch  NavigationController* controller = &web_contents->GetController();
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  registrar_.Add(this, content::NOTIFICATION_LOAD_START,
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                 content::Source<NavigationController>(controller));
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabModalConfirmDialogDelegate::~TabModalConfirmDialogDelegate() {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If we end up here, the window has been closed, so make sure we don't close
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // it again.
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  close_delegate_ = NULL;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure everything is cleaned up.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Cancel();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::Cancel() {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (closing_)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Make sure we won't do anything when another action occurs.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  closing_ = true;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnCanceled();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CloseDialog();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::Accept() {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (closing_)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Make sure we won't do anything when another action occurs.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  closing_ = true;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OnAccepted();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CloseDialog();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochvoid TabModalConfirmDialogDelegate::Observe(
53fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch    int type,
54fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch    const content::NotificationSource& source,
55fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch    const content::NotificationDetails& details) {
56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Close the dialog if we load a page (because the action might not apply to
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // the same page anymore).
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DCHECK_EQ(content::NOTIFICATION_LOAD_START, type);
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  Close();
61fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch}
62fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch
63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TabModalConfirmDialogDelegate::Close() {
64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (closing_)
65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return;
66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Make sure we won't do anything when another action occurs.
67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  closing_ = true;
68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  OnClosed();
69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CloseDialog();
70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void TabModalConfirmDialogDelegate::LinkClicked(
734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    WindowOpenDisposition disposition) {
744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (closing_)
754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return;
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  OnLinkClicked(disposition);
774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Image* TabModalConfirmDialogDelegate::GetIcon() {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 TabModalConfirmDialogDelegate::GetAcceptButtonTitle() {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_OK);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 TabModalConfirmDialogDelegate::GetCancelButtonTitle() {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_CANCEL);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 TabModalConfirmDialogDelegate::GetLinkText() const {
92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return base::string16();
937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* TabModalConfirmDialogDelegate::GetAcceptButtonIcon() {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* TabModalConfirmDialogDelegate::GetCancelButtonIcon() {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnAccepted() {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnCanceled() {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnLinkClicked(
1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    WindowOpenDisposition disposition) {
1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnClosed() {
114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::CloseDialog() {
117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (close_delegate_)
118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    close_delegate_->CloseDialog();
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
120