Index: chrome/browser/browser.cc |
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc |
index 160be201679f58dcd8eaa6db81cd1bcee81cbc62..5fae3c8986f8d0a3798034c6ec68ead5f98effa3 100644 |
--- a/chrome/browser/browser.cc |
+++ b/chrome/browser/browser.cc |
@@ -1831,6 +1831,18 @@ void Browser::AddNewContents(TabContents* source, |
initial_pos, user_gesture); |
browser->window()->Show(); |
} else if (disposition != SUPPRESS_OPEN) { |
+ // Ensure that the new TabContentsView begins at the same size as the |
+ // previous TabContentsView if it existed. Otherwise, the initial WebKit |
+ // layout will be performed based on a width of 0 pixels, causing a |
+ // very long, narrow, inaccurate layout. Because some scripts on pages (as |
+ // well as WebKit's anchor link location calculation) are run on the |
+ // initial layout and not recalculated later, we need to ensure the first |
+ // layout is performed with sane view dimensions even when we're opening a |
+ // new background tab. |
+ if (TabContents* old_contents = tabstrip_model_.GetSelectedTabContents()) { |
+ new_contents->view()->SizeContents( |
+ old_contents->view()->GetContainerSize()); |
+ } |
tabstrip_model_.AddTabContents(new_contents, -1, false, |
PageTransition::LINK, |
disposition == NEW_FOREGROUND_TAB); |