summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-19 02:27:16 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-19 02:27:16 +0000
commit299dabdd2178ac3126282ac854da86b6cd84be02 (patch)
tree4626d596651704ec7b467d60c011da7efe18dcda /chrome/browser/views
parent2758136c0f073eacbb2943d5029b90eb4b1e5512 (diff)
downloadchromium_src-299dabdd2178ac3126282ac854da86b6cd84be02.zip
chromium_src-299dabdd2178ac3126282ac854da86b6cd84be02.tar.gz
chromium_src-299dabdd2178ac3126282ac854da86b6cd84be02.tar.bz2
Land this change again now I've fixed the crash.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5669 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r--chrome/browser/views/browser_views.vcproj16
-rw-r--r--chrome/browser/views/frame/aero_glass_frame.cc4
-rw-r--r--chrome/browser/views/frame/browser_view.cc26
-rw-r--r--chrome/browser/views/frame/browser_view.h9
-rw-r--r--chrome/browser/views/frame/browser_window_factory.cc1
-rw-r--r--chrome/browser/views/frame/opaque_frame.cc4
-rw-r--r--chrome/browser/views/frame/opaque_non_client_view.cc11
-rw-r--r--chrome/browser/views/frame/opaque_non_client_view.h8
-rw-r--r--chrome/browser/views/html_dialog_view.h1
-rw-r--r--chrome/browser/views/info_bubble.cc5
-rw-r--r--chrome/browser/views/tab_icon_view.cc29
-rw-r--r--chrome/browser/views/tab_icon_view.h16
-rw-r--r--chrome/browser/views/tabs/dragged_tab_controller.cc4
-rw-r--r--chrome/browser/views/toolbar_view.cc2
14 files changed, 76 insertions, 60 deletions
diff --git a/chrome/browser/views/browser_views.vcproj b/chrome/browser/views/browser_views.vcproj
index 6f38c89..5a543cd 100644
--- a/chrome/browser/views/browser_views.vcproj
+++ b/chrome/browser/views/browser_views.vcproj
@@ -216,14 +216,6 @@
RelativePath=".\info_bar_view.h"
>
</File>
- <File
- RelativePath=".\tab_icon_view.cc"
- >
- </File>
- <File
- RelativePath=".\tab_icon_view.h"
- >
- </File>
</Filter>
<Filter
Name="Options"
@@ -778,6 +770,14 @@
>
</File>
<File
+ RelativePath=".\tab_icon_view.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\tab_icon_view.h"
+ >
+ </File>
+ <File
RelativePath=".\theme_helpers.cc"
>
</File>
diff --git a/chrome/browser/views/frame/aero_glass_frame.cc b/chrome/browser/views/frame/aero_glass_frame.cc
index 0c5846a..a24e274 100644
--- a/chrome/browser/views/frame/aero_glass_frame.cc
+++ b/chrome/browser/views/frame/aero_glass_frame.cc
@@ -7,7 +7,7 @@
#include <dwmapi.h>
#include "chrome/app/theme/theme_resources.h"
-#include "chrome/browser/frame_util.h"
+#include "chrome/browser/browser_list.h"
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/frame/aero_glass_non_client_view.h"
#include "chrome/common/resource_bundle.h"
@@ -108,7 +108,7 @@ void AeroGlassFrame::OnInitMenuPopup(HMENU menu, UINT position,
}
void AeroGlassFrame::OnEndSession(BOOL ending, UINT logoff) {
- FrameUtil::EndSession();
+ BrowserList::WindowsSessionEnding();
}
LRESULT AeroGlassFrame::OnMouseActivate(HWND window, UINT hittest_code,
diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc
index 54bf7c5..2b6af47 100644
--- a/chrome/browser/views/frame/browser_view.cc
+++ b/chrome/browser/views/frame/browser_view.cc
@@ -138,6 +138,16 @@ BrowserView::~BrowserView() {
ticker_.UnregisterTickHandler(&hung_window_detector_);
}
+// static
+BrowserWindow* BrowserView::GetBrowserWindowForHWND(HWND window) {
+ if (IsWindow(window)) {
+ HANDLE data = GetProp(window, kBrowserWindowKey);
+ if (data)
+ return reinterpret_cast<BrowserWindow*>(data);
+ }
+ return NULL;
+}
+
int BrowserView::GetShowState() const {
STARTUPINFO si = {0};
si.cb = sizeof(si);
@@ -189,7 +199,7 @@ bool BrowserView::IsOffTheRecord() const {
}
bool BrowserView::ShouldShowOffTheRecordAvatar() const {
- return IsOffTheRecord() && browser_->type() == BrowserType::TABBED_BROWSER;
+ return IsOffTheRecord() && browser_->type() == Browser::TYPE_NORMAL;
}
bool BrowserView::AcceleratorPressed(const views::Accelerator& accelerator) {
@@ -283,13 +293,13 @@ bool BrowserView::SupportsWindowFeature(WindowFeature feature) const {
}
// static
-unsigned int BrowserView::FeaturesForBrowserType(BrowserType::Type type) {
+unsigned int BrowserView::FeaturesForBrowserType(Browser::Type type) {
unsigned int features = FEATURE_INFOBAR | FEATURE_DOWNLOADSHELF;
- if (type == BrowserType::TABBED_BROWSER)
+ if (type == Browser::TYPE_NORMAL)
features |= FEATURE_TABSTRIP | FEATURE_TOOLBAR | FEATURE_BOOKMARKBAR;
- if (type != BrowserType::APPLICATION)
+ if (type != Browser::TYPE_APP)
features |= FEATURE_LOCATIONBAR;
- if (type != BrowserType::TABBED_BROWSER)
+ if (type != Browser::TYPE_NORMAL)
features |= FEATURE_TITLEBAR;
return features;
}
@@ -687,7 +697,7 @@ bool BrowserView::ShouldShowWindowTitle() const {
}
SkBitmap BrowserView::GetWindowIcon() {
- if (browser_->type() == BrowserType::APPLICATION)
+ if (browser_->type() == Browser::TYPE_APP)
return browser_->GetCurrentPageIcon();
return SkBitmap();
}
@@ -726,7 +736,7 @@ void BrowserView::SaveWindowPlacement(const gfx::Rect& bounds,
bool BrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const {
*bounds = browser_->GetSavedWindowBounds();
- if (browser_->type() == BrowserType::BROWSER) {
+ if (browser_->type() == Browser::TYPE_POPUP) {
// We are a popup window. The value passed in |bounds| represents two
// pieces of information:
// - the position of the window, in screen coordinates (outer position).
@@ -967,7 +977,7 @@ void BrowserView::InitSystemMenu() {
int insertion_index = std::max(0, system_menu_->ItemCount() - 1);
// We add the menu items in reverse order so that insertion_index never needs
// to change.
- if (browser_->type() == BrowserType::TABBED_BROWSER) {
+ if (browser_->type() == Browser::TYPE_NORMAL) {
system_menu_->AddSeparator(insertion_index);
system_menu_->AddMenuItemWithLabel(insertion_index, IDC_TASKMANAGER,
l10n_util::GetString(IDS_TASKMANAGER));
diff --git a/chrome/browser/views/frame/browser_view.h b/chrome/browser/views/frame/browser_view.h
index fcc0ee4..d777f5a 100644
--- a/chrome/browser/views/frame/browser_view.h
+++ b/chrome/browser/views/frame/browser_view.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_VIEWS_FRAME_BROWSER_VIEW_H_
#define CHROME_BROWSER_VIEWS_FRAME_BROWSER_VIEW_H_
-#include "chrome/browser/browser_type.h"
+#include "chrome/browser/browser.h"
#include "chrome/browser/browser_window.h"
#include "chrome/browser/hang_monitor/hung_plugin_action.h"
#include "chrome/browser/hang_monitor/hung_window_detector.h"
@@ -43,6 +43,11 @@ class BrowserView : public BrowserWindow,
void set_frame(BrowserFrame* frame) { frame_ = frame; }
+ // Returns a pointer to the BrowserWindow* interface implementation (an
+ // instance of this object, typically) for a given HWND, or NULL if there is
+ // no such association.
+ static BrowserWindow* GetBrowserWindowForHWND(HWND window);
+
// Returns the show flag that should be used to show the frame containing
// this view.
int GetShowState() const;
@@ -134,7 +139,7 @@ class BrowserView : public BrowserWindow,
bool SupportsWindowFeature(WindowFeature feature) const;
// Returns the set of WindowFeatures supported by the specified BrowserType.
- static unsigned int FeaturesForBrowserType(BrowserType::Type type);
+ static unsigned int FeaturesForBrowserType(Browser::Type type);
// Register preferences specific to this view.
static void RegisterBrowserViewPrefs(PrefService* prefs);
diff --git a/chrome/browser/views/frame/browser_window_factory.cc b/chrome/browser/views/frame/browser_window_factory.cc
index 59a8d9d..9a6853b 100644
--- a/chrome/browser/views/frame/browser_window_factory.cc
+++ b/chrome/browser/views/frame/browser_window_factory.cc
@@ -6,7 +6,6 @@
#include "chrome/browser/browser.h"
#include "chrome/browser/browser_process.h" // TODO(beng): remove once done.
#include "chrome/browser/browser_window.h"
-#include "chrome/browser/frame_util.h"
#include "chrome/browser/views/frame/aero_glass_frame.h"
#include "chrome/browser/views/frame/browser_frame.h"
#include "chrome/browser/views/frame/browser_view.h"
diff --git a/chrome/browser/views/frame/opaque_frame.cc b/chrome/browser/views/frame/opaque_frame.cc
index 3158af7..f04d8e2 100644
--- a/chrome/browser/views/frame/opaque_frame.cc
+++ b/chrome/browser/views/frame/opaque_frame.cc
@@ -4,7 +4,7 @@
#include "chrome/browser/views/frame/opaque_frame.h"
-#include "chrome/browser/frame_util.h"
+#include "chrome/browser/browser_list.h"
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/frame/opaque_non_client_view.h"
#include "chrome/browser/views/tabs/tab_strip.h"
@@ -82,7 +82,7 @@ bool OpaqueFrame::GetAccelerator(int cmd_id, views::Accelerator* accelerator) {
}
void OpaqueFrame::OnEndSession(BOOL ending, UINT logoff) {
- FrameUtil::EndSession();
+ BrowserList::WindowsSessionEnding();
}
void OpaqueFrame::OnInitMenuPopup(HMENU menu, UINT position,
diff --git a/chrome/browser/views/frame/opaque_non_client_view.cc b/chrome/browser/views/frame/opaque_non_client_view.cc
index 460a1f8..1f30ae5 100644
--- a/chrome/browser/views/frame/opaque_non_client_view.cc
+++ b/chrome/browser/views/frame/opaque_non_client_view.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/views/frame/opaque_non_client_view.h"
#include "chrome/app/theme/theme_resources.h"
+#include "chrome/browser/tab_contents.h"
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/tabs/tab_strip.h"
#include "chrome/common/gfx/chrome_font.h"
@@ -479,11 +480,15 @@ void OpaqueNonClientView::UpdateWindowIcon() {
///////////////////////////////////////////////////////////////////////////////
// OpaqueNonClientView, TabIconView::TabContentsProvider implementation:
-TabContents* OpaqueNonClientView::GetCurrentTabContents() {
- return browser_view_->GetSelectedTabContents();
+bool OpaqueNonClientView::ShouldTabIconViewAnimate() const {
+ // This function is queried during the creation of the window as the
+ // TabIconView we host is initialized, so we need to NULL check the selected
+ // TabContents because in this condition there is not yet a selected tab.
+ TabContents* current_tab = browser_view_->GetSelectedTabContents();
+ return current_tab ? current_tab->is_loading() : false;
}
-SkBitmap OpaqueNonClientView::GetFavIcon() {
+SkBitmap OpaqueNonClientView::GetFavIconForTabIconView() {
return frame_->window_delegate()->GetWindowIcon();
}
diff --git a/chrome/browser/views/frame/opaque_non_client_view.h b/chrome/browser/views/frame/opaque_non_client_view.h
index 6d22a5b..93cee85 100644
--- a/chrome/browser/views/frame/opaque_non_client_view.h
+++ b/chrome/browser/views/frame/opaque_non_client_view.h
@@ -20,7 +20,7 @@ class WindowResources;
class OpaqueNonClientView : public views::NonClientView,
public views::BaseButton::ButtonListener,
- public TabIconView::TabContentsProvider {
+ public TabIconView::TabIconViewModel {
public:
// Constructs a non-client view for an OpaqueFrame. |is_otr| specifies if the
// frame was created "off-the-record" and as such different bitmaps should be
@@ -39,9 +39,9 @@ class OpaqueNonClientView : public views::NonClientView,
void UpdateWindowIcon();
protected:
- // Overridden from TabIconView::TabContentsProvider:
- virtual TabContents* GetCurrentTabContents();
- virtual SkBitmap GetFavIcon();
+ // Overridden from TabIconView::TabIconViewModel:
+ virtual bool ShouldTabIconViewAnimate() const;
+ virtual SkBitmap GetFavIconForTabIconView();
// Overridden from views::BaseButton::ButtonListener:
virtual void ButtonPressed(views::BaseButton* sender);
diff --git a/chrome/browser/views/html_dialog_view.h b/chrome/browser/views/html_dialog_view.h
index 68e09adf..3b8b28c 100644
--- a/chrome/browser/views/html_dialog_view.h
+++ b/chrome/browser/views/html_dialog_view.h
@@ -11,6 +11,7 @@
#include "chrome/browser/tab_contents_delegate.h"
#include "chrome/browser/views/dom_view.h"
+class Browser;
namespace views {
class Window;
}
diff --git a/chrome/browser/views/info_bubble.cc b/chrome/browser/views/info_bubble.cc
index 9106b3e..0fc2264 100644
--- a/chrome/browser/views/info_bubble.cc
+++ b/chrome/browser/views/info_bubble.cc
@@ -7,7 +7,7 @@
#include "base/win_util.h"
#include "chrome/app/theme/theme_resources.h"
#include "chrome/browser/browser_window.h"
-#include "chrome/browser/frame_util.h"
+#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/common/gfx/chrome_canvas.h"
#include "chrome/common/gfx/path.h"
#include "chrome/common/resource_bundle.h"
@@ -189,7 +189,8 @@ InfoBubble::ContentView* InfoBubble::CreateContentView(View* content) {
BrowserWindow* InfoBubble::GetHostingWindow() {
HWND owning_frame_hwnd = GetAncestor(GetHWND(), GA_ROOTOWNER);
- BrowserWindow* frame = FrameUtil::GetBrowserWindowForHWND(owning_frame_hwnd);
+ BrowserWindow* frame =
+ BrowserView::GetBrowserWindowForHWND(owning_frame_hwnd);
if (!frame) {
// We should always have a frame, but there was a bug else where that
// made it possible for the frame to be NULL, so we have the check. If
diff --git a/chrome/browser/views/tab_icon_view.cc b/chrome/browser/views/tab_icon_view.cc
index 245a38d..46595f6 100644
--- a/chrome/browser/views/tab_icon_view.cc
+++ b/chrome/browser/views/tab_icon_view.cc
@@ -50,8 +50,8 @@ void TabIconView::InitializeIfNeeded() {
}
}
-TabIconView::TabIconView(TabContentsProvider* provider)
- : provider_(provider),
+TabIconView::TabIconView(TabIconViewModel* model)
+ : model_(model),
is_light_(false),
throbber_running_(false),
throbber_frame_(0) {
@@ -62,10 +62,9 @@ TabIconView::~TabIconView() {
}
void TabIconView::Update() {
- TabContents* contents = provider_->GetCurrentTabContents();
if (throbber_running_) {
// We think the tab is loading.
- if (!contents || !contents->is_loading()) {
+ if (!model_->ShouldTabIconViewAnimate()) {
// Woops, tab is invalid or not loading, reset our status and schedule
// a paint.
throbber_running_ = false;
@@ -75,7 +74,7 @@ void TabIconView::Update() {
throbber_frame_ = (throbber_frame_ + 1) % g_throbber_frame_count;
SchedulePaint();
}
- } else if (contents && contents->is_loading()) {
+ } else if (model_->ShouldTabIconViewAnimate()) {
// We didn't think we were loading, but the tab is loading. Reset the
// frame and status and schedule a paint.
throbber_running_ = true;
@@ -106,25 +105,21 @@ void TabIconView::PaintFavIcon(ChromeCanvas* canvas, const SkBitmap& bitmap) {
}
void TabIconView::Paint(ChromeCanvas* canvas) {
- TabContents* contents = provider_->GetCurrentTabContents();
bool rendered = false;
- if (contents) {
- if (throbber_running_) {
+ if (throbber_running_) {
+ rendered = true;
+ PaintThrobber(canvas);
+ } else {
+ SkBitmap favicon = model_->GetFavIconForTabIconView();
+ if (!favicon.isNull()) {
rendered = true;
- PaintThrobber(canvas);
- } else {
- SkBitmap favicon = provider_->GetFavIcon();
- if (!favicon.isNull()) {
- rendered = true;
- PaintFavIcon(canvas, favicon);
- }
+ PaintFavIcon(canvas, favicon);
}
}
- if (!rendered) {
+ if (!rendered)
PaintFavIcon(canvas, *g_default_fav_icon);
- }
}
gfx::Size TabIconView::GetPreferredSize() {
diff --git a/chrome/browser/views/tab_icon_view.h b/chrome/browser/views/tab_icon_view.h
index 11b22d4..43302228 100644
--- a/chrome/browser/views/tab_icon_view.h
+++ b/chrome/browser/views/tab_icon_view.h
@@ -16,19 +16,19 @@ class TabContents;
////////////////////////////////////////////////////////////////////////////////
class TabIconView : public views::View {
public:
- class TabContentsProvider {
+ // Classes implement this interface to provide state for the TabIconView.
+ class TabIconViewModel {
public:
- // Should return the current tab contents this TabIconView object is
- // representing.
- virtual TabContents* GetCurrentTabContents() = 0;
+ // Returns true if the TabIconView should show a loading animation.
+ virtual bool ShouldTabIconViewAnimate() const = 0;
// Returns the favicon to display in the icon view
- virtual SkBitmap GetFavIcon() = 0;
+ virtual SkBitmap GetFavIconForTabIconView() = 0;
};
static void InitializeIfNeeded();
- explicit TabIconView(TabContentsProvider* provider);
+ explicit TabIconView(TabIconViewModel* provider);
virtual ~TabIconView();
// Invoke whenever the tab state changes or the throbber should update.
@@ -45,8 +45,8 @@ class TabIconView : public views::View {
void PaintThrobber(ChromeCanvas* canvas);
void PaintFavIcon(ChromeCanvas* canvas, const SkBitmap& bitmap);
- // Our provider of current tab contents.
- TabContentsProvider* provider_;
+ // Our model.
+ TabIconViewModel* model_;
// Whether the throbber is running.
bool throbber_running_;
diff --git a/chrome/browser/views/tabs/dragged_tab_controller.cc b/chrome/browser/views/tabs/dragged_tab_controller.cc
index db605a4..f81fc84 100644
--- a/chrome/browser/views/tabs/dragged_tab_controller.cc
+++ b/chrome/browser/views/tabs/dragged_tab_controller.cc
@@ -7,8 +7,8 @@
#include "chrome/browser/views/tabs/dragged_tab_controller.h"
#include "chrome/browser/browser_window.h"
-#include "chrome/browser/frame_util.h"
#include "chrome/browser/tab_contents.h"
+#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/tabs/dragged_tab_view.h"
#include "chrome/browser/views/tabs/hwnd_photobooth.h"
#include "chrome/browser/views/tabs/tab.h"
@@ -441,7 +441,7 @@ TabStrip* DraggedTabController::GetTabStripForPoint(
if (!other_hwnd)
return NULL;
- BrowserWindow* other_frame = FrameUtil::GetBrowserWindowForHWND(other_hwnd);
+ BrowserWindow* other_frame = BrowserView::GetBrowserWindowForHWND(other_hwnd);
if (other_frame) {
TabStrip* other_tabstrip = other_frame->GetTabStrip();
if (!other_tabstrip->IsCompatibleWith(source_tabstrip_))
diff --git a/chrome/browser/views/toolbar_view.cc b/chrome/browser/views/toolbar_view.cc
index 34f6c24..1b56e84 100644
--- a/chrome/browser/views/toolbar_view.cc
+++ b/chrome/browser/views/toolbar_view.cc
@@ -80,7 +80,7 @@ BrowserToolbarView::BrowserToolbarView(CommandController* controller,
forward_menu_model_.reset(new BackForwardMenuModel(
browser, BackForwardMenuModel::FORWARD_MENU_DELEGATE));
- if (browser->type() == BrowserType::TABBED_BROWSER)
+ if (browser->type() == Browser::TYPE_NORMAL)
display_mode_ = DISPLAYMODE_NORMAL;
else
display_mode_ = DISPLAYMODE_LOCATION;