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