Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(798)

Unified Diff: chrome/browser/views/location_bar_view.cc

Issue 1056002: Omnibox M5 work, part 1: Security changes... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/views/location_bar_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/location_bar_view.cc
===================================================================
--- chrome/browser/views/location_bar_view.cc (revision 42491)
+++ chrome/browser/views/location_bar_view.cc (working copy)
@@ -57,10 +57,6 @@
static const SkBitmap* kPopupBackground = NULL;
-// The delay the mouse has to be hovering over the lock/warning icon before the
-// info bubble is shown.
-static const int kInfoBubbleHoverDelayMs = 500;
-
// The tab key image.
static const SkBitmap* kTabButtonBitmap = NULL;
@@ -139,11 +135,11 @@
model_(model),
delegate_(delegate),
disposition_(CURRENT_TAB),
+ security_image_view_(this),
location_entry_view_(NULL),
selected_keyword_view_(profile),
keyword_hint_view_(profile),
type_to_search_view_(l10n_util::GetString(IDS_OMNIBOX_EMPTY_TEXT)),
- security_image_view_(this, profile, model, bubble_positioner),
popup_window_mode_(popup_window_mode),
first_run_bubble_(this),
bubble_positioner_(bubble_positioner) {
@@ -170,46 +166,39 @@
font_ = font_.DeriveFont(3);
}
+ AddChildView(&security_image_view_);
+ security_image_view_.SetVisible(false);
+ security_image_view_.set_parent_owned(false);
+
// URL edit field.
// View container for URL edit field.
#if defined(OS_WIN)
- views::Widget* widget = GetWidget();
location_entry_.reset(new AutocompleteEditViewWin(font_, this, model_, this,
- widget->GetNativeView(),
- profile_, command_updater_,
- popup_window_mode_,
- bubble_positioner_));
+ GetWidget()->GetNativeView(), profile_, command_updater_,
+ popup_window_mode_, bubble_positioner_));
#else
location_entry_.reset(new AutocompleteEditViewGtk(this, model_, profile_,
- command_updater_,
- popup_window_mode_,
- bubble_positioner_));
+ command_updater_, popup_window_mode_, bubble_positioner_));
location_entry_->Init();
// Make all the children of the widget visible. NOTE: this won't display
// anything, it just toggles the visible flag.
- gtk_widget_show_all(location_entry_->widget());
+ gtk_widget_show_all(location_entry_->GetNativeView());
// Hide the widget. NativeViewHostGtk will make it visible again as
// necessary.
- gtk_widget_hide(location_entry_->widget());
+ gtk_widget_hide(location_entry_->GetNativeView());
#endif
location_entry_view_ = new views::NativeViewHost;
location_entry_view_->SetID(VIEW_ID_AUTOCOMPLETE);
AddChildView(location_entry_view_);
location_entry_view_->set_focus_view(this);
- location_entry_view_->Attach(
-#if defined(OS_WIN)
- location_entry_->m_hWnd
-#else
- location_entry_->widget()
-#endif
- ); // NOLINT
+ location_entry_view_->Attach(location_entry_->GetNativeView());
AddChildView(&selected_keyword_view_);
selected_keyword_view_.SetFont(font_);
selected_keyword_view_.SetVisible(false);
selected_keyword_view_.set_parent_owned(false);
- SkColor dimmed_text = GetColor(false, DEEMPHASIZED_TEXT);
+ SkColor dimmed_text = GetColor(ToolbarModel::NONE, DEEMPHASIZED_TEXT);
AddChildView(&type_to_search_view_);
type_to_search_view_.SetVisible(false);
@@ -223,9 +212,9 @@
keyword_hint_view_.SetColor(dimmed_text);
keyword_hint_view_.set_parent_owned(false);
- AddChildView(&security_image_view_);
- security_image_view_.SetVisible(false);
- security_image_view_.set_parent_owned(false);
+ AddChildView(&security_info_label_);
+ security_info_label_.SetVisible(false);
+ security_info_label_.set_parent_owned(false);
for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) {
ContentSettingImageView* content_blocked_view =
@@ -236,10 +225,6 @@
content_blocked_view->SetVisible(false);
}
- AddChildView(&info_label_);
- info_label_.SetVisible(false);
- info_label_.set_parent_owned(false);
-
// Notify us when any ancestor is resized. In this case we want to tell the
// AutocompleteEditView to close its popup.
SetNotifyWhenVisibleBoundsInRootChanges(true);
@@ -256,60 +241,66 @@
}
// static
-SkColor LocationBarView::GetColor(bool is_secure, ColorKind kind) {
- enum SecurityState {
- NOT_SECURE = 0,
- SECURE,
- NUM_STATES
- };
-
- static bool initialized = false;
- static SkColor colors[NUM_STATES][NUM_KINDS];
- if (!initialized) {
+SkColor LocationBarView::GetColor(ToolbarModel::SecurityLevel security_level,
+ ColorKind kind) {
+ switch (kind) {
#if defined(OS_WIN)
- colors[NOT_SECURE][BACKGROUND] = color_utils::GetSysSkColor(COLOR_WINDOW);
- colors[NOT_SECURE][TEXT] = color_utils::GetSysSkColor(COLOR_WINDOWTEXT);
- colors[NOT_SECURE][SELECTED_TEXT] =
- color_utils::GetSysSkColor(COLOR_HIGHLIGHTTEXT);
+ case BACKGROUND: return color_utils::GetSysSkColor(COLOR_WINDOW);
+ case TEXT: return color_utils::GetSysSkColor(COLOR_WINDOWTEXT);
+ case SELECTED_TEXT: return color_utils::GetSysSkColor(COLOR_HIGHLIGHTTEXT);
#else
// TODO(beng): source from theme provider.
- colors[NOT_SECURE][BACKGROUND] = SK_ColorWHITE;
- colors[NOT_SECURE][TEXT] = SK_ColorBLACK;
- colors[NOT_SECURE][SELECTED_TEXT] = SK_ColorWHITE;
+ case BACKGROUND: return SK_ColorWHITE;
+ case TEXT: return SK_ColorBLACK;
+ case SELECTED_TEXT: return SK_ColorWHITE;
#endif
- colors[SECURE][BACKGROUND] = SkColorSetRGB(255, 245, 195);
- colors[SECURE][TEXT] = SK_ColorBLACK;
- colors[SECURE][SELECTED_TEXT] = 0; // Unused
- colors[NOT_SECURE][DEEMPHASIZED_TEXT] =
- color_utils::AlphaBlend(colors[NOT_SECURE][TEXT],
- colors[NOT_SECURE][BACKGROUND], 128);
- colors[SECURE][DEEMPHASIZED_TEXT] =
- color_utils::AlphaBlend(colors[SECURE][TEXT],
- colors[SECURE][BACKGROUND], 128);
- colors[NOT_SECURE][SECURITY_TEXT] = color_utils::GetReadableColor(
- SkColorSetRGB(200, 0, 0), colors[NOT_SECURE][BACKGROUND]);
- colors[SECURE][SECURITY_TEXT] = SkColorSetRGB(0, 150, 20);
- colors[NOT_SECURE][SECURITY_INFO_BUBBLE_TEXT] =
- colors[NOT_SECURE][SECURITY_TEXT];
- colors[SECURE][SECURITY_INFO_BUBBLE_TEXT] = color_utils::GetReadableColor(
- SkColorSetRGB(0, 153, 51), colors[NOT_SECURE][BACKGROUND]);
- colors[NOT_SECURE][SCHEME_STRIKEOUT] = color_utils::GetReadableColor(
- SkColorSetRGB(210, 0, 0), colors[NOT_SECURE][BACKGROUND]);
- colors[SECURE][SCHEME_STRIKEOUT] = 0; // Unused
- initialized = true;
- }
- return colors[is_secure ? SECURE : NOT_SECURE][kind];
+ case DEEMPHASIZED_TEXT:
+ return color_utils::AlphaBlend(GetColor(security_level, TEXT),
+ GetColor(security_level, BACKGROUND), 128);
+
+ case SECURITY_TEXT: {
+ SkColor color;
+ switch (security_level) {
+ case ToolbarModel::EV_SECURE:
+ color = SkColorSetRGB(7, 149, 0);
+ break;
+
+ case ToolbarModel::SECURE:
+ case ToolbarModel::SECURITY_WARNING:
+ color = SkColorSetRGB(0, 14, 149);
+ break;
+
+ case ToolbarModel::SECURITY_ERROR:
+ color = SkColorSetRGB(162, 0, 0);
+ break;
+
+ default:
+ NOTREACHED();
+ return GetColor(security_level, TEXT);
+ }
+ return color_utils::GetReadableColor(color, GetColor(security_level,
+ BACKGROUND));
+ }
+
+ default:
+ NOTREACHED();
+ return GetColor(security_level, TEXT);
+ }
}
void LocationBarView::Update(const TabContents* tab_for_state_restoring) {
- SetSecurityIcon(model_->GetIcon());
+ security_image_view_.SetSecurityIcon(model_->GetSecurityIcon());
+ // The visibility of the |security_info_label_| will be set during layout.
+ std::wstring security_info_text(model_->GetSecurityInfoText());
+ security_info_label_.SetText(security_info_text);
+ if (!security_info_text.empty()) {
+ security_info_label_.SetColor(GetColor(model_->GetSecurityLevel(),
+ SECURITY_TEXT));
+ }
+
RefreshContentSettingViews();
RefreshPageActionViews();
- std::wstring info_text, info_tooltip;
- ToolbarModel::InfoTextType info_text_type =
- model_->GetInfoText(&info_text, &info_tooltip);
- SetInfoText(info_text, info_text_type, info_tooltip);
location_entry_->Update(tab_for_state_restoring);
Layout();
SchedulePaint();
@@ -362,7 +353,6 @@
for (ContentSettingViews::const_iterator i(content_setting_views_.begin());
i != content_setting_views_.end(); ++i)
(*i)->set_profile(profile);
- security_image_view_.set_profile(profile);
}
}
@@ -419,10 +409,9 @@
canvas->TileImageInt(*background, 0, 0, 0, 0, width(), height());
int top_margin = TopMargin();
- canvas->FillRectInt(
- GetColor(model_->GetSchemeSecurityLevel() == ToolbarModel::SECURE,
- BACKGROUND),
- 0, top_margin, width(), std::max(height() - top_margin - kVertMargin, 0));
+ canvas->FillRectInt(GetColor(ToolbarModel::NONE, BACKGROUND), 0,
+ top_margin, width(),
+ std::max(height() - top_margin - kVertMargin, 0));
}
void LocationBarView::VisibleBoundsInRootChanged() {
@@ -546,6 +535,11 @@
int entry_width = width() - (kEntryPadding * 2);
+ gfx::Size security_image_size;
+ if (security_image_view_.IsVisible()) {
+ security_image_size = security_image_view_.GetPreferredSize();
+ entry_width -= security_image_size.width() + kInnerPadding;
+ }
for (PageActionViews::const_iterator i(page_action_views_.begin());
i != page_action_views_.end(); ++i) {
if ((*i)->IsVisible())
@@ -556,16 +550,6 @@
if ((*i)->IsVisible())
entry_width -= (*i)->GetPreferredSize().width() + kInnerPadding;
}
- gfx::Size security_image_size;
- if (security_image_view_.IsVisible()) {
- security_image_size = security_image_view_.GetPreferredSize();
- entry_width -= security_image_size.width() + kInnerPadding;
- }
- gfx::Size info_label_size;
- if (info_label_.IsVisible()) {
- info_label_size = info_label_.GetPreferredSize();
- entry_width -= (info_label_size.width() + kInnerPadding);
- }
#if defined(OS_WIN)
RECT formatting_rect;
@@ -582,7 +566,7 @@
return;
const int available_width = AvailableWidth(max_edit_width);
bool needs_layout = force_layout;
- needs_layout |= AdjustHints(available_width);
+ needs_layout |= AdjustAutocollapseViews(available_width);
if (!needs_layout)
return;
@@ -591,23 +575,8 @@
int location_y = TopMargin();
int location_height = std::max(height() - location_y - kVertMargin, 0);
- // First set the bounds for the label that appears to the right of the
- // security icon.
+ // Lay out items to the right of the edit field.
int offset = width() - kEntryPadding;
- if (info_label_.IsVisible()) {
- offset -= info_label_size.width();
- info_label_.SetBounds(offset, location_y,
- info_label_size.width(), location_height);
- offset -= kInnerPadding;
- }
- if (security_image_view_.IsVisible()) {
- offset -= security_image_size.width();
- security_image_view_.SetBounds(offset, location_y,
- security_image_size.width(),
- location_height);
- offset -= kInnerPadding;
- }
-
for (PageActionViews::const_iterator i(page_action_views_.begin());
i != page_action_views_.end(); ++i) {
if ((*i)->IsVisible()) {
@@ -630,8 +599,19 @@
offset -= kInnerPadding;
}
}
- gfx::Rect location_bounds(kEntryPadding, location_y, entry_width,
- location_height);
+
+ // Now lay out items to the left of the edit field.
+ offset = kEntryPadding;
+ if (security_image_view_.IsVisible()) {
+ security_image_view_.SetBounds(offset, location_y,
+ security_image_size.width(),
+ location_height);
+ offset = security_image_view_.bounds().right() + kInnerPadding;
+ }
+
+ // Now lay out the edit field and views that autocollapse to give it more
+ // room.
+ gfx::Rect location_bounds(offset, location_y, entry_width, location_height);
if (selected_keyword_view_.IsVisible()) {
LayoutView(true, &selected_keyword_view_, available_width,
&location_bounds);
@@ -642,6 +622,10 @@
LayoutView(false, &type_to_search_view_, available_width,
&location_bounds);
}
+ if (security_info_label_.IsVisible()) {
+ LayoutView(false, &security_info_label_, available_width,
+ &location_bounds);
+ }
location_entry_view_->SetBounds(location_bounds);
if (!force_layout) {
@@ -679,7 +663,7 @@
return (view->width() != size.width());
}
-bool LocationBarView::AdjustHints(int available_width) {
+bool LocationBarView::AdjustAutocollapseViews(int available_width) {
const std::wstring keyword(location_entry_->model()->keyword());
const bool is_keyword_hint(location_entry_->model()->is_keyword_hint());
const bool show_selected_keyword = !keyword.empty() && !is_keyword_hint;
@@ -689,10 +673,17 @@
if (show_search_hint) {
// Only show type to search if all the text fits.
- gfx::Size view_pref = type_to_search_view_.GetPreferredSize();
- show_search_hint = UsePref(view_pref.width(), available_width);
+ gfx::Size preferred_size = type_to_search_view_.GetPreferredSize();
+ show_search_hint = UsePref(preferred_size.width(), available_width);
}
+ bool show_security_info_label = !security_info_label_.GetText().empty();
+ if (show_security_info_label) {
+ // Only show the security info label if all the text fits.
+ gfx::Size preferred_size = security_info_label_.GetPreferredSize();
+ show_security_info_label = UsePref(preferred_size.width(), available_width);
+ }
+
// NOTE: This isn't just one big || statement as ToggleVisibility MUST be
// invoked for each view.
bool needs_layout = false;
@@ -700,6 +691,8 @@
&selected_keyword_view_);
needs_layout |= ToggleVisibility(show_keyword_hint, &keyword_hint_view_);
needs_layout |= ToggleVisibility(show_search_hint, &type_to_search_view_);
+ needs_layout |= ToggleVisibility(show_security_info_label,
+ &security_info_label_);
if (show_selected_keyword) {
if (selected_keyword_view_.keyword() != keyword) {
needs_layout = true;
@@ -725,40 +718,20 @@
gfx::Size view_size = view->GetPreferredSize();
if (!UsePref(view_size.width(), available_width))
view_size = view->GetMinimumSize();
- if (view_size.width() + kInnerPadding < bounds->width()) {
- view->SetVisible(true);
- if (leading) {
- view->SetBounds(bounds->x(), bounds->y(), view_size.width(),
- bounds->height());
- bounds->Offset(view_size.width() + kInnerPadding, 0);
- } else {
- view->SetBounds(bounds->right() - view_size.width(), bounds->y(),
- view_size.width(), bounds->height());
- }
- bounds->set_width(bounds->width() - view_size.width() - kInnerPadding);
- } else {
+ if (view_size.width() + kInnerPadding >= bounds->width()) {
view->SetVisible(false);
+ return;
}
-}
-
-void LocationBarView::SetSecurityIcon(ToolbarModel::Icon icon) {
- switch (icon) {
- case ToolbarModel::LOCK_ICON:
- security_image_view_.SetImageShown(SecurityImageView::LOCK);
- security_image_view_.SetVisible(true);
- break;
- case ToolbarModel::WARNING_ICON:
- security_image_view_.SetImageShown(SecurityImageView::WARNING);
- security_image_view_.SetVisible(true);
- break;
- case ToolbarModel::NO_ICON:
- security_image_view_.SetVisible(false);
- break;
- default:
- NOTREACHED();
- security_image_view_.SetVisible(false);
- break;
+ if (leading) {
+ view->SetBounds(bounds->x(), bounds->y(), view_size.width(),
+ bounds->height());
+ bounds->Offset(view_size.width() + kInnerPadding, 0);
+ } else {
+ view->SetBounds(bounds->right() - view_size.width(), bounds->y(),
+ view_size.width(), bounds->height());
}
+ bounds->set_width(bounds->width() - view_size.width() - kInnerPadding);
+ view->SetVisible(true);
}
void LocationBarView::RefreshContentSettingViews() {
@@ -804,8 +777,7 @@
for (size_t i = 0; i < page_actions.size(); ++i) {
page_action_views_[i] = new PageActionWithBadgeView(
- new PageActionImageView(this, profile_,
- page_actions[i], bubble_positioner_));
+ new PageActionImageView(this, profile_, page_actions[i]));
page_action_views_[i]->SetVisible(false);
AddChildView(page_action_views_[i]);
}
@@ -832,23 +804,12 @@
}
}
-void LocationBarView::SetInfoText(const std::wstring& text,
- ToolbarModel::InfoTextType text_type,
- const std::wstring& tooltip_text) {
- info_label_.SetVisible(!text.empty());
- info_label_.SetText(text);
- if (text_type == ToolbarModel::INFO_EV_TEXT)
- info_label_.SetColor(GetColor(true, SECURITY_TEXT));
- info_label_.SetTooltipText(tooltip_text);
-}
-
bool LocationBarView::ToggleVisibility(bool new_vis, View* view) {
DCHECK(view);
- if (view->IsVisible() != new_vis) {
- view->SetVisible(new_vis);
- return true;
- }
- return false;
+ if (view->IsVisible() == new_vis)
+ return false;
+ view->SetVisible(new_vis);
+ return true;
}
#if defined(OS_WIN)
@@ -872,6 +833,40 @@
}
#endif
+void LocationBarView::ShowFirstRunBubbleInternal(bool use_OEM_bubble) {
+ if (!location_entry_view_)
+ return;
+ if (!location_entry_view_->GetWidget()->IsActive()) {
+ // The browser is no longer active. Let's not show the info bubble, this
+ // would make the browser the active window again.
+ return;
+ }
+
+ gfx::Point location;
+
+ // If the UI layout is RTL, the coordinate system is not transformed and
+ // therefore we need to adjust the X coordinate so that bubble appears on the
+ // right hand side of the location bar.
+ if (UILayoutIsRightToLeft())
+ location.Offset(width(), 0);
+ views::View::ConvertPointToScreen(this, &location);
+
+ // We try to guess that 20 pixels offset is a good place for the first
+ // letter in the OmniBox.
+ gfx::Rect bounds(location.x(), location.y(), 20, height());
+
+ // Moving the bounds "backwards" so that it appears within the location bar
+ // if the UI layout is RTL.
+ if (UILayoutIsRightToLeft())
+ bounds.set_x(location.x() - 20);
+
+#if defined(OS_WIN)
+ FirstRunBubble::Show(profile_, GetWindow(), bounds, use_OEM_bubble);
+#else
+ // First run bubble doesn't make sense for Chrome OS.
+#endif
+}
+
bool LocationBarView::GetAccessibleName(std::wstring* name) {
DCHECK(name);
@@ -893,6 +888,39 @@
accessible_name_.assign(name);
}
+// SecurityImageView------------------------------------------------------------
+
+LocationBarView::SecurityImageView::SecurityImageView(
+ const LocationBarView* parent)
+ : parent_(parent) {
+ SetSecurityIcon(0);
+}
+
+LocationBarView::SecurityImageView::~SecurityImageView() {
+}
+
+void LocationBarView::SecurityImageView::SetSecurityIcon(int icon_id) {
+ if (icon_id == 0) {
+ SetVisible(false);
+ return;
+ }
+
+ SetImage(ResourceBundle::GetSharedInstance().GetBitmapNamed(icon_id));
+ SetVisible(true);
+}
+
+bool LocationBarView::SecurityImageView::OnMousePressed(
+ const views::MouseEvent& event) {
+ TabContents* tab = parent_->GetTabContents();
+ NavigationEntry* nav_entry = tab->controller().GetActiveEntry();
+ if (!nav_entry) {
+ NOTREACHED();
+ return true;
+ }
+ tab->ShowPageInfo(nav_entry->url(), nav_entry->ssl(), true);
+ return true;
+}
+
// SelectedKeywordView -------------------------------------------------------
// The background is drawn using HorizontalPainter. This is the
@@ -1131,214 +1159,6 @@
#endif
}
-// ShowInfoBubbleTask-----------------------------------------------------------
-
-class LocationBarView::ShowInfoBubbleTask : public Task {
- public:
- explicit ShowInfoBubbleTask(
- LocationBarView::LocationBarImageView* image_view);
- virtual void Run();
- void Cancel();
-
- private:
- LocationBarView::LocationBarImageView* image_view_;
- bool cancelled_;
-
- DISALLOW_COPY_AND_ASSIGN(ShowInfoBubbleTask);
-};
-
-LocationBarView::ShowInfoBubbleTask::ShowInfoBubbleTask(
- LocationBarView::LocationBarImageView* image_view)
- : image_view_(image_view),
- cancelled_(false) {
-}
-
-void LocationBarView::ShowInfoBubbleTask::Run() {
- if (cancelled_)
- return;
-
- if (!image_view_->GetWidget()->IsActive()) {
- // The browser is no longer active. Let's not show the info bubble, this
- // would make the browser the active window again. Also makes sure we NULL
- // show_info_bubble_task_ to prevent the SecurityImageView from keeping a
- // dangling pointer.
- image_view_->show_info_bubble_task_ = NULL;
- return;
- }
-
- image_view_->ShowInfoBubble();
-}
-
-void LocationBarView::ShowInfoBubbleTask::Cancel() {
- cancelled_ = true;
-}
-
-// -----------------------------------------------------------------------------
-
-void LocationBarView::ShowFirstRunBubbleInternal(bool use_OEM_bubble) {
- if (!location_entry_view_)
- return;
- if (!location_entry_view_->GetWidget()->IsActive()) {
- // The browser is no longer active. Let's not show the info bubble, this
- // would make the browser the active window again.
- return;
- }
-
- gfx::Point location;
-
- // If the UI layout is RTL, the coordinate system is not transformed and
- // therefore we need to adjust the X coordinate so that bubble appears on the
- // right hand side of the location bar.
- if (UILayoutIsRightToLeft())
- location.Offset(width(), 0);
- views::View::ConvertPointToScreen(this, &location);
-
- // We try to guess that 20 pixels offset is a good place for the first
- // letter in the OmniBox.
- gfx::Rect bounds(location.x(), location.y(), 20, height());
-
- // Moving the bounds "backwards" so that it appears within the location bar
- // if the UI layout is RTL.
- if (UILayoutIsRightToLeft())
- bounds.set_x(location.x() - 20);
-
-#if defined(OS_WIN)
- FirstRunBubble::Show(profile_, GetWindow(), bounds, use_OEM_bubble);
-#else
- // First run bubble doesn't make sense for Chrome OS.
-#endif
-}
-
-// LocationBarImageView---------------------------------------------------------
-
-LocationBarView::LocationBarImageView::LocationBarImageView(
- const BubblePositioner* bubble_positioner)
- : info_bubble_(NULL),
- show_info_bubble_task_(NULL),
- bubble_positioner_(bubble_positioner) {
-}
-
-LocationBarView::LocationBarImageView::~LocationBarImageView() {
- if (show_info_bubble_task_)
- show_info_bubble_task_->Cancel();
-
- if (info_bubble_)
- info_bubble_->Close();
-}
-
-void LocationBarView::LocationBarImageView::OnMouseMoved(
- const views::MouseEvent& event) {
- if (show_info_bubble_task_) {
- show_info_bubble_task_->Cancel();
- show_info_bubble_task_ = NULL;
- }
-
- if (info_bubble_) {
- // If an info bubble is currently showing, nothing to do.
- return;
- }
-
- show_info_bubble_task_ = new ShowInfoBubbleTask(this);
- MessageLoop::current()->PostDelayedTask(FROM_HERE, show_info_bubble_task_,
- kInfoBubbleHoverDelayMs);
-}
-
-void LocationBarView::LocationBarImageView::OnMouseExited(
- const views::MouseEvent& event) {
- if (show_info_bubble_task_) {
- show_info_bubble_task_->Cancel();
- show_info_bubble_task_ = NULL;
- }
-
- if (info_bubble_)
- info_bubble_->Close();
-}
-
-void LocationBarView::LocationBarImageView::InfoBubbleClosing(
- InfoBubble* info_bubble, bool closed_by_escape) {
- info_bubble_ = NULL;
-}
-
-void LocationBarView::LocationBarImageView::ShowInfoBubbleImpl(
- const std::wstring& text, SkColor text_color) {
- gfx::Rect bounds(bubble_positioner_->GetLocationStackBounds());
- gfx::Point location;
- views::View::ConvertPointToScreen(this, &location);
- bounds.set_x(location.x());
- bounds.set_width(width());
-
- views::Label* label = new views::Label(text);
- label->SetMultiLine(true);
- label->SetColor(text_color);
- label->SetFont(ResourceBundle::GetSharedInstance().GetFont(
- ResourceBundle::BaseFont).DeriveFont(2));
- label->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
- label->SizeToFit(0);
- DCHECK(info_bubble_ == NULL);
- info_bubble_ = InfoBubble::Show(GetWindow(), bounds, label, this);
- show_info_bubble_task_ = NULL;
-}
-
-// SecurityImageView------------------------------------------------------------
-
-// static
-SkBitmap* LocationBarView::SecurityImageView::lock_icon_ = NULL;
-SkBitmap* LocationBarView::SecurityImageView::warning_icon_ = NULL;
-
-LocationBarView::SecurityImageView::SecurityImageView(
- const LocationBarView* parent,
- Profile* profile,
- ToolbarModel* model,
- const BubblePositioner* bubble_positioner)
- : LocationBarImageView(bubble_positioner),
- parent_(parent),
- profile_(profile),
- model_(model) {
- if (!lock_icon_) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- lock_icon_ = rb.GetBitmapNamed(IDR_LOCK);
- warning_icon_ = rb.GetBitmapNamed(IDR_WARNING);
- }
- SetImageShown(LOCK);
-}
-
-LocationBarView::SecurityImageView::~SecurityImageView() {
-}
-
-void LocationBarView::SecurityImageView::SetImageShown(Image image) {
- switch (image) {
- case LOCK:
- SetImage(lock_icon_);
- break;
- case WARNING:
- SetImage(warning_icon_);
- break;
- default:
- NOTREACHED();
- break;
- }
-}
-
-bool LocationBarView::SecurityImageView::OnMousePressed(
- const views::MouseEvent& event) {
- TabContents* tab = parent_->GetTabContents();
- NavigationEntry* nav_entry = tab->controller().GetActiveEntry();
- if (!nav_entry) {
- NOTREACHED();
- return true;
- }
- tab->ShowPageInfo(nav_entry->url(), nav_entry->ssl(), true);
- return true;
-}
-
-void LocationBarView::SecurityImageView::ShowInfoBubble() {
- std::wstring text;
- model_->GetIconHoverText(&text);
- ShowInfoBubbleImpl(text, GetColor(
- model_->GetSecurityLevel() == ToolbarModel::SECURE,
- SECURITY_INFO_BUBBLE_TEXT));
-}
-
// ContentSettingImageView------------------------------------------------------
LocationBarView::ContentSettingImageView::ContentSettingImageView(
@@ -1364,16 +1184,16 @@
const TabContents* tab_contents) {
int old_icon = content_setting_image_model_->get_icon();
content_setting_image_model_->UpdateFromTabContents(tab_contents);
- if (content_setting_image_model_->is_visible()) {
- if (old_icon != content_setting_image_model_->get_icon()) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- SetImage(rb.GetBitmapNamed(content_setting_image_model_->get_icon()));
- }
- SetTooltipText(UTF8ToWide(content_setting_image_model_->get_tooltip()));
- SetVisible(true);
- } else {
+ if (!content_setting_image_model_->is_visible()) {
SetVisible(false);
+ return;
}
+ if (old_icon != content_setting_image_model_->get_icon()) {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ SetImage(rb.GetBitmapNamed(content_setting_image_model_->get_icon()));
+ }
+ SetTooltipText(UTF8ToWide(content_setting_image_model_->get_tooltip()));
+ SetVisible(true);
}
bool LocationBarView::ContentSettingImageView::OnMousePressed(
@@ -1421,10 +1241,8 @@
LocationBarView::PageActionImageView::PageActionImageView(
LocationBarView* owner,
Profile* profile,
- ExtensionAction* page_action,
- const BubblePositioner* bubble_positioner)
- : LocationBarImageView(bubble_positioner),
- owner_(owner),
+ ExtensionAction* page_action)
+ : owner_(owner),
profile_(profile),
page_action_(page_action),
ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)),
@@ -1505,13 +1323,6 @@
}
}
-void LocationBarView::PageActionImageView::OnMouseMoved(
- const views::MouseEvent& event) {
- // PageActionImageView uses normal tooltips rather than the info bubble,
- // so just do nothing here rather than letting LocationBarImageView start
- // its hover timer.
-}
-
bool LocationBarView::PageActionImageView::OnMousePressed(
const views::MouseEvent& event) {
// We are interested in capturing mouse messages, but we want want to wait
@@ -1552,10 +1363,6 @@
ExecuteAction(button, false); // inspect_with_devtools
}
-void LocationBarView::PageActionImageView::ShowInfoBubble() {
- ShowInfoBubbleImpl(ASCIIToWide(tooltip_), GetColor(false, TEXT));
-}
-
void LocationBarView::PageActionImageView::OnImageLoaded(
SkBitmap* image, ExtensionResource resource, int index) {
// We loaded icons()->size() icons, plus one extra if the page action had
« no previous file with comments | « chrome/browser/views/location_bar_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698