Index: chrome/browser/browser.cc |
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc |
index bf50bdd8f5953d8478eb020b79c2bb2d3983d826..426d54f7aecfc3f2ff58b0ed6d9bdaed29980df0 100644 |
--- a/chrome/browser/browser.cc |
+++ b/chrome/browser/browser.cc |
@@ -1238,12 +1238,8 @@ void Browser::OpenCurrentURL() { |
LocationBar* location_bar = window_->GetLocationBar(); |
WindowOpenDisposition open_disposition = |
location_bar->GetWindowOpenDisposition(); |
- // TODO(sky): support other dispositions. |
- if (open_disposition == CURRENT_TAB && match_preview() && |
- match_preview()->is_active()) { |
- match_preview()->CommitCurrentPreview(MatchPreview::COMMIT_PRESSED_ENTER); |
+ if (OpenMatchPreview(open_disposition)) |
return; |
- } |
GURL url(WideToUTF8(location_bar->GetInputString())); |
@@ -4106,3 +4102,31 @@ void Browser::TabRestoreServiceDestroyed(TabRestoreService* service) { |
tab_restore_service_->RemoveObserver(this); |
tab_restore_service_ = NULL; |
} |
+ |
+bool Browser::OpenMatchPreview(WindowOpenDisposition disposition) { |
+ if (!match_preview() || !match_preview()->is_active()) |
+ return false; |
+ |
+ if (disposition == CURRENT_TAB) { |
+ match_preview()->CommitCurrentPreview(MatchPreview::COMMIT_PRESSED_ENTER); |
+ return true; |
+ } |
+ if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) { |
+ HideMatchPreview(); |
+ TabContents* preview_contents = match_preview()->ReleasePreviewContents( |
+ MatchPreview::COMMIT_PRESSED_ENTER); |
+ preview_contents->controller().PruneAllButActive(); |
+ tabstrip_model_->AddTabContents( |
+ preview_contents, |
+ -1, |
+ match_preview()->last_transition_type(), |
+ disposition == NEW_FOREGROUND_TAB ? TabStripModel::ADD_SELECTED : |
+ TabStripModel::ADD_NONE); |
+ return true; |
+ } |
+ // The omnibox currently doesn't use other dispositions, so we don't attempt |
+ // to handle them. If you hit this NOTREACHED file a bug and I'll (sky) add |
+ // support for the new disposition. |
+ NOTREACHED(); |
+ return false; |
+} |