summaryrefslogtreecommitdiffstats
path: root/chrome/browser/external_tab_container.h
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-27 17:28:24 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-27 17:28:24 +0000
commit9095e9890efaa0b745438abfbd42634fbad32b04 (patch)
tree2f0cdbe3d2f4ac611c4d67e2b199d9c85ddc2355 /chrome/browser/external_tab_container.h
parent6366e200ed57ccb7609533c8cd7230cff4d5bf8e (diff)
downloadchromium_src-9095e9890efaa0b745438abfbd42634fbad32b04.zip
chromium_src-9095e9890efaa0b745438abfbd42634fbad32b04.tar.gz
chromium_src-9095e9890efaa0b745438abfbd42634fbad32b04.tar.bz2
ExternalTabContainer should subclass WidgetWin rather than Widget and ATL CWindowImpl. This makes it much easier to extend the API of Widget.
Cleans up ExternalTabContainer to better match chrome style. BUG=none TEST=run ui tests, verify ExternalTabContainer tests pass. Review URL: http://codereview.chromium.org/113892 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16996 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/external_tab_container.h')
-rw-r--r--chrome/browser/external_tab_container.h132
1 files changed, 39 insertions, 93 deletions
diff --git a/chrome/browser/external_tab_container.h b/chrome/browser/external_tab_container.h
index 536dd52..4edb8b9 100644
--- a/chrome/browser/external_tab_container.h
+++ b/chrome/browser/external_tab_container.h
@@ -5,25 +5,15 @@
#ifndef CHROME_BROWSER_EXTERNAL_TAB_CONTAINER_H_
#define CHROME_BROWSER_EXTERNAL_TAB_CONTAINER_H_
-#include <atlbase.h>
-#include <atlapp.h>
-#include <atlcrack.h>
-#include <atlmisc.h>
-#include <string>
-
-#include "base/basictypes.h"
#include "chrome/browser/tab_contents/tab_contents_delegate.h"
-#include "chrome/common/chrome_constants.h"
#include "chrome/common/notification_observer.h"
#include "chrome/common/notification_registrar.h"
-#include "views/focus/focus_manager.h"
-#include "views/widget/root_view.h"
-#include "views/widget/widget.h"
+#include "views/widget/widget_win.h"
class AutomationProvider;
-class TabContents;
class Profile;
class TabContentsContainer;
+
// This class serves as the container window for an external tab.
// An external tab is a Chrome tab that is meant to displayed in an
// external process. This class provides the FocusManger needed by the
@@ -31,39 +21,39 @@ class TabContentsContainer;
// TODO(beng): Should override WidgetWin instead of Widget.
class ExternalTabContainer : public TabContentsDelegate,
public NotificationObserver,
- public views::Widget,
- public views::KeystrokeListener,
- public CWindowImpl<ExternalTabContainer,
- CWindow,
- CWinTraits<WS_POPUP |
- WS_CLIPCHILDREN>> {
+ public views::WidgetWin,
+ public views::KeystrokeListener {
public:
- BEGIN_MSG_MAP(ExternalTabContainer)
- MESSAGE_HANDLER(WM_SIZE, OnSize)
- MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
- END_MSG_MAP()
-
- DECLARE_WND_CLASS(chrome::kExternalTabWindowClass)
-
- ExternalTabContainer(AutomationProvider* automation);
+ explicit ExternalTabContainer(AutomationProvider* automation);
~ExternalTabContainer();
- TabContents* tab_contents() const {
- return tab_contents_;
- }
+ TabContents* tab_contents() const { return tab_contents_; }
// Temporary hack so we can send notifications back
- void set_tab_handle(int handle) {
- tab_handle_ = handle;
- }
+ void set_tab_handle(int handle) { tab_handle_ = handle; }
- bool Init(Profile* profile, HWND parent, const gfx::Rect& dimensions,
- unsigned int style);
+ bool Init(Profile* profile,
+ HWND parent,
+ const gfx::Rect& bounds,
+ DWORD style);
- // This function gets called from two places, which is fine.
- // 1. OnFinalMessage
- // 2. In the destructor.
- bool Uninitialize(HWND window);
+ // Sets the keyboard accelerators needed by the external host
+ void SetAccelerators(HACCEL accel_table, int accel_table_entry_count);
+
+ // This is invoked when the external host reflects back to us a keyboard
+ // message it did not process
+ void ProcessUnhandledAccelerator(const MSG& msg);
+
+ // See TabContents::SetInitialFocus. Called from AutomationProvider.
+ void SetInitialFocus(bool reverse);
+
+ // A helper method that tests whether the given window is an
+ // ExternalTabContainer window
+ static bool IsExternalTabContainer(HWND window);
+
+ // A helper method that retrieves the ExternalTabContainer object that
+ // hosts the given tab window.
+ static ExternalTabContainer* GetContainerForTab(HWND tab_window);
// Overridden from TabContentsDelegate:
virtual void OpenURLFromTab(TabContents* source,
@@ -93,86 +83,42 @@ class ExternalTabContainer : public TabContentsDelegate,
virtual bool IsExternalTabContainer() const {
return true;
};
-
- // Creates an ExtensionFunctionDispatcher that has no browser
virtual ExtensionFunctionDispatcher *CreateExtensionFunctionDispatcher(
RenderViewHost* render_view_host,
const std::string& extension_id);
-
virtual bool TakeFocus(bool reverse);
- // Notification service callback.
+ // Overridden from NotificationObserver:
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details);
- /////////////////////////////////////////////////////////////////////////////
- // views::Widget
- /////////////////////////////////////////////////////////////////////////////
- virtual void GetBounds(gfx::Rect* out, bool including_frame) const;
- virtual void SetBounds(const gfx::Rect& bounds);
- virtual void SetBounds(const gfx::Rect& bounds,
- gfx::NativeWindow other_window);
- virtual void Close();
- virtual void CloseNow();
- virtual void Show();
- virtual void Hide();
- virtual gfx::NativeView GetNativeView() const;
- virtual void PaintNow(const gfx::Rect& update_rect);
- virtual void SetOpacity(unsigned char opacity);
- virtual views::RootView* GetRootView();
- virtual Widget* GetRootWidget() const { return NULL; }
- virtual bool IsVisible() const;
- virtual bool IsActive() const;
- virtual bool GetAccelerator(int cmd_id,
- views::Accelerator* accelerator) {
- return false;
- }
-
- // views::KeystrokeListener implementation
- // This method checks whether this key[down|up] message is needed by the
- // external host. If so, it sends it over to the external host
+ // Overridden from views::KeystrokeListener:
virtual bool ProcessKeyStroke(HWND window, UINT message, WPARAM wparam,
LPARAM lparam);
- // Sets the keyboard accelerators needed by the external host
- void SetAccelerators(HACCEL accel_table, int accel_table_entry_count);
-
- // This is invoked when the external host reflects back to us a keyboard
- // message it did not process
- void ProcessUnhandledAccelerator(const MSG& msg);
-
- // See TabContents::SetInitialFocus
- void SetInitialFocus(bool reverse);
-
- // A helper method that tests whether the given window is an
- // ExternalTabContainer window
- static bool IsExternalTabContainer(HWND window);
-
- // A helper method that retrieves the ExternalTabContainer object that
- // hosts the given tab window.
- static ExternalTabContainer* GetContainerForTab(HWND tab_window);
-
protected:
- LRESULT OnSize(UINT, WPARAM, LPARAM, BOOL& handled);
- LRESULT OnDestroy(UINT, WPARAM, LPARAM, BOOL& handled);
- void OnFinalMessage(HWND window);
+ // Overridden from views::WidgetWin:
+ virtual void OnDestroy();
+
+ private:
+ // Unhook the keystroke listener and notify about the closing TabContents.
+ // This function gets called from two places, which is fine.
+ // 1. OnFinalMessage
+ // 2. In the destructor.
+ void Uninitialize(HWND window);
- protected:
TabContents* tab_contents_;
scoped_refptr<AutomationProvider> automation_;
NotificationRegistrar registrar_;
- // Root view
- views::RootView root_view_;
// The accelerator table of the external host.
HACCEL external_accel_table_;
unsigned int external_accel_entry_count_;
// A view to handle focus cycling
TabContentsContainer* tab_contents_container_;
- private:
int tab_handle_;
// A failed navigation like a 404 is followed in chrome with a success
// navigation for the 404 page. We need to ignore the next navigation