Index: chrome/browser/tab_contents_wrapper.h |
=================================================================== |
--- chrome/browser/tab_contents_wrapper.h (revision 0) |
+++ chrome/browser/tab_contents_wrapper.h (revision 0) |
@@ -0,0 +1,75 @@ |
+// 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_TAB_CONTENTS_WRAPPER_H_ |
+#define CHROME_BROWSER_TAB_CONTENTS_WRAPPER_H_ |
+#pragma once |
+ |
+#include "base/scoped_ptr.h" |
+#include "chrome/browser/tab_contents/tab_contents.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: |
+ // 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(); |
+ |
+ 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_TAB_CONTENTS_WRAPPER_H_ |