Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(662)

Unified Diff: chrome/browser/ui/gtk/location_bar_view_gtk.h

Issue 6099014: Move chrome/browser/gtk to chrome/browser/ui/gtk (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Move browser/gtk/ to browser/ui/gtk/, leave header stubs, update new header guards Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/gtk/location_bar_view_gtk.h
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.h b/chrome/browser/ui/gtk/location_bar_view_gtk.h
new file mode 100644
index 0000000000000000000000000000000000000000..ccaef9b808d21a419970915de242a5a1d93ca8cd
--- /dev/null
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk.h
@@ -0,0 +1,435 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_GTK_LOCATION_BAR_VIEW_GTK_H_
+#define CHROME_BROWSER_UI_GTK_LOCATION_BAR_VIEW_GTK_H_
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include <map>
+#include <string>
+
+#include "app/gtk_signal.h"
+#include "base/basictypes.h"
+#include "base/scoped_ptr.h"
+#include "base/scoped_vector.h"
+#include "chrome/browser/autocomplete/autocomplete_edit.h"
+#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
+#include "chrome/browser/extensions/extension_context_menu_model.h"
+#include "chrome/browser/extensions/image_loading_tracker.h"
+#include "chrome/browser/first_run/first_run.h"
+#include "chrome/browser/gtk/info_bubble_gtk.h"
+#include "chrome/browser/gtk/menu_gtk.h"
+#include "chrome/browser/gtk/owned_widget_gtk.h"
+#include "chrome/browser/ui/omnibox/location_bar.h"
+#include "chrome/common/content_settings_types.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/page_transition_types.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "webkit/glue/window_open_disposition.h"
+
+class AutocompleteEditViewGtk;
+class Browser;
+class CommandUpdater;
+class ContentSettingImageModel;
+class ContentSettingBubbleGtk;
+class ExtensionAction;
+class GtkThemeProvider;
+class Profile;
+class SkBitmap;
+class TabContents;
+class ToolbarModel;
+
+class LocationBarViewGtk : public AutocompleteEditController,
+ public LocationBar,
+ public LocationBarTesting,
+ public NotificationObserver {
+ public:
+ explicit LocationBarViewGtk(Browser* browser);
+ virtual ~LocationBarViewGtk();
+
+ void Init(bool popup_window_mode);
+
+ void SetProfile(Profile* profile);
+
+ // Returns the widget the caller should host. You must call Init() first.
+ GtkWidget* widget() { return hbox_.get(); }
+
+ // Returns the widget the page info bubble should point to.
+ GtkWidget* location_icon_widget() const { return location_icon_image_; }
+
+ // Returns the widget the extension installed bubble should point to.
+ GtkWidget* location_entry_widget() const { return entry_box_; }
+
+ // Returns the current TabContents.
+ TabContents* GetTabContents() const;
+
+ // Sets |preview_enabled| for the PageActionViewGtk associated with this
+ // |page_action|. If |preview_enabled| is true, the view will display the
+ // page action's icon even though it has not been activated by the extension.
+ // This is used by the ExtensionInstalledBubbleGtk to preview what the icon
+ // will look like for the user upon installation of the extension.
+ void SetPreviewEnabledPageAction(ExtensionAction *page_action,
+ bool preview_enabled);
+
+ // Retrieves the GtkWidget which is associated with PageActionView
+ // corresponding to |page_action|.
+ GtkWidget* GetPageActionWidget(ExtensionAction* page_action);
+
+ // Updates the location bar. We also reset the bar's permanent text and
+ // security style, and, if |tab_for_state_restoring| is non-NULL, also
+ // restore saved state that the tab holds.
+ void Update(const TabContents* tab_for_state_restoring);
+
+ // Show the bookmark bubble.
+ void ShowStarBubble(const GURL& url, bool newly_boomkarked);
+
+ // Set the starred state of the bookmark star.
+ void SetStarred(bool starred);
+
+ // Implement the AutocompleteEditController interface.
+ virtual void OnAutocompleteWillClosePopup();
+ virtual void OnAutocompleteLosingFocus(gfx::NativeView view_gaining_focus);
+ virtual void OnAutocompleteWillAccept();
+ // For this implementation, the parameter is ignored.
+ virtual bool OnCommitSuggestedText(const std::wstring& typed_text);
+ virtual bool AcceptCurrentInstantPreview();
+ virtual void OnSetSuggestedSearchText(const string16& suggested_text);
+ virtual void OnPopupBoundsChanged(const gfx::Rect& bounds);
+ virtual void OnAutocompleteAccept(const GURL& url,
+ WindowOpenDisposition disposition,
+ PageTransition::Type transition,
+ const GURL& alternate_nav_url);
+ virtual void OnChanged();
+ virtual void OnSelectionBoundsChanged();
+ virtual void OnKillFocus();
+ virtual void OnSetFocus();
+ virtual void OnInputInProgress(bool in_progress);
+ virtual SkBitmap GetFavIcon() const;
+ virtual std::wstring GetTitle() const;
+
+ // Implement the LocationBar interface.
+ virtual void ShowFirstRunBubble(FirstRun::BubbleType bubble_type);
+ virtual void SetSuggestedText(const string16& text);
+ virtual std::wstring GetInputString() const;
+ virtual WindowOpenDisposition GetWindowOpenDisposition() const;
+ virtual PageTransition::Type GetPageTransition() const;
+ virtual void AcceptInput();
+ virtual void FocusLocation(bool select_all);
+ virtual void FocusSearch();
+ virtual void UpdateContentSettingsIcons();
+ virtual void UpdatePageActions();
+ virtual void InvalidatePageActions();
+ virtual void SaveStateToContents(TabContents* contents);
+ virtual void Revert();
+ virtual const AutocompleteEditView* location_entry() const;
+ virtual AutocompleteEditView* location_entry();
+ virtual LocationBarTesting* GetLocationBarForTesting();
+
+ // Implement the LocationBarTesting interface.
+ virtual int PageActionCount();
+ virtual int PageActionVisibleCount();
+ virtual ExtensionAction* GetPageAction(size_t index);
+ virtual ExtensionAction* GetVisiblePageAction(size_t index);
+ virtual void TestPageActionPressed(size_t index);
+
+ // Implement the NotificationObserver interface.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ // Edit background color.
+ static const GdkColor kBackgroundColor;
+
+ private:
+ class ContentSettingImageViewGtk : public InfoBubbleGtkDelegate {
+ public:
+ ContentSettingImageViewGtk(ContentSettingsType content_type,
+ const LocationBarViewGtk* parent,
+ Profile* profile);
+ virtual ~ContentSettingImageViewGtk();
+
+ GtkWidget* widget() { return event_box_.get(); }
+
+ void set_profile(Profile* profile) { profile_ = profile; }
+
+ bool IsVisible() { return GTK_WIDGET_VISIBLE(widget()); }
+ void UpdateFromTabContents(TabContents* tab_contents);
+
+ private:
+ CHROMEGTK_CALLBACK_1(ContentSettingImageViewGtk, gboolean, OnButtonPressed,
+ GdkEvent*);
+
+ // InfoBubbleDelegate overrides:
+ virtual void InfoBubbleClosing(InfoBubbleGtk* info_bubble,
+ bool closed_by_escape);
+
+ scoped_ptr<ContentSettingImageModel> content_setting_image_model_;
+
+ // The widgets for this content settings view.
+ OwnedWidgetGtk event_box_;
+ OwnedWidgetGtk image_;
+
+ // The owning LocationBarViewGtk.
+ const LocationBarViewGtk* parent_;
+
+ // The currently active profile.
+ Profile* profile_;
+
+ // The currently shown info bubble if any.
+ ContentSettingBubbleGtk* info_bubble_;
+
+ DISALLOW_COPY_AND_ASSIGN(ContentSettingImageViewGtk);
+ };
+
+ class PageActionViewGtk : public ImageLoadingTracker::Observer,
+ public ExtensionContextMenuModel::PopupDelegate {
+ public:
+ PageActionViewGtk(
+ LocationBarViewGtk* owner, Profile* profile,
+ ExtensionAction* page_action);
+ virtual ~PageActionViewGtk();
+
+ GtkWidget* widget() { return event_box_.get(); }
+
+ ExtensionAction* page_action() { return page_action_; }
+
+ void set_preview_enabled(bool preview_enabled) {
+ preview_enabled_ = preview_enabled;
+ }
+
+ bool IsVisible() { return GTK_WIDGET_VISIBLE(widget()); }
+
+ // Called to notify the PageAction that it should determine whether to be
+ // visible or hidden. |contents| is the TabContents that is active, |url|
+ // is the current page URL.
+ void UpdateVisibility(TabContents* contents, GURL url);
+
+ // A callback from ImageLoadingTracker for when the image has loaded.
+ virtual void OnImageLoaded(
+ SkBitmap* image, ExtensionResource resource, int index);
+
+ // Simulate left mouse click on the page action button.
+ void TestActivatePageAction();
+
+ // Overridden from ExtensionContextMenuModel::PopupDelegate:
+ virtual void InspectPopup(ExtensionAction* action);
+
+ private:
+ // Show the popup for this page action. If |devtools| is true, show it
+ // with a debugger window attached. Returns true if a popup was shown.
+ bool ShowPopup(bool devtools);
+
+ CHROMEGTK_CALLBACK_1(PageActionViewGtk, gboolean, OnButtonPressed,
+ GdkEvent*);
+ CHROMEGTK_CALLBACK_1(PageActionViewGtk, gboolean, OnExposeEvent,
+ GdkEventExpose*);
+
+ // The location bar view that owns us.
+ LocationBarViewGtk* owner_;
+
+ // The current profile (not owned by us).
+ Profile* profile_;
+
+ // The PageAction that this view represents. The PageAction is not owned by
+ // us, it resides in the extension of this particular profile.
+ ExtensionAction* page_action_;
+
+ // A cache of all the different icon paths associated with this page action.
+ typedef std::map<std::string, GdkPixbuf*> PixbufMap;
+ PixbufMap pixbufs_;
+
+ // A cache of the last dynamically generated bitmap and the pixbuf that
+ // corresponds to it. We keep track of both so we can free old pixbufs as
+ // their icons are replaced.
+ SkBitmap last_icon_skbitmap_;
+ GdkPixbuf* last_icon_pixbuf_;
+
+ // The object that is waiting for the image loading to complete
+ // asynchronously.
+ ImageLoadingTracker tracker_;
+
+ // The widgets for this page action.
+ OwnedWidgetGtk event_box_;
+ OwnedWidgetGtk image_;
+
+ // The tab id we are currently showing the icon for.
+ int current_tab_id_;
+
+ // The URL we are currently showing the icon for.
+ GURL current_url_;
+
+ // This is used for post-install visual feedback. The page_action icon
+ // is briefly shown even if it hasn't been enabled by its extension.
+ bool preview_enabled_;
+
+ // The context menu view and model for this extension action.
+ scoped_ptr<MenuGtk> context_menu_;
+ scoped_refptr<ExtensionContextMenuModel> context_menu_model_;
+
+ DISALLOW_COPY_AND_ASSIGN(PageActionViewGtk);
+ };
+ friend class PageActionViewGtk;
+
+ // Creates, initializes, and packs the location icon, EV certificate name,
+ // and optional border.
+ void BuildSiteTypeArea();
+
+ // Enable or disable the location icon/EV certificate as a drag source for
+ // the URL.
+ void SetSiteTypeDragSource();
+
+ GtkWidget* site_type_area() { return site_type_alignment_; }
+
+ CHROMEGTK_CALLBACK_1(LocationBarViewGtk, gboolean, HandleExpose,
+ GdkEventExpose*);
+ CHROMEGTK_CALLBACK_1(LocationBarViewGtk, gboolean, OnIconReleased,
+ GdkEventButton*);
+ CHROMEGTK_CALLBACK_4(LocationBarViewGtk, void, OnIconDragData,
+ GdkDragContext*, GtkSelectionData*, guint, guint);
+ CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnIconDragBegin,
+ GdkDragContext*);
+ CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnIconDragEnd,
+ GdkDragContext*);
+ CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnHboxSizeAllocate,
+ GtkAllocation*);
+ CHROMEGTK_CALLBACK_1(LocationBarViewGtk, void, OnEntryBoxSizeAllocate,
+ GtkAllocation*);
+ CHROMEGTK_CALLBACK_1(LocationBarViewGtk, gboolean, OnStarButtonPress,
+ GdkEventButton*);
+
+ // Updates the site type area: changes the icon and shows/hides the EV
+ // certificate information.
+ void UpdateSiteTypeArea();
+
+ // Updates the maximum size of the EV certificate label.
+ void UpdateEVCertificateLabelSize();
+
+ // Sets the text that should be displayed in the info label and its associated
+ // tooltip text. Call with an empty string if the info label should be
+ // hidden.
+ void SetInfoText();
+
+ // Set the keyword text for the Search BLAH: keyword box.
+ void SetKeywordLabel(const std::wstring& keyword);
+
+ // Set the keyword text for the "Press tab to search BLAH" hint box.
+ void SetKeywordHintLabel(const std::wstring& keyword);
+
+ void ShowFirstRunBubbleInternal(FirstRun::BubbleType bubble_type);
+
+ // Show or hide |tab_to_search_box_| and |tab_to_search_hint_| according to
+ // the value of |show_selected_keyword_|, |show_keyword_hint_|, and the
+ // available horizontal space in the location bar.
+ void AdjustChildrenVisibility();
+
+ // Build the star icon.
+ void CreateStarButton();
+
+ // Update the star icon after it is toggled or the theme changes.
+ void UpdateStarIcon();
+
+ // Returns true if we should only show the URL and none of the extras like
+ // the star button or page actions.
+ bool ShouldOnlyShowLocation();
+
+ // The outermost widget we want to be hosted.
+ OwnedWidgetGtk hbox_;
+
+ // Star button.
+ OwnedWidgetGtk star_;
+ GtkWidget* star_image_;
+ bool starred_;
+
+ // An icon to the left of the address bar.
+ GtkWidget* site_type_alignment_;
+ GtkWidget* site_type_event_box_;
+ GtkWidget* location_icon_image_;
+ GtkWidget* drag_icon_;
+ bool enable_location_drag_;
+ // TODO(pkasting): Split this label off and move the rest of the items to the
+ // left of the address bar.
+ GtkWidget* security_info_label_;
+
+ // Content setting icons.
+ OwnedWidgetGtk content_setting_hbox_;
+ ScopedVector<ContentSettingImageViewGtk> content_setting_views_;
+
+ // Extension page action icons.
+ OwnedWidgetGtk page_action_hbox_;
+ ScopedVector<PageActionViewGtk> page_action_views_;
+
+ // The widget that contains our tab hints and the location bar.
+ GtkWidget* entry_box_;
+
+ // Area on the left shown when in tab to search mode.
+ GtkWidget* tab_to_search_box_;
+ GtkWidget* tab_to_search_magnifier_;
+ GtkWidget* tab_to_search_full_label_;
+ GtkWidget* tab_to_search_partial_label_;
+
+ // Hint to user that they can tab-to-search by hitting tab.
+ GtkWidget* tab_to_search_hint_;
+ GtkWidget* tab_to_search_hint_leading_label_;
+ GtkWidget* tab_to_search_hint_icon_;
+ GtkWidget* tab_to_search_hint_trailing_label_;
+
+ scoped_ptr<AutocompleteEditViewGtk> location_entry_;
+
+ // Alignment used to wrap |location_entry_|.
+ GtkWidget* location_entry_alignment_;
+
+ Profile* profile_;
+ CommandUpdater* command_updater_;
+ ToolbarModel* toolbar_model_;
+ Browser* browser_;
+
+ // When we get an OnAutocompleteAccept notification from the autocomplete
+ // edit, we save the input string so we can give it back to the browser on
+ // the LocationBar interface via GetInputString().
+ std::wstring location_input_;
+
+ // The user's desired disposition for how their input should be opened.
+ WindowOpenDisposition disposition_;
+
+ // The transition type to use for the navigation.
+ PageTransition::Type transition_;
+
+ // Used to schedule a task for the first run info bubble.
+ ScopedRunnableMethodFactory<LocationBarViewGtk> first_run_bubble_;
+
+ // When true, the location bar view is read only and also is has a slightly
+ // different presentation (font size / color). This is used for popups.
+ bool popup_window_mode_;
+
+ // Provides colors and rendering mode.
+ GtkThemeProvider* theme_provider_;
+
+ NotificationRegistrar registrar_;
+
+ // Width of the main |hbox_|. Used to properly elide the EV certificate.
+ int hbox_width_;
+
+ // Width of the hbox that holds |tab_to_search_box_|, |location_entry_| and
+ // |tab_to_search_hint_|.
+ int entry_box_width_;
+
+ // Indicate if |tab_to_search_box_| should be shown.
+ bool show_selected_keyword_;
+
+ // Indicate if |tab_to_search_hint_| should be shown.
+ bool show_keyword_hint_;
+
+ // The last search keyword that was shown via the |tab_to_search_box_|.
+ std::wstring last_keyword_;
+
+ // True if we should update the instant controller when the edit text changes.
+ bool update_instant_;
+
+ DISALLOW_COPY_AND_ASSIGN(LocationBarViewGtk);
+};
+
+#endif // CHROME_BROWSER_UI_GTK_LOCATION_BAR_VIEW_GTK_H_
« no previous file with comments | « chrome/browser/ui/gtk/keyword_editor_view_unittest.cc ('k') | chrome/browser/ui/gtk/location_bar_view_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698