1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/repost_form_warning_controller.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_source.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochRepostFormWarningController::RepostFormWarningController( 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* tab_contents) 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : tab_contents_(tab_contents), 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch window_(NULL) { 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController* controller = &tab_contents->controller(); 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::LOAD_START, 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<NavigationController>(controller)); 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::TAB_CLOSING, 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<NavigationController>(controller)); 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::REPOST_WARNING_SHOWN, 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<NavigationController>(controller)); 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochRepostFormWarningController::~RepostFormWarningController() { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If we end up here, the constrained window has been closed, so make sure we 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // don't close it again. 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch window_ = NULL; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure everything is cleaned up. 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Cancel(); 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RepostFormWarningController::Show( 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConstrainedWindowDelegate* window_delegate) { 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch window_ = tab_contents_->CreateConstrainedDialog(window_delegate); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RepostFormWarningController::Cancel() { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (tab_contents_) { 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_contents_->controller().CancelPendingReload(); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloseDialog(); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RepostFormWarningController::Continue() { 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (tab_contents_) { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_contents_->controller().ContinuePendingReload(); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If we reload the page, the dialog will be closed anyway. 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RepostFormWarningController::Observe(NotificationType type, 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details) { 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the dialog if we load a page (because reloading might not apply to 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the same page anymore) or if the tab is closed, because then we won't have 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a navigation controller anymore. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (tab_contents_ && 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (type == NotificationType::LOAD_START || 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type == NotificationType::TAB_CLOSING || 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type == NotificationType::REPOST_WARNING_SHOWN)) { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK_EQ(Source<NavigationController>(source).ptr(), 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &tab_contents_->controller()); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Cancel(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RepostFormWarningController::CloseDialog() { 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure we won't do anything when |Cancel()| is called again. 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_contents_ = NULL; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (window_) { 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch window_->CloseConstrainedWindow(); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 73