summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chrome_frame.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chrome_frame.h')
-rw-r--r--chrome/browser/chrome_frame.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/chrome/browser/chrome_frame.h b/chrome/browser/chrome_frame.h
new file mode 100644
index 0000000..4af845e
--- /dev/null
+++ b/chrome/browser/chrome_frame.h
@@ -0,0 +1,213 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_BROWSER_CHROME_FRAME_H__
+#define CHROME_BROWSER_CHROME_FRAME_H__
+
+#include <map>
+#include <string>
+#include <windows.h>
+
+#include "base/gfx/point.h"
+#include "base/gfx/rect.h"
+#include "chrome/browser/views/status_bubble.h"
+#include "chrome/views/accelerator.h"
+
+class Browser;
+class BrowserList;
+namespace ChromeViews {
+ class RootView;
+}
+class TabContents;
+class TabStrip;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// ChromeFrame class
+//
+// An abstract class to define the methods implemented by chrome's frames. We
+// currently have 2 implementations. One for vista and one for XP.
+//
+////////////////////////////////////////////////////////////////////////////////
+class ChromeFrame {
+ public:
+
+ // Initialize the frame.
+ virtual void Init() = 0;
+
+ // Show the window according to the given command, which is one of SW_*
+ // passed to the Windows function ShowWindow.
+ //
+ // If adjust_to_fit is true, the window is resized and moved to be on the
+ // default screen.
+ virtual void Show(int command, bool adjust_to_fit) = 0;
+
+ // Invoked by the browser when painting occurred. This is called as a
+ // result of calling Browser::Paint()
+ // TODO(ACW) We really need a cross platform region class to replace
+ // HRGN in our APIs
+ virtual void BrowserDidPaint(HRGN region) = 0;
+
+ // Closes the frame as soon as possible. If the frame is not in a drag
+ // session, it will close immediately; otherwise, it will move offscreen (so
+ // events are still fired) until the drag ends, then close.
+ virtual void Close() = 0;
+
+ // Return a platform dependent identifier for this frame. On Windows, this
+ // returns an HWND.
+ virtual void* GetPlatformID() = 0;
+
+ // Return the TabStrip associated with the frame.
+ virtual TabStrip* GetTabStrip() const = 0;
+
+ // Return the status bubble associated with the frame
+ virtual StatusBubble* GetStatusBubble() = 0;
+
+ // Return the RootView associated with the frame.
+ virtual ChromeViews::RootView* GetRootView() = 0;
+
+ // Inform the receiving frame that the visibility of one of the shelfs/bars
+ // may have changed.
+ virtual void ShelfVisibilityChanged() = 0;
+
+ // Inform the receiving frame that an animation has progressed in the
+ // selected tab.
+ virtual void SelectedTabToolbarSizeChanged(bool is_animating) = 0;
+
+ // Inform the frame that the selected tab favicon or title has changed. Some
+ // frames may need to refresh their title bar.
+ virtual void UpdateTitleBar() { }
+
+ // Sets the title displayed in various places within the OS, such as the task
+ // bar.
+ virtual void SetWindowTitle(const std::wstring& title) = 0;
+
+ // Activates (brings to front) the frame. Deminiaturize the frame if needed.
+ virtual void Activate() = 0;
+
+ // Flashes the taskbar item associated with this frame.
+ virtual void FlashFrame() = 0;
+
+ // Makes the specified TabContents visible. If there is another TabContents
+ // visible presently, this method is responsible for hiding that TabContents
+ // cleanly as well.
+ virtual void ShowTabContents(TabContents* contents) = 0;
+
+ // Continue a drag gesture that began with a constrained window. When the
+ // user drags a constrained window such that their mouse pointer leaves the
+ // bounds of the constraining HWND, the window is detached and the drag
+ // gesture continues except for this top level frame.
+ // |mouse_pt| is the position of the cursor in screen coordinates.
+ // |frame_component| is the component returned by WM_NCHITTEST for |mouse_pt|
+ // on the constrained window. This is passed to ensure we initiate the
+ // correct action (move, resize, etc).
+ virtual void ContinueDetachConstrainedWindowDrag(
+ const gfx::Point& mouse_pt,
+ int frame_component) = 0;
+
+ // Sizes the frame to match the specified desired bounds for the contents.
+ // |contents_bounds| are in screen coordinates.
+ virtual void SizeToContents(const gfx::Rect& contents_bounds) = 0;
+
+ // Set the accelerator table. This is called once after LoadAccelerators
+ // has been called on the frame. The callee becomes the owner of the passed
+ // map. The map associates accelerators with command ids.
+ // Note if you are not calling ChromeFrame::LoadAccelerators() on this frame,
+ // this method is never invoked.
+ virtual void SetAcceleratorTable(
+ std::map<ChromeViews::Accelerator, int>* accelerator_table) = 0;
+
+ // Updates internal state specifying whether the throbber is to be shown.
+ // If the throbber was shown, and should still be shown, the frame of the
+ // throbber is advanced.
+ // If necessary, the appropriate painting is scheduled.
+ virtual void ValidateThrobber() { }
+
+ // Returns the nonmaximized bounds of the frame (even if the frame is
+ // currently maximized or minimized) in terms of the screen coordinates.
+ virtual gfx::Rect GetNormalBounds() = 0;
+
+ // Returns true if the frame is maximized (aka zoomed).
+ virtual bool IsMaximized() = 0;
+
+ // Returns the bounds required to accomodate for some contents located at the
+ // provided rectangle. The result is in whatever coordinate system used for
+ // |content_rect|.
+ virtual gfx::Rect GetBoundsForContentBounds(const gfx::Rect content_rect) = 0;
+
+ // Set the frame bounds. |bounds| is in screen coordinate.
+ virtual void SetBounds(const gfx::Rect& bounds) = 0;
+
+ // Tel this frame to detach from the web browser. The frame should no longer
+ // notify the browser about anything.
+ virtual void DetachFromBrowser() = 0;
+
+ // Invoked by the InfoBubble when it is shown/hidden. XPFrame/VistaFrame use
+ // this notification to make sure they render as active even though they are
+ // not active while the bubble is shown.
+ virtual void InfoBubbleShowing() = 0;
+ // The implementation for this sends WM_NCACTIVATE with a value of FALSE for
+ // the window. Subclasses that need to customize should be sure and invoke
+ // this implementation too.
+ virtual void InfoBubbleClosing();
+
+ // Mark the frame such as it can be retrieved using GetChromeFrameForWindow()
+ static void RegisterChromeFrame(ChromeFrame* frame);
+
+ // Return a ChromeFrame instance given an hwnd.
+ static ChromeFrame* GetChromeFrameForWindow(HWND hwnd);
+
+ // Create a ChromeFrame for the given browser.
+ static ChromeFrame* CreateChromeFrame(const gfx::Rect& bounds,
+ Browser* browser);
+
+ // Initialize the accelerators for that frame.
+ static bool LoadAccelerators(ChromeFrame* frame,
+ HACCEL accelerator_table,
+ ChromeViews::AcceleratorTarget* accelerator_target);
+
+ // Activate any app modal dialog that might be present. Returns true if one
+ // was present.
+ static bool ActivateAppModalDialog(Browser* browser);
+
+ protected:
+ friend class BrowserList;
+
+ // Invoked when windows is shutting down (or the user is logging off). When
+ // this method returns windows is going to kill our process. As such, this
+ // blocks until the shtudown has been marked as clean.
+ static void EndSession();
+
+ // Notifies all tabs with associated webcontents of theme changes.
+ void NotifyTabsOfThemeChange(Browser* browser);
+
+ virtual void DestroyBrowser() = 0;
+};
+
+#endif // CHROME_BROWSER_CHROME_FRAME_H__