summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/tab_contents/tab_contents_wrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/tab_contents/tab_contents_wrapper.h')
-rw-r--r--chrome/browser/ui/tab_contents/tab_contents_wrapper.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.h b/chrome/browser/ui/tab_contents/tab_contents_wrapper.h
new file mode 100644
index 0000000..f47a6ad
--- /dev/null
+++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.h
@@ -0,0 +1,79 @@
+// Copyright (c) 2010 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_WRAPPER_H_
+#define CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_
+#pragma once
+
+#include "base/scoped_ptr.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/tab_contents/web_navigation_observer.h"
+
+class Extension;
+class NavigationController;
+class PasswordManager;
+class PasswordManagerDelegate;
+class TabContentsDelegate;
+
+// Wraps TabContents and all of its supporting objetcs in order to control
+// their ownership and lifetime, while allowing TabContents to remain generic
+// and re-usable in other projects.
+// TODO(pinkerton): Eventually, this class will become TabContents as far as
+// the browser front-end is concerned, and the current TabContents will be
+// renamed to something like WebPage or WebView (ben's suggestions).
+class TabContentsWrapper : public WebNavigationObserver {
+ public:
+ // Takes ownership of |contents|, which must be heap-allocated (as it lives
+ // in a scoped_ptr) and can not be NULL.
+ explicit TabContentsWrapper(TabContents* contents);
+ ~TabContentsWrapper();
+
+ // Used to retrieve this object from |tab_contents_|, which is placed in
+ // its property bag to avoid adding additional interfaces.
+ static PropertyAccessor<TabContentsWrapper*>* property_accessor();
+
+ // Create a TabContentsWrapper with the same state as this one. The returned
+ // heap-allocated pointer is owned by the caller.
+ TabContentsWrapper* Clone();
+
+ TabContents* tab_contents() const { return tab_contents_.get(); }
+ NavigationController& controller() const {
+ return tab_contents()->controller();
+ }
+ TabContentsView* view() const { return tab_contents()->view(); }
+ RenderViewHost* render_view_host() const {
+ return tab_contents()->render_view_host();
+ }
+ Profile* profile() const { return tab_contents()->profile(); }
+ TabContentsDelegate* delegate() const { return tab_contents()->delegate(); }
+ void set_delegate(TabContentsDelegate* d) { tab_contents()->set_delegate(d); }
+
+ // Convenience methods until extensions are removed from TabContents.
+ void SetExtensionAppById(const std::string& extension_app_id) {
+ tab_contents()->SetExtensionAppById(extension_app_id);
+ }
+ const Extension* extension_app() const {
+ return tab_contents()->extension_app();
+ }
+ bool is_app() const { return tab_contents()->is_app(); }
+
+ // Returns the PasswordManager, creating it if necessary.
+ PasswordManager* GetPasswordManager();
+
+ // WebNavigationObserver overrides:
+ virtual void NavigateToPendingEntry();
+
+ private:
+ // PasswordManager and its delegate, lazily created. The delegate must
+ // outlive the manager, per documentation in password_manager.h.
+ scoped_ptr<PasswordManagerDelegate> password_manager_delegate_;
+ scoped_ptr<PasswordManager> password_manager_;
+
+ // The supporting objects need to outlive the TabContents dtor (as they may
+ // be called upon during its execution). As a result, this must come last
+ // in the list.
+ scoped_ptr<TabContents> tab_contents_;
+};
+
+#endif // CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_