| Index: chrome/browser/ui/cocoa/location_bar/origin_chip_decoration.mm
|
| diff --git a/chrome/browser/ui/cocoa/location_bar/origin_chip_decoration.mm b/chrome/browser/ui/cocoa/location_bar/origin_chip_decoration.mm
|
| index 15f62dc036ed4ce59ccb0538cc5e06322d7a5bac..3887efa782f549446bb7b9cc3fccf22eedd01f87 100644
|
| --- a/chrome/browser/ui/cocoa/location_bar/origin_chip_decoration.mm
|
| +++ b/chrome/browser/ui/cocoa/location_bar/origin_chip_decoration.mm
|
| @@ -13,6 +13,7 @@
|
| #include "chrome/browser/safe_browsing/safe_browsing_service.h"
|
| #include "chrome/browser/safe_browsing/ui_manager.h"
|
| #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
|
| +#import "chrome/browser/ui/cocoa/location_bar/location_icon_decoration.h"
|
| #import "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h"
|
| #import "chrome/browser/ui/cocoa/nsview_additions.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| @@ -34,6 +35,10 @@ const CGFloat kOuterRightPadding = 3;
|
| // be scaled down.
|
| const CGFloat kIconSize = 19;
|
|
|
| +// The info-bubble point should look like it points to the bottom of the lock
|
| +// icon. Determined with Pixie.app.
|
| +const CGFloat kPageInfoBubblePointYOffset = 2.0;
|
| +
|
| const ui::NinePartImageIds kNormalImages[3] = {
|
| IMAGE_GRID(IDR_ORIGIN_CHIP_NORMAL),
|
| IMAGE_GRID(IDR_ORIGIN_CHIP_HOVER),
|
| @@ -60,12 +65,16 @@ const ui::NinePartImageIds kEVImages[3] = {
|
|
|
| } // namespace
|
|
|
| -OriginChipDecoration::OriginChipDecoration(LocationBarViewMac* owner)
|
| +OriginChipDecoration::OriginChipDecoration(
|
| + LocationBarViewMac* owner,
|
| + LocationIconDecoration* location_icon)
|
| : ButtonDecoration(kNormalImages[0], IDR_LOCATION_BAR_HTTP,
|
| kNormalImages[1], IDR_LOCATION_BAR_HTTP,
|
| kNormalImages[2], IDR_LOCATION_BAR_HTTP, 0),
|
| attributes_([[NSMutableDictionary alloc] init]),
|
| + icon_rect_(NSZeroRect),
|
| info_(this, owner->browser()->profile()),
|
| + location_icon_(location_icon),
|
| owner_(owner) {
|
| DCHECK(owner_);
|
| [attributes_ setObject:GetFont() forKey:NSFontAttributeName];
|
| @@ -85,7 +94,7 @@ OriginChipDecoration::~OriginChipDecoration() {
|
| }
|
|
|
| void OriginChipDecoration::Update() {
|
| - if (!ShouldShow()) {
|
| + if (!owner_->GetToolbarModel()->ShouldShowOriginChip()) {
|
| SetVisible(false);
|
| return;
|
| } else {
|
| @@ -124,6 +133,10 @@ void OriginChipDecoration::Update() {
|
| SetIcon(info_.icon());
|
| }
|
|
|
| +bool OriginChipDecoration::PreventFocus(NSPoint location) const {
|
| + return NSPointInRect(location, icon_rect_) ? true : false;
|
| +}
|
| +
|
| CGFloat OriginChipDecoration::GetWidthForSpace(CGFloat width) {
|
| if (!GetIconImage() || [label_ length] == 0)
|
| return kOmittedWidth;
|
| @@ -160,19 +173,19 @@ void OriginChipDecoration::DrawInFrame(NSRect frame, NSView* control_view) {
|
| icon_x_trailing_offset = std::floor(icon_x_trailing_offset);
|
| }
|
|
|
| - NSRect icon_rect = NSMakeRect(kInnerLeftPadding + icon_x_leading_offset,
|
| - icon_y_inset, icon_width, icon_height);
|
| - [icon drawInRect:icon_rect
|
| + icon_rect_ = NSMakeRect(kInnerLeftPadding + icon_x_leading_offset,
|
| + icon_y_inset, icon_width, icon_height);
|
| +
|
| + [icon drawInRect:icon_rect_
|
| fromRect:NSZeroRect
|
| operation:NSCompositeSourceOver
|
| fraction:1.0
|
| respectFlipped:YES
|
| hints:nil];
|
|
|
| - NSRect label_rect =
|
| - NSMakeRect(NSMaxX(icon_rect) + icon_x_trailing_offset + kIconLabelPadding,
|
| - 0, [label_ sizeWithAttributes:attributes_].width,
|
| - frame.size.height);
|
| + NSRect label_rect = NSMakeRect(
|
| + NSMaxX(icon_rect_) + icon_x_trailing_offset + kIconLabelPadding,
|
| + 0, [label_ sizeWithAttributes:attributes_].width, frame.size.height);
|
| DrawLabel(label_, attributes_, label_rect);
|
| }
|
|
|
| @@ -180,15 +193,23 @@ NSString* OriginChipDecoration::GetToolTip() {
|
| return base::SysUTF16ToNSString(info_.Tooltip());
|
| }
|
|
|
| -bool OriginChipDecoration::OnMousePressed(NSRect frame) {
|
| - // TODO(macourteau): reveal the permissions bubble if the click was inside the
|
| - // icon's bounds - otherwise, show the URL.
|
| +bool OriginChipDecoration::OnMousePressed(NSRect frame, NSPoint location) {
|
| + // Reveal the permissions bubble if the click was inside the icon's bounds;
|
| + // otherwise, show the URL.
|
| + if (NSPointInRect(location, icon_rect_))
|
| + return location_icon_->OnMousePressed(frame, location);
|
| +
|
| UMA_HISTOGRAM_COUNTS("OriginChip.Pressed", 1);
|
| content::RecordAction(base::UserMetricsAction("OriginChipPress"));
|
| owner_->GetOmniboxView()->ShowURL();
|
| return true;
|
| }
|
|
|
| +NSPoint OriginChipDecoration::GetBubblePointInFrame(NSRect frame) {
|
| + return NSMakePoint(NSMidX(icon_rect_),
|
| + NSMaxY(icon_rect_) - kPageInfoBubblePointYOffset);
|
| +}
|
| +
|
| void OriginChipDecoration::OnExtensionIconImageChanged(
|
| extensions::IconImage* image) {
|
| if (image) {
|
| @@ -209,12 +230,6 @@ void OriginChipDecoration::OnSafeBrowsingMatch(
|
| Update();
|
| }
|
|
|
| -bool OriginChipDecoration::ShouldShow() const {
|
| - return chrome::ShouldDisplayOriginChip() ||
|
| - (owner_->GetToolbarModel()->WouldOmitURLDueToOriginChip() &&
|
| - owner_->GetToolbarModel()->origin_chip_enabled());
|
| -}
|
| -
|
| CGFloat OriginChipDecoration::GetChipWidth() const {
|
| return kInnerLeftPadding +
|
| kIconSize +
|
|
|