1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h" 6 7 #include "chrome/browser/profiles/profile.h" 8 #include "chrome/browser/tabs/tab_strip_model.h" 9 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser_navigator.h" 11 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 12 #include "content/browser/tab_contents/tab_contents.h" 13 14 // Incognito profiles are not long-lived, so we always want to store a 15 // non-incognito profile. 16 // 17 // TODO(akalin): Should we make it so that we have a default incognito 18 // profile that's long-lived? Of course, we'd still have to clear it out 19 // when all incognito browsers close. 20 HtmlDialogTabContentsDelegate::HtmlDialogTabContentsDelegate(Profile* profile) 21 : profile_(profile->GetOriginalProfile()) {} 22 23 HtmlDialogTabContentsDelegate::~HtmlDialogTabContentsDelegate() {} 24 25 Profile* HtmlDialogTabContentsDelegate::profile() const { return profile_; } 26 27 void HtmlDialogTabContentsDelegate::Detach() { 28 profile_ = NULL; 29 } 30 31 void HtmlDialogTabContentsDelegate::OpenURLFromTab( 32 TabContents* source, const GURL& url, const GURL& referrer, 33 WindowOpenDisposition disposition, PageTransition::Type transition) { 34 if (profile_) { 35 // Specify a NULL browser for navigation. This will cause Navigate() 36 // to find a browser matching params.profile or create a new one. 37 Browser* browser = NULL; 38 browser::NavigateParams params(browser, url, transition); 39 params.profile = profile_; 40 params.referrer = referrer; 41 if (source && source->is_crashed() && disposition == CURRENT_TAB && 42 transition == PageTransition::LINK) 43 params.disposition = NEW_FOREGROUND_TAB; 44 else 45 params.disposition = disposition; 46 params.window_action = browser::NavigateParams::SHOW_WINDOW; 47 browser::Navigate(¶ms); 48 } 49 } 50 51 void HtmlDialogTabContentsDelegate::NavigationStateChanged( 52 const TabContents* source, unsigned changed_flags) { 53 // We shouldn't receive any NavigationStateChanged except the first 54 // one, which we ignore because we're a dialog box. 55 } 56 57 void HtmlDialogTabContentsDelegate::AddNewContents( 58 TabContents* source, TabContents* new_contents, 59 WindowOpenDisposition disposition, const gfx::Rect& initial_pos, 60 bool user_gesture) { 61 if (profile_) { 62 // Specify a NULL browser for navigation. This will cause Navigate() 63 // to find a browser matching params.profile or create a new one. 64 Browser* browser = NULL; 65 66 TabContentsWrapper* wrapper = new TabContentsWrapper(new_contents); 67 browser::NavigateParams params(browser, wrapper); 68 params.profile = profile_; 69 // TODO(pinkerton): no way to get a wrapper for this. 70 // params.source_contents = source; 71 params.disposition = disposition; 72 params.window_bounds = initial_pos; 73 params.window_action = browser::NavigateParams::SHOW_WINDOW; 74 browser::Navigate(¶ms); 75 } 76 } 77 78 void HtmlDialogTabContentsDelegate::ActivateContents(TabContents* contents) { 79 // We don't do anything here because there's only one TabContents in 80 // this frame and we don't have a TabStripModel. 81 } 82 83 void HtmlDialogTabContentsDelegate::DeactivateContents(TabContents* contents) { 84 // We don't care about this notification (called when a user gesture triggers 85 // a call to window.blur()). 86 } 87 88 void HtmlDialogTabContentsDelegate::LoadingStateChanged(TabContents* source) { 89 // We don't care about this notification. 90 } 91 92 void HtmlDialogTabContentsDelegate::CloseContents(TabContents* source) { 93 // We receive this message but don't handle it because we really do the 94 // cleanup somewhere else (namely, HtmlDialogUIDelegate::OnDialogClosed()). 95 } 96 97 bool HtmlDialogTabContentsDelegate::IsPopup(const TabContents* source) const { 98 // This needs to return true so that we are allowed to be resized by our 99 // contents. 100 return true; 101 } 102 103 void HtmlDialogTabContentsDelegate::UpdateTargetURL(TabContents* source, 104 const GURL& url) { 105 // Ignored. 106 } 107 108 bool HtmlDialogTabContentsDelegate::ShouldAddNavigationToHistory( 109 const history::HistoryAddPageArgs& add_page_args, 110 NavigationType::Type navigation_type) { 111 return false; 112 } 113