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

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

Issue 10796116: [Web Intents] Basic location bar UI for window disposition picker affordance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactor content settings to PageTool base class. Add stubs for mac/win. Created 8 years, 5 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.cc
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
index fe576e2832db1407f27c130a6f0652fb97778774..06f6e308138e203c0116f2bddddfa116b4f738cc 100644
--- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
@@ -59,6 +59,7 @@
#include "chrome/browser/ui/gtk/rounded_window.h"
#include "chrome/browser/ui/gtk/view_id_util.h"
#include "chrome/browser/ui/gtk/zoom_bubble_gtk.h"
+#include "chrome/browser/ui/intents/web_intent_picker_controller.h"
#include "chrome/browser/ui/omnibox/location_bar_util.h"
#include "chrome/browser/ui/omnibox/omnibox_edit_model.h"
#include "chrome/browser/ui/omnibox/omnibox_popup_model.h"
@@ -140,16 +141,17 @@ const int kCornerSize = 3;
const int kContentSettingImageDisplayTime = 3200;
// The time, in ms, of the animation (open and close).
const int kContentSettingImageAnimationTime = 150;
+const int kPageToolAnimationTime = 1000;
// Color of border of content setting area (icon/label).
const GdkColor kContentSettingBorderColor = GDK_COLOR_RGB(0xe9, 0xb9, 0x66);
// Colors for the background gradient.
-const double kContentSettingTopColor[] = { 0xff / 255.0,
- 0xf8 / 255.0,
- 0xd4 / 255.0 };
-const double kContentSettingBottomColor[] = { 0xff / 255.0,
- 0xe6 / 255.0,
- 0xaf / 255.0 };
+const GdkColor kContentSettingTopColor = GDK_COLOR_RGB(0xff, 0xf8, 0xd4);
+const GdkColor kContentSettingBottomColor = GDK_COLOR_RGB(0xff, 0xe6, 0xaf);
+
+const GdkColor kGrayBorderColor = GDK_COLOR_RGB(0xa0, 0xa0, 0xa0);
+const GdkColor kTopColorGray = GDK_COLOR_RGB(0xe5, 0xe5, 0xe5);
+const GdkColor kBottomColorGray = GDK_COLOR_RGB(0xd0, 0xd0, 0xd0);
// If widget is visible, increment the int pointed to by count.
// Suitible for use with gtk_container_foreach.
@@ -178,6 +180,7 @@ LocationBarViewGtk::LocationBarViewGtk(Browser* browser)
drag_icon_(NULL),
enable_location_drag_(false),
security_info_label_(NULL),
+ web_intents_tool_view_(this),
tab_to_search_alignment_(NULL),
tab_to_search_box_(NULL),
tab_to_search_full_label_(NULL),
@@ -210,6 +213,7 @@ LocationBarViewGtk::~LocationBarViewGtk() {
hbox_.Destroy();
content_setting_hbox_.Destroy();
page_action_hbox_.Destroy();
+ web_intents_hbox_.Destroy();
}
void LocationBarViewGtk::Init(bool popup_window_mode) {
@@ -365,6 +369,14 @@ void LocationBarViewGtk::Init(bool popup_window_mode) {
gtk_box_pack_end(GTK_BOX(hbox_.get()), page_action_hbox_.get(),
FALSE, FALSE, 0);
+ web_intents_hbox_.Own(gtk_hbox_new(FALSE, kInnerPadding));
+ gtk_widget_set_name(web_intents_hbox_.get(),
+ "chrome-web-intents-hbox");
+ gtk_box_pack_end(GTK_BOX(hbox_.get()), web_intents_hbox_.get(),
+ FALSE, FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(web_intents_hbox_.get()),
+ web_intents_tool_view_.widget(), FALSE, FALSE, 0);
+
// Now that we've created the widget hierarchy, connect to the main |hbox_|'s
// size-allocate so we can do proper resizing and eliding on
// |security_info_label_|.
@@ -496,6 +508,7 @@ void LocationBarViewGtk::Update(const WebContents* contents) {
UpdateSiteTypeArea();
UpdateContentSettingsIcons();
UpdatePageActions();
+ UpdateWebIntentsTool();
location_entry_->Update(contents);
// The security level (background color) could have changed, etc.
if (theme_service_->UsingNativeTheme()) {
@@ -709,13 +722,12 @@ void LocationBarViewGtk::FocusSearch() {
}
void LocationBarViewGtk::UpdateContentSettingsIcons() {
- WebContents* web_contents = GetWebContents();
bool any_visible = false;
for (ScopedVector<ContentSettingImageViewGtk>::iterator i(
content_setting_views_.begin());
i != content_setting_views_.end(); ++i) {
- (*i)->UpdateFromWebContents(
- toolbar_model_->input_in_progress() ? NULL : web_contents);
+ (*i)->Update(
+ toolbar_model_->input_in_progress() ? NULL : GetTabContents());
any_visible = (*i)->IsVisible() || any_visible;
}
@@ -779,6 +791,12 @@ void LocationBarViewGtk::InvalidatePageActions() {
}
}
+void LocationBarViewGtk::UpdateWebIntentsTool() {
+ web_intents_tool_view_.Update(GetTabContents());
+ gtk_widget_set_visible(web_intents_hbox_.get(),
+ web_intents_tool_view_.IsVisible());
+}
+
void LocationBarViewGtk::SaveStateToContents(WebContents* contents) {
location_entry_->SaveStateToTab(contents);
}
@@ -921,6 +939,7 @@ void LocationBarViewGtk::Observe(int type,
UpdateChromeToMobileIcon();
UpdateSiteTypeArea();
UpdateContentSettingsIcons();
+ UpdateWebIntentsTool();
break;
}
@@ -1413,20 +1432,16 @@ void LocationBarViewGtk::AdjustChildrenVisibility() {
}
////////////////////////////////////////////////////////////////////////////////
-// LocationBarViewGtk::ContentSettingImageViewGtk
-LocationBarViewGtk::ContentSettingImageViewGtk::ContentSettingImageViewGtk(
- ContentSettingsType content_type,
+// LocationBarViewGtk::PageToolViewGtk
+
+LocationBarViewGtk::PageToolViewGtk::PageToolViewGtk(
const LocationBarViewGtk* parent)
- : content_setting_image_model_(
- ContentSettingImageModel::CreateContentSettingImageModel(
- content_type)),
- alignment_(gtk_alignment_new(0, 0, 1, 1)),
+ : alignment_(gtk_alignment_new(0, 0, 1, 1)),
event_box_(gtk_event_box_new()),
hbox_(gtk_hbox_new(FALSE, kInnerPadding)),
image_(gtk_image_new()),
label_(gtk_label_new(NULL)),
parent_(parent),
- content_setting_bubble_(NULL),
animation_(this),
weak_factory_(this) {
gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_.get()), 1, 1, 0, 0);
@@ -1450,70 +1465,55 @@ LocationBarViewGtk::ContentSettingImageViewGtk::ContentSettingImageViewGtk(
gtk_container_add(GTK_CONTAINER(event_box_.get()), hbox_);
gtk_widget_hide(widget());
- animation_.SetSlideDuration(kContentSettingImageAnimationTime);
+ animation_.SetSlideDuration(kPageToolAnimationTime);
}
-LocationBarViewGtk::ContentSettingImageViewGtk::~ContentSettingImageViewGtk() {
+LocationBarViewGtk::PageToolViewGtk::~PageToolViewGtk() {
image_.Destroy();
label_.Destroy();
event_box_.Destroy();
alignment_.Destroy();
+}
- if (content_setting_bubble_)
- content_setting_bubble_->Close();
+GtkWidget* LocationBarViewGtk::PageToolViewGtk::widget() {
+ return alignment_.get();
}
-bool LocationBarViewGtk::ContentSettingImageViewGtk::IsVisible() {
+bool LocationBarViewGtk::PageToolViewGtk::IsVisible() {
return gtk_widget_get_visible(widget());
}
-void LocationBarViewGtk::ContentSettingImageViewGtk::UpdateFromWebContents(
- WebContents* web_contents) {
- content_setting_image_model_->UpdateFromWebContents(web_contents);
- if (!content_setting_image_model_->is_visible()) {
+void LocationBarViewGtk::PageToolViewGtk::Update(
Bernhard Bauer 2012/07/27 00:35:38 Where is this method called?
+ TabContents* tab_contents) {
+ if (!tab_contents ||
+ !tab_contents->web_intent_picker_controller() ||
Bernhard Bauer 2012/07/27 00:35:38 This still seems to be Web Intents specific?
+ !tab_contents->web_intent_picker_controller()->
+ ShowLocationBarPickerTool()) {
gtk_widget_hide(widget());
return;
}
- gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()),
- GtkThemeService::GetFrom(parent_->browser()->profile())->GetImageNamed(
- content_setting_image_model_->get_icon())->ToGdkPixbuf());
-
gtk_widget_set_tooltip_text(widget(),
- content_setting_image_model_->get_tooltip().c_str());
+ l10n_util::GetStringUTF8(IDS_INTENT_PICKER_USE_ANOTHER_SERVICE).c_str());
gtk_widget_show_all(widget());
- TabSpecificContentSettings* content_settings = NULL;
- if (web_contents) {
- content_settings =
- TabContents::FromWebContents(web_contents)->content_settings();
- }
- if (!content_settings || content_settings->IsBlockageIndicated(
- content_setting_image_model_->get_content_settings_type()))
- return;
-
- // The content blockage was not yet indicated to the user. Start indication
- // animation and clear "not yet shown" flag.
- content_settings->SetBlockageHasBeenIndicated(
- content_setting_image_model_->get_content_settings_type());
-
- int label_string_id =
- content_setting_image_model_->explanatory_string_id();
- // If there's no string for the content type, we don't animate.
- if (!label_string_id)
- return;
-
gtk_label_set_text(GTK_LABEL(label_.get()),
- l10n_util::GetStringUTF8(label_string_id).c_str());
+ l10n_util::GetStringUTF8(IDS_INTENT_PICKER_USE_ANOTHER_SERVICE).c_str());
+
StartAnimating();
}
-void LocationBarViewGtk::ContentSettingImageViewGtk::StartAnimating() {
+GdkColor LocationBarViewGtk::PageToolViewGtk::button_border_color() const {
+ return kGrayBorderColor;
+}
+
+void LocationBarViewGtk::PageToolViewGtk::StartAnimating() {
if (animation_.IsShowing() || animation_.IsClosing())
return;
gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_.get()), TRUE);
- gtk_util::ActAsRoundedWindow(event_box_.get(), kContentSettingBorderColor,
+ GdkColor border_color = button_border_color();
+ gtk_util::ActAsRoundedWindow(event_box_.get(), border_color,
kCornerSize,
gtk_util::ROUNDED_ALL, gtk_util::BORDER_ALL);
@@ -1525,11 +1525,11 @@ void LocationBarViewGtk::ContentSettingImageViewGtk::StartAnimating() {
animation_.Show();
}
-void LocationBarViewGtk::ContentSettingImageViewGtk::CloseAnimation() {
+void LocationBarViewGtk::PageToolViewGtk::CloseAnimation() {
animation_.Hide();
}
-void LocationBarViewGtk::ContentSettingImageViewGtk::AnimationProgressed(
+void LocationBarViewGtk::PageToolViewGtk::AnimationProgressed(
const ui::Animation* animation) {
gtk_widget_set_size_request(
label_.get(),
@@ -1537,46 +1537,40 @@ void LocationBarViewGtk::ContentSettingImageViewGtk::AnimationProgressed(
-1);
}
-void LocationBarViewGtk::ContentSettingImageViewGtk::AnimationEnded(
+void LocationBarViewGtk::PageToolViewGtk::AnimationCanceled(
const ui::Animation* animation) {
- if (animation_.IsShowing()) {
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ContentSettingImageViewGtk::CloseAnimation,
- weak_factory_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(kContentSettingImageDisplayTime));
- } else {
+}
+
+void LocationBarViewGtk::PageToolViewGtk::AnimationEnded(
+ const ui::Animation* animation) {
+ if (!animation_.IsShowing()) {
gtk_widget_hide(label_.get());
gtk_util::StopActingAsRoundedWindow(event_box_.get());
gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_.get()), FALSE);
}
}
-void LocationBarViewGtk::ContentSettingImageViewGtk::AnimationCanceled(
- const ui::Animation* animation) {
-}
-
-gboolean LocationBarViewGtk::ContentSettingImageViewGtk::OnButtonPressed(
+gboolean LocationBarViewGtk::PageToolViewGtk::OnButtonPressed(
GtkWidget* sender, GdkEvent* event) {
- TabContents* tab_contents = parent_->GetTabContents();
- if (!tab_contents)
- return TRUE;
- Profile* profile = parent_->browser()->profile();
- content_setting_bubble_ = new ContentSettingBubbleGtk(
- sender, this,
- ContentSettingBubbleModel::CreateContentSettingBubbleModel(
- parent_->browser()->content_setting_bubble_model_delegate(),
- tab_contents,
- profile,
- content_setting_image_model_->get_content_settings_type()),
- profile, tab_contents->web_contents());
+ OnClick(sender);
return TRUE;
}
-gboolean LocationBarViewGtk::ContentSettingImageViewGtk::OnExpose(
+void LocationBarViewGtk::PageToolViewGtk::OnClick(GtkWidget* sender) {
+ LOG(INFO) << "CLICK!!!";
+}
+
+GdkColor LocationBarViewGtk::PageToolViewGtk::gradient_top_color() const {
+ return kTopColorGray;
+}
+
+GdkColor LocationBarViewGtk::PageToolViewGtk::gradient_bottom_color() const {
+ return kBottomColorGray;
+}
+
+gboolean LocationBarViewGtk::PageToolViewGtk::OnExpose(
GtkWidget* sender, GdkEventExpose* event) {
- TRACE_EVENT0("ui::gtk",
- "LocationBarViewGtk::ContentSettingImageViewGtk::OnExpose");
+ TRACE_EVENT0("ui::gtk", "LocationBarViewGtk::PageToolViewGtk::OnExpose");
if (!(animation_.IsShowing() || animation_.IsClosing()))
return FALSE;
@@ -1591,14 +1585,19 @@ gboolean LocationBarViewGtk::ContentSettingImageViewGtk::OnExpose(
cairo_pattern_t* pattern = cairo_pattern_create_linear(0, 0, 0, height);
- cairo_pattern_add_color_stop_rgb(pattern, 0.0,
- kContentSettingTopColor[0],
- kContentSettingTopColor[1],
- kContentSettingTopColor[2]);
- cairo_pattern_add_color_stop_rgb(pattern, 1.0,
- kContentSettingBottomColor[0],
- kContentSettingBottomColor[1],
- kContentSettingBottomColor[2]);
+ const GdkColor top_color = gradient_top_color();
+ const GdkColor bottom_color = gradient_bottom_color();
+ cairo_pattern_add_color_stop_rgb(
+ pattern, 0.0,
+ top_color.red/255.0,
+ top_color.blue/255.0,
+ top_color.green/255.0);
+ cairo_pattern_add_color_stop_rgb(
+ pattern, 1.0,
+ bottom_color.red/255.0,
+ bottom_color.blue/255.0,
+ bottom_color.green/255.0);
+
cairo_set_source(cr, pattern);
cairo_paint(cr);
cairo_pattern_destroy(pattern);
@@ -1607,6 +1606,115 @@ gboolean LocationBarViewGtk::ContentSettingImageViewGtk::OnExpose(
return FALSE;
}
+////////////////////////////////////////////////////////////////////////////////
+// LocationBarViewGtk::ContentSettingImageViewGtk
+LocationBarViewGtk::ContentSettingImageViewGtk::ContentSettingImageViewGtk(
+ ContentSettingsType content_type,
+ const LocationBarViewGtk* parent)
+ : PageToolViewGtk(parent),
+ content_setting_image_model_(
+ ContentSettingImageModel::CreateContentSettingImageModel(
+ content_type)),
+ content_setting_bubble_(NULL) {
+ animation_.SetSlideDuration(kContentSettingImageAnimationTime);
+}
+
+LocationBarViewGtk::ContentSettingImageViewGtk::~ContentSettingImageViewGtk() {
+ if (content_setting_bubble_)
+ content_setting_bubble_->Close();
+}
+
+void LocationBarViewGtk::ContentSettingImageViewGtk::Update(
+ TabContents* tab_contents) {
+ if (tab_contents) {
+ content_setting_image_model_->UpdateFromWebContents(
+ tab_contents->web_contents());
+ }
+ if (!content_setting_image_model_->is_visible()) {
+ gtk_widget_hide(widget());
+ return;
+ }
+
+ gtk_image_set_from_pixbuf(GTK_IMAGE(image_.get()),
+ GtkThemeService::GetFrom(parent_->browser()->profile())->GetImageNamed(
+ content_setting_image_model_->get_icon())->ToGdkPixbuf());
+
+ gtk_widget_set_tooltip_text(widget(),
+ content_setting_image_model_->get_tooltip().c_str());
+ gtk_widget_show_all(widget());
+
+ if (!tab_contents)
+ return;
+
+ TabSpecificContentSettings* content_settings =
+ tab_contents->content_settings();
+ if (!content_settings || content_settings->IsBlockageIndicated(
+ content_setting_image_model_->get_content_settings_type()))
+ return;
+
+ // The content blockage was not yet indicated to the user. Start indication
+ // animation and clear "not yet shown" flag.
+ content_settings->SetBlockageHasBeenIndicated(
+ content_setting_image_model_->get_content_settings_type());
+
+ int label_string_id =
+ content_setting_image_model_->explanatory_string_id();
+ // If there's no string for the content type, we don't animate.
+ if (!label_string_id)
+ return;
+
+ gtk_label_set_text(GTK_LABEL(label_.get()),
+ l10n_util::GetStringUTF8(label_string_id).c_str());
+ StartAnimating();
+}
+
+void LocationBarViewGtk::ContentSettingImageViewGtk::AnimationEnded(
+ const ui::Animation* animation) {
+ if (animation_.IsShowing()) {
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&ContentSettingImageViewGtk::CloseAnimation,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kContentSettingImageDisplayTime));
+ } else {
+ gtk_widget_hide(label_.get());
+ gtk_util::StopActingAsRoundedWindow(event_box_.get());
+ gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box_.get()), FALSE);
+ }
+}
+
+GdkColor LocationBarViewGtk::ContentSettingImageViewGtk::
+ button_border_color() const {
+ return kContentSettingBorderColor;
+}
+
+GdkColor LocationBarViewGtk::ContentSettingImageViewGtk::
+ gradient_top_color() const {
+ return kContentSettingTopColor;
+}
+
+GdkColor LocationBarViewGtk::ContentSettingImageViewGtk::
+ gradient_bottom_color() const {
+ return kContentSettingBottomColor;
+}
+
+void LocationBarViewGtk::ContentSettingImageViewGtk::OnClick(
+ GtkWidget* sender) {
+ TabContents* tab_contents = parent_->GetTabContents();
+ if (!tab_contents)
+ return;
+ Profile* profile = parent_->browser()->profile();
+ content_setting_bubble_ = new ContentSettingBubbleGtk(
+ sender, this,
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ parent_->browser()->content_setting_bubble_model_delegate(),
+ tab_contents,
+ profile,
+ content_setting_image_model_->get_content_settings_type()),
+ profile, tab_contents->web_contents());
+ return;
+}
+
void LocationBarViewGtk::ContentSettingImageViewGtk::BubbleClosing(
BubbleGtk* bubble,
bool closed_by_escape) {

Powered by Google App Engine
This is Rietveld 408576698