Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / location_bar / location_bar_view_mac.h
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.
4
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_
7
8 #include <string>
9
10 #import <Cocoa/Cocoa.h>
11
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
23 @class AutocompleteTextField;
24 class CommandUpdater;
25 class ContentSettingDecoration;
26 class EVBubbleDecoration;
27 class GeneratedCreditCardDecoration;
28 class KeywordHintDecoration;
29 class LocationBarDecoration;
30 class LocationIconDecoration;
31 class ManagePasswordsDecoration;
32 class MicSearchDecoration;
33 class OriginChipDecoration;
34 class PageActionDecoration;
35 class Profile;
36 class SearchButtonDecoration;
37 class SelectedKeywordDecoration;
38 class StarDecoration;
39 class TranslateDecoration;
40 class ZoomDecoration;
41 class ZoomDecorationTest;
42
43 // A C++ bridge class that represents the location bar UI element to
44 // the portable code.  Wires up an OmniboxViewMac instance to
45 // the location bar text field, which handles most of the work.
46
47 class LocationBarViewMac : public LocationBar,
48                            public LocationBarTesting,
49                            public OmniboxEditController,
50                            public SearchModelObserver {
51  public:
52   LocationBarViewMac(AutocompleteTextField* field,
53                      CommandUpdater* command_updater,
54                      Profile* profile,
55                      Browser* browser);
56   ~LocationBarViewMac() override;
57
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 InvalidatePageActions() override;
70   void UpdateBookmarkStarVisibility() 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;
80
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;
88
89   // Set/Get the editable state of the field.
90   void SetEditable(bool editable);
91   bool IsEditable();
92
93   // Set the starred state of the bookmark star.
94   void SetStarred(bool starred);
95
96   // Set whether or not the translate icon is lit.
97   void SetTranslateIconLit(bool on);
98
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);
105
106   // Checks if the bookmark star should be enabled or not.
107   bool IsStarEnabled() const;
108
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;
112
113   // Get the point in window coordinates on the star for the Translate bubble to
114   // aim at.
115   NSPoint GetTranslateBubblePoint() const;
116
117   // Get the point in window coordinates in the lock icon for the Manage
118   // Passwords bubble to aim at.
119   NSPoint GetManagePasswordsBubblePoint() const;
120
121   // Get the point in window coordinates in the security icon at which the page
122   // info bubble aims.
123   NSPoint GetPageInfoBubblePoint() const;
124
125   // Get the point in window coordinates in the "generated cc" icon at which the
126   // corresponding info bubble aims.
127   NSPoint GetGeneratedCreditCardBubblePoint() const;
128
129   // When any image decorations change, call this to ensure everything is
130   // redrawn and laid out if necessary.
131   void OnDecorationsChanged();
132
133   // Layout the various decorations which live in the field.
134   void Layout();
135
136   // Re-draws |decoration| if it's already being displayed.
137   void RedrawDecoration(LocationBarDecoration* decoration);
138
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);
146
147   // Retrieve the frame for the given |page_action|.
148   NSRect GetPageActionFrame(ExtensionAction* page_action);
149
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);
155
156   // OmniboxEditController:
157   void Update(const content::WebContents* contents) override;
158   void OnChanged() override;
159   void OnSetFocus() override;
160   void ShowURL() override;
161   void EndOriginChipAnimations(bool cancel_fade) override;
162   InstantController* GetInstant() override;
163   content::WebContents* GetWebContents() override;
164   ToolbarModel* GetToolbarModel() override;
165   const ToolbarModel* GetToolbarModel() const override;
166
167   NSImage* GetKeywordImage(const base::string16& keyword);
168
169   AutocompleteTextField* GetAutocompleteTextField() { return field_; }
170
171   ManagePasswordsDecoration* manage_passwords_decoration() {
172     return manage_passwords_decoration_.get();
173   }
174
175   // SearchModelObserver:
176   void ModelChanged(const SearchModel::State& old_state,
177                     const SearchModel::State& new_state) override;
178
179   Browser* browser() const { return browser_; }
180
181  protected:
182   // OmniboxEditController:
183   void HideURL() override;
184
185  private:
186   friend ZoomDecorationTest;
187
188   // Posts |notification| to the default notification center.
189   void PostNotification(NSString* notification);
190
191   // Return the decoration for |page_action|.
192   PageActionDecoration* GetPageActionDecoration(ExtensionAction* page_action);
193
194   // Clear the page-action decorations.
195   void DeletePageActionDecorations();
196
197   void OnEditBookmarksEnabledChanged();
198
199   // Re-generate the page-action decorations from the profile's
200   // extension service.
201   void RefreshPageActionDecorations();
202
203   // Updates visibility of the content settings icons based on the current
204   // tab contents state.
205   bool RefreshContentSettingsDecorations();
206
207   void ShowFirstRunBubbleInternal();
208
209   // Updates the translate decoration in the omnibox with the current translate
210   // state.
211   void UpdateTranslateDecoration();
212
213   // Updates the zoom decoration in the omnibox with the current zoom level.
214   // Returns whether any updates were made.
215   bool UpdateZoomDecoration();
216
217   // Updates the voice search decoration. Returns true if the visible state was
218   // changed.
219   bool UpdateMicSearchDecorationVisibility();
220
221   scoped_ptr<OmniboxViewMac> omnibox_view_;
222
223   AutocompleteTextField* field_;  // owned by tab controller
224
225   // A decoration that shows an icon to the left of the address.
226   scoped_ptr<LocationIconDecoration> location_icon_decoration_;
227
228   // A decoration that shows the keyword-search bubble on the left.
229   scoped_ptr<SelectedKeywordDecoration> selected_keyword_decoration_;
230
231   // A decoration that shows a lock icon and ev-cert label in a bubble
232   // on the left.
233   scoped_ptr<EVBubbleDecoration> ev_bubble_decoration_;
234
235   // Bookmark star right of page actions.
236   scoped_ptr<StarDecoration> star_decoration_;
237
238   // Translate icon at the end of the ominibox.
239   scoped_ptr<TranslateDecoration> translate_decoration_;
240
241   // A zoom icon at the end of the omnibox, which shows at non-standard zoom
242   // levels.
243   scoped_ptr<ZoomDecoration> zoom_decoration_;
244
245   // The installed page actions.
246   std::vector<ExtensionAction*> page_actions_;
247
248   // Decorations for the installed Page Actions.
249   ScopedVector<PageActionDecoration> page_action_decorations_;
250
251   // The content blocked decorations.
252   ScopedVector<ContentSettingDecoration> content_setting_decorations_;
253
254   // Keyword hint decoration displayed on the right-hand side.
255   scoped_ptr<KeywordHintDecoration> keyword_hint_decoration_;
256
257   // The voice search icon.
258   scoped_ptr<MicSearchDecoration> mic_search_decoration_;
259
260   // Generated CC hint decoration.
261   scoped_ptr<GeneratedCreditCardDecoration> generated_credit_card_decoration_;
262
263   // The right-hand-side search button that is shown on search result pages.
264   scoped_ptr<SearchButtonDecoration> search_button_decoration_;
265
266   // The left-hand-side origin chip.
267   scoped_ptr<OriginChipDecoration> origin_chip_decoration_;
268
269   // The right-hand-side button to manage passwords associated with a page.
270   scoped_ptr<ManagePasswordsDecoration> manage_passwords_decoration_;
271
272   Browser* browser_;
273
274   // Used to schedule a task for the first run info bubble.
275   base::WeakPtrFactory<LocationBarViewMac> weak_ptr_factory_;
276
277   // Used to change the visibility of the star decoration.
278   BooleanPrefMember edit_bookmarks_enabled_;
279
280   DISALLOW_COPY_AND_ASSIGN(LocationBarViewMac);
281 };
282
283 #endif  // CHROME_BROWSER_UI_COCOA_LOCATION_BAR_LOCATION_BAR_VIEW_MAC_H_