diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-16 00:45:37 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-16 00:45:37 +0000 |
commit | 27e5b39137ab196de4a6a069cec63cc21cf6c5b8 (patch) | |
tree | c8d855133f9627f13c901b49dbd4b125068821ed | |
parent | 948e1047ea0815c506cc17ceb3026b0f9e2599e1 (diff) | |
download | chromium_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.cc | 11 | ||||
-rw-r--r-- | chrome/browser/chromeos/dbus/printer_service_provider.cc | 1 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_contents.cc | 3 | ||||
-rw-r--r-- | chrome/browser/ui/browser.cc | 22 | ||||
-rw-r--r-- | chrome/browser/ui/browser.h | 51 | ||||
-rw-r--r-- | chrome/browser/ui/browser_adoption.cc | 57 | ||||
-rw-r--r-- | chrome/browser/ui/browser_navigator.cc | 7 | ||||
-rw-r--r-- | chrome/browser/ui/browser_tab_contents.cc | 187 | ||||
-rw-r--r-- | chrome/browser/ui/browser_tab_contents.h | 64 | ||||
-rw-r--r-- | chrome/browser/ui/browser_tab_strip_model_delegate.cc | 3 | ||||
-rw-r--r-- | chrome/browser/ui/pdf/pdf_browsertest.cc | 1 | ||||
-rw-r--r-- | chrome/browser/ui/tab_contents/tab_contents.cc | 242 | ||||
-rw-r--r-- | chrome/browser/ui/tab_contents/tab_contents.h | 91 | ||||
-rw-r--r-- | chrome/browser/ui/views/external_tab_container_win.cc | 3 | ||||
-rw-r--r-- | chrome/chrome_browser_ui.gypi | 10 |
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', |