summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/tab_contents/tab_contents.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/tab_contents/tab_contents.h')
-rw-r--r--chrome/browser/ui/tab_contents/tab_contents.h318
1 files changed, 318 insertions, 0 deletions
diff --git a/chrome/browser/ui/tab_contents/tab_contents.h b/chrome/browser/ui/tab_contents/tab_contents.h
new file mode 100644
index 0000000..06abb37
--- /dev/null
+++ b/chrome/browser/ui/tab_contents/tab_contents.h
@@ -0,0 +1,318 @@
+// 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_
+#pragma once
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/property_bag.h"
+#include "content/public/browser/web_contents_observer.h"
+
+class AlternateErrorPageTabObserver;
+class AutocompleteHistoryManager;
+class AutofillManager;
+class AutofillExternalDelegate;
+class AutomationTabHelper;
+class BlockedContentTabHelper;
+class BookmarkTabHelper;
+class ConstrainedWindowTabHelper;
+class CoreTabHelper;
+class ExtensionTabHelper;
+class ExternalProtocolObserver;
+class FaviconTabHelper;
+class FindTabHelper;
+class HistoryTabHelper;
+class HungPluginTabHelper;
+class InfoBarTabHelper;
+class OmniboxSearchHint;
+class PasswordManager;
+class PasswordManagerDelegate;
+class PDFTabObserver;
+class PluginObserver;
+class PrefsTabHelper;
+class Profile;
+class RestoreTabHelper;
+class SadTabHelper;
+class SearchEngineTabHelper;
+class SnapshotTabHelper;
+class TabContentsSSLHelper;
+class TabSpecificContentSettings;
+class ThumbnailGenerator;
+class TranslateTabHelper;
+class WebIntentPickerController;
+class ZoomController;
+
+#if defined(ENABLE_ONE_CLICK_SIGNIN)
+class OneClickSigninHelper;
+#endif
+
+namespace browser_sync {
+class SyncedTabDelegate;
+}
+
+namespace extensions {
+class WebNavigationTabObserver;
+}
+
+namespace prerender {
+class PrerenderTabHelper;
+}
+
+namespace printing {
+class PrintViewManager;
+class PrintPreviewMessageHandler;
+}
+
+namespace safe_browsing {
+class SafeBrowsingTabObserver;
+}
+
+// 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.
+//
+// TODO(avi): Eventually, this class will become TabContents as far as
+// the browser front-end is concerned.
+class TabContents : public content::WebContentsObserver {
+ public:
+ // 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);
+ virtual ~TabContents();
+
+ // Create a TabContents with the same state as this one. The returned
+ // heap-allocated pointer is owned by the caller.
+ TabContents* Clone();
+
+ // 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* GetCurrentWrapperForContents(
+ content::WebContents* contents);
+ static const TabContents* GetCurrentWrapperForContents(
+ 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_; }
+
+ // Tab Helpers ---------------------------------------------------------------
+
+ AutocompleteHistoryManager* autocomplete_history_manager() {
+ return autocomplete_history_manager_.get();
+ }
+
+ AutofillManager* autofill_manager() { return autofill_manager_.get(); }
+
+ // Used only for testing/automation.
+ AutomationTabHelper* automation_tab_helper() {
+ return automation_tab_helper_.get();
+ }
+
+ BlockedContentTabHelper* blocked_content_tab_helper() {
+ return blocked_content_tab_helper_.get();
+ }
+
+ BookmarkTabHelper* bookmark_tab_helper() {
+ return bookmark_tab_helper_.get();
+ }
+
+ ConstrainedWindowTabHelper* constrained_window_tab_helper() {
+ return constrained_window_tab_helper_.get();
+ }
+
+ CoreTabHelper* core_tab_helper() { return core_tab_helper_.get(); }
+
+ ExtensionTabHelper* extension_tab_helper() {
+ return extension_tab_helper_.get();
+ }
+
+ const ExtensionTabHelper* extension_tab_helper() const {
+ return extension_tab_helper_.get();
+ }
+
+ FaviconTabHelper* favicon_tab_helper() { return favicon_tab_helper_.get(); }
+ FindTabHelper* find_tab_helper() { return find_tab_helper_.get(); }
+ HistoryTabHelper* history_tab_helper() { return history_tab_helper_.get(); }
+ HungPluginTabHelper* hung_plugin_tab_helper() {
+ return hung_plugin_tab_helper_.get();
+ }
+ InfoBarTabHelper* infobar_tab_helper() { return infobar_tab_helper_.get(); }
+
+#if defined(ENABLE_ONE_CLICK_SIGNIN)
+ OneClickSigninHelper* one_click_signin_helper() {
+ return one_click_signin_helper_.get();
+ }
+#endif
+
+ PasswordManager* password_manager() { return password_manager_.get(); }
+ PrefsTabHelper* prefs_tab_helper() { return prefs_tab_helper_.get(); }
+
+ prerender::PrerenderTabHelper* prerender_tab_helper() {
+ return prerender_tab_helper_.get();
+ }
+
+ printing::PrintViewManager* print_view_manager() {
+ return print_view_manager_.get();
+ }
+
+ RestoreTabHelper* restore_tab_helper() {
+ return restore_tab_helper_.get();
+ }
+
+ const RestoreTabHelper* restore_tab_helper() const {
+ return restore_tab_helper_.get();
+ }
+
+ SadTabHelper* sad_tab_helper() { return sad_tab_helper_.get(); }
+
+ SearchEngineTabHelper* search_engine_tab_helper() {
+ return search_engine_tab_helper_.get();
+ }
+
+ SnapshotTabHelper* snapshot_tab_helper() {
+ return snapshot_tab_helper_.get();
+ }
+
+ TabContentsSSLHelper* ssl_helper() { return ssl_helper_.get(); }
+
+ browser_sync::SyncedTabDelegate* synced_tab_delegate() {
+ return synced_tab_delegate_.get();
+ }
+
+ TabSpecificContentSettings* content_settings() {
+ return content_settings_.get();
+ }
+
+ // NOTE: This returns NULL unless in-browser thumbnail generation is enabled.
+ ThumbnailGenerator* thumbnail_generator() {
+ return thumbnail_generator_.get();
+ }
+
+ TranslateTabHelper* translate_tab_helper() {
+ return translate_tab_helper_.get();
+ }
+
+ WebIntentPickerController* web_intent_picker_controller() {
+ return web_intent_picker_controller_.get();
+ }
+
+ ZoomController* zoom_controller() {
+ return zoom_controller_.get();
+ }
+
+ // Overrides -----------------------------------------------------------------
+
+ // content::WebContentsObserver overrides:
+ virtual void WebContentsDestroyed(content::WebContents* tab) OVERRIDE;
+
+ private:
+ // Used to retrieve this object from |web_contents_|, which is placed in
+ // its property bag to avoid adding additional interfaces.
+ static base::PropertyAccessor<TabContents*>* property_accessor();
+
+ // Tab Helpers ---------------------------------------------------------------
+ // (These provide API for callers and have a getter function listed in the
+ // "Tab Helpers" section in the member functions area, above.)
+
+ scoped_ptr<AutocompleteHistoryManager> autocomplete_history_manager_;
+ scoped_refptr<AutofillManager> autofill_manager_;
+ scoped_ptr<AutofillExternalDelegate> autofill_external_delegate_;
+ scoped_ptr<AutomationTabHelper> automation_tab_helper_;
+ scoped_ptr<BlockedContentTabHelper> blocked_content_tab_helper_;
+ scoped_ptr<BookmarkTabHelper> bookmark_tab_helper_;
+ scoped_ptr<ConstrainedWindowTabHelper> constrained_window_tab_helper_;
+ scoped_ptr<CoreTabHelper> core_tab_helper_;
+ scoped_ptr<ExtensionTabHelper> extension_tab_helper_;
+ scoped_ptr<FaviconTabHelper> favicon_tab_helper_;
+ scoped_ptr<FindTabHelper> find_tab_helper_;
+ scoped_ptr<HistoryTabHelper> history_tab_helper_;
+ scoped_ptr<HungPluginTabHelper> hung_plugin_tab_helper_;
+ scoped_ptr<InfoBarTabHelper> infobar_tab_helper_;
+
+ // PasswordManager and its delegate. The delegate must outlive the manager,
+ // per documentation in password_manager.h.
+ scoped_ptr<PasswordManagerDelegate> password_manager_delegate_;
+ scoped_ptr<PasswordManager> password_manager_;
+
+ scoped_ptr<PrefsTabHelper> prefs_tab_helper_;
+ scoped_ptr<prerender::PrerenderTabHelper> prerender_tab_helper_;
+
+ // Handles print job for this contents.
+ scoped_ptr<printing::PrintViewManager> print_view_manager_;
+
+ scoped_ptr<RestoreTabHelper> restore_tab_helper_;
+ scoped_ptr<SadTabHelper> sad_tab_helper_;
+ scoped_ptr<SearchEngineTabHelper> search_engine_tab_helper_;
+ scoped_ptr<SnapshotTabHelper> snapshot_tab_helper_;
+ scoped_ptr<TabContentsSSLHelper> ssl_helper_;
+ scoped_ptr<browser_sync::SyncedTabDelegate> synced_tab_delegate_;
+
+ // The TabSpecificContentSettings object is used to query the blocked content
+ // state by various UI elements.
+ scoped_ptr<TabSpecificContentSettings> content_settings_;
+
+ scoped_ptr<ThumbnailGenerator> thumbnail_generator_;
+ scoped_ptr<TranslateTabHelper> translate_tab_helper_;
+
+ // Handles displaying a web intents picker to the user.
+ scoped_ptr<WebIntentPickerController> web_intent_picker_controller_;
+
+ scoped_ptr<ZoomController> zoom_controller_;
+
+ // Per-tab observers ---------------------------------------------------------
+ // (These provide no API for callers; objects that need to exist 1:1 with tabs
+ // and silently do their thing live here.)
+
+ scoped_ptr<AlternateErrorPageTabObserver> alternate_error_page_tab_observer_;
+ scoped_ptr<extensions::WebNavigationTabObserver> webnavigation_observer_;
+ scoped_ptr<ExternalProtocolObserver> external_protocol_observer_;
+ scoped_ptr<OmniboxSearchHint> omnibox_search_hint_;
+#if defined(ENABLE_ONE_CLICK_SIGNIN)
+ scoped_ptr<OneClickSigninHelper> one_click_signin_helper_;
+#endif
+ scoped_ptr<PDFTabObserver> pdf_tab_observer_;
+ scoped_ptr<PluginObserver> plugin_observer_;
+ scoped_ptr<printing::PrintPreviewMessageHandler> print_preview_;
+ scoped_ptr<safe_browsing::SafeBrowsingTabObserver>
+ safe_browsing_tab_observer_;
+
+ // WebContents (MUST BE LAST) ------------------------------------------------
+
+ // If true, we're running the destructor.
+ bool in_destructor_;
+
+ // 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> web_contents_;
+
+ DISALLOW_COPY_AND_ASSIGN(TabContents);
+};
+
+#endif // CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_H_