Home | History | Annotate | Download | only in location_bar
      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