diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-30 00:19:18 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-30 00:19:18 +0000 |
commit | 66ee443252fd759c5e20cb93be1e90a732da0ebe (patch) | |
tree | 5ee39c6ee0c62c8feba5103836a36d28203b7b54 /chrome/browser/cocoa | |
parent | cbadedd7a2cdc20a745ff8b51922b2533169f7b0 (diff) | |
download | chromium_src-66ee443252fd759c5e20cb93be1e90a732da0ebe.zip chromium_src-66ee443252fd759c5e20cb93be1e90a732da0ebe.tar.gz chromium_src-66ee443252fd759c5e20cb93be1e90a732da0ebe.tar.bz2 |
Show the location bar icon (almost) all the time, and have its contents match what the user is doing.
There are a couple major moving parts here:
* Change AutocompletePopupModel::URLsForCurrentText() to InfoForCurrentText() and have it return an AutocompleteMatch, which callers can use to parse out whatever they want. I needed to get at the match type for the current text and found the proliferation of arguments here ridiculous. This had major ripple effects throughout the codebase, including changing the name and location of SearchVersusNavigateClassifier as it no longer had an "is_search" parameter directly, so the name became misleading and too narrow. I also ended up adding a null constructor for AutocompleteMatch because it was too cumbersome otherwise.
* Change the name of the "SecurityImageView" (or similar) to reflect its broader purpose, and plumb it to the edit to get an icon instead of to the toolbar model.
* Add an AutocompleteMatch::Type to icon mapping function, and use it not only in the new code but also to simplify showing the popup contents.
BUG=27570,39725
TEST=An icon should appear next to the address at all times. It should be a globe on non-secure pages, a magnifying glass on the NTP, and a match for whatever the user is typing as he types.
Review URL: http://codereview.chromium.org/1457002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43025 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa')
7 files changed, 114 insertions, 138 deletions
diff --git a/chrome/browser/cocoa/autocomplete_text_field_cell.h b/chrome/browser/cocoa/autocomplete_text_field_cell.h index 32f0590..6b2f156 100644 --- a/chrome/browser/cocoa/autocomplete_text_field_cell.h +++ b/chrome/browser/cocoa/autocomplete_text_field_cell.h @@ -44,10 +44,9 @@ class ExtensionAction; // side of the field. Exclusive WRT |keywordString_|; scoped_nsobject<NSAttributedString> hintString_; - // View showing the state of the SSL connection. Owned by the location bar. - // Display is exclusive WRT the |hintString_| and |keywordString_|. - // This may be NULL during testing. - LocationBarViewMac::SecurityImageView* security_image_view_; + // View showing an icon matching the current text. Owned by the location bar. + // Exclusive WRT |keywordString_|. This may be NULL during testing. + LocationBarViewMac::LocationIconView* location_icon_view_; // List of views showing visible Page Actions. Owned by the location bar. // Display is exclusive WRT the |hintString_| and |keywordString_|. @@ -77,7 +76,7 @@ class ExtensionAction; availableWidth:(CGFloat)width; - (void)clearKeywordAndHint; -- (void)setSecurityImageView:(LocationBarViewMac::SecurityImageView*)view; +- (void)setLocationIconView:(LocationBarViewMac::LocationIconView*)view; - (void)setPageActionViewList:(LocationBarViewMac::PageActionViewList*)list; - (void)setContentSettingViewsList: (LocationBarViewMac::ContentSettingViews*)views; @@ -113,8 +112,8 @@ class ExtensionAction; // Returns the total number of installed Page Actions, visible or not. - (size_t)pageActionCount; -// Returns the portion of the cell to use for displaying the security (SSL lock) -// icon, leaving space for its label if any. -- (NSRect)securityImageFrameForFrame:(NSRect)cellFrame; +// Returns the portion of the cell to use for displaying the location icon, +// leaving space for its label if any. +- (NSRect)locationIconFrameForFrame:(NSRect)cellFrame; @end diff --git a/chrome/browser/cocoa/autocomplete_text_field_cell.mm b/chrome/browser/cocoa/autocomplete_text_field_cell.mm index ecc00b8..5fb7b16 100644 --- a/chrome/browser/cocoa/autocomplete_text_field_cell.mm +++ b/chrome/browser/cocoa/autocomplete_text_field_cell.mm @@ -213,8 +213,8 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) { page_action_views_ = list; } -- (void)setSecurityImageView:(LocationBarViewMac::SecurityImageView*)view { - security_image_view_ = view; +- (void)setLocationIconView:(LocationBarViewMac::LocationIconView*)view { + location_icon_view_ = view; } - (void)setContentSettingViewsList: @@ -273,15 +273,15 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) { return box; } -- (NSRect)securityImageFrameForFrame:(NSRect)cellFrame { - if (!security_image_view_ || !security_image_view_->IsVisible()) { +- (NSRect)locationIconFrameForFrame:(NSRect)cellFrame { + if (!location_icon_view_ || !location_icon_view_->IsVisible()) { return NSZeroRect; } // Calculate the total width occupied by the image, label, and padding. - NSSize imageSize = [security_image_view_->GetImage() size]; + NSSize imageSize = [location_icon_view_->GetImage() size]; CGFloat widthUsed = imageSize.width + kIconHorizontalPad; - NSAttributedString* label = security_image_view_->GetLabel(); + NSAttributedString* label = location_icon_view_->GetLabel(); if (label) { widthUsed += ceil([label size].width) + kHintXOffset; } @@ -404,12 +404,12 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) { - (NSArray*)layedOutIcons:(NSRect)cellFrame { NSMutableArray* result = [NSMutableArray arrayWithCapacity:0]; NSRect iconFrame = cellFrame; - if (security_image_view_ && security_image_view_->IsVisible()) { - NSRect securityImageFrame = [self securityImageFrameForFrame:iconFrame]; + if (location_icon_view_ && location_icon_view_->IsVisible()) { + NSRect locationIconFrame = [self locationIconFrameForFrame:iconFrame]; [result addObject: - [AutocompleteTextFieldIcon iconWithRect:securityImageFrame - view:security_image_view_]]; - iconFrame.size.width -= NSMaxX(iconFrame) - NSMinX(securityImageFrame); + [AutocompleteTextFieldIcon iconWithRect:locationIconFrame + view:location_icon_view_]]; + iconFrame.size.width -= NSMaxX(iconFrame) - NSMinX(locationIconFrame); } const size_t pageActionCount = [self pageActionCount]; diff --git a/chrome/browser/cocoa/autocomplete_text_field_cell_unittest.mm b/chrome/browser/cocoa/autocomplete_text_field_cell_unittest.mm index c400162..60418a0 100644 --- a/chrome/browser/cocoa/autocomplete_text_field_cell_unittest.mm +++ b/chrome/browser/cocoa/autocomplete_text_field_cell_unittest.mm @@ -4,6 +4,7 @@ #import <Cocoa/Cocoa.h> +#include "app/resource_bundle.h" #include "base/scoped_nsobject.h" #import "chrome/browser/cocoa/autocomplete_text_field_cell.h" #import "chrome/browser/cocoa/cocoa_test_helper.h" @@ -44,7 +45,7 @@ class TestPageActionViewList : public LocationBarViewMac::PageActionViewList { class AutocompleteTextFieldCellTest : public CocoaTest { public: - AutocompleteTextFieldCellTest() : security_image_view_(NULL, NULL, NULL), + AutocompleteTextFieldCellTest() : location_icon_view_(NULL), page_action_views_() { // Make sure this is wide enough to play games with the cell // decorations. @@ -58,7 +59,7 @@ class AutocompleteTextFieldCellTest : public CocoaTest { [[AutocompleteTextFieldCell alloc] initTextCell:@"Testing"]); [cell setEditable:YES]; [cell setBordered:YES]; - [cell setSecurityImageView:&security_image_view_]; + [cell setLocationIconView:&location_icon_view_]; [cell setPageActionViewList:&page_action_views_]; [view_ setCell:cell.get()]; @@ -66,7 +67,7 @@ class AutocompleteTextFieldCellTest : public CocoaTest { } NSTextField* view_; - LocationBarViewMac::SecurityImageView security_image_view_; + LocationBarViewMac::LocationIconView location_icon_view_; TestPageActionViewList page_action_views_; }; @@ -200,9 +201,10 @@ TEST_F(AutocompleteTextFieldCellTest, TextFrame) { EXPECT_EQ(NSMaxX(bounds), NSMaxX(textFrame)); EXPECT_TRUE(NSContainsRect(cursorFrame, textFrame)); - // Security icon takes up space on the right - security_image_view_.SetImageShown(IDR_SECURE); - security_image_view_.SetVisible(true); + // Location icon takes up space on the right + location_icon_view_.SetImage( + ResourceBundle::GetSharedInstance().GetNSImageNamed(IDR_SECURE)); + location_icon_view_.SetVisible(true); textFrame = [cell textFrameForFrame:bounds]; EXPECT_FALSE(NSIsEmptyRect(textFrame)); @@ -265,8 +267,9 @@ TEST_F(AutocompleteTextFieldCellTest, DrawingRectForBounds) { EXPECT_TRUE(NSContainsRect(NSInsetRect(textFrame, 1, 1), drawingRect)); EXPECT_TRUE(NSEqualRects(drawingRect, originalDrawingRect)); - security_image_view_.SetImageShown(IDR_SECURE); - security_image_view_.SetVisible(true); + location_icon_view_.SetImage( + ResourceBundle::GetSharedInstance().GetNSImageNamed(IDR_SECURE)); + location_icon_view_.SetVisible(true); textFrame = [cell textFrameForFrame:bounds]; drawingRect = [cell drawingRectForBounds:bounds]; @@ -274,17 +277,18 @@ TEST_F(AutocompleteTextFieldCellTest, DrawingRectForBounds) { EXPECT_TRUE(NSContainsRect(NSInsetRect(textFrame, 1, 1), drawingRect)); } -// Test that the security icon is at the right side of the cell. -TEST_F(AutocompleteTextFieldCellTest, SecurityImageFrame) { +// Test that the location icon is at the right side of the cell. +TEST_F(AutocompleteTextFieldCellTest, LocationIconFrame) { AutocompleteTextFieldCell* cell = static_cast<AutocompleteTextFieldCell*>([view_ cell]); const NSRect bounds([view_ bounds]); - security_image_view_.SetImageShown(IDR_SECURE); + location_icon_view_.SetImage( + ResourceBundle::GetSharedInstance().GetNSImageNamed(IDR_SECURE)); - security_image_view_.SetVisible(false); + location_icon_view_.SetVisible(false); EXPECT_EQ(0u, [[cell layedOutIcons:bounds] count]); - security_image_view_.SetVisible(true); + location_icon_view_.SetVisible(true); NSArray* icons = [cell layedOutIcons:bounds]; ASSERT_EQ(1u, [icons count]); NSRect iconRect = [[icons objectAtIndex:0] rect]; @@ -303,7 +307,7 @@ TEST_F(AutocompleteTextFieldCellTest, SecurityImageFrame) { // Now add a label. NSFont* font = [NSFont controlContentFontOfSize:12.0]; NSColor* color = [NSColor blackColor]; - security_image_view_.SetLabel(@"Label", font, color); + location_icon_view_.SetLabel(@"Label", font, color); icons = [cell layedOutIcons:bounds]; ASSERT_EQ(1u, [icons count]); iconRect = [[icons objectAtIndex:0] rect]; @@ -320,7 +324,7 @@ TEST_F(AutocompleteTextFieldCellTest, SecurityImageFrame) { EXPECT_LE(NSMaxX(textFrame), NSMinX(iconRect)); // Make sure we clear correctly. - security_image_view_.SetVisible(false); + location_icon_view_.SetVisible(false); EXPECT_EQ(0u, [[cell layedOutIcons:bounds] count]); } @@ -347,7 +351,8 @@ TEST_F(AutocompleteTextFieldCellTest, PageActionImageFrame) { AutocompleteTextFieldCell* cell = static_cast<AutocompleteTextFieldCell*>([view_ cell]); const NSRect bounds([view_ bounds]); - security_image_view_.SetImageShown(IDR_SECURE); + location_icon_view_.SetImage( + ResourceBundle::GetSharedInstance().GetNSImageNamed(IDR_SECURE)); TestPageActionImageView page_action_view; // We'll assume that the extensions code enforces icons smaller than the @@ -365,13 +370,13 @@ TEST_F(AutocompleteTextFieldCellTest, PageActionImageFrame) { list.Add(&page_action_view2); [cell setPageActionViewList:&list]; - security_image_view_.SetVisible(false); + location_icon_view_.SetVisible(false); page_action_view.SetVisible(false); page_action_view2.SetVisible(false); EXPECT_TRUE(NSIsEmptyRect([cell pageActionFrameForIndex:0 inFrame:bounds])); EXPECT_TRUE(NSIsEmptyRect([cell pageActionFrameForIndex:1 inFrame:bounds])); - // One page action, no security icon. + // One page action, no lock icon. page_action_view.SetVisible(true); NSRect iconRect0 = [cell pageActionFrameForIndex:0 inFrame:bounds]; @@ -386,9 +391,9 @@ TEST_F(AutocompleteTextFieldCellTest, PageActionImageFrame) { NSRect textFrame = [cell textFrameForFrame:bounds]; EXPECT_LE(NSMaxX(textFrame), NSMinX(iconRect0)); - // Two page actions plus a security icon. + // Two page actions plus a lock icon. page_action_view2.SetVisible(true); - security_image_view_.SetVisible(true); + location_icon_view_.SetVisible(true); NSArray* icons = [cell layedOutIcons:bounds]; EXPECT_EQ(3u, [icons count]); iconRect0 = [cell pageActionFrameForIndex:0 inFrame:bounds]; diff --git a/chrome/browser/cocoa/autocomplete_text_field_unittest.mm b/chrome/browser/cocoa/autocomplete_text_field_unittest.mm index c5ad20f..826dfbe 100644 --- a/chrome/browser/cocoa/autocomplete_text_field_unittest.mm +++ b/chrome/browser/cocoa/autocomplete_text_field_unittest.mm @@ -4,6 +4,7 @@ #import <Cocoa/Cocoa.h> +#include "app/resource_bundle.h" #import "base/cocoa_protocols_mac.h" #include "base/scoped_nsobject.h" #import "chrome/browser/cocoa/autocomplete_text_field.h" @@ -21,12 +22,10 @@ using ::testing::Return; using ::testing::StrictMock; namespace { -class MockSecurityImageView : public LocationBarViewMac::SecurityImageView { +class MockLocationIconView : public LocationBarViewMac::LocationIconView { public: - MockSecurityImageView(LocationBarViewMac* owner, - Profile* profile, - ToolbarModel* model) - : LocationBarViewMac::SecurityImageView(owner, profile, model) {} + MockLocationIconView(LocationBarViewMac* owner) + : LocationBarViewMac::LocationIconView(owner) {} // We can't use gmock's MOCK_METHOD macro, because it doesn't like the // NSRect argument to OnMousePressed. @@ -582,30 +581,32 @@ TEST_F(AutocompleteTextFieldTest, TripleClickSelectsAll) { EXPECT_EQ(selectedRange.length, [[field_ stringValue] length]); } -// Clicking the security icon should call its OnMousePressed. -TEST_F(AutocompleteTextFieldObserverTest, SecurityIconMouseDown) { +// Clicking the location icon should call its OnMousePressed. +TEST_F(AutocompleteTextFieldObserverTest, LocationIconMouseDown) { AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell]; - MockSecurityImageView security_image_view(NULL, NULL, NULL); - [cell setSecurityImageView:&security_image_view]; - security_image_view.SetImageShown(IDR_SECURE); - security_image_view.SetVisible(true); + MockLocationIconView location_icon_view(NULL); + [cell setLocationIconView:&location_icon_view]; + location_icon_view.SetImage( + ResourceBundle::GetSharedInstance().GetNSImageNamed(IDR_SECURE)); + location_icon_view.SetVisible(true); - NSRect iconFrame([cell securityImageFrameForFrame:[field_ bounds]]); + NSRect iconFrame([cell locationIconFrameForFrame:[field_ bounds]]); NSPoint location(NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame))); NSEvent* event(Event(field_, location, NSLeftMouseDown, 1)); [field_ mouseDown:event]; - EXPECT_TRUE(security_image_view.mouse_was_pressed_); + EXPECT_TRUE(location_icon_view.mouse_was_pressed_); } // Clicking a Page Action icon should call its OnMousePressed. TEST_F(AutocompleteTextFieldObserverTest, PageActionMouseDown) { AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell]; - MockSecurityImageView security_image_view(NULL, NULL, NULL); - security_image_view.SetImageShown(IDR_SECURE); - [cell setSecurityImageView:&security_image_view]; + MockLocationIconView location_icon_view(NULL); + location_icon_view.SetImage( + ResourceBundle::GetSharedInstance().GetNSImageNamed(IDR_SECURE)); + [cell setLocationIconView:&location_icon_view]; MockPageActionImageView page_action_view; NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"]; @@ -619,8 +620,8 @@ TEST_F(AutocompleteTextFieldObserverTest, PageActionMouseDown) { list.Add(&page_action_view2); [cell setPageActionViewList:&list]; - // One page action, no security lock. - security_image_view.SetVisible(false); + // One page action, no lock. + location_icon_view.SetVisible(false); page_action_view.SetVisible(true); page_action_view2.SetVisible(false); NSRect iconFrame([cell pageActionFrameForIndex:0 inFrame:[field_ bounds]]); @@ -630,7 +631,7 @@ TEST_F(AutocompleteTextFieldObserverTest, PageActionMouseDown) { [field_ mouseDown:event]; EXPECT_TRUE(page_action_view.MouseWasPressed()); - // Two page actions, no security lock. + // Two page actions, no lock. page_action_view2.SetVisible(true); iconFrame = [cell pageActionFrameForIndex:0 inFrame:[field_ bounds]]; location = NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame)); @@ -646,8 +647,8 @@ TEST_F(AutocompleteTextFieldObserverTest, PageActionMouseDown) { [field_ mouseDown:event]; EXPECT_TRUE(page_action_view.MouseWasPressed()); - // Two page actions plus security lock. - security_image_view.SetVisible(true); + // Two page actions plus lock. + location_icon_view.SetVisible(true); iconFrame = [cell pageActionFrameForIndex:0 inFrame:[field_ bounds]]; location = NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame)); event = Event(field_, location, NSLeftMouseDown, 1); @@ -662,12 +663,12 @@ TEST_F(AutocompleteTextFieldObserverTest, PageActionMouseDown) { [field_ mouseDown:event]; EXPECT_TRUE(page_action_view.MouseWasPressed()); - iconFrame = [cell securityImageFrameForFrame:[field_ bounds]]; + iconFrame = [cell locationIconFrameForFrame:[field_ bounds]]; location = NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame)); event = Event(field_, location, NSLeftMouseDown, 1); [field_ mouseDown:event]; - EXPECT_TRUE(security_image_view.mouse_was_pressed_); + EXPECT_TRUE(location_icon_view.mouse_was_pressed_); } // Test that page action menus are properly returned. diff --git a/chrome/browser/cocoa/location_bar_view_mac.h b/chrome/browser/cocoa/location_bar_view_mac.h index b7f5187..afa4aec 100644 --- a/chrome/browser/cocoa/location_bar_view_mac.h +++ b/chrome/browser/cocoa/location_bar_view_mac.h @@ -173,35 +173,20 @@ class LocationBarViewMac : public AutocompleteEditController, DISALLOW_COPY_AND_ASSIGN(LocationBarImageView); }; - // SecurityImageView is used to display the lock or warning icon when the - // current URL's scheme is https. - class SecurityImageView : public LocationBarImageView { + // LocationIconView is used to display an icon to the left of the address. + class LocationIconView : public LocationBarImageView { public: - SecurityImageView(LocationBarViewMac* owner, - Profile* profile, - ToolbarModel* model); - virtual ~SecurityImageView(); - - // Sets the image to the appropriate icon. - void SetImageShown(int resource_id); + explicit LocationIconView(LocationBarViewMac* owner); + virtual ~LocationIconView(); // Shows the page info dialog. virtual void OnMousePressed(NSRect bounds); private: - // Icons for various states. Lazily loaded the first time they're needed. - scoped_nsobject<NSImage> ev_secure_icon_; - scoped_nsobject<NSImage> secure_icon_; - scoped_nsobject<NSImage> security_warning_icon_; - scoped_nsobject<NSImage> security_error_icon_; - // The location bar view that owns us. LocationBarViewMac* owner_; - Profile* profile_; - ToolbarModel* model_; - - DISALLOW_COPY_AND_ASSIGN(SecurityImageView); + DISALLOW_COPY_AND_ASSIGN(LocationIconView); }; // PageActionImageView is used to display the icon for a given Page Action @@ -374,11 +359,11 @@ class LocationBarViewMac : public AutocompleteEditController, }; private: - // Sets the SSL icon we should be showing. - void SetSecurityIcon(int resource_id); + // Sets the location icon we should be showing. + void SetIcon(int resource_id); - // Sets the label for the SSL icon. - void SetSecurityIconLabel(); + // Sets the label for the SSL state. + void SetSecurityLabel(); // Posts |notification| to the default notification center. void PostNotification(const NSString* notification); @@ -401,8 +386,8 @@ class LocationBarViewMac : public AutocompleteEditController, // The user's desired disposition for how their input should be opened. WindowOpenDisposition disposition_; - // The view that shows the lock/warning when in HTTPS mode. - SecurityImageView security_image_view_; + // A view that shows an icon to the left of the address. + LocationIconView location_icon_view_; // Any installed Page Actions. PageActionViewList page_action_views_; diff --git a/chrome/browser/cocoa/location_bar_view_mac.mm b/chrome/browser/cocoa/location_bar_view_mac.mm index 0035101..4660001 100644 --- a/chrome/browser/cocoa/location_bar_view_mac.mm +++ b/chrome/browser/cocoa/location_bar_view_mac.mm @@ -103,7 +103,7 @@ LocationBarViewMac::LocationBarViewMac( command_updater_(command_updater), field_(field), disposition_(CURRENT_TAB), - security_image_view_(this, profile, toolbar_model), + location_icon_view_(this), page_action_views_(this, profile, toolbar_model), profile_(profile), browser_(browser), @@ -118,7 +118,7 @@ LocationBarViewMac::LocationBarViewMac( } AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell]; - [cell setSecurityImageView:&security_image_view_]; + [cell setLocationIconView:&location_icon_view_]; [cell setPageActionViewList:&page_action_views_]; [cell setContentSettingViewsList:&content_setting_views_]; @@ -131,7 +131,7 @@ LocationBarViewMac::~LocationBarViewMac() { // Disconnect from cell in case it outlives us. AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell]; [cell setPageActionViewList:NULL]; - [cell setSecurityImageView:NULL]; + [cell setLocationIconView:NULL]; } std::wstring LocationBarViewMac::GetInputString() const { @@ -208,7 +208,7 @@ void LocationBarViewMac::SaveStateToContents(TabContents* contents) { void LocationBarViewMac::Update(const TabContents* contents, bool should_restore_state) { - SetSecurityIcon(toolbar_model_->GetSecurityIcon()); + SetIcon(edit_view_->GetIcon()); page_action_views_.RefreshViews(); RefreshContentSettingsViews(); // AutocompleteEditView restores state if the tab is non-NULL. @@ -457,11 +457,27 @@ NSImage* LocationBarViewMac::GetTabButtonImage() { return tab_button_image_; } -void LocationBarViewMac::SetSecurityIconLabel() { - // TODO(shess): Separate from security icon and move icon to left of address. +void LocationBarViewMac::SetIcon(int resource_id) { + DCHECK(resource_id != 0); + + // The icon is always visible except when there is a keyword hint. + if (!edit_view_->model()->keyword().empty() && + !edit_view_->model()->is_keyword_hint()) { + location_icon_view_.SetVisible(false); + } else { + location_icon_view_.SetImage( + ResourceBundle::GetSharedInstance().GetNSImageNamed(resource_id)); + location_icon_view_.SetVisible(true); + SetSecurityLabel(); + } + [field_ resetFieldEditorFrameIfNeeded]; +} + +void LocationBarViewMac::SetSecurityLabel() { + // TODO(shess): Separate from location icon and move icon to left of address. std::wstring security_info_text(toolbar_model_->GetSecurityInfoText()); if (security_info_text.empty()) { - security_image_view_.SetLabel(nil, nil, nil); + location_icon_view_.SetLabel(nil, nil, nil); } else { NSString* icon_label = base::SysWideToNSString(security_info_text); NSColor* color; @@ -477,21 +493,10 @@ void LocationBarViewMac::SetSecurityIconLabel() { blue:kSecurityErrorTextColorBlueComponent alpha:1.0]; } - security_image_view_.SetLabel(icon_label, [field_ font], color); + location_icon_view_.SetLabel(icon_label, [field_ font], color); } } -void LocationBarViewMac::SetSecurityIcon(int resource_id) { - if (resource_id == 0) { - security_image_view_.SetVisible(false); - } else { - security_image_view_.SetImageShown(resource_id); - security_image_view_.SetVisible(true); - SetSecurityIconLabel(); - } - [field_ resetFieldEditorFrameIfNeeded]; -} - void LocationBarViewMac::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { @@ -561,39 +566,16 @@ void LocationBarViewMac::LocationBarImageView::SetVisible(bool visible) { visible_ = visible; } -// SecurityImageView------------------------------------------------------------ +// LocationIconView ------------------------------------------------------------ -LocationBarViewMac::SecurityImageView::SecurityImageView( - LocationBarViewMac* owner, - Profile* profile, - ToolbarModel* model) - : ev_secure_icon_(nil), - secure_icon_(nil), - security_warning_icon_(nil), - security_error_icon_(nil), - owner_(owner), - profile_(profile), - model_(model) {} - -LocationBarViewMac::SecurityImageView::~SecurityImageView() {} - -void LocationBarViewMac::SecurityImageView::SetImageShown(int resource_id) { - scoped_nsobject<NSImage>* icon; - switch (resource_id) { - case IDR_EV_SECURE: icon = &ev_secure_icon_; break; - case IDR_SECURE: icon = &secure_icon_; break; - case IDR_SECURITY_WARNING: icon = &security_warning_icon_; break; - case IDR_SECURITY_ERROR: icon = &security_error_icon_; break; - default: NOTREACHED(); return; - } - if (!icon->get()) { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - icon->reset([rb.GetNSImageNamed(resource_id) retain]); - } - SetImage(*icon); +LocationBarViewMac::LocationIconView::LocationIconView( + LocationBarViewMac* owner) + : owner_(owner) { } -void LocationBarViewMac::SecurityImageView::OnMousePressed(NSRect bounds) { +LocationBarViewMac::LocationIconView::~LocationIconView() {} + +void LocationBarViewMac::LocationIconView::OnMousePressed(NSRect bounds) { TabContents* tab = owner_->GetTabContents(); NavigationEntry* nav_entry = tab->controller().GetActiveEntry(); if (!nav_entry) { diff --git a/chrome/browser/cocoa/tab_strip_controller_unittest.mm b/chrome/browser/cocoa/tab_strip_controller_unittest.mm index 0967ae4..7cbe16e 100644 --- a/chrome/browser/cocoa/tab_strip_controller_unittest.mm +++ b/chrome/browser/cocoa/tab_strip_controller_unittest.mm @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2010 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. @@ -120,6 +120,10 @@ class TabStripControllerTest : public CocoaTest { // Test adding and removing tabs and making sure that views get added to // the tab strip. TEST_F(TabStripControllerTest, AddRemoveTabs) { + // Create the objects we need, since we have a real location bar. + browser_helper_.profile()->CreateAutocompleteClassifier(); + browser_helper_.profile()->CreateTemplateURLModel(); + EXPECT_TRUE(model_->empty()); SiteInstance* instance = SiteInstance::CreateSiteInstance(browser_helper_.profile()); |