diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-11 19:45:19 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-11 19:45:19 +0000 |
commit | 34cc1917d8003c107c1c320e5b50fe240de8a010 (patch) | |
tree | 4731a3d0036c85308171ec612a4bcd6cd15e1e60 /chrome/browser/views | |
parent | 960141c714a764b26ab954773018e68eafc3b97d (diff) | |
download | chromium_src-34cc1917d8003c107c1c320e5b50fe240de8a010.zip chromium_src-34cc1917d8003c107c1c320e5b50fe240de8a010.tar.gz chromium_src-34cc1917d8003c107c1c320e5b50fe240de8a010.tar.bz2 |
Add a first attempt at a compact location bar and a status bar. The status bar
contains a clock, an application menu, and a non-working battery indicator.
The compact location bar can be toggled by COMPACT_NAV_BAR in browser_window_gtk.cc
Review URL: http://codereview.chromium.org/165272
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23070 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r-- | chrome/browser/views/compact_navigation_bar.cc | 184 | ||||
-rw-r--r-- | chrome/browser/views/compact_navigation_bar.h | 76 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_view.cc | 2 | ||||
-rw-r--r-- | chrome/browser/views/frame/status_area_view.cc | 243 | ||||
-rw-r--r-- | chrome/browser/views/frame/status_area_view.h | 62 | ||||
-rw-r--r-- | chrome/browser/views/location_bar_view.h | 12 |
6 files changed, 572 insertions, 7 deletions
diff --git a/chrome/browser/views/compact_navigation_bar.cc b/chrome/browser/views/compact_navigation_bar.cc new file mode 100644 index 0000000..50409c5 --- /dev/null +++ b/chrome/browser/views/compact_navigation_bar.cc @@ -0,0 +1,184 @@ +// Copyright (c) 2009 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. + +#include "chrome/browser/views/compact_navigation_bar.h" + +#include "app/gfx/canvas.h" +#include "app/resource_bundle.h" +#include "app/theme_provider.h" +#include "base/logging.h" +#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h" +#include "chrome/browser/browser.h" +#include "chrome/browser/profile.h" +#include "chrome/browser/tab_contents/tab_contents.h" +#include "grit/theme_resources.h" +#include "views/controls/button/image_button.h" +#include "views/controls/image_view.h" +#include "views/controls/native/native_view_host.h" + +// Padding inside each button around the image. +static const int kInnerPadding = 1; + +// Spacing between buttons. +static const int kHorizPadding = 3; + +static const int kURLWidth = 150; + +static const int kChromeButtonSize = 25; + +CompactNavigationBar::CompactNavigationBar(Browser* browser) + : browser_(browser), + initialized_(false) { +} + +CompactNavigationBar::~CompactNavigationBar() { +} + +void CompactNavigationBar::Init() { + DCHECK(!initialized_); + initialized_ = true; + + ResourceBundle& resource_bundle = ResourceBundle::GetSharedInstance(); + + chrome_button_ = new views::ImageButton(this); + chrome_button_->SetImage(views::CustomButton::BS_NORMAL, + resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_CHROME)); + chrome_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, + views::ImageButton::ALIGN_MIDDLE); + AddChildView(chrome_button_); + + back_button_ = new views::ImageButton(this); + back_button_->SetImage(views::CustomButton::BS_NORMAL, + resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_BACK)); + back_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, + views::ImageButton::ALIGN_MIDDLE); + AddChildView(back_button_); + + bf_separator_ = new views::ImageView; + bf_separator_->SetImage( + resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_SEPARATOR)); + AddChildView(bf_separator_); + + forward_button_ = new views::ImageButton(this); + forward_button_->SetImage(views::CustomButton::BS_NORMAL, + resource_bundle.GetBitmapNamed(IDR_COMPACTNAV_FORWARD)); + forward_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, + views::ImageButton::ALIGN_MIDDLE); + AddChildView(forward_button_); + + // URL bar construction. + location_entry_.reset(new AutocompleteEditViewGtk( + this, browser_->toolbar_model(), browser_->profile(), + browser_->command_updater(), false, this)); + location_entry_->Init(); + gtk_widget_show_all(location_entry_->widget()); + gtk_widget_hide(location_entry_->widget()); + + location_entry_view_ = new views::NativeViewHost; + AddChildView(location_entry_view_); + location_entry_view_->set_focus_view(this); + location_entry_view_->Attach(location_entry_->widget()); +} + +gfx::Size CompactNavigationBar::GetPreferredSize() { + int width = 0; + + width += kChromeButtonSize + kHorizPadding; // Chrome button. + width += kURLWidth + kHorizPadding; // URL bar. + width += back_button_->GetPreferredSize().width() + kHorizPadding + + kInnerPadding * 2; + width += bf_separator_->GetPreferredSize().width() + kHorizPadding; + width += forward_button_->GetPreferredSize().width() + kHorizPadding + + kInnerPadding * 2; + + return gfx::Size(width, kChromeButtonSize); +} + +void CompactNavigationBar::Layout() { + if (!initialized_) + return; + + int curx = 0; + + // Make the chrome button square since it looks better that way. + chrome_button_->SetBounds(curx, 0, kChromeButtonSize, kChromeButtonSize); + curx += kChromeButtonSize + kHorizPadding; + + // URL bar. + location_entry_view_->SetBounds(curx, 0, kURLWidth, height()); + curx += kURLWidth + kHorizPadding; + + // "Back | Forward" section. + gfx::Size button_size = back_button_->GetPreferredSize(); + button_size.set_width(button_size.width() + kInnerPadding * 2); + back_button_->SetBounds(curx, 1, button_size.width(), height() - 1); + curx += button_size.width() + kHorizPadding; + + button_size = bf_separator_->GetPreferredSize(); + bf_separator_->SetBounds(curx, 1, button_size.width(), height() - 1); + curx += button_size.width() + kHorizPadding; + + button_size = forward_button_->GetPreferredSize(); + button_size.set_width(button_size.width() + kInnerPadding * 2); + forward_button_->SetBounds(curx, 1, button_size.width(), height() - 1); + curx += button_size.width() + kHorizPadding; +} + +void CompactNavigationBar::Paint(gfx::Canvas* canvas) { + ThemeProvider* theme = browser_->profile()->GetThemeProvider(); + + // Fill the background. + SkBitmap* background = theme->GetBitmapNamed(IDR_THEME_FRAME); + canvas->TileImageInt(*background, 0, 0, width(), height()); +} + +void CompactNavigationBar::ButtonPressed(views::Button* sender) { + TabContents* tab_contents = browser_->GetSelectedTabContents(); + if (!tab_contents) + return; + + if (sender == chrome_button_) { + NOTIMPLEMENTED(); // TODO(brettw) hook this up to something. + } else if (sender == back_button_) { + if (tab_contents->controller().CanGoBack()) + tab_contents->controller().GoBack(); + } else if (sender == forward_button_) { + if (tab_contents->controller().CanGoForward()) + tab_contents->controller().GoForward(); + } else { + NOTREACHED(); + } +} + +void CompactNavigationBar::OnAutocompleteAccept( + const GURL& url, + WindowOpenDisposition disposition, + PageTransition::Type transition, + const GURL& alternate_nav_url) { + // Add the new tab at the first non-pinned location. + int index = browser_->tabstrip_model()->IndexOfFirstNonPinnedTab(); + browser_->AddTabWithURL(url, GURL(), PageTransition::TYPED, + true, index, true, NULL); +} + +void CompactNavigationBar::OnChanged() { + // Other one does "DoLayout" here. +} + +void CompactNavigationBar::OnInputInProgress(bool in_progress) { +} + +SkBitmap CompactNavigationBar::GetFavIcon() const { + return SkBitmap(); +} + +std::wstring CompactNavigationBar::GetTitle() const { + return std::wstring(); +} + +gfx::Rect CompactNavigationBar::GetPopupBounds() const { + gfx::Point upper_left(0, height()); + ConvertPointToScreen(this, &upper_left); + return gfx::Rect(upper_left.x(), upper_left.y(), 700, 100); +} diff --git a/chrome/browser/views/compact_navigation_bar.h b/chrome/browser/views/compact_navigation_bar.h new file mode 100644 index 0000000..02cb5d4 --- /dev/null +++ b/chrome/browser/views/compact_navigation_bar.h @@ -0,0 +1,76 @@ +// Copyright (c) 2009 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_VIEWS_COMPACT_NAVIGATION_BAR_H_ +#define CHROME_BROWSER_VIEWS_COMPACT_NAVIGATION_BAR_H_ + +#include "base/basictypes.h" +#include "base/scoped_ptr.h" +#include "chrome/browser/autocomplete/autocomplete_edit.h" +#include "chrome/browser/autocomplete/autocomplete_popup_view.h" +#include "views/controls/button/button.h" +#include "views/view.h" + +class AutocompleteEditViewGtk; +class Browser; + +namespace views { +class ImageButton; +class ImageView; +class NativeViewHost; +} + +// This class provides a small navigation bar that includes back, forward, and +// a small text entry box. +class CompactNavigationBar : public views::View, + public views::ButtonListener, + public AutocompleteEditController, + public AutocompletePopupPositioner { + public: + explicit CompactNavigationBar(Browser* browser); + virtual ~CompactNavigationBar(); + + // Must be called before anything else, but after adding this view to the + // widget. + void Init(); + + // views::View overrides. + virtual gfx::Size GetPreferredSize(); + virtual void Layout(); + virtual void Paint(gfx::Canvas* canvas); + + private: + // views::ButtonListener implementation. + virtual void ButtonPressed(views::Button* sender); + + // AutocompleteController implementation. + virtual void OnAutocompleteAccept(const GURL& url, + WindowOpenDisposition disposition, + PageTransition::Type transition, + const GURL& alternate_nav_url); + virtual void OnChanged(); + virtual void OnInputInProgress(bool in_progress); + virtual SkBitmap GetFavIcon() const; + virtual std::wstring GetTitle() const; + + // AutocompletePopupPositioner implementation. + virtual gfx::Rect GetPopupBounds() const; + + Browser* browser_; + + bool initialized_; + + views::ImageButton* chrome_button_; + + views::ImageButton* back_button_; + views::ImageView* bf_separator_; + views::ImageButton* forward_button_; + + scoped_ptr<AutocompleteEditViewGtk> location_entry_; + views::NativeViewHost* location_entry_view_; + + DISALLOW_COPY_AND_ASSIGN(CompactNavigationBar); +}; + +#endif // CHROME_BROWSER_VIEWS_COMPACT_NAVIGATION_BAR_H_ diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc index 85b8999..84cbf69 100644 --- a/chrome/browser/views/frame/browser_view.cc +++ b/chrome/browser/views/frame/browser_view.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 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. diff --git a/chrome/browser/views/frame/status_area_view.cc b/chrome/browser/views/frame/status_area_view.cc new file mode 100644 index 0000000..c574247 --- /dev/null +++ b/chrome/browser/views/frame/status_area_view.cc @@ -0,0 +1,243 @@ +// Copyright (c) 2009 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. + +#include "chrome/browser/views/frame/status_area_view.h" + +#include <algorithm> + +#include "app/gfx/canvas.h" +#include "app/gfx/font.h" +#include "app/l10n_util.h" +#include "app/resource_bundle.h" +#include "app/theme_provider.h" +#include "base/string_util.h" +#include "base/time.h" +#include "base/timer.h" +#include "chrome/app/chrome_dll_resource.h" +#include "chrome/browser/browser.h" +#include "chrome/browser/profile.h" +#include "grit/chromium_strings.h" +#include "grit/generated_resources.h" +#include "grit/theme_resources.h" +#include "views/controls/button/menu_button.h" +#include "views/controls/image_view.h" +#include "views/controls/menu/menu.h" +#include "views/controls/menu/simple_menu_model.h" + +namespace { + +// Number of pixels to separate adjacent status items. +const int kStatusItemSeparation = 1; + +class ClockView : public views::View { + public: + ClockView(); + virtual ~ClockView(); + + // views::View* overrides. + virtual gfx::Size GetPreferredSize(); + virtual void Paint(gfx::Canvas* canvas); + + private: + // Schedules the timer to fire at the next minute interval. + void SetNextTimer(); + + // Schedules a paint when the timer goes off. + void OnTimer(); + + gfx::Font font_; + + base::OneShotTimer<ClockView> timer_; + + DISALLOW_COPY_AND_ASSIGN(ClockView); +}; + +// Amount of slop to add into the timer to make sure we're into the next minute +// when the timer goes off. +const int kTimerSlopSeconds = 1; + +ClockView::ClockView() + : font_(ResourceBundle::GetSharedInstance().GetFont( + ResourceBundle::BaseFont)) { + SetNextTimer(); +} + +ClockView::~ClockView() { +} + +gfx::Size ClockView::GetPreferredSize() { + return gfx::Size(40, 10); +} + +void ClockView::Paint(gfx::Canvas* canvas) { + base::Time now = base::Time::Now(); + base::Time::Exploded now_exploded; + now.LocalExplode(&now_exploded); + + std::wstring time_string = StringPrintf(L"%d:%d", + now_exploded.hour, + now_exploded.minute); + canvas->DrawStringInt(time_string, font_, SK_ColorWHITE, 0, 0, + width(), height(), gfx::Canvas::TEXT_ALIGN_CENTER); +} + +void ClockView::SetNextTimer() { + // Try to set the timer to go off at the next change of the minute. We don't + // want to have the timer go off more than necessary since that will cause + // the CPU to wake up and consume power. + base::Time now = base::Time::Now(); + base::Time::Exploded exploded; + now.LocalExplode(&exploded); + + // Often this will be called at minute boundaries, and we'll actually want + // 60 seconds from now. + int seconds_left = 60 - exploded.second; + if (seconds_left == 0) + seconds_left = 60; + + // Make sure that the timer fires on the next minute. Without this, if it is + // called just a teeny bit early, then it will skip the next minute. + seconds_left += kTimerSlopSeconds; + + timer_.Start(base::TimeDelta::FromSeconds(seconds_left), + this, &ClockView::OnTimer); +} + +void ClockView::OnTimer() { + SchedulePaint(); + SetNextTimer(); +} + +} // namespace + +StatusAreaView::StatusAreaView(Browser* browser) + : browser_(browser), + battery_view_(NULL), + menu_view_(NULL) { +} + +StatusAreaView::~StatusAreaView() { +} + +void StatusAreaView::Init() { + ResourceBundle& resource_bundle = ResourceBundle::GetSharedInstance(); + + // Battery. + battery_view_ = new views::ImageView; + battery_view_->SetImage( + resource_bundle.GetBitmapNamed(IDR_STATUSBAR_BATTERY)); + AddChildView(battery_view_); + + // Clock. + AddChildView(new ClockView); + + // Menu. + menu_view_ = new views::MenuButton(NULL, std::wstring(), this, false); + menu_view_->SetIcon(*resource_bundle.GetBitmapNamed(IDR_STATUSBAR_MENU)); + AddChildView(menu_view_); +} + +gfx::Size StatusAreaView::GetPreferredSize() { + int result_w = kStatusItemSeparation; // Left border. + int result_h = 0; + for (int i = 0; i < GetChildViewCount(); i++) { + gfx::Size cur_size = GetChildViewAt(i)->GetPreferredSize(); + result_w += cur_size.width() + kStatusItemSeparation; + result_h = std::max(result_h, cur_size.height()); + } + result_w -= kStatusItemSeparation; // Don't have space after the last one. + + // TODO(brettw) do we need to use result_h? This is currently hardcoded + // becuase the menu button really wants to be larger, but we don't want + // the status bar to force the whole tab strip to be larger. Making it + // "small" just means that we'll expand to the height, which we want. + return gfx::Size(result_w - kStatusItemSeparation, 10); +} + +void StatusAreaView::Layout() { + int cur_x = 0; + for (int i = 0; i < GetChildViewCount(); i++) { + views::View* cur = GetChildViewAt(i); + gfx::Size cur_size = cur->GetPreferredSize(); + + // Put next in row horizontally, and center vertically. + cur->SetBounds(cur_x, (height() - cur_size.height()) / 2, + cur_size.width(), cur_size.height()); + cur_x += cur_size.width() + kStatusItemSeparation; + } +} + +void StatusAreaView::Paint(gfx::Canvas* canvas) { + ThemeProvider* theme = browser_->profile()->GetThemeProvider(); + + // Fill the background. + SkBitmap* background = theme->GetBitmapNamed(IDR_THEME_FRAME); + canvas->TileImageInt(*background, 0, 0, width(), height()); +} + +void StatusAreaView::CreateAppMenu() { + if (app_menu_contents_.get()) + return; + + app_menu_contents_.reset(new views::SimpleMenuModel(this)); + app_menu_contents_->AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB); + app_menu_contents_->AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW); + app_menu_contents_->AddItemWithStringId(IDC_NEW_INCOGNITO_WINDOW, + IDS_NEW_INCOGNITO_WINDOW); + app_menu_contents_->AddSeparator(); + app_menu_contents_->AddCheckItemWithStringId(IDC_SHOW_BOOKMARK_BAR, + IDS_SHOW_BOOKMARK_BAR); + app_menu_contents_->AddItemWithStringId(IDC_FULLSCREEN, IDS_FULLSCREEN); + app_menu_contents_->AddSeparator(); + app_menu_contents_->AddItemWithStringId(IDC_SHOW_HISTORY, IDS_SHOW_HISTORY); + app_menu_contents_->AddItemWithStringId(IDC_SHOW_BOOKMARK_MANAGER, + IDS_BOOKMARK_MANAGER); + app_menu_contents_->AddItemWithStringId(IDC_SHOW_DOWNLOADS, + IDS_SHOW_DOWNLOADS); + app_menu_contents_->AddSeparator(); + app_menu_contents_->AddItemWithStringId(IDC_CLEAR_BROWSING_DATA, + IDS_CLEAR_BROWSING_DATA); + app_menu_contents_->AddItemWithStringId(IDC_IMPORT_SETTINGS, + IDS_IMPORT_SETTINGS); + app_menu_contents_->AddSeparator(); + app_menu_contents_->AddItem(IDC_OPTIONS, + l10n_util::GetStringFUTF16( + IDS_OPTIONS, + l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))); + app_menu_contents_->AddItem(IDC_ABOUT, + l10n_util::GetStringFUTF16( + IDS_ABOUT, + l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))); + app_menu_contents_->AddItemWithStringId(IDC_HELP_PAGE, IDS_HELP_PAGE); + app_menu_contents_->AddSeparator(); + app_menu_contents_->AddItemWithStringId(IDC_EXIT, IDS_EXIT); + + app_menu_menu_.reset(new views::Menu2(app_menu_contents_.get())); +} + +bool StatusAreaView::IsCommandIdChecked(int command_id) const { + return false; +} + +bool StatusAreaView::IsCommandIdEnabled(int command_id) const { + if (command_id == IDC_RESTORE_TAB) + return browser_->CanRestoreTab(); + return browser_->command_updater()->IsCommandEnabled(command_id); +} + +bool StatusAreaView::GetAcceleratorForCommandId( + int command_id, + views::Accelerator* accelerator) { + return false; +} + +void StatusAreaView::ExecuteCommand(int command_id) { + browser_->ExecuteCommand(command_id); +} + +void StatusAreaView::RunMenu(views::View* source, const gfx::Point& pt, + gfx::NativeView hwnd) { + CreateAppMenu(); + app_menu_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT); +} diff --git a/chrome/browser/views/frame/status_area_view.h b/chrome/browser/views/frame/status_area_view.h new file mode 100644 index 0000000..1be12c8 --- /dev/null +++ b/chrome/browser/views/frame/status_area_view.h @@ -0,0 +1,62 @@ +// Copyright (c) 2009 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_VIEWS_FRAME_STATUS_AREA_VIEW_H_ +#define CHROME_BROWSER_VIEWS_FRAME_STATUS_AREA_VIEW_H_ + +#include "base/basictypes.h" +#include "views/controls/menu/simple_menu_model.h" +#include "views/controls/menu/view_menu_delegate.h" +#include "views/view.h" + +class Browser; + +namespace views { +class MenuButton; +class ImageView; +} + +// This class is used to wrap the small informative widgets in the upper-right +// of the window title bar. It is used on ChromeOS only. +class StatusAreaView : public views::View, + public views::SimpleMenuModel::Delegate, + public views::ViewMenuDelegate { + public: + StatusAreaView(Browser* browser); + virtual ~StatusAreaView(); + + void Init(); + + // views::View* overrides. + virtual gfx::Size GetPreferredSize(); + virtual void Layout(); + virtual void Paint(gfx::Canvas* canvas); + + private: + void CreateAppMenu(); + + // views::SimpleMenuModel::Delegate implementation. + virtual bool IsCommandIdChecked(int command_id) const; + virtual bool IsCommandIdEnabled(int command_id) const; + virtual bool GetAcceleratorForCommandId(int command_id, + views::Accelerator* accelerator); + virtual void ExecuteCommand(int command_id); + + // views::ViewMenuDelegate implementation. + virtual void RunMenu(views::View* source, const gfx::Point& pt, + gfx::NativeView hwnd); + + // The browser window that owns us. + Browser* browser_; + + views::ImageView* battery_view_; + views::MenuButton* menu_view_; + + scoped_ptr<views::SimpleMenuModel> app_menu_contents_; + scoped_ptr<views::Menu2> app_menu_menu_; + + DISALLOW_COPY_AND_ASSIGN(StatusAreaView); +}; + +#endif // CHROME_BROWSER_VIEWS_FRAME_STATUS_AREA_VIEW_H_ diff --git a/chrome/browser/views/location_bar_view.h b/chrome/browser/views/location_bar_view.h index 1ab1811..3be0266 100644 --- a/chrome/browser/views/location_bar_view.h +++ b/chrome/browser/views/location_bar_view.h @@ -238,8 +238,8 @@ class LocationBarView : public LocationBar, class ShowFirstRunBubbleTask; class LocationBarImageView : public views::ImageView, - public InfoBubbleDelegate { - public: + public InfoBubbleDelegate { + public: LocationBarImageView(); virtual ~LocationBarImageView(); @@ -254,10 +254,10 @@ class LocationBarView : public LocationBar, virtual void ShowInfoBubble() = 0; - protected: + protected: void ShowInfoBubbleImpl(const std::wstring& text, SkColor text_color); - private: + private: friend class ShowInfoBubbleTask; // The currently shown info bubble if any. @@ -319,7 +319,7 @@ class LocationBarView : public LocationBar, // PageActionImageView is used to display the icon for a given PageAction // and notify the extension when the icon is clicked. class PageActionImageView : public LocationBarImageView { - public: + public: PageActionImageView( LocationBarView* owner, Profile* profile, const PageAction* page_action); @@ -339,7 +339,7 @@ class LocationBarView : public LocationBar, // A callback for when the image has loaded. void OnImageLoaded(SkBitmap* image, size_t index); - private: + private: // We load the images for the PageActions on the file thread. These tasks // help with that. class LoadImageTask; |