15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_COCOA_LOCATION_BAR_CONTENT_SETTING_DECORATION_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_COCOA_LOCATION_BAR_CONTENT_SETTING_DECORATION_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import "chrome/browser/ui/cocoa/location_bar/image_decoration.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings_types.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ContentSettingDecoration is used to display the content settings
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// images on the current page.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class ContentSettingAnimationState;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingImageModel;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocationBarViewMac;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingDecoration : public ImageDecoration {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingDecoration(ContentSettingsType settings_type,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           LocationBarViewMac* owner,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           Profile* profile);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ContentSettingDecoration();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the image and visibility state based on the supplied WebContents.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the decoration's visible state changed.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool UpdateFromWebContents(content::WebContents* web_contents);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from |LocationBarDecoration|
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool AcceptsMousePress() OVERRIDE;
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMousePressed(NSRect frame, NSPoint location) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NSString* GetToolTip() OVERRIDE;
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual CGFloat GetWidthForSpace(CGFloat width) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DrawInFrame(NSRect frame, NSView* control_view) OVERRIDE;
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual NSPoint GetBubblePointInFrame(NSRect frame) OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from internal animator. Only public because ObjC objects can't
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be friends.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AnimationTimerFired();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetToolTip(NSString* tooltip);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns an attributed string with the animated text.
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<NSAttributedString> CreateAnimatedText();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Measure the width of the animated text.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGFloat MeasureTextWidth();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ContentSettingImageModel> content_setting_image_model_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LocationBarViewMac* owner_;  // weak
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;  // weak
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<NSString> tooltip_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used when the decoration has animated text.
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<ContentSettingAnimationState> animation_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CGFloat text_width_;
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<NSAttributedString> animated_text_;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ContentSettingDecoration);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_COCOA_LOCATION_BAR_CONTENT_SETTING_DECORATION_H_
73