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