summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-16 00:45:37 +0000
committeravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-16 00:45:37 +0000
commit27e5b39137ab196de4a6a069cec63cc21cf6c5b8 (patch)
treec8d855133f9627f13c901b49dbd4b125068821ed
parent948e1047ea0815c506cc17ceb3026b0f9e2599e1 (diff)
downloadchromium_src-27e5b39137ab196de4a6a069cec63cc21cf6c5b8.zip
chromium_src-27e5b39137ab196de4a6a069cec63cc21cf6c5b8.tar.gz
chromium_src-27e5b39137ab196de4a6a069cec63cc21cf6c5b8.tar.bz2
Kill TabContents.
BUG=107201 TEST=no visible change Review URL: https://chromiumcodereview.appspot.com/11578032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173349 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/android/tab_android.cc11
-rw-r--r--chrome/browser/chromeos/dbus/printer_service_provider.cc1
-rw-r--r--chrome/browser/prerender/prerender_contents.cc3
-rw-r--r--chrome/browser/ui/browser.cc22
-rw-r--r--chrome/browser/ui/browser.h51
-rw-r--r--chrome/browser/ui/browser_adoption.cc57
-rw-r--r--chrome/browser/ui/browser_navigator.cc7
-rw-r--r--chrome/browser/ui/browser_tab_contents.cc187
-rw-r--r--chrome/browser/ui/browser_tab_contents.h64
-rw-r--r--chrome/browser/ui/browser_tab_strip_model_delegate.cc3
-rw-r--r--chrome/browser/ui/pdf/pdf_browsertest.cc1
-rw-r--r--chrome/browser/ui/tab_contents/tab_contents.cc242
-rw-r--r--chrome/browser/ui/tab_contents/tab_contents.h91
-rw-r--r--chrome/browser/ui/views/external_tab_container_win.cc3
-rw-r--r--chrome/chrome_browser_ui.gypi10
15 files changed, 298 insertions, 455 deletions
diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc
index ec6d3c6..a78ea66 100644
--- a/chrome/browser/android/tab_android.cc
+++ b/chrome/browser/android/tab_android.cc
@@ -18,10 +18,12 @@
#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
+#include "chrome/browser/ui/browser_tab_contents.h"
#include "chrome/browser/ui/find_bar/find_tab_helper.h"
#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
+#include "chrome/browser/view_type_utils.h"
#include "content/public/browser/android/content_view_core.h"
#include "content/public/browser/web_contents.h"
@@ -34,7 +36,7 @@ const char kTabHelpersInitializedUserDataKey[] =
} // namespace
-void TabAndroid::InitTabHelpers(WebContents* contents) {
+void BrowserTabContents::AttachTabHelpers(WebContents* contents) {
// If already initialized, nothing to be done.
base::SupportsUserData::Data* initialization_tag =
contents->GetUserData(&kTabHelpersInitializedUserDataKey);
@@ -45,6 +47,9 @@ void TabAndroid::InitTabHelpers(WebContents* contents) {
contents->SetUserData(&kTabHelpersInitializedUserDataKey,
new base::SupportsUserData::Data());
+ // Set the view type.
+ chrome::SetViewType(contents, chrome::VIEW_TYPE_TAB_CONTENTS);
+
// SessionTabHelper comes first because it sets up the tab ID, and other
// helpers may rely on that.
SessionTabHelper::CreateForWebContents(contents);
@@ -74,6 +79,10 @@ void TabAndroid::InitTabHelpers(WebContents* contents) {
WindowAndroidHelper::CreateForWebContents(contents);
}
+void TabAndroid::InitTabHelpers(WebContents* contents) {
+ BrowserTabContents::AttachTabHelpers(contents);
+}
+
WebContents* TabAndroid::InitWebContentsFromView(JNIEnv* env,
jobject content_view) {
content::ContentViewCore* content_view_core =
diff --git a/chrome/browser/chromeos/dbus/printer_service_provider.cc b/chrome/browser/chromeos/dbus/printer_service_provider.cc
index 981558a..ecb54554 100644
--- a/chrome/browser/chromeos/dbus/printer_service_provider.cc
+++ b/chrome/browser/chromeos/dbus/printer_service_provider.cc
@@ -15,7 +15,6 @@
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/tab_contents/tab_contents.h"
#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index 2737f79..22165b1 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -18,6 +18,7 @@
#include "chrome/browser/prerender/prerender_tracker.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_tab_contents.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/prerender_messages.h"
#include "chrome/common/url_constants.h"
@@ -272,7 +273,7 @@ void PrerenderContents::StartPrerendering(
prerendering_has_started_ = true;
prerender_contents_.reset(CreateWebContents(session_storage_namespace));
- Browser::Adoption::AdoptAsTabContents(prerender_contents_.get());
+ BrowserTabContents::AttachTabHelpers(prerender_contents_.get());
content::WebContentsObserver::Observe(prerender_contents_.get());
web_contents_delegate_.reset(new WebContentsDelegateImpl(this));
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index e4d1a55..be3caa3 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -93,6 +93,7 @@
#include "chrome/browser/themes/theme_service.h"
#include "chrome/browser/themes/theme_service_factory.h"
#include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_creator.h"
+#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
#include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/browser_commands.h"
@@ -102,6 +103,7 @@
#include "chrome/browser/ui/browser_instant_controller.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_navigator.h"
+#include "chrome/browser/ui/browser_tab_contents.h"
#include "chrome/browser/ui/browser_tab_restore_service_delegate.h"
#include "chrome/browser/ui/browser_tab_strip_model_delegate.h"
#include "chrome/browser/ui/browser_tabstrip.h"
@@ -110,6 +112,7 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/chrome_select_file_policy.h"
+#include "chrome/browser/ui/constrained_window_tab_helper.h"
#include "chrome/browser/ui/extensions/shell_window.h"
#include "chrome/browser/ui/find_bar/find_bar.h"
#include "chrome/browser/ui/find_bar/find_bar_controller.h"
@@ -124,6 +127,7 @@
#include "chrome/browser/ui/search/search.h"
#include "chrome/browser/ui/search/search_delegate.h"
#include "chrome/browser/ui/search/search_model.h"
+#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
#include "chrome/browser/ui/singleton_tabs.h"
#include "chrome/browser/ui/status_bubble.h"
#include "chrome/browser/ui/sync/browser_synced_window_delegate.h"
@@ -138,6 +142,7 @@
#include "chrome/browser/ui/webui/signin/login_ui_service.h"
#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
#include "chrome/browser/ui/window_sizer/window_sizer.h"
+#include "chrome/browser/ui/zoom/zoom_controller.h"
#include "chrome/browser/upgrade_detector.h"
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_constants.h"
@@ -1567,7 +1572,7 @@ void Browser::WebContentsCreated(WebContents* source_contents,
// requests for its initial navigation will start immediately. The WebContents
// will later be inserted into this browser using Browser::Navigate via
// AddNewContents.
- Adoption::AdoptAsTabContents(new_contents);
+ BrowserTabContents::AttachTabHelpers(new_contents);
// Notify.
RetargetingDetails details;
@@ -2221,6 +2226,21 @@ bool Browser::CanCloseWithInProgressDownloads() {
///////////////////////////////////////////////////////////////////////////////
// Browser, Assorted utility functions (private):
+void Browser::SetAsDelegate(WebContents* web_contents, Browser* delegate) {
+ // WebContents...
+ web_contents->SetDelegate(delegate);
+
+ // ...and all the helpers.
+ BlockedContentTabHelper::FromWebContents(web_contents)->
+ set_delegate(delegate);
+ BookmarkTabHelper::FromWebContents(web_contents)->set_delegate(delegate);
+ ConstrainedWindowTabHelper::FromWebContents(web_contents)->
+ set_delegate(delegate);
+ CoreTabHelper::FromWebContents(web_contents)->set_delegate(delegate);
+ SearchEngineTabHelper::FromWebContents(web_contents)->set_delegate(delegate);
+ ZoomController::FromWebContents(web_contents)->set_observer(delegate);
+}
+
void Browser::CloseFrame() {
window_->Close();
}
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index b67dca3..4e219f8 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -52,7 +52,6 @@ class BrowserToolbarModelDelegate;
class BrowserTabRestoreServiceDelegate;
class BrowserWindow;
class DeviceAttachedIntentSource;
-class ExternalTabContainerWin;
class FindBarController;
class FullscreenController;
class PrefService;
@@ -66,7 +65,6 @@ struct WebApplicationInfo;
namespace chrome {
class BrowserCommandController;
class BrowserInstantController;
-class BrowserTabStripModelDelegate;
class UnloadController;
namespace search {
struct Mode;
@@ -95,10 +93,6 @@ struct SelectedFileInfo;
class WebDialogDelegate;
}
-namespace prerender {
-class PrerenderContents;
-}
-
namespace webkit_glue {
struct WebIntentServiceData;
}
@@ -426,47 +420,6 @@ class Browser : public TabStripModelObserver,
content::PageTransition transition,
bool user_initiated);
- // Adoption functions ////////////////////////////////////////////////////////
-
- // A "tab contents" is a WebContents that is used as a tab in a browser
- // window, and thus is owned by a Browser's TabStripModel. The Adoption class
- // allows specific classes to attach the set of tab helpers that is used for
- // tab contents.
- //
- // TODO(avi): This list is rather large, and for most callers it's due to the
- // fact that they need tab helpers attached early to deal with arbitrary
- // content loaded into a WebContents that will later be added to the tabstrip.
- // Is there a better way to handle this? (Ideally, this list would contain
- // only Browser and BrowserTabStripModelDelegate.)
- class Adoption {
- private:
- friend class Browser;
- friend class chrome::BrowserTabStripModelDelegate;
-
- // chrome::Navigate creates WebContents that are destined for the tab strip,
- // and that might have WebUI that immediately calls back into random tab
- // helpers.
- friend class BrowserNavigatorWebContentsAdoption;
-
- // ChromeFrame is defined as a complete tab of Chrome inside of an IE
- // window, so it need to have the full complement of tab helpers that it
- // would have if it were in a Browser.
- // TODO(avi): It's still probably a good idea for Chrome Frame to more
- // explicitly control which tab helpers get created for its WebContentses.
- // http://crbug.com/157590
- friend class ExternalTabContainerWin;
-
- // Prerendering loads pages that have arbitrary external content; it needs
- // the full set of tab helpers to deal with it.
- friend class prerender::PrerenderContents;
-
- // Adopts the specified WebContents as a full-fledged browser tab, attaching
- // all the associated tab helpers that are needed for the WebContents to
- // serve in that role. It is safe to call this on a WebContents that was
- // already adopted.
- static void AdoptAsTabContents(content::WebContents* web_contents);
- };
-
// Interface implementations ////////////////////////////////////////////////
// Overridden from content::PageNavigator:
@@ -824,14 +777,12 @@ class Browser : public TabStripModelObserver,
// Returns true if the window can close, false otherwise.
bool CanCloseWithInProgressDownloads();
- // Adoption functions ////////////////////////////////////////////////////////
+ // Assorted utility functions ///////////////////////////////////////////////
// Sets the specified browser as the delegate of the WebContents and all the
// associated tab helpers that are needed.
void SetAsDelegate(content::WebContents* web_contents, Browser* delegate);
- // Assorted utility functions ///////////////////////////////////////////////
-
// Shows the Find Bar, optionally selecting the next entry that matches the
// existing search string for that Tab. |forward_direction| controls the
// search direction.
diff --git a/chrome/browser/ui/browser_adoption.cc b/chrome/browser/ui/browser_adoption.cc
deleted file mode 100644
index 3e36976..0000000
--- a/chrome/browser/ui/browser_adoption.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/browser.h"
-
-#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
-#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
-#include "chrome/browser/ui/constrained_window_tab_helper.h"
-#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
-#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
-#include "chrome/browser/ui/tab_contents/tab_contents.h"
-#include "chrome/browser/ui/zoom/zoom_controller.h"
-#include "content/public/browser/web_contents.h"
-
-using content::WebContents;
-
-namespace {
-
-const char kWebDialogDelegateUserDataKey[] = "BrowserAdoptedAsTabContents";
-
-} // namespace
-
-// static
-void Browser::Adoption::AdoptAsTabContents(WebContents* web_contents) {
- // If already adopted, nothing to be done.
- base::SupportsUserData::Data* adoption_tag =
- web_contents->GetUserData(&kWebDialogDelegateUserDataKey);
- if (adoption_tag)
- return;
-
- // Mark as adopted.
- web_contents->SetUserData(&kWebDialogDelegateUserDataKey,
- new base::SupportsUserData::Data());
-
- // Create all the tab helpers.
- if (!TabContents::FromWebContents(web_contents))
- TabContents::Factory::CreateTabContents(web_contents);
- // TODO(avi): Move all the tab helpers from TabContents to here once all
- // extraneous use of TabContents is removed and all correct use of TabContents
- // funnels through AdoptAsTabContents.
-}
-
-void Browser::SetAsDelegate(WebContents* web_contents, Browser* delegate) {
- // WebContents...
- web_contents->SetDelegate(delegate);
-
- // ...and all the helpers.
- BlockedContentTabHelper::FromWebContents(web_contents)->
- set_delegate(delegate);
- BookmarkTabHelper::FromWebContents(web_contents)->set_delegate(delegate);
- ConstrainedWindowTabHelper::FromWebContents(web_contents)->
- set_delegate(delegate);
- CoreTabHelper::FromWebContents(web_contents)->set_delegate(delegate);
- SearchEngineTabHelper::FromWebContents(web_contents)->set_delegate(delegate);
- ZoomController::FromWebContents(web_contents)->set_observer(delegate);
-}
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc
index 7e1cb47..70d1a42 100644
--- a/chrome/browser/ui/browser_navigator.cc
+++ b/chrome/browser/ui/browser_navigator.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/tab_contents/tab_util.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_tab_contents.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/host_desktop.h"
#include "chrome/browser/ui/omnibox/location_bar.h"
@@ -46,8 +47,8 @@ using content::WebContents;
class BrowserNavigatorWebContentsAdoption {
public:
- static void AdoptAsTabContents(content::WebContents* contents) {
- Browser::Adoption::AdoptAsTabContents(contents);
+ static void AttachTabHelpers(content::WebContents* contents) {
+ BrowserTabContents::AttachTabHelpers(contents);
}
};
@@ -493,7 +494,7 @@ void Navigate(NavigateParams* params) {
// New tabs can have WebUI URLs that will make calls back to arbitrary
// tab helpers, so the entire set of tab helpers needs to be set up
// immediately.
- BrowserNavigatorWebContentsAdoption::AdoptAsTabContents(
+ BrowserNavigatorWebContentsAdoption::AttachTabHelpers(
params->target_contents);
// This function takes ownership of |params->target_contents| until it
// is added to a TabStripModel.
diff --git a/chrome/browser/ui/browser_tab_contents.cc b/chrome/browser/ui/browser_tab_contents.cc
new file mode 100644
index 0000000..48e9c36
--- /dev/null
+++ b/chrome/browser/ui/browser_tab_contents.cc
@@ -0,0 +1,187 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/browser_tab_contents.h"
+
+#include "base/command_line.h"
+#include "chrome/browser/autofill/autofill_external_delegate.h"
+#include "chrome/browser/autofill/autofill_manager.h"
+#include "chrome/browser/content_settings/tab_specific_content_settings.h"
+#include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h"
+#include "chrome/browser/extensions/tab_helper.h"
+#include "chrome/browser/external_protocol/external_protocol_observer.h"
+#include "chrome/browser/favicon/favicon_tab_helper.h"
+#include "chrome/browser/history/history_tab_helper.h"
+#include "chrome/browser/infobars/infobar_tab_helper.h"
+#include "chrome/browser/managed_mode/managed_mode_navigation_observer.h"
+#include "chrome/browser/net/load_time_stats.h"
+#include "chrome/browser/net/net_error_tab_helper.h"
+#include "chrome/browser/omnibox_search_hint.h"
+#include "chrome/browser/password_manager/password_manager.h"
+#include "chrome/browser/password_manager/password_manager_delegate_impl.h"
+#include "chrome/browser/plugins/plugin_observer.h"
+#include "chrome/browser/prerender/prerender_tab_helper.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/safe_browsing/safe_browsing_tab_observer.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
+#include "chrome/browser/ssl/ssl_tab_helper.h"
+#include "chrome/browser/tab_contents/navigation_metrics_recorder.h"
+#include "chrome/browser/three_d_api_observer.h"
+#include "chrome/browser/thumbnails/thumbnail_tab_helper.h"
+#include "chrome/browser/translate/translate_tab_helper.h"
+#include "chrome/browser/ui/alternate_error_tab_observer.h"
+#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
+#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
+#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
+#include "chrome/browser/ui/constrained_window_tab_helper.h"
+#include "chrome/browser/ui/find_bar/find_tab_helper.h"
+#include "chrome/browser/ui/hung_plugin_tab_helper.h"
+#include "chrome/browser/ui/intents/web_intent_picker_controller.h"
+#include "chrome/browser/ui/pdf/pdf_tab_helper.h"
+#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
+#include "chrome/browser/ui/sad_tab_helper.h"
+#include "chrome/browser/ui/search/search_tab_helper.h"
+#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
+#include "chrome/browser/ui/snapshot_tab_helper.h"
+#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
+#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
+#include "chrome/browser/ui/zoom/zoom_controller.h"
+#include "chrome/browser/view_type_utils.h"
+#include "chrome/common/chrome_switches.h"
+#include "content/public/browser/web_contents.h"
+
+#if defined(ENABLE_AUTOMATION)
+#include "chrome/browser/automation/automation_tab_helper.h"
+#endif
+
+#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
+#include "chrome/browser/captive_portal/captive_portal_tab_helper.h"
+#endif
+
+#if defined(ENABLE_PRINTING)
+#include "chrome/browser/printing/print_preview_message_handler.h"
+#include "chrome/browser/printing/print_view_manager.h"
+#endif
+
+#if defined(ENABLE_ONE_CLICK_SIGNIN)
+#include "chrome/browser/ui/sync/one_click_signin_helper.h"
+#endif
+
+#if defined(OS_WIN)
+#include "chrome/browser/ui/metro_pin_tab_helper_win.h"
+#endif
+
+using content::WebContents;
+
+namespace {
+
+const char kTabContentsAttachedTabHelpersUserDataKey[] =
+ "TabContentsAttachedTabHelpers";
+
+} // namespace
+
+// static
+void BrowserTabContents::AttachTabHelpers(WebContents* web_contents) {
+ // If already adopted, nothing to be done.
+ base::SupportsUserData::Data* adoption_tag =
+ web_contents->GetUserData(&kTabContentsAttachedTabHelpersUserDataKey);
+ if (adoption_tag)
+ return;
+
+ // Mark as adopted.
+ web_contents->SetUserData(&kTabContentsAttachedTabHelpersUserDataKey,
+ new base::SupportsUserData::Data());
+
+ // Set the view type.
+ chrome::SetViewType(web_contents, chrome::VIEW_TYPE_TAB_CONTENTS);
+
+ // Create all the tab helpers.
+
+ Profile* profile =
+ Profile::FromBrowserContext(web_contents->GetBrowserContext());
+
+ // SessionTabHelper comes first because it sets up the tab ID, and other
+ // helpers may rely on that.
+ SessionTabHelper::CreateForWebContents(web_contents);
+
+ AlternateErrorPageTabObserver::CreateForWebContents(web_contents);
+ TabAutofillManagerDelegate::CreateForWebContents(web_contents);
+ AutofillManager::CreateForWebContentsAndDelegate(
+ web_contents, TabAutofillManagerDelegate::FromWebContents(web_contents));
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableNewAutofillUi)) {
+ AutofillExternalDelegate::CreateForWebContentsAndManager(
+ web_contents, AutofillManager::FromWebContents(web_contents));
+ AutofillManager::FromWebContents(web_contents)->SetExternalDelegate(
+ AutofillExternalDelegate::FromWebContents(web_contents));
+ }
+ BlockedContentTabHelper::CreateForWebContents(web_contents);
+ BookmarkTabHelper::CreateForWebContents(web_contents);
+ chrome_browser_net::LoadTimeStatsTabHelper::CreateForWebContents(
+ web_contents);
+ chrome_browser_net::NetErrorTabHelper::CreateForWebContents(web_contents);
+ ConstrainedWindowTabHelper::CreateForWebContents(web_contents);
+ CoreTabHelper::CreateForWebContents(web_contents);
+ extensions::TabHelper::CreateForWebContents(web_contents);
+ extensions::WebNavigationTabObserver::CreateForWebContents(web_contents);
+ ExternalProtocolObserver::CreateForWebContents(web_contents);
+ FaviconTabHelper::CreateForWebContents(web_contents);
+ FindTabHelper::CreateForWebContents(web_contents);
+ HistoryTabHelper::CreateForWebContents(web_contents);
+ HungPluginTabHelper::CreateForWebContents(web_contents);
+ InfoBarTabHelper::CreateForWebContents(web_contents);
+ ManagedModeNavigationObserver::CreateForWebContents(web_contents);
+ NavigationMetricsRecorder::CreateForWebContents(web_contents);
+ if (OmniboxSearchHint::IsEnabled(profile))
+ OmniboxSearchHint::CreateForWebContents(web_contents);
+ PasswordManagerDelegateImpl::CreateForWebContents(web_contents);
+ PasswordManager::CreateForWebContentsAndDelegate(
+ web_contents, PasswordManagerDelegateImpl::FromWebContents(web_contents));
+ PDFTabHelper::CreateForWebContents(web_contents);
+ PluginObserver::CreateForWebContents(web_contents);
+ PrefsTabHelper::CreateForWebContents(web_contents);
+ prerender::PrerenderTabHelper::CreateForWebContents(web_contents);
+ SadTabHelper::CreateForWebContents(web_contents);
+ safe_browsing::SafeBrowsingTabObserver::CreateForWebContents(web_contents);
+ SearchEngineTabHelper::CreateForWebContents(web_contents);
+ chrome::search::SearchTabHelper::CreateForWebContents(web_contents);
+ SnapshotTabHelper::CreateForWebContents(web_contents);
+ SSLTabHelper::CreateForWebContents(web_contents);
+ TabContentsSyncedTabDelegate::CreateForWebContents(web_contents);
+ TabSpecificContentSettings::CreateForWebContents(web_contents);
+ ThreeDAPIObserver::CreateForWebContents(web_contents);
+ ThumbnailTabHelper::CreateForWebContents(web_contents);
+ TranslateTabHelper::CreateForWebContents(web_contents);
+ WebIntentPickerController::CreateForWebContents(web_contents);
+ ZoomController::CreateForWebContents(web_contents);
+
+#if defined(ENABLE_AUTOMATION)
+ AutomationTabHelper::CreateForWebContents(web_contents);
+#endif
+
+#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
+ captive_portal::CaptivePortalTabHelper::CreateForWebContents(web_contents);
+#endif
+
+#if defined(ENABLE_PRINTING)
+ printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents);
+ printing::PrintViewManager::CreateForWebContents(web_contents);
+#endif
+
+#if defined(ENABLE_ONE_CLICK_SIGNIN)
+ // If this is not an incognito window, setup to handle one-click login.
+ // We don't want to check that the profile is already connected at this time
+ // because the connected state may change while this tab is open. Having a
+ // one-click signin helper attached does not cause problems if the profile
+ // happens to be already connected.
+ if (OneClickSigninHelper::CanOffer(
+ web_contents, OneClickSigninHelper::CAN_OFFER_FOR_ALL, "", NULL)) {
+ OneClickSigninHelper::CreateForWebContents(web_contents);
+ }
+#endif
+
+#if defined(OS_WIN)
+ MetroPinTabHelper::CreateForWebContents(web_contents);
+#endif
+}
diff --git a/chrome/browser/ui/browser_tab_contents.h b/chrome/browser/ui/browser_tab_contents.h
new file mode 100644
index 0000000..7badd08
--- /dev/null
+++ b/chrome/browser/ui/browser_tab_contents.h
@@ -0,0 +1,64 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_BROWSER_TAB_CONTENTS_H_
+#define CHROME_BROWSER_UI_BROWSER_TAB_CONTENTS_H_
+
+class Browser;
+
+namespace content {
+class WebContents;
+}
+
+namespace chrome {
+class BrowserTabStripModelDelegate;
+}
+
+namespace prerender {
+class PrerenderContents;
+}
+
+// A "tab contents" is a WebContents that is used as a tab in a browser
+// window, and thus is owned by a Browser's TabStripModel. The
+// BrowserTabContents class allows specific classes to attach the set of tab
+// helpers that is used for tab contents.
+//
+// TODO(avi): This list is rather large, and for most callers it's due to the
+// fact that they need tab helpers attached early to deal with arbitrary
+// content loaded into a WebContents that will later be added to the tabstrip.
+// Is there a better way to handle this? (Ideally, this list would contain
+// only Browser and BrowserTabStripModelDelegate.)
+class BrowserTabContents {
+ private:
+ // Browser and its TabStripModelDelegate have intimate control of tabs.
+ // TabAndroid is the equivalent on Android.
+ friend class Browser;
+ friend class chrome::BrowserTabStripModelDelegate;
+ friend class TabAndroid;
+
+ // chrome::Navigate creates WebContents that are destined for the tab strip,
+ // and that might have WebUI that immediately calls back into random tab
+ // helpers.
+ friend class BrowserNavigatorWebContentsAdoption;
+
+ // ChromeFrame is defined as a complete tab of Chrome inside of an IE
+ // window, so it need to have the full complement of tab helpers that it
+ // would have if it were in a Browser.
+ // TODO(avi): It's still probably a good idea for Chrome Frame to more
+ // explicitly control which tab helpers get created for its WebContentses.
+ // http://crbug.com/157590
+ friend class ExternalTabContainerWin;
+
+ // Prerendering loads pages that have arbitrary external content; it needs
+ // the full set of tab helpers to deal with it.
+ friend class prerender::PrerenderContents;
+
+ // Adopts the specified WebContents as a full-fledged browser tab, attaching
+ // all the associated tab helpers that are needed for the WebContents to
+ // serve in that role. It is safe to call this on a WebContents that was
+ // already adopted.
+ static void AttachTabHelpers(content::WebContents* web_contents);
+};
+
+#endif // CHROME_BROWSER_UI_BROWSER_TAB_CONTENTS_H_
diff --git a/chrome/browser/ui/browser_tab_strip_model_delegate.cc b/chrome/browser/ui/browser_tab_strip_model_delegate.cc
index 6e21043..62c401d 100644
--- a/chrome/browser/ui/browser_tab_strip_model_delegate.cc
+++ b/chrome/browser/ui/browser_tab_strip_model_delegate.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_navigator.h"
+#include "chrome/browser/ui/browser_tab_contents.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/dock_info.h"
@@ -84,7 +85,7 @@ Browser* BrowserTabStripModelDelegate::CreateNewStripWithContents(
void BrowserTabStripModelDelegate::WillAddWebContents(
content::WebContents* contents) {
- Browser::Adoption::AdoptAsTabContents(contents);
+ BrowserTabContents::AttachTabHelpers(contents);
}
int BrowserTabStripModelDelegate::GetDragActions() const {
diff --git a/chrome/browser/ui/pdf/pdf_browsertest.cc b/chrome/browser/ui/pdf/pdf_browsertest.cc
index 552328c..b7f972a 100644
--- a/chrome/browser/ui/pdf/pdf_browsertest.cc
+++ b/chrome/browser/ui/pdf/pdf_browsertest.cc
@@ -12,7 +12,6 @@
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/snapshot_tab_helper.h"
-#include "chrome/browser/ui/tab_contents/tab_contents.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/ui/tab_contents/tab_contents.cc b/chrome/browser/ui/tab_contents/tab_contents.cc
deleted file mode 100644
index 0a10f5a..0000000
--- a/chrome/browser/ui/tab_contents/tab_contents.cc
+++ /dev/null
@@ -1,242 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/tab_contents/tab_contents.h"
-
-#include "base/basictypes.h"
-#include "base/command_line.h"
-#include "base/lazy_instance.h"
-#include "chrome/browser/autofill/autofill_external_delegate.h"
-#include "chrome/browser/autofill/autofill_manager.h"
-#include "chrome/browser/automation/automation_tab_helper.h"
-#include "chrome/browser/content_settings/tab_specific_content_settings.h"
-#include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h"
-#include "chrome/browser/extensions/tab_helper.h"
-#include "chrome/browser/external_protocol/external_protocol_observer.h"
-#include "chrome/browser/favicon/favicon_tab_helper.h"
-#include "chrome/browser/history/history_tab_helper.h"
-#include "chrome/browser/infobars/infobar_tab_helper.h"
-#include "chrome/browser/managed_mode/managed_mode_navigation_observer.h"
-#include "chrome/browser/net/load_time_stats.h"
-#include "chrome/browser/net/net_error_tab_helper.h"
-#include "chrome/browser/omnibox_search_hint.h"
-#include "chrome/browser/password_manager/password_manager.h"
-#include "chrome/browser/password_manager/password_manager_delegate_impl.h"
-#include "chrome/browser/plugins/plugin_observer.h"
-#include "chrome/browser/prerender/prerender_tab_helper.h"
-#include "chrome/browser/printing/print_preview_message_handler.h"
-#include "chrome/browser/printing/print_view_manager.h"
-#include "chrome/browser/safe_browsing/safe_browsing_tab_observer.h"
-#include "chrome/browser/sessions/session_tab_helper.h"
-#include "chrome/browser/ssl/ssl_tab_helper.h"
-#include "chrome/browser/tab_contents/navigation_metrics_recorder.h"
-#include "chrome/browser/three_d_api_observer.h"
-#include "chrome/browser/thumbnails/thumbnail_tab_helper.h"
-#include "chrome/browser/translate/translate_tab_helper.h"
-#include "chrome/browser/ui/alternate_error_tab_observer.h"
-#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
-#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
-#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
-#include "chrome/browser/ui/constrained_window_tab_helper.h"
-#include "chrome/browser/ui/find_bar/find_tab_helper.h"
-#include "chrome/browser/ui/hung_plugin_tab_helper.h"
-#include "chrome/browser/ui/intents/web_intent_picker_controller.h"
-#include "chrome/browser/ui/pdf/pdf_tab_helper.h"
-#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
-#include "chrome/browser/ui/sad_tab_helper.h"
-#include "chrome/browser/ui/search/search_tab_helper.h"
-#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
-#include "chrome/browser/ui/snapshot_tab_helper.h"
-#include "chrome/browser/ui/sync/one_click_signin_helper.h"
-#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
-#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
-#include "chrome/browser/ui/zoom/zoom_controller.h"
-#include "chrome/browser/view_type_utils.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "chrome/common/chrome_switches.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/web_contents.h"
-
-#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
-#include "chrome/browser/captive_portal/captive_portal_tab_helper.h"
-#endif
-
-#if defined(OS_WIN)
-#include "chrome/browser/ui/metro_pin_tab_helper_win.h"
-#endif
-
-using content::WebContents;
-
-namespace {
-
-const char kTabContentsUserDataKey[] = "TabContentsUserData";
-
-class TabContentsUserData : public base::SupportsUserData::Data {
- public:
- explicit TabContentsUserData(TabContents* tab_contents)
- : tab_contents_(tab_contents) {}
- virtual ~TabContentsUserData() {}
- TabContents* tab_contents() { return tab_contents_; }
-
- void MakeContentsOwned() { owned_tab_contents_.reset(tab_contents_); }
-
- private:
- TabContents* tab_contents_; // unowned
- scoped_ptr<TabContents> owned_tab_contents_;
-};
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-// TabContents, public:
-
-// static
-TabContents* TabContents::Factory::CreateTabContents(WebContents* contents) {
- return new TabContents(contents);
-}
-
-// static
-TabContents::TabContents(WebContents* contents)
- : content::WebContentsObserver(contents),
- in_destructor_(false),
- web_contents_(contents),
- profile_(Profile::FromBrowserContext(contents->GetBrowserContext())),
- owned_web_contents_(contents) {
- DCHECK(contents);
- DCHECK(!FromWebContents(contents));
-
- chrome::SetViewType(contents, chrome::VIEW_TYPE_TAB_CONTENTS);
-
- // Stash this in the WebContents.
- contents->SetUserData(&kTabContentsUserDataKey,
- new TabContentsUserData(this));
-
- // Create the tab helpers.
-
- // SessionTabHelper comes first because it sets up the tab ID, and other
- // helpers may rely on that.
- SessionTabHelper::CreateForWebContents(contents);
-
- AlternateErrorPageTabObserver::CreateForWebContents(contents);
- TabAutofillManagerDelegate::CreateForWebContents(contents);
- AutofillManager::CreateForWebContentsAndDelegate(
- contents, TabAutofillManagerDelegate::FromWebContents(contents));
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableNewAutofillUi)) {
- AutofillExternalDelegate::CreateForWebContentsAndManager(
- contents, AutofillManager::FromWebContents(contents));
- AutofillManager::FromWebContents(contents)->SetExternalDelegate(
- AutofillExternalDelegate::FromWebContents(contents));
- }
- BlockedContentTabHelper::CreateForWebContents(contents);
- BookmarkTabHelper::CreateForWebContents(contents);
- chrome_browser_net::LoadTimeStatsTabHelper::CreateForWebContents(contents);
- chrome_browser_net::NetErrorTabHelper::CreateForWebContents(contents);
- ConstrainedWindowTabHelper::CreateForWebContents(contents);
- CoreTabHelper::CreateForWebContents(contents);
- extensions::TabHelper::CreateForWebContents(contents);
- extensions::WebNavigationTabObserver::CreateForWebContents(contents);
- ExternalProtocolObserver::CreateForWebContents(contents);
- FaviconTabHelper::CreateForWebContents(contents);
- FindTabHelper::CreateForWebContents(contents);
- HistoryTabHelper::CreateForWebContents(contents);
- HungPluginTabHelper::CreateForWebContents(contents);
- InfoBarTabHelper::CreateForWebContents(contents);
- NavigationMetricsRecorder::CreateForWebContents(contents);
- PasswordManagerDelegateImpl::CreateForWebContents(contents);
- PasswordManager::CreateForWebContentsAndDelegate(
- contents, PasswordManagerDelegateImpl::FromWebContents(contents));
- PluginObserver::CreateForWebContents(contents);
- PrefsTabHelper::CreateForWebContents(contents);
- prerender::PrerenderTabHelper::CreateForWebContents(contents);
- safe_browsing::SafeBrowsingTabObserver::CreateForWebContents(contents);
- SearchEngineTabHelper::CreateForWebContents(contents);
- chrome::search::SearchTabHelper::CreateForWebContents(contents);
- SnapshotTabHelper::CreateForWebContents(contents);
- SSLTabHelper::CreateForWebContents(contents);
- TabContentsSyncedTabDelegate::CreateForWebContents(contents);
- TabSpecificContentSettings::CreateForWebContents(contents);
- ThreeDAPIObserver::CreateForWebContents(contents);
- ThumbnailTabHelper::CreateForWebContents(contents);
- TranslateTabHelper::CreateForWebContents(contents);
- ZoomController::CreateForWebContents(contents);
-
-#if defined(ENABLE_AUTOMATION)
- AutomationTabHelper::CreateForWebContents(contents);
-#endif
-
-#if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
- captive_portal::CaptivePortalTabHelper::CreateForWebContents(contents);
-#endif
-
-#if !defined(OS_ANDROID)
- if (OmniboxSearchHint::IsEnabled(profile()))
- OmniboxSearchHint::CreateForWebContents(contents);
- ManagedModeNavigationObserver::CreateForWebContents(contents);
- PDFTabHelper::CreateForWebContents(contents);
- SadTabHelper::CreateForWebContents(contents);
- WebIntentPickerController::CreateForWebContents(contents);
-#endif
-
-#if defined(ENABLE_PRINTING)
- printing::PrintPreviewMessageHandler::CreateForWebContents(contents);
- printing::PrintViewManager::CreateForWebContents(contents);
-#endif
-
-#if defined(ENABLE_ONE_CLICK_SIGNIN)
- // If this is not an incognito window, setup to handle one-click login.
- // We don't want to check that the profile is already connected at this time
- // because the connected state may change while this tab is open. Having a
- // one-click signin helper attached does not cause problems if the profile
- // happens to be already connected.
- if (OneClickSigninHelper::CanOffer(contents,
- OneClickSigninHelper::CAN_OFFER_FOR_ALL, "", NULL))
- OneClickSigninHelper::CreateForWebContents(contents);
-#endif
-
-#if defined(OS_WIN)
- MetroPinTabHelper::CreateForWebContents(contents);
-#endif
-}
-
-TabContents::~TabContents() {
- in_destructor_ = true;
-}
-
-// static
-TabContents* TabContents::FromWebContents(WebContents* contents) {
- TabContentsUserData* user_data = static_cast<TabContentsUserData*>(
- contents->GetUserData(&kTabContentsUserDataKey));
-
- return user_data ? user_data->tab_contents() : NULL;
-}
-
-// static
-const TabContents* TabContents::FromWebContents(const WebContents* contents) {
- TabContentsUserData* user_data = static_cast<TabContentsUserData*>(
- contents->GetUserData(&kTabContentsUserDataKey));
-
- return user_data ? user_data->tab_contents() : NULL;
-}
-
-WebContents* TabContents::web_contents() const {
- return web_contents_;
-}
-
-Profile* TabContents::profile() const {
- return profile_;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WebContentsObserver overrides
-
-void TabContents::WebContentsDestroyed(WebContents* tab) {
- if (!in_destructor_) {
- // The owned WebContents is being destroyed independently, so delete this.
- ignore_result(owned_web_contents_.release());
- TabContentsUserData* user_data = static_cast<TabContentsUserData*>(
- tab->GetUserData(&kTabContentsUserDataKey));
- user_data->MakeContentsOwned();
- }
-}
diff --git a/chrome/browser/ui/tab_contents/tab_contents.h b/chrome/browser/ui/tab_contents/tab_contents.h
deleted file mode 100644
index f5e9759..0000000
--- a/chrome/browser/ui/tab_contents/tab_contents.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_H_
-#define CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "base/memory/scoped_ptr.h"
-#include "content/public/browser/web_contents_observer.h"
-
-class Browser;
-class Profile;
-
-// Wraps WebContents and all of its supporting objects in order to control
-// their ownership and lifetime.
-//
-// WARNING: Not every place where HTML can run has a TabContents. This class is
-// *only* used in a visible, actual, tab inside a browser. Examples of things
-// that do not have a TabContents include:
-// - Extension background pages and popup bubbles
-// - HTML notification bubbles
-// - Screensavers on Chrome OS
-// - Other random places we decide to display HTML over time
-//
-// Consider carefully whether your feature is something that makes sense only
-// when a tab is displayed, or could make sense in other cases we use HTML. It
-// may makes sense to push down into WebContents and make configurable, or at
-// least to make easy for other WebContents hosts to include and support.
-class TabContents : public content::WebContentsObserver {
- public:
- class Factory {
- private:
- // TabContents is going away <http://crbug.com/107201> so don't allow any
- // more code to construct instances. Explicitly befriend those who currently
- // do so.
-
- friend class Browser;
-
- static TabContents* CreateTabContents(content::WebContents* contents);
- };
-
- virtual ~TabContents();
-
- // Helper to retrieve the existing instance that owns a given WebContents.
- // Returns NULL if there is no such existing instance.
- // NOTE: This is not intended for general use. It is intended for situations
- // like callbacks from content/ where only a WebContents is available. In the
- // general case, please do NOT use this; plumb TabContents through the chrome/
- // code instead of WebContents.
- static TabContents* FromWebContents(content::WebContents* contents);
- static const TabContents* FromWebContents(
- const content::WebContents* contents);
-
- // Returns the WebContents that this owns.
- content::WebContents* web_contents() const;
-
- // Returns the Profile that is associated with this TabContents.
- Profile* profile() const;
-
- // True if this TabContents is being torn down.
- bool in_destructor() const { return in_destructor_; }
-
- // Overrides -----------------------------------------------------------------
-
- // content::WebContentsObserver overrides:
- virtual void WebContentsDestroyed(content::WebContents* tab) OVERRIDE;
-
- private:
- // Takes ownership of |contents|, which must be heap-allocated (as it lives
- // in a scoped_ptr) and can not be NULL.
- explicit TabContents(content::WebContents* contents);
-
- // WebContents (MUST BE LAST) ------------------------------------------------
-
- // If true, we're running the destructor.
- bool in_destructor_;
-
- content::WebContents* web_contents_;
- Profile* profile_;
- // The supporting objects need to outlive the WebContents dtor (as they may
- // be called upon during its execution). As a result, this must come last
- // in the list.
- scoped_ptr<content::WebContents> owned_web_contents_;
-
- DISALLOW_COPY_AND_ASSIGN(TabContents);
-};
-
-#endif // CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_H_
diff --git a/chrome/browser/ui/views/external_tab_container_win.cc b/chrome/browser/ui/views/external_tab_container_win.cc
index 283b4d6..a6aa395 100644
--- a/chrome/browser/ui/views/external_tab_container_win.cc
+++ b/chrome/browser/ui/views/external_tab_container_win.cc
@@ -32,6 +32,7 @@
#include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_creator.h"
#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_tab_contents.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tab_modal_confirm_dialog.h"
#include "chrome/browser/ui/views/infobars/infobar_container_view.h"
@@ -218,7 +219,7 @@ bool ExternalTabContainerWin::Init(Profile* profile,
content::WebContentsObserver::Observe(existing_contents);
- Browser::Adoption::AdoptAsTabContents(existing_contents);
+ BrowserTabContents::AttachTabHelpers(existing_contents);
web_contents_.reset(existing_contents);
if (!infobars_enabled) {
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index e1a3c33..fc804da 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -218,7 +218,6 @@
'browser/ui/bookmarks/bookmark_utils.h',
'browser/ui/browser.cc',
'browser/ui/browser.h',
- 'browser/ui/browser_adoption.cc',
'browser/ui/browser_commands.cc',
'browser/ui/browser_commands.h',
'browser/ui/browser_command_controller.cc',
@@ -243,6 +242,8 @@
'browser/ui/browser_otr_state.h',
'browser/ui/browser_ui_prefs.cc',
'browser/ui/browser_ui_prefs.h',
+ 'browser/ui/browser_tab_contents.h',
+ 'browser/ui/browser_tab_contents.cc',
'browser/ui/browser_tab_restore_service_delegate.cc',
'browser/ui/browser_tab_restore_service_delegate.h',
'browser/ui/browser_tab_strip_model_delegate.cc',
@@ -355,8 +356,8 @@
'browser/ui/cocoa/browser/avatar_menu_bubble_controller.mm',
'browser/ui/cocoa/browser/edit_search_engine_cocoa_controller.h',
'browser/ui/cocoa/browser/edit_search_engine_cocoa_controller.mm',
- 'browser/ui/cocoa/browser/password_generation_bubble_controller.h',
- 'browser/ui/cocoa/browser/password_generation_bubble_controller.mm',
+ 'browser/ui/cocoa/browser/password_generation_bubble_controller.h',
+ 'browser/ui/cocoa/browser/password_generation_bubble_controller.mm',
'browser/ui/cocoa/browser_command_executor.h',
'browser/ui/cocoa/browser_window_cocoa.h',
'browser/ui/cocoa/browser_window_cocoa.mm',
@@ -1249,8 +1250,6 @@
'browser/ui/tab_contents/core_tab_helper.h',
'browser/ui/tab_contents/core_tab_helper_delegate.cc',
'browser/ui/tab_contents/core_tab_helper_delegate.h',
- 'browser/ui/tab_contents/tab_contents.cc',
- 'browser/ui/tab_contents/tab_contents.h',
'browser/ui/tab_contents/tab_contents_iterator.cc',
'browser/ui/tab_contents/tab_contents_iterator.h',
'browser/ui/tab_modal_confirm_dialog.h',
@@ -2484,6 +2483,7 @@
'browser/ui/browser_list.cc',
'browser/ui/browser_navigator.cc',
'browser/ui/browser_otr_state.cc',
+ 'browser/ui/browser_tab_contents.cc',
'browser/ui/browser_tab_restore_service_delegate.cc',
'browser/ui/browser_tabstrip.cc',
'browser/ui/browser_tabstrip.h',