Don't show supervised user as "already on this device" while they're being imported.
[chromium-blink-merge.git] / chrome / browser / ui / cocoa / location_bar / location_bar_view_mac.h
blob9145dada06336bcd2817863e86e485f749989eea
1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_UI_COCOA_LOCATION_BAR_LOCATION_BAR_VIEW_MAC_H_
6 #define CHROME_BROWSER_UI_COCOA_LOCATION_BAR_LOCATION_BAR_VIEW_MAC_H_
8 #include <string>
10 #import <Cocoa/Cocoa.h>
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/scoped_vector.h"
14 #include "base/memory/weak_ptr.h"
15 #include "base/prefs/pref_member.h"
16 #include "chrome/browser/ui/browser.h"
17 #include "chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.h"
18 #include "chrome/browser/ui/location_bar/location_bar.h"
19 #include "chrome/browser/ui/omnibox/omnibox_edit_controller.h"
20 #include "chrome/browser/ui/search/search_model_observer.h"
21 #include "components/content_settings/core/common/content_settings_types.h"
22 #include "components/ui/zoom/zoom_event_manager_observer.h"
24 @class AutocompleteTextField;
25 class CommandUpdater;
26 class ContentSettingDecoration;
27 class EVBubbleDecoration;
28 class GeneratedCreditCardDecoration;
29 class KeywordHintDecoration;
30 class LocationBarDecoration;
31 class LocationIconDecoration;
32 class ManagePasswordsDecoration;
33 class MicSearchDecoration;
34 class PageActionDecoration;
35 class Profile;
36 class SelectedKeywordDecoration;
37 class StarDecoration;
38 class TranslateDecoration;
39 class ZoomDecoration;
40 class ZoomDecorationTest;
42 // A C++ bridge class that represents the location bar UI element to
43 // the portable code. Wires up an OmniboxViewMac instance to
44 // the location bar text field, which handles most of the work.
46 class LocationBarViewMac : public LocationBar,
47 public LocationBarTesting,
48 public OmniboxEditController,
49 public SearchModelObserver,
50 public ui_zoom::ZoomEventManagerObserver {
51 public:
52 LocationBarViewMac(AutocompleteTextField* field,
53 CommandUpdater* command_updater,
54 Profile* profile,
55 Browser* browser);
56 ~LocationBarViewMac() override;
58 // Overridden from LocationBar:
59 void ShowFirstRunBubble() override;
60 GURL GetDestinationURL() const override;
61 WindowOpenDisposition GetWindowOpenDisposition() const override;
62 ui::PageTransition GetPageTransition() const override;
63 void AcceptInput() override;
64 void FocusLocation(bool select_all) override;
65 void FocusSearch() override;
66 void UpdateContentSettingsIcons() override;
67 void UpdateManagePasswordsIconAndBubble() override;
68 void UpdatePageActions() override;
69 void UpdateBookmarkStarVisibility() override;
70 void UpdateLocationBarVisibility(bool visible, bool animate) override;
71 bool ShowPageActionPopup(const extensions::Extension* extension,
72 bool grant_active_tab) override;
73 void UpdateOpenPDFInReaderPrompt() override;
74 void UpdateGeneratedCreditCardView() override;
75 void SaveStateToContents(content::WebContents* contents) override;
76 void Revert() override;
77 const OmniboxView* GetOmniboxView() const override;
78 OmniboxView* GetOmniboxView() override;
79 LocationBarTesting* GetLocationBarForTesting() override;
81 // Overridden from LocationBarTesting:
82 int PageActionCount() override;
83 int PageActionVisibleCount() override;
84 ExtensionAction* GetPageAction(size_t index) override;
85 ExtensionAction* GetVisiblePageAction(size_t index) override;
86 void TestPageActionPressed(size_t index) override;
87 bool GetBookmarkStarVisibility() override;
89 // Set/Get the editable state of the field.
90 void SetEditable(bool editable);
91 bool IsEditable();
93 // Set the starred state of the bookmark star.
94 void SetStarred(bool starred);
96 // Set whether or not the translate icon is lit.
97 void SetTranslateIconLit(bool on);
99 // Happens when the zoom changes for the active tab. |can_show_bubble| is
100 // false when the change in zoom for the active tab wasn't an explicit user
101 // action (e.g. switching tabs, creating a new tab, creating a new browser).
102 // Additionally, |can_show_bubble| will only be true when the bubble wouldn't
103 // be obscured by other UI (wrench menu) or redundant (+/- from wrench).
104 void ZoomChangedForActiveTab(bool can_show_bubble);
106 // Checks if the bookmark star should be enabled or not.
107 bool IsStarEnabled() const;
109 // Get the point in window coordinates on the star for the bookmark bubble to
110 // aim at. Only works if IsStarEnabled returns YES.
111 NSPoint GetBookmarkBubblePoint() const;
113 // Get the point in window coordinates on the star for the Translate bubble to
114 // aim at.
115 NSPoint GetTranslateBubblePoint() const;
117 // Get the point in window coordinates in the lock icon for the Manage
118 // Passwords bubble to aim at.
119 NSPoint GetManagePasswordsBubblePoint() const;
121 // Get the point in window coordinates in the security icon at which the page
122 // info bubble aims.
123 NSPoint GetPageInfoBubblePoint() const;
125 // Get the point in window coordinates in the "generated cc" icon at which the
126 // corresponding info bubble aims.
127 NSPoint GetGeneratedCreditCardBubblePoint() const;
129 // When any image decorations change, call this to ensure everything is
130 // redrawn and laid out if necessary.
131 void OnDecorationsChanged();
133 // Layout the various decorations which live in the field.
134 void Layout();
136 // Re-draws |decoration| if it's already being displayed.
137 void RedrawDecoration(LocationBarDecoration* decoration);
139 // Sets preview_enabled_ for the PageActionImageView associated with this
140 // |page_action|. If |preview_enabled|, the location bar will display the
141 // PageAction icon even if it has not been activated by the extension.
142 // This is used by the ExtensionInstalledBubble to preview what the icon
143 // will look like for the user upon installation of the extension.
144 void SetPreviewEnabledPageAction(ExtensionAction* page_action,
145 bool preview_enabled);
147 // Retrieve the frame for the given |page_action|.
148 NSRect GetPageActionFrame(ExtensionAction* page_action);
150 // Return |page_action|'s info-bubble point in window coordinates.
151 // This function should always be called with a visible page action.
152 // If |page_action| is not a page action or not visible, NOTREACHED()
153 // is called and this function returns |NSZeroPoint|.
154 NSPoint GetPageActionBubblePoint(ExtensionAction* page_action);
156 // Clears any location bar state stored for |contents|.
157 void ResetTabState(content::WebContents* contents);
159 // OmniboxEditController:
160 void Update(const content::WebContents* contents) override;
161 void OnChanged() override;
162 void OnSetFocus() override;
163 void ShowURL() override;
164 InstantController* GetInstant() override;
165 content::WebContents* GetWebContents() override;
166 ToolbarModel* GetToolbarModel() override;
167 const ToolbarModel* GetToolbarModel() const override;
169 NSImage* GetKeywordImage(const base::string16& keyword);
171 AutocompleteTextField* GetAutocompleteTextField() { return field_; }
173 ManagePasswordsDecoration* manage_passwords_decoration() {
174 return manage_passwords_decoration_.get();
177 // SearchModelObserver:
178 void ModelChanged(const SearchModel::State& old_state,
179 const SearchModel::State& new_state) override;
181 Browser* browser() const { return browser_; }
183 // ZoomManagerObserver:
184 // Updates the view for the zoom icon when default zoom levels change.
185 void OnDefaultZoomLevelChanged() override;
187 private:
188 friend ZoomDecorationTest;
190 // Posts |notification| to the default notification center.
191 void PostNotification(NSString* notification);
193 // Return the decoration for |page_action|.
194 PageActionDecoration* GetPageActionDecoration(ExtensionAction* page_action);
196 // Clear the page-action decorations.
197 void DeletePageActionDecorations();
199 void OnEditBookmarksEnabledChanged();
201 // Re-generate the page-action decorations from the profile's
202 // extension service.
203 void RefreshPageActionDecorations();
205 // Whether the page actions represented by |page_action_decorations_| differ
206 // in ordering or value from |page_actions|.
207 bool PageActionsDiffer(
208 const std::vector<ExtensionAction*>& page_actions) const;
210 // Updates visibility of the content settings icons based on the current
211 // tab contents state.
212 bool RefreshContentSettingsDecorations();
214 void ShowFirstRunBubbleInternal();
216 // Updates the translate decoration in the omnibox with the current translate
217 // state.
218 void UpdateTranslateDecoration();
220 // Updates the zoom decoration in the omnibox with the current zoom level.
221 // Returns whether any updates were made.
222 bool UpdateZoomDecoration(bool default_zoom_changed);
224 // Updates the voice search decoration. Returns true if the visible state was
225 // changed.
226 bool UpdateMicSearchDecorationVisibility();
228 scoped_ptr<OmniboxViewMac> omnibox_view_;
230 AutocompleteTextField* field_; // owned by tab controller
232 // A decoration that shows an icon to the left of the address.
233 scoped_ptr<LocationIconDecoration> location_icon_decoration_;
235 // A decoration that shows the keyword-search bubble on the left.
236 scoped_ptr<SelectedKeywordDecoration> selected_keyword_decoration_;
238 // A decoration that shows a lock icon and ev-cert label in a bubble
239 // on the left.
240 scoped_ptr<EVBubbleDecoration> ev_bubble_decoration_;
242 // Bookmark star right of page actions.
243 scoped_ptr<StarDecoration> star_decoration_;
245 // Translate icon at the end of the ominibox.
246 scoped_ptr<TranslateDecoration> translate_decoration_;
248 // A zoom icon at the end of the omnibox, which shows at non-standard zoom
249 // levels.
250 scoped_ptr<ZoomDecoration> zoom_decoration_;
252 // Decorations for the installed Page Actions.
253 ScopedVector<PageActionDecoration> page_action_decorations_;
255 // The content blocked decorations.
256 ScopedVector<ContentSettingDecoration> content_setting_decorations_;
258 // Keyword hint decoration displayed on the right-hand side.
259 scoped_ptr<KeywordHintDecoration> keyword_hint_decoration_;
261 // The voice search icon.
262 scoped_ptr<MicSearchDecoration> mic_search_decoration_;
264 // Generated CC hint decoration.
265 scoped_ptr<GeneratedCreditCardDecoration> generated_credit_card_decoration_;
267 // The right-hand-side button to manage passwords associated with a page.
268 scoped_ptr<ManagePasswordsDecoration> manage_passwords_decoration_;
270 Browser* browser_;
272 // Used to change the visibility of the star decoration.
273 BooleanPrefMember edit_bookmarks_enabled_;
275 // Used to schedule a task for the first run info bubble.
276 base::WeakPtrFactory<LocationBarViewMac> weak_ptr_factory_;
278 DISALLOW_COPY_AND_ASSIGN(LocationBarViewMac);
281 #endif // CHROME_BROWSER_UI_COCOA_LOCATION_BAR_LOCATION_BAR_VIEW_MAC_H_