summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/filename_rules.gypi2
-rw-r--r--chrome/browser/ui/gtk/location_bar_view_gtk.cc3
-rw-r--r--chrome/browser/ui/gtk/location_bar_view_gtk_browsertest.cc172
-rw-r--r--chrome/browser/ui/gtk/view_id_util.cc3
-rw-r--r--chrome/browser/ui/view_ids.h6
-rw-r--r--chrome/browser/ui/views/location_bar/location_bar_view.cc1
-rw-r--r--chrome/chrome_tests.gypi10
7 files changed, 187 insertions, 10 deletions
diff --git a/build/filename_rules.gypi b/build/filename_rules.gypi
index ea63afe..500a0d8 100644
--- a/build/filename_rules.gypi
+++ b/build/filename_rules.gypi
@@ -68,7 +68,7 @@
}],
['<(toolkit_uses_gtk)!=1 or >(nacl_untrusted_build)==1', {
'sources/': [
- ['exclude', '_gtk(_unittest)?\\.(h|cc)$'],
+ ['exclude', '_gtk(_browsertest|_unittest)?\\.(h|cc)$'],
['exclude', '(^|/)gtk/'],
['exclude', '(^|/)gtk_[^/]*\\.(h|cc)$'],
],
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
index b920170..68bdedd 100644
--- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc
@@ -837,10 +837,9 @@ GtkWidget* LocationBarViewGtk::CreateIconButton(
}
void LocationBarViewGtk::CreateZoomButton() {
- // TODO(khorimoto): Add tests for zoom button.
zoom_.Own(CreateIconButton(&zoom_image_,
0,
- VIEW_ID_NONE,
+ VIEW_ID_ZOOM_BUTTON,
0,
OnZoomButtonPressThunk));
}
diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk_browsertest.cc b/chrome/browser/ui/gtk/location_bar_view_gtk_browsertest.cc
new file mode 100644
index 0000000..19226fe
--- /dev/null
+++ b/chrome/browser/ui/gtk/location_bar_view_gtk_browsertest.cc
@@ -0,0 +1,172 @@
+// Copyright (c) 2012 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.
+
+#include <gtk/gtk.h>
+
+#include "base/string_number_conversions.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/browser_tabstrip.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/gtk/browser_toolbar_gtk.h"
+#include "chrome/browser/ui/gtk/browser_window_gtk.h"
+#include "chrome/browser/ui/gtk/location_bar_view_gtk.h"
+#include "chrome/browser/ui/gtk/view_id_util.h"
+#include "chrome/browser/ui/zoom/zoom_controller.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_types.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/page_zoom.h"
+#include "grit/theme_resources.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// TODO(dbeam): share some testing code with ZoomBubbleGtkTest.
+
+namespace {
+
+int GetZoomPercent(content::WebContents* contents) {
+ bool dummy;
+ return contents->GetZoomPercent(&dummy, &dummy);
+}
+
+void ExpectZoomedIn(content::WebContents* contents) {
+ EXPECT_GT(GetZoomPercent(contents), 100);
+}
+
+void ExpectZoomedOut(content::WebContents* contents) {
+ EXPECT_LT(GetZoomPercent(contents), 100);
+}
+
+void ExpectAtDefaultZoom(content::WebContents* contents) {
+ EXPECT_EQ(GetZoomPercent(contents), 100);
+}
+
+}
+
+class LocationBarViewGtkZoomTest : public InProcessBrowserTest {
+ public:
+ LocationBarViewGtkZoomTest() {}
+ virtual ~LocationBarViewGtkZoomTest() {}
+
+ protected:
+ void ExpectTooltipContainsZoom() {
+ gchar* text = gtk_widget_get_tooltip_text(GetZoomWidget());
+ std::string tooltip(text);
+ g_free(text);
+ content::WebContents* contents = chrome::GetActiveWebContents(browser());
+ std::string zoom_percent = base::IntToString(GetZoomPercent(contents));
+ EXPECT_FALSE(tooltip.find(zoom_percent) == std::string::npos);
+ }
+
+ bool ZoomIconIsShowing() {
+ return gtk_widget_get_visible(GetZoomWidget());
+ }
+
+ void ExpectIconIsResource(int resource_id) {
+ // TODO(dbeam): actually compare the image bits with gfx::test::IsEqual?
+ content::WebContents* contents = chrome::GetActiveWebContents(browser());
+ ZoomController* zoom_controller = ZoomController::FromWebContents(contents);
+ EXPECT_EQ(resource_id, zoom_controller->GetResourceForZoomLevel());
+ }
+
+ void ResetZoom() {
+ WaitForZoom(content::PAGE_ZOOM_RESET);
+ }
+
+ content::WebContents* SetUpTest() {
+ content::WebContents* contents = chrome::GetActiveWebContents(browser());
+ ResetZoom();
+ ExpectAtDefaultZoom(contents);
+ return contents;
+ }
+
+ void ZoomIn() {
+ WaitForZoom(content::PAGE_ZOOM_IN);
+ }
+
+ void ZoomOut() {
+ WaitForZoom(content::PAGE_ZOOM_OUT);
+ }
+
+ private:
+ GtkWidget* GetZoomWidget() {
+ gfx::NativeWindow window = browser()->window()->GetNativeWindow();
+ return ViewIDUtil::GetWidget(GTK_WIDGET(window), VIEW_ID_ZOOM_BUTTON);
+ }
+
+ void WaitForZoom(content::PageZoom zoom_action) {
+ content::WindowedNotificationObserver zoom_observer(
+ content::NOTIFICATION_ZOOM_LEVEL_CHANGED,
+ content::NotificationService::AllSources());
+ chrome::Zoom(browser(), zoom_action);
+ zoom_observer.Wait();
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(LocationBarViewGtkZoomTest);
+};
+
+IN_PROC_BROWSER_TEST_F(LocationBarViewGtkZoomTest, DefaultToZoomedInAndBack) {
+ content::WebContents* contents = SetUpTest();
+
+ ZoomIn();
+ ExpectZoomedIn(contents);
+ EXPECT_TRUE(ZoomIconIsShowing());
+ ExpectIconIsResource(IDR_ZOOM_PLUS);
+ ExpectTooltipContainsZoom();
+
+ ZoomOut(); // Back to default, in theory.
+ ExpectAtDefaultZoom(contents);
+ EXPECT_FALSE(ZoomIconIsShowing());
+}
+
+IN_PROC_BROWSER_TEST_F(LocationBarViewGtkZoomTest, ZoomInTwiceAndReset) {
+ content::WebContents* contents = SetUpTest();
+
+ ZoomIn();
+ int zoom_level = GetZoomPercent(contents);
+ ZoomIn();
+ DCHECK_GT(GetZoomPercent(contents), zoom_level);
+
+ ExpectZoomedIn(contents);
+ EXPECT_TRUE(ZoomIconIsShowing());
+ ExpectIconIsResource(IDR_ZOOM_PLUS);
+ ExpectTooltipContainsZoom();
+
+ ResetZoom();
+ ExpectAtDefaultZoom(contents);
+ EXPECT_FALSE(ZoomIconIsShowing());
+}
+
+IN_PROC_BROWSER_TEST_F(LocationBarViewGtkZoomTest, DefaultToZoomedOutAndBack) {
+ content::WebContents* contents = SetUpTest();
+
+ ZoomOut();
+ ExpectZoomedOut(contents);
+ EXPECT_TRUE(ZoomIconIsShowing());
+ ExpectIconIsResource(IDR_ZOOM_MINUS);
+ ExpectTooltipContainsZoom();
+
+ ZoomIn();
+ ExpectAtDefaultZoom(contents);
+ EXPECT_FALSE(ZoomIconIsShowing());
+}
+
+IN_PROC_BROWSER_TEST_F(LocationBarViewGtkZoomTest, ZoomOutTwiceAndReset) {
+ content::WebContents* contents = SetUpTest();
+
+ ZoomOut();
+ int zoom_level = GetZoomPercent(contents);
+ ZoomOut();
+ DCHECK_LT(GetZoomPercent(contents), zoom_level);
+ ExpectZoomedOut(contents);
+ EXPECT_TRUE(ZoomIconIsShowing());
+ ExpectIconIsResource(IDR_ZOOM_MINUS);
+ ExpectTooltipContainsZoom();
+
+ ResetZoom();
+ ExpectAtDefaultZoom(contents);
+ EXPECT_FALSE(ZoomIconIsShowing());
+}
diff --git a/chrome/browser/ui/gtk/view_id_util.cc b/chrome/browser/ui/gtk/view_id_util.cc
index c9aa121..e73f298 100644
--- a/chrome/browser/ui/gtk/view_id_util.cc
+++ b/chrome/browser/ui/gtk/view_id_util.cc
@@ -110,6 +110,9 @@ const char* GetNameFromID(ViewID id) {
case VIEW_ID_DEV_TOOLS_DOCKED:
return "chrome-dev-tools-docked";
+ case VIEW_ID_ZOOM_BUTTON:
+ return "chrome-zoom-button";
+
// These are never hit because the tab container uses the delegate to
// set its ID.
case VIEW_ID_TAB_CONTAINER:
diff --git a/chrome/browser/ui/view_ids.h b/chrome/browser/ui/view_ids.h
index 784e1ac..b159015 100644
--- a/chrome/browser/ui/view_ids.h
+++ b/chrome/browser/ui/view_ids.h
@@ -71,6 +71,12 @@ enum ViewID {
// The Download shelf.
VIEW_ID_DOWNLOAD_SHELF,
+// TODO(dbeam): change the zoom decoration to an NSImageView on Mac so IDs work.
+#if !defined(OS_MACOSX)
+ // Zoom button in location bar.
+ VIEW_ID_ZOOM_BUTTON,
+#endif
+
// Used in chrome/browser/ui/gtk/view_id_util_browsertests.cc
// If you add new ids, make sure the above test passes.
VIEW_ID_PREDEFINED_COUNT,
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index e1145c2..730475d 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -309,6 +309,7 @@ void LocationBarView::Init(views::View* popup_parent_view) {
}
zoom_view_ = new ZoomView(model_, delegate_);
+ zoom_view_->set_id(VIEW_ID_ZOOM_BUTTON);
AddChildView(zoom_view_);
web_intents_button_view_ =
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 8f8d9ac..57d997e 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -3051,6 +3051,9 @@
'browser/ui/find_bar/find_bar_host_browsertest.cc',
'browser/ui/fullscreen/fullscreen_controller_browsertest.cc',
'browser/ui/global_error/global_error_service_browsertest.cc',
+ 'browser/ui/gtk/bubble/bubble_gtk_browsertest.cc',
+ 'browser/ui/gtk/confirm_bubble_gtk_browsertest.cc',
+ 'browser/ui/gtk/location_bar_view_gtk_browsertest.cc',
'browser/ui/gtk/one_click_signin_bubble_gtk_browsertest.cc',
'browser/ui/gtk/view_id_util_browsertest.cc',
'browser/ui/intents/web_intent_picker_controller_browsertest.cc',
@@ -3368,13 +3371,6 @@
'../build/linux/system.gyp:ssl',
],
}],
- ['toolkit_uses_gtk == 1 and toolkit_views == 0', {
- 'sources': [
- # BubbleGtk is used only on Linux/GTK.
- 'browser/ui/gtk/bubble/bubble_gtk_browsertest.cc',
- 'browser/ui/gtk/confirm_bubble_gtk_browsertest.cc',
- ],
- }],
['OS=="mac"', {
'include_dirs': [
'../third_party/GTM',