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