172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian 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
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h"
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/tabs/tab_strip_model.h"
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h"
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser_navigator.h"
1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Incognito profiles are not long-lived, so we always want to store a
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// non-incognito profile.
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(akalin): Should we make it so that we have a default incognito
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// profile that's long-lived?  Of course, we'd still have to clear it out
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// when all incognito browsers close.
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochHtmlDialogTabContentsDelegate::HtmlDialogTabContentsDelegate(Profile* profile)
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : profile_(profile->GetOriginalProfile()) {}
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochHtmlDialogTabContentsDelegate::~HtmlDialogTabContentsDelegate() {}
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochProfile* HtmlDialogTabContentsDelegate::profile() const { return profile_; }
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::Detach() {
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  profile_ = NULL;
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::OpenURLFromTab(
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    TabContents* source, const GURL& url, const GURL& referrer,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    WindowOpenDisposition disposition, PageTransition::Type transition) {
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (profile_) {
35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // Specify a NULL browser for navigation. This will cause Navigate()
36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // to find a browser matching params.profile or create a new one.
37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    Browser* browser = NULL;
38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    browser::NavigateParams params(browser, url, transition);
39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    params.profile = profile_;
40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    params.referrer = referrer;
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (source && source->is_crashed() && disposition == CURRENT_TAB &&
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        transition == PageTransition::LINK)
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      params.disposition = NEW_FOREGROUND_TAB;
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    else
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      params.disposition = disposition;
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    params.window_action = browser::NavigateParams::SHOW_WINDOW;
47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    browser::Navigate(&params);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::NavigationStateChanged(
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const TabContents* source, unsigned changed_flags) {
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We shouldn't receive any NavigationStateChanged except the first
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // one, which we ignore because we're a dialog box.
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::AddNewContents(
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    TabContents* source, TabContents* new_contents,
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    WindowOpenDisposition disposition, const gfx::Rect& initial_pos,
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool user_gesture) {
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (profile_) {
62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // Specify a NULL browser for navigation. This will cause Navigate()
63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // to find a browser matching params.profile or create a new one.
64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    Browser* browser = NULL;
65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    TabContentsWrapper* wrapper = new TabContentsWrapper(new_contents);
67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    browser::NavigateParams params(browser, wrapper);
68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    params.profile = profile_;
69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // TODO(pinkerton): no way to get a wrapper for this.
70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // params.source_contents = source;
71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    params.disposition = disposition;
72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    params.window_bounds = initial_pos;
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    params.window_action = browser::NavigateParams::SHOW_WINDOW;
74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    browser::Navigate(&params);
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::ActivateContents(TabContents* contents) {
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We don't do anything here because there's only one TabContents in
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // this frame and we don't have a TabStripModel.
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid HtmlDialogTabContentsDelegate::DeactivateContents(TabContents* contents) {
843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // We don't care about this notification (called when a user gesture triggers
853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // a call to window.blur()).
863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::LoadingStateChanged(TabContents* source) {
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We don't care about this notification.
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::CloseContents(TabContents* source) {
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We receive this message but don't handle it because we really do the
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // cleanup somewhere else (namely, HtmlDialogUIDelegate::OnDialogClosed()).
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool HtmlDialogTabContentsDelegate::IsPopup(const TabContents* source) const {
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This needs to return true so that we are allowed to be resized by our
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // contents.
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogTabContentsDelegate::UpdateTargetURL(TabContents* source,
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                    const GURL& url) {
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Ignored.
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool HtmlDialogTabContentsDelegate::ShouldAddNavigationToHistory(
1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    const history::HistoryAddPageArgs& add_page_args,
1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    NavigationType::Type navigation_type) {
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return false;
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
113