location_bar_view_gtk.h revision dc0f95d653279beabeb9817299e2902918ba123e
172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_GTK_LOCATION_BAR_VIEW_GTK_H_
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_LOCATION_BAR_VIEW_GTK_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtk.h>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <map>
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_ptr.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_vector.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autocomplete/autocomplete_edit.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_context_menu_model.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/image_loading_tracker.h"
213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/first_run/first_run.h"
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/info_bubble_gtk.h"
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/menu_gtk.h"
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/owned_widget_gtk.h"
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/omnibox/location_bar.h"
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/content_settings_types.h"
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/page_transition_types.h"
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_observer.h"
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_registrar.h"
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/core/SkBitmap.h"
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "ui/base/animation/slide_animation.h"
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/gtk/gtk_signal.h"
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/window_open_disposition.h"
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutocompleteEditViewGtk;
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Browser;
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CommandUpdater;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ContentSettingImageModel;
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ContentSettingBubbleGtk;
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionAction;
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GtkThemeProvider;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap;
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents;
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ToolbarModel;
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass LocationBarViewGtk : public AutocompleteEditController,
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           public LocationBar,
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           public LocationBarTesting,
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           public NotificationObserver {
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit LocationBarViewGtk(Browser* browser);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~LocationBarViewGtk();
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Init(bool popup_window_mode);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetProfile(Profile* profile);
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the widget the caller should host.  You must call Init() first.
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* widget() { return hbox_.get(); }
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Returns the widget the page info bubble should point to.
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  GtkWidget* location_icon_widget() const { return location_icon_image_; }
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns the widget the extension installed bubble should point to.
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  GtkWidget* location_entry_widget() const { return entry_box_; }
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the current TabContents.
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContents* GetTabContents() const;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets |preview_enabled| for the PageActionViewGtk associated with this
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |page_action|. If |preview_enabled| is true, the view will display the
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // page action's icon even though it has not been activated by the extension.
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This is used by the ExtensionInstalledBubbleGtk to preview what the icon
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // will look like for the user upon installation of the extension.
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetPreviewEnabledPageAction(ExtensionAction *page_action,
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   bool preview_enabled);
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Retrieves the GtkWidget which is associated with PageActionView
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // corresponding to |page_action|.
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* GetPageActionWidget(ExtensionAction* page_action);
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Updates the location bar.  We also reset the bar's permanent text and
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // security style, and, if |tab_for_state_restoring| is non-NULL, also
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // restore saved state that the tab holds.
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Update(const TabContents* tab_for_state_restoring);
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Show the bookmark bubble.
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ShowStarBubble(const GURL& url, bool newly_boomkarked);
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set the starred state of the bookmark star.
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetStarred(bool starred);
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implement the AutocompleteEditController interface.
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnAutocompleteAccept(const GURL& url,
96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                    WindowOpenDisposition disposition,
97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                    PageTransition::Type transition,
98dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                    const GURL& alternate_nav_url) OVERRIDE;
99dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnChanged() OVERRIDE;
100dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnSelectionBoundsChanged() OVERRIDE;
101dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnKillFocus() OVERRIDE;
102dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnSetFocus() OVERRIDE;
103dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnInputInProgress(bool in_progress) OVERRIDE;
104dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual SkBitmap GetFavIcon() const OVERRIDE;
105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual string16 GetTitle() const OVERRIDE;
106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual InstantController* GetInstant() OVERRIDE;
107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual TabContentsWrapper* GetTabContentsWrapper() OVERRIDE;
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implement the LocationBar interface.
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ShowFirstRunBubble(FirstRun::BubbleType bubble_type);
1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void SetSuggestedText(const string16& text);
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual std::wstring GetInputString() const;
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual WindowOpenDisposition GetWindowOpenDisposition() const;
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual PageTransition::Type GetPageTransition() const;
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void AcceptInput();
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void FocusLocation(bool select_all);
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void FocusSearch();
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateContentSettingsIcons();
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdatePageActions();
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void InvalidatePageActions();
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SaveStateToContents(TabContents* contents);
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Revert();
1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual const AutocompleteEditView* location_entry() const;
1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual AutocompleteEditView* location_entry();
1253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual LocationBarTesting* GetLocationBarForTesting();
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implement the LocationBarTesting interface.
12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual int PageActionCount();
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual int PageActionVisibleCount();
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ExtensionAction* GetPageAction(size_t index);
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ExtensionAction* GetVisiblePageAction(size_t index);
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void TestPageActionPressed(size_t index);
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implement the NotificationObserver interface.
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Observe(NotificationType type,
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationSource& source,
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationDetails& details);
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Edit background color.
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static const GdkColor kBackgroundColor;
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
143dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  class ContentSettingImageViewGtk : public InfoBubbleGtkDelegate,
144dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                     public ui::AnimationDelegate {
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   public:
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ContentSettingImageViewGtk(ContentSettingsType content_type,
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               const LocationBarViewGtk* parent,
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Profile* profile);
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual ~ContentSettingImageViewGtk();
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
151dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    GtkWidget* widget() { return alignment_.get(); }
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    void set_profile(Profile* profile) { profile_ = profile; }
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool IsVisible() { return GTK_WIDGET_VISIBLE(widget()); }
156201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    void UpdateFromTabContents(TabContents* tab_contents);
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
158dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Overridden from ui::AnimationDelegate:
159dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    virtual void AnimationProgressed(const ui::Animation* animation);
160dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    virtual void AnimationEnded(const ui::Animation* animation);
161dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    virtual void AnimationCanceled(const ui::Animation* animation);
162dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   private:
164dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Start the process of showing the label.
165dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    void StartAnimating();
166dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
167dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Slide the label shut.
168dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    void CloseAnimation();
169dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CHROMEGTK_CALLBACK_1(ContentSettingImageViewGtk, gboolean, OnButtonPressed,
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         GdkEvent*);
172dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    CHROMEGTK_CALLBACK_1(ContentSettingImageViewGtk, gboolean, OnExpose,
173dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                         GdkEventExpose*);
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // InfoBubbleDelegate overrides:
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual void InfoBubbleClosing(InfoBubbleGtk* info_bubble,
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   bool closed_by_escape);
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<ContentSettingImageModel> content_setting_image_model_;
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The widgets for this content settings view.
182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    OwnedWidgetGtk alignment_;
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    OwnedWidgetGtk event_box_;
184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    GtkWidget* hbox_;
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    OwnedWidgetGtk image_;
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
187dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Explanatory text ("popup blocked").
188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    OwnedWidgetGtk label_;
189dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The owning LocationBarViewGtk.
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const LocationBarViewGtk* parent_;
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The currently active profile.
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Profile* profile_;
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The currently shown info bubble if any.
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ContentSettingBubbleGtk* info_bubble_;
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // When we show explanatory text, we slide it in/out.
200dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    ui::SlideAnimation animation_;
201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // The label's default requisition (cached so we can animate accordingly).
203dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    GtkRequisition label_req_;
204dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
205dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    ScopedRunnableMethodFactory<ContentSettingImageViewGtk> method_factory_;
206dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DISALLOW_COPY_AND_ASSIGN(ContentSettingImageViewGtk);
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  class PageActionViewGtk : public ImageLoadingTracker::Observer,
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            public ExtensionContextMenuModel::PopupDelegate {
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   public:
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    PageActionViewGtk(
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        LocationBarViewGtk* owner, Profile* profile,
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        ExtensionAction* page_action);
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual ~PageActionViewGtk();
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GtkWidget* widget() { return event_box_.get(); }
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ExtensionAction* page_action() { return page_action_; }
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    void set_preview_enabled(bool preview_enabled) {
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      preview_enabled_ = preview_enabled;
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool IsVisible() { return GTK_WIDGET_VISIBLE(widget()); }
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Called to notify the PageAction that it should determine whether to be
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // visible or hidden. |contents| is the TabContents that is active, |url|
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // is the current page URL.
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    void UpdateVisibility(TabContents* contents, GURL url);
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // A callback from ImageLoadingTracker for when the image has loaded.
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual void OnImageLoaded(
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        SkBitmap* image, ExtensionResource resource, int index);
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Simulate left mouse click on the page action button.
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    void TestActivatePageAction();
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Overridden from ExtensionContextMenuModel::PopupDelegate:
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    virtual void InspectPopup(ExtensionAction* action);
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   private:
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Show the popup for this page action. If |devtools| is true, show it
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // with a debugger window attached. Returns true if a popup was shown.
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool ShowPopup(bool devtools);
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CHROMEGTK_CALLBACK_1(PageActionViewGtk, gboolean, OnButtonPressed,
24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                         GdkEventButton*);
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CHROMEGTK_CALLBACK_1(PageActionViewGtk, gboolean, OnExposeEvent,
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         GdkEventExpose*);
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The location bar view that owns us.
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    LocationBarViewGtk* owner_;
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The current profile (not owned by us).
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Profile* profile_;
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The PageAction that this view represents. The PageAction is not owned by
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // us, it resides in the extension of this particular profile.
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ExtensionAction* page_action_;
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // A cache of all the different icon paths associated with this page action.
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    typedef std::map<std::string, GdkPixbuf*> PixbufMap;
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    PixbufMap pixbufs_;
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // A cache of the last dynamically generated bitmap and the pixbuf that
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // corresponds to it. We keep track of both so we can free old pixbufs as
269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // their icons are replaced.
270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SkBitmap last_icon_skbitmap_;
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GdkPixbuf* last_icon_pixbuf_;
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The object that is waiting for the image loading to complete
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // asynchronously.
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ImageLoadingTracker tracker_;
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The widgets for this page action.
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    OwnedWidgetGtk event_box_;
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    OwnedWidgetGtk image_;
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The tab id we are currently showing the icon for.
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int current_tab_id_;
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The URL we are currently showing the icon for.
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GURL current_url_;
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // This is used for post-install visual feedback. The page_action icon
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // is briefly shown even if it hasn't been enabled by its extension.
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool preview_enabled_;
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // The context menu view and model for this extension action.
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<MenuGtk> context_menu_;
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_refptr<ExtensionContextMenuModel> context_menu_model_;
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DISALLOW_COPY_AND_ASSIGN(PageActionViewGtk);
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class PageActionViewGtk;
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates, initializes, and packs the location icon, EV certificate name,
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // and optional border.
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void BuildSiteTypeArea();
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Enable or disable the location icon/EV certificate as a drag source for
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the URL.
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetSiteTypeDragSource();
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* site_type_area() { return site_type_alignment_; }
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_1(LocationBarViewGtk, gboolean, HandleExpose,
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GdkEventExpose*);
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_1(LocationBarViewGtk, gboolean, OnIconReleased,
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GdkEventButton*);
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_4(LocationBarViewGtk, void, OnIconDragData,
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GdkDragContext*, GtkSelectionData*, guint, guint);
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnIconDragBegin,
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GdkDragContext*);
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnIconDragEnd,
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GdkDragContext*);
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnHboxSizeAllocate,
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GtkAllocation*);
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnEntryBoxSizeAllocate,
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GtkAllocation*);
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CHROMEGTK_CALLBACK_1(LocationBarViewGtk, gboolean, OnStarButtonPress,
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       GdkEventButton*);
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Updates the site type area: changes the icon and shows/hides the EV
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // certificate information.
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateSiteTypeArea();
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Updates the maximum size of the EV certificate label.
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateEVCertificateLabelSize();
332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets the text that should be displayed in the info label and its associated
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // tooltip text.  Call with an empty string if the info label should be
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // hidden.
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetInfoText();
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set the keyword text for the Search BLAH: keyword box.
33972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void SetKeywordLabel(const string16& keyword);
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set the keyword text for the "Press tab to search BLAH" hint box.
34272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void SetKeywordHintLabel(const string16& keyword);
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ShowFirstRunBubbleInternal(FirstRun::BubbleType bubble_type);
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Show or hide |tab_to_search_box_| and |tab_to_search_hint_| according to
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the value of |show_selected_keyword_|, |show_keyword_hint_|, and the
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // available horizontal space in the location bar.
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void AdjustChildrenVisibility();
350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Build the star icon.
352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CreateStarButton();
353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Update the star icon after it is toggled or the theme changes.
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateStarIcon();
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if we should only show the URL and none of the extras like
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the star button or page actions.
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool ShouldOnlyShowLocation();
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The outermost widget we want to be hosted.
362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  OwnedWidgetGtk hbox_;
363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Star button.
365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  OwnedWidgetGtk star_;
366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* star_image_;
367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool starred_;
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // An icon to the left of the address bar.
370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* site_type_alignment_;
371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* site_type_event_box_;
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* location_icon_image_;
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* drag_icon_;
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool enable_location_drag_;
375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(pkasting): Split this label off and move the rest of the items to the
376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // left of the address bar.
377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* security_info_label_;
378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Content setting icons.
380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  OwnedWidgetGtk content_setting_hbox_;
381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedVector<ContentSettingImageViewGtk> content_setting_views_;
382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Extension page action icons.
384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  OwnedWidgetGtk page_action_hbox_;
385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedVector<PageActionViewGtk> page_action_views_;
386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The widget that contains our tab hints and the location bar.
388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* entry_box_;
389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Area on the left shown when in tab to search mode.
391dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GtkWidget* tab_to_search_alignment_;
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_box_;
393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_magnifier_;
394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_full_label_;
395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_partial_label_;
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Hint to user that they can tab-to-search by hitting tab.
398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_hint_;
399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_hint_leading_label_;
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_hint_icon_;
401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* tab_to_search_hint_trailing_label_;
402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<AutocompleteEditViewGtk> location_entry_;
404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Alignment used to wrap |location_entry_|.
406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkWidget* location_entry_alignment_;
407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Profile* profile_;
409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CommandUpdater* command_updater_;
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ToolbarModel* toolbar_model_;
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Browser* browser_;
412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // When we get an OnAutocompleteAccept notification from the autocomplete
414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // edit, we save the input string so we can give it back to the browser on
415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the LocationBar interface via GetInputString().
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::wstring location_input_;
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The user's desired disposition for how their input should be opened.
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  WindowOpenDisposition disposition_;
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The transition type to use for the navigation.
422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PageTransition::Type transition_;
423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Used to schedule a task for the first run info bubble.
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedRunnableMethodFactory<LocationBarViewGtk> first_run_bubble_;
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // When true, the location bar view is read only and also is has a slightly
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // different presentation (font size / color). This is used for popups.
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool popup_window_mode_;
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Provides colors and rendering mode.
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GtkThemeProvider* theme_provider_;
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NotificationRegistrar registrar_;
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Width of the main |hbox_|. Used to properly elide the EV certificate.
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int hbox_width_;
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Width of the hbox that holds |tab_to_search_box_|, |location_entry_| and
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |tab_to_search_hint_|.
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int entry_box_width_;
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicate if |tab_to_search_box_| should be shown.
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool show_selected_keyword_;
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicate if |tab_to_search_hint_| should be shown.
447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool show_keyword_hint_;
448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The last search keyword that was shown via the |tab_to_search_box_|.
45072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  string16 last_keyword_;
451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(LocationBarViewGtk);
453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif  // CHROME_BROWSER_UI_GTK_LOCATION_BAR_VIEW_GTK_H_
456