tab_modal_confirm_dialog_delegate.cc revision a36e5920737c6adbddd3e43b760e5de8431db6e0
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" 8fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "content/public/browser/navigation_controller.h" 9fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "content/public/browser/notification_source.h" 10fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "content/public/browser/web_contents.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.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)); 24fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch registrar_.Add(this, chrome::NOTIFICATION_TAB_CLOSING, 25fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch content::Source<NavigationController>(controller)); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabModalConfirmDialogDelegate::~TabModalConfirmDialogDelegate() { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If we end up here, the window has been closed, so make sure we don't close 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it again. 31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) close_delegate_ = NULL; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure everything is cleaned up. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Cancel(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::Cancel() { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (closing_) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Make sure we won't do anything when another action occurs. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) closing_ = true; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnCanceled(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseDialog(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::Accept() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (closing_) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Make sure we won't do anything when another action occurs. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) closing_ = true; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccepted(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseDialog(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void TabModalConfirmDialogDelegate::LinkClicked( 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WindowOpenDisposition disposition) { 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (closing_) 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Make sure we won't do anything when another action occurs. 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) closing_ = true; 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnLinkClicked(disposition); 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CloseDialog(); 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochvoid TabModalConfirmDialogDelegate::Observe( 65fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch int type, 66fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch const content::NotificationSource& source, 67fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch const content::NotificationDetails& details) { 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Close the dialog if we load a page (because the action might not apply to 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // the same page anymore) or if the tab is closed. 70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (type == content::NOTIFICATION_LOAD_START || 71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) type == chrome::NOTIFICATION_TAB_CLOSING) { 72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Close(); 73fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch } else { 74fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch NOTREACHED(); 75fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch } 76fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch} 77fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TabModalConfirmDialogDelegate::Close() { 79a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (closing_) 80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return; 81a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Make sure we won't do anything when another action occurs. 82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) closing_ = true; 83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) OnClosed(); 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CloseDialog(); 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Image* TabModalConfirmDialogDelegate::GetIcon() { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 TabModalConfirmDialogDelegate::GetAcceptButtonTitle() { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_OK); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 TabModalConfirmDialogDelegate::GetCancelButtonTitle() { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_CANCEL); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)string16 TabModalConfirmDialogDelegate::GetLinkText() const { 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return string16(); 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* TabModalConfirmDialogDelegate::GetAcceptButtonIcon() { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* TabModalConfirmDialogDelegate::GetCancelButtonIcon() { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnAccepted() { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnCanceled() { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnLinkClicked( 1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) WindowOpenDisposition disposition) { 1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void TabModalConfirmDialogDelegate::OnClosed() { 122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabModalConfirmDialogDelegate::CloseDialog() { 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (close_delegate_) 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) close_delegate_->CloseDialog(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 128