1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_COCOA_LOCATION_BAR_ORIGIN_CHIP_DECORATION_H_ 6 #define CHROME_BROWSER_UI_COCOA_LOCATION_BAR_ORIGIN_CHIP_DECORATION_H_ 7 8 #import <Cocoa/Cocoa.h> 9 10 #include "base/mac/scoped_nsobject.h" 11 #include "chrome/browser/safe_browsing/ui_manager.h" 12 #include "chrome/browser/ui/cocoa/location_bar/button_decoration.h" 13 #include "chrome/browser/ui/toolbar/origin_chip_info.h" 14 #include "extensions/browser/extension_icon_image.h" 15 16 class LocationBarViewMac; 17 class LocationIconDecoration; 18 19 namespace content { 20 class WebContents; 21 } 22 23 // Origin chip button, which is placed leading the omnibox and contains the 24 // current site's host. Clicking the chip reveals the page's URL, and clicking 25 // the icon on the chip reveals the permissions bubble. 26 class OriginChipDecoration : public ButtonDecoration, 27 public extensions::IconImage::Observer, 28 public SafeBrowsingUIManager::Observer { 29 public: 30 OriginChipDecoration(LocationBarViewMac* owner, 31 LocationIconDecoration* location_icon); 32 virtual ~OriginChipDecoration(); 33 34 // Updates the origin chip's content, and display state. 35 void Update(); 36 37 // Implement |ButtonDecoration|. 38 virtual bool PreventFocus(NSPoint location) const OVERRIDE; 39 40 // Implement |LocationBarDecoration|. 41 virtual CGFloat GetWidthForSpace(CGFloat width) OVERRIDE; 42 virtual void DrawInFrame(NSRect frame, NSView* control_view) OVERRIDE; 43 virtual NSString* GetToolTip() OVERRIDE; 44 virtual bool OnMousePressed(NSRect frame, NSPoint location) OVERRIDE; 45 virtual NSPoint GetBubblePointInFrame(NSRect frame) OVERRIDE; 46 47 // Implement |IconImage::Observer|. 48 virtual void OnExtensionIconImageChanged( 49 extensions::IconImage* image) OVERRIDE; 50 51 // Implement |SafeBrowsingUIManager::Observer|. 52 virtual void OnSafeBrowsingHit( 53 const SafeBrowsingUIManager::UnsafeResource& resource) OVERRIDE; 54 virtual void OnSafeBrowsingMatch( 55 const SafeBrowsingUIManager::UnsafeResource& resource) OVERRIDE; 56 57 private: 58 // Returns the width required to display the chip's contents. 59 CGFloat GetChipWidth() const; 60 61 // Contains attributes for drawing the origin string. 62 base::scoped_nsobject<NSMutableDictionary> attributes_; 63 64 // The extension's current icon, if the page being displayed belongs to an 65 // extension. 66 base::scoped_nsobject<NSImage> extension_icon_; 67 68 // The rectangle where the icon was last drawn. Used for hit testing to 69 // display the permissions bubble. 70 NSRect icon_rect_; 71 72 // Manages information to be displayed on the origin chip. 73 OriginChipInfo info_; 74 75 // The label currently displayed in the chip. 76 base::scoped_nsobject<NSString> label_; 77 78 // The location icon decoration. Weak. 79 LocationIconDecoration* location_icon_; 80 81 // The control view that owns this. Weak. 82 LocationBarViewMac* owner_; 83 84 DISALLOW_COPY_AND_ASSIGN(OriginChipDecoration); 85 }; 86 87 #endif // CHROME_BROWSER_UI_COCOA_LOCATION_BAR_ORIGIN_CHIP_DECORATION_H_ 88