| Index: chrome/browser/cocoa/location_bar/location_bar_view_mac.mm
|
| diff --git a/chrome/browser/cocoa/location_bar/location_bar_view_mac.mm b/chrome/browser/cocoa/location_bar/location_bar_view_mac.mm
|
| index 949048ff1e34c3b2c4699543ec2ff6f2c6909c45..a09d612ea4a632651042a86dbf4255c094f52f79 100644
|
| --- a/chrome/browser/cocoa/location_bar/location_bar_view_mac.mm
|
| +++ b/chrome/browser/cocoa/location_bar/location_bar_view_mac.mm
|
| @@ -23,6 +23,7 @@
|
| #import "chrome/browser/cocoa/first_run_bubble_controller.h"
|
| #import "chrome/browser/cocoa/location_bar/autocomplete_text_field.h"
|
| #import "chrome/browser/cocoa/location_bar/autocomplete_text_field_cell.h"
|
| +#import "chrome/browser/cocoa/location_bar/content_setting_decoration.h"
|
| #import "chrome/browser/cocoa/location_bar/ev_bubble_decoration.h"
|
| #import "chrome/browser/cocoa/location_bar/location_icon_decoration.h"
|
| #import "chrome/browser/cocoa/location_bar/page_action_decoration.h"
|
| @@ -77,17 +78,13 @@ LocationBarViewMac::LocationBarViewMac(
|
| toolbar_model_(toolbar_model),
|
| transition_(PageTransition::TYPED),
|
| first_run_bubble_(this) {
|
| - for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) {
|
| - ContentSettingImageView* content_setting_view =
|
| - new ContentSettingImageView(static_cast<ContentSettingsType>(i), this,
|
| - profile_);
|
| - content_setting_views_.push_back(content_setting_view);
|
| - content_setting_view->SetVisible(false);
|
| + for (size_t i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) {
|
| + DCHECK_EQ(i, content_setting_decorations_.size());
|
| + ContentSettingsType type = static_cast<ContentSettingsType>(i);
|
| + content_setting_decorations_.push_back(
|
| + new ContentSettingDecoration(type, this, profile_));
|
| }
|
|
|
| - AutocompleteTextFieldCell* cell = [field_ cell];
|
| - [cell setContentSettingViewsList:&content_setting_views_];
|
| -
|
| registrar_.Add(this,
|
| NotificationType::EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED,
|
| NotificationService::AllSources());
|
| @@ -144,7 +141,7 @@ void LocationBarViewMac::FocusSearch() {
|
| }
|
|
|
| void LocationBarViewMac::UpdateContentSettingsIcons() {
|
| - RefreshContentSettingsViews();
|
| + RefreshContentSettingsDecorations();
|
| [field_ updateCursorAndToolTipRects];
|
| [field_ setNeedsDisplay:YES];
|
| }
|
| @@ -181,7 +178,7 @@ void LocationBarViewMac::SaveStateToContents(TabContents* contents) {
|
| void LocationBarViewMac::Update(const TabContents* contents,
|
| bool should_restore_state) {
|
| RefreshPageActionDecorations();
|
| - RefreshContentSettingsViews();
|
| + RefreshContentSettingsDecorations();
|
| // AutocompleteEditView restores state if the tab is non-NULL.
|
| edit_view_->Update(should_restore_state ? contents : NULL);
|
| OnChanged();
|
| @@ -427,132 +424,15 @@ void LocationBarViewMac::PostNotification(NSString* notification) {
|
| object:[NSValue valueWithPointer:this]];
|
| }
|
|
|
| -void LocationBarViewMac::RefreshContentSettingsViews() {
|
| - const TabContents* tab_contents = browser_->GetSelectedTabContents();
|
| - for (ContentSettingViews::iterator it(content_setting_views_.begin());
|
| - it != content_setting_views_.end();
|
| - ++it) {
|
| - (*it)->UpdateFromTabContents(
|
| - toolbar_model_->input_in_progress() ? NULL : tab_contents);
|
| - }
|
| -}
|
| -
|
| -// LocationBarImageView---------------------------------------------------------
|
| -
|
| -void LocationBarViewMac::LocationBarImageView::SetImage(NSImage* image) {
|
| - image_.reset([image retain]);
|
| -}
|
| -
|
| -void LocationBarViewMac::LocationBarImageView::SetIcon(int resource_id) {
|
| - ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| - SetImage(rb.GetNSImageNamed(resource_id));
|
| -}
|
| -
|
| -void LocationBarViewMac::LocationBarImageView::SetLabel(NSString* text,
|
| - NSFont* baseFont,
|
| - NSColor* color) {
|
| - // Create an attributed string for the label, if a label was given.
|
| - label_.reset();
|
| - if (text) {
|
| - DCHECK(color);
|
| - DCHECK(baseFont);
|
| - NSFont* font = [NSFont fontWithDescriptor:[baseFont fontDescriptor]
|
| - size:[baseFont pointSize] - 2.0];
|
| - NSDictionary* attributes =
|
| - [NSDictionary dictionaryWithObjectsAndKeys:
|
| - color, NSForegroundColorAttributeName,
|
| - font, NSFontAttributeName,
|
| - NULL];
|
| - NSAttributedString* attrStr =
|
| - [[NSAttributedString alloc] initWithString:text attributes:attributes];
|
| - label_.reset(attrStr);
|
| +void LocationBarViewMac::RefreshContentSettingsDecorations() {
|
| + const bool input_in_progress = toolbar_model_->input_in_progress();
|
| + const TabContents* tab_contents =
|
| + input_in_progress ? NULL : browser_->GetSelectedTabContents();
|
| + for (size_t i = 0; i < content_setting_decorations_.size(); ++i) {
|
| + content_setting_decorations_[i]->UpdateFromTabContents(tab_contents);
|
| }
|
| }
|
|
|
| -void LocationBarViewMac::LocationBarImageView::SetVisible(bool visible) {
|
| - visible_ = visible;
|
| -}
|
| -
|
| -NSSize LocationBarViewMac::LocationBarImageView::GetDefaultImageSize() const {
|
| - return NSZeroSize;
|
| -}
|
| -
|
| -NSSize LocationBarViewMac::LocationBarImageView::GetImageSize() const {
|
| - NSImage* image = GetImage();
|
| - if (image)
|
| - return [image size];
|
| - return GetDefaultImageSize();
|
| -}
|
| -
|
| -// ContentSettingsImageView-----------------------------------------------------
|
| -LocationBarViewMac::ContentSettingImageView::ContentSettingImageView(
|
| - ContentSettingsType settings_type,
|
| - LocationBarViewMac* owner,
|
| - Profile* profile)
|
| - : content_setting_image_model_(
|
| - ContentSettingImageModel::CreateContentSettingImageModel(
|
| - settings_type)),
|
| - owner_(owner),
|
| - profile_(profile) {
|
| -}
|
| -
|
| -LocationBarViewMac::ContentSettingImageView::~ContentSettingImageView() {}
|
| -
|
| -void LocationBarViewMac::ContentSettingImageView::OnMousePressed(NSRect bounds)
|
| -{
|
| - // Get host. This should be shared shared on linux/win/osx medium-term.
|
| - TabContents* tabContents =
|
| - BrowserList::GetLastActive()->GetSelectedTabContents();
|
| - if (!tabContents)
|
| - return;
|
| - GURL url = tabContents->GetURL();
|
| - std::wstring displayHost;
|
| - net::AppendFormattedHost(
|
| - url,
|
| - UTF8ToWide(profile_->GetPrefs()->GetString(prefs::kAcceptLanguages)),
|
| - &displayHost, NULL, NULL);
|
| -
|
| - // Transform mouse coordinates to screen space.
|
| - AutocompleteTextField* textField = owner_->GetAutocompleteTextField();
|
| - NSWindow* window = [textField window];
|
| - bounds = [textField convertRect:bounds toView:nil];
|
| - NSPoint anchor = NSMakePoint(NSMidX(bounds) + 1, NSMinY(bounds));
|
| - anchor = [window convertBaseToScreen:anchor];
|
| -
|
| - // Open bubble.
|
| - ContentSettingBubbleModel* model =
|
| - ContentSettingBubbleModel::CreateContentSettingBubbleModel(
|
| - tabContents, profile_,
|
| - content_setting_image_model_->get_content_settings_type());
|
| - [ContentBlockedBubbleController showForModel:model
|
| - parentWindow:window
|
| - anchoredAt:anchor];
|
| -}
|
| -
|
| -NSString* LocationBarViewMac::ContentSettingImageView::GetToolTip() {
|
| - return tooltip_.get();
|
| -}
|
| -
|
| -void LocationBarViewMac::ContentSettingImageView::UpdateFromTabContents(
|
| - const TabContents* tab_contents) {
|
| - content_setting_image_model_->UpdateFromTabContents(tab_contents);
|
| - if (content_setting_image_model_->is_visible()) {
|
| - // TODO(thakis): We should use pdfs for these icons on OSX.
|
| - // http://crbug.com/35847
|
| - SetIcon(content_setting_image_model_->get_icon());
|
| - SetToolTip(base::SysUTF8ToNSString(
|
| - content_setting_image_model_->get_tooltip()));
|
| - SetVisible(true);
|
| - } else {
|
| - SetVisible(false);
|
| - }
|
| -}
|
| -
|
| -void LocationBarViewMac::ContentSettingImageView::SetToolTip(NSString* tooltip)
|
| -{
|
| - tooltip_.reset([tooltip retain]);
|
| -}
|
| -
|
| void LocationBarViewMac::DeletePageActionDecorations() {
|
| // TODO(shess): Deleting these decorations could result in the cell
|
| // refering to them before things are laid out again. Meanwhile, at
|
| @@ -616,10 +496,13 @@ void LocationBarViewMac::Layout() {
|
| [cell addLeftDecoration:ev_bubble_decoration_.get()];
|
| [cell addRightDecoration:star_decoration_.get()];
|
|
|
| - // Display order is right to left.
|
| + // Note that display order is right to left.
|
| for (size_t i = 0; i < page_action_decorations_.size(); ++i) {
|
| [cell addRightDecoration:page_action_decorations_[i]];
|
| }
|
| + for (size_t i = 0; i < content_setting_decorations_.size(); ++i) {
|
| + [cell addRightDecoration:content_setting_decorations_[i]];
|
| + }
|
|
|
| // By default only the location icon is visible.
|
| location_icon_decoration_->SetVisible(true);
|
|
|