diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-15 23:33:08 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-15 23:33:08 +0000 |
commit | eca25813c3bd229f1a7923219d94d53bf71ac0bd (patch) | |
tree | a4753edfa57b572604f2abd0bdca45166d9678d7 | |
parent | 98546a1e47d36c0fc96d45c45eb9e95e7d24273e (diff) | |
download | chromium_src-eca25813c3bd229f1a7923219d94d53bf71ac0bd.zip chromium_src-eca25813c3bd229f1a7923219d94d53bf71ac0bd.tar.gz chromium_src-eca25813c3bd229f1a7923219d94d53bf71ac0bd.tar.bz2 |
Don't show tabbed options page or bookmarks manager in OTR browser window.
Instead, always show it in a normal window (creating one if necessary).
The change is made in BrowserNavigator because that is the control flow bottleneck.
BUG=61813
TEST=manual
Review URL: http://codereview.chromium.org/4655002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66189 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/dom_ui/options/options_ui.cc | 2 | ||||
-rw-r--r-- | chrome/browser/gtk/tabs/tab_strip_gtk.cc | 37 | ||||
-rw-r--r-- | chrome/browser/ui/browser.cc | 1 | ||||
-rw-r--r-- | chrome/browser/ui/browser_navigator.cc | 25 |
4 files changed, 42 insertions, 23 deletions
diff --git a/chrome/browser/dom_ui/options/options_ui.cc b/chrome/browser/dom_ui/options/options_ui.cc index 0ee7188..009c0e1 100644 --- a/chrome/browser/dom_ui/options/options_ui.cc +++ b/chrome/browser/dom_ui/options/options_ui.cc @@ -240,6 +240,8 @@ RefCountedMemory* OptionsUI::GetFaviconResourceBytes() { } void OptionsUI::InitializeHandlers() { + DCHECK(!GetProfile()->IsOffTheRecord()); + std::vector<DOMMessageHandler*>::iterator iter; for (iter = handlers_.begin(); iter != handlers_.end(); ++iter) { (static_cast<OptionsPageUIHandler*>(*iter))->Initialize(); diff --git a/chrome/browser/gtk/tabs/tab_strip_gtk.cc b/chrome/browser/gtk/tabs/tab_strip_gtk.cc index 0547815..5b0996c 100644 --- a/chrome/browser/gtk/tabs/tab_strip_gtk.cc +++ b/chrome/browser/gtk/tabs/tab_strip_gtk.cc @@ -12,6 +12,7 @@ #include "base/i18n/rtl.h" #include "base/string_util.h" #include "chrome/browser/autocomplete/autocomplete.h" +#include "chrome/browser/browser.h" #include "chrome/browser/gtk/browser_window_gtk.h" #include "chrome/browser/gtk/custom_button.h" #include "chrome/browser/gtk/gtk_theme_provider.h" @@ -21,6 +22,7 @@ #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/browser/tabs/tab_strip_model_delegate.h" #include "chrome/browser/themes/browser_theme_provider.h" +#include "chrome/browser/ui/browser_navigator.h" #include "chrome/common/notification_service.h" #include "chrome/common/notification_type.h" #include "gfx/gtk_util.h" @@ -1612,20 +1614,19 @@ bool TabStripGtk::CompleteDrop(guchar* data) { if (!url.is_valid()) return false; + browser::NavigateParams params(window()->browser(), url, + PageTransition::LINK); + params.tabstrip_index = drop_index; + if (drop_before) { - // Insert a new tab. - TabContents* contents = - model_->delegate()->CreateTabContentsForURL( - url, GURL(), model_->profile(), PageTransition::TYPED, false, - NULL); - model_->AddTabContents(contents, drop_index, PageTransition::GENERATED, - TabStripModel::ADD_SELECTED); + params.disposition = NEW_FOREGROUND_TAB; } else { - model_->GetTabContentsAt(drop_index)->controller().LoadURL( - url, GURL(), PageTransition::GENERATED); - model_->SelectTabContentsAt(drop_index, true); + params.disposition = CURRENT_TAB; + params.source_contents = model_->GetTabContentsAt(drop_index); } + browser::Navigate(¶ms); + return true; } @@ -1974,19 +1975,9 @@ void TabStripGtk::OnNewTabClicked(GtkWidget* widget) { if (!gtk_util::URLFromPrimarySelection(model_->profile(), &url)) return; - TabContents* contents = - model_->delegate()->CreateTabContentsForURL( - url, - GURL(), // referrer - model_->profile(), - PageTransition::TYPED, - false, // defer_load - NULL); // instance - model_->AddTabContents( - contents, - -1, // index - PageTransition::TYPED, - TabStripModel::ADD_SELECTED); + Browser* browser = window_->browser(); + DCHECK(browser); + browser->AddSelectedTabWithURL(url, PageTransition::TYPED); break; } default: diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 5f31db8..1089e42 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc @@ -672,6 +672,7 @@ void Browser::OpenHelpWindow(Profile* profile) { browser->window()->Show(); } +// static void Browser::OpenOptionsWindow(Profile* profile) { Browser* browser = Browser::Create(profile); browser->ShowOptionsTab(chrome::kDefaultOptionsSubPage); diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc index f7bd483..89f4278 100644 --- a/chrome/browser/ui/browser_navigator.cc +++ b/chrome/browser/ui/browser_navigator.cc @@ -16,6 +16,7 @@ #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/common/chrome_switches.h" +#include "chrome/common/url_constants.h" namespace { @@ -94,6 +95,28 @@ int GetIndexOfSingletonTab(browser::NavigateParams* params) { return -1; } +// Change some of the navigation parameters based on the particular URL. +// Currently this applies to chrome://settings and the bookmark manager, +// which we always want to open in a normal (not incognito) window. +void AdjustNavigateParamsForURL(browser::NavigateParams* params) { + if (!params->target_contents && + params->url.scheme() == chrome::kChromeUIScheme && + (params->url.host() == chrome::kChromeUISettingsHost || + params->url.host() == chrome::kChromeUIBookmarksHost)) { + Profile* profile = + params->browser ? params->browser->profile() : params->profile; + + if (profile->IsOffTheRecord()) { + profile = profile->GetOriginalProfile(); + + params->disposition = SINGLETON_TAB; + params->profile = profile; + params->browser = Browser::GetOrCreateTabbedBrowser(profile); + params->show_window = true; + } + } +} + // Returns a Browser that can host the navigation or tab addition specified in // |params|. This might just return the same Browser specified in |params|, or // some other if that Browser is deemed incompatible. @@ -281,6 +304,8 @@ NavigateParams::~NavigateParams() { } void Navigate(NavigateParams* params) { + AdjustNavigateParamsForURL(params); + params->browser = GetBrowserForDisposition(params); if (!params->browser) return; |