summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-24 04:41:54 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-24 04:41:54 +0000
commitd59b315cc7b1f662eb6d312311bf0d63fdeee40c (patch)
treebec631d61f301dc6b8621e4c6a32564856db67dd /chrome
parent450d54eceb47146fb4fd9af724a8589e0c1baa69 (diff)
downloadchromium_src-d59b315cc7b1f662eb6d312311bf0d63fdeee40c.zip
chromium_src-d59b315cc7b1f662eb6d312311bf0d63fdeee40c.tar.gz
chromium_src-d59b315cc7b1f662eb6d312311bf0d63fdeee40c.tar.bz2
basic browser tests for compact navigation bar.
* Tests if Browser::ToggleCompactNavigationBar() turns on/off compact navigation bar and tool bar. * Tests if the accelerator works. BUG=http://crosbug.com/2028 TEST=new tests CompactNativationBarTest.TestBasic/TestAccelerator should pass. Review URL: http://codereview.chromium.org/1200001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42430 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chromeos/compact_navigation_bar_browsertest.cc135
-rw-r--r--chrome/browser/chromeos/frame/browser_view.cc2
-rw-r--r--chrome/browser/chromeos/status/clock_menu_button_browsertest.cc2
-rw-r--r--chrome/browser/chromeos/view_ids.h22
-rw-r--r--chrome/browser/view_ids.h9
-rwxr-xr-xchrome/chrome_browser.gypi1
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/test/in_process_browser_test.cc6
-rw-r--r--chrome/test/in_process_browser_test.h3
9 files changed, 170 insertions, 11 deletions
diff --git a/chrome/browser/chromeos/compact_navigation_bar_browsertest.cc b/chrome/browser/chromeos/compact_navigation_bar_browsertest.cc
new file mode 100644
index 0000000..fdc6fbb
--- /dev/null
+++ b/chrome/browser/chromeos/compact_navigation_bar_browsertest.cc
@@ -0,0 +1,135 @@
+// 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.
+
+#include "chrome/browser/browser.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/frame/browser_view.h"
+#include "chrome/browser/chromeos/view_ids.h"
+#include "chrome/test/in_process_browser_test.h"
+#include "chrome/test/ui_test_utils.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
+
+namespace {
+
+// TODO(oshima): Refactor and move to common place (probably in chrome/test/).
+class Key {
+ public:
+ // Creates a key with modifiers.
+ Key(int keyval, bool shift, bool ctrl, bool alt)
+ : keyval_(keyval),
+ modifier_(0) {
+ if (shift)
+ modifier_ |= GDK_SHIFT_MASK;
+ if (ctrl)
+ modifier_ |= GDK_CONTROL_MASK;
+ if (alt)
+ modifier_ |= GDK_MOD1_MASK;
+ }
+
+ void PressOn(views::Window* window) const {
+ Process(window, true);
+ }
+
+ void ReleaseOn(views::Window* window) const {
+ Process(window, false);
+ }
+
+ private:
+ // Injects a synthesized key event into gdk event queue.
+ void Process(views::Window* window, bool press) const {
+ GdkKeymapKey* keys;
+ gint n_keys;
+ gdk_keymap_get_entries_for_keyval(
+ gdk_keymap_get_default(),
+ keyval_,
+ &keys,
+ &n_keys);
+
+ gfx::NativeWindow native_window = window->GetNativeWindow();
+ GdkEvent* event = gdk_event_new(press ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
+ GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event);
+ if (press)
+ key_event->state = modifier_ | GDK_KEY_PRESS_MASK;
+ else
+ key_event->state = modifier_ | GDK_KEY_RELEASE_MASK;
+
+ key_event->window = GTK_WIDGET(native_window)->window;
+ key_event->send_event = true;
+ key_event->time = GDK_CURRENT_TIME;
+ key_event->keyval = keyval_;
+ key_event->hardware_keycode = keys[0].keycode;
+ key_event->group = keys[0].group;
+
+ gdk_event_put(event);
+ }
+
+ int keyval_;
+ int modifier_;
+ DISALLOW_COPY_AND_ASSIGN(Key);
+};
+
+} // namespace
+
+namespace chromeos {
+
+class CompactNavigationBarTest : public InProcessBrowserTest {
+ public:
+ CompactNavigationBarTest() {
+ }
+
+ BrowserView* browser_view() const {
+ return static_cast<BrowserView*>(browser()->window());
+ }
+
+ bool IsViewIdVisible(int id) const {
+ return browser_view()->GetViewByID(id)->IsVisible();
+ }
+
+ void KeyDown(const Key& key) {
+ key.PressOn(browser_view()->GetWidget()->GetWindow());
+ }
+
+ void KeyUp(const Key& key) {
+ key.ReleaseOn(browser_view()->GetWidget()->GetWindow());
+ }
+};
+
+IN_PROC_BROWSER_TEST_F(CompactNavigationBarTest, TestBasic) {
+ EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR));
+ EXPECT_TRUE(IsViewIdVisible(VIEW_ID_TOOLBAR));
+
+ browser()->ToggleCompactNavigationBar();
+ EXPECT_TRUE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR));
+ EXPECT_FALSE(IsViewIdVisible(VIEW_ID_TOOLBAR));
+
+ browser()->ToggleCompactNavigationBar();
+ EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR));
+ EXPECT_TRUE(IsViewIdVisible(VIEW_ID_TOOLBAR));
+}
+
+IN_PROC_BROWSER_TEST_F(CompactNavigationBarTest, TestAccelerator) {
+ EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR));
+
+ // ctrl-shift-c should toggle compact navigation bar.
+ Key ctrl_shift_c(base::VKEY_C, true, true, false);
+ KeyDown(ctrl_shift_c);
+ KeyUp(ctrl_shift_c);
+ RunAllPendingEvents();
+ EXPECT_TRUE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR));
+ KeyDown(ctrl_shift_c);
+ KeyUp(ctrl_shift_c);
+ RunAllPendingEvents();
+ EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR));
+
+ // but ctrl-alt-c should not.
+ Key ctrl_alt_c(base::VKEY_C, true, false, true);
+ KeyDown(ctrl_alt_c);
+ KeyUp(ctrl_alt_c);
+ RunAllPendingEvents();
+ EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR));
+}
+
+} // namespace chromeos
+
diff --git a/chrome/browser/chromeos/frame/browser_view.cc b/chrome/browser/chromeos/frame/browser_view.cc
index e199b02..9f03a09 100644
--- a/chrome/browser/chromeos/frame/browser_view.cc
+++ b/chrome/browser/chromeos/frame/browser_view.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/chromeos/status/browser_status_area_view.h"
#include "chrome/browser/chromeos/status/network_menu_button.h"
#include "chrome/browser/chromeos/status/status_area_button.h"
+#include "chrome/browser/chromeos/view_ids.h"
#include "chrome/browser/chromeos/wm_ipc.h"
#include "chrome/browser/views/app_launcher.h"
#include "chrome/browser/views/frame/browser_extender.h"
@@ -26,7 +27,6 @@
#include "chrome/browser/views/tabs/tab_strip.h"
#include "chrome/browser/views/toolbar_view.h"
#include "chrome/browser/views/toolbar_star_toggle.h"
-#include "chrome/browser/view_ids.h"
#include "gfx/canvas.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
diff --git a/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc b/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc
index 973bafb..ed8c77a 100644
--- a/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc
+++ b/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc
@@ -9,9 +9,9 @@
#include "chrome/browser/browser_window.h"
#include "chrome/browser/chromeos/frame/browser_view.h"
#include "chrome/browser/chromeos/status/browser_status_area_view.h"
+#include "chrome/browser/chromeos/view_ids.h"
#include "chrome/browser/pref_member.h"
#include "chrome/browser/profile.h"
-#include "chrome/browser/view_ids.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/in_process_browser_test.h"
#include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/chromeos/view_ids.h b/chrome/browser/chromeos/view_ids.h
new file mode 100644
index 0000000..54b3b7b
--- /dev/null
+++ b/chrome/browser/chromeos/view_ids.h
@@ -0,0 +1,22 @@
+// 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_CHROMEOS_VIEW_IDS_H_
+#define CHROME_BROWSER_CHROMEOS_VIEW_IDS_H_
+
+#include "chrome/browser/view_ids.h"
+
+// View ID used in ChromeOS.
+enum ChromeOSViewIds {
+ // Start with the offset that is big enough to avoid possible
+ // collison.
+ VIEW_ID_APP_MENU_BUTTON = VIEW_ID_PREDEFINED_COUNT + 10000,
+ VIEW_ID_COMPACT_NAV_BAR,
+ VIEW_ID_STATUS_AREA,
+ VIEW_ID_SPACER,
+ VIEW_ID_OTR_AVATAR,
+};
+
+#endif // CHROME_BROWSER_CHROMEOS_VIEW_IDS_H_
+
diff --git a/chrome/browser/view_ids.h b/chrome/browser/view_ids.h
index 0cd6e30..57943da 100644
--- a/chrome/browser/view_ids.h
+++ b/chrome/browser/view_ids.h
@@ -71,15 +71,6 @@ enum ViewID {
// The Download shelf.
VIEW_ID_DOWNLOAD_SHELF,
-#if defined(OS_CHROMEOS)
- // ChromeOS view ids start here.
- VIEW_ID_APP_MENU_BUTTON = 10000,
- VIEW_ID_COMPACT_NAV_BAR,
- VIEW_ID_STATUS_AREA,
- VIEW_ID_SPACER,
- VIEW_ID_OTR_AVATAR,
-#endif
-
// Used in chrome/browser/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/chrome_browser.gypi b/chrome/chrome_browser.gypi
index b408402..0a40a8d 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -449,6 +449,7 @@
'browser/chromeos/usb_mount_observer.h',
'browser/chromeos/version_loader.cc',
'browser/chromeos/version_loader.h',
+ 'browser/chromeos/view_ids.h',
'browser/chromeos/wm_ipc.cc',
'browser/chromeos/wm_ipc.h',
'browser/chromeos/wm_message_listener.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index f5abd7e..582ce0a 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1202,6 +1202,7 @@
'browser/browser_browsertest.cc',
'browser/browser_init_browsertest.cc',
'browser/browsing_data_local_storage_helper_unittest.cc',
+ 'browser/chromeos/compact_navigation_bar_browsertest.cc',
'browser/chromeos/notifications/notification_browsertest.cc',
'browser/crash_recovery_browsertest.cc',
'browser/download/save_page_browsertest.cc',
diff --git a/chrome/test/in_process_browser_test.cc b/chrome/test/in_process_browser_test.cc
index 3f4ce39..5afcfc2 100644
--- a/chrome/test/in_process_browser_test.cc
+++ b/chrome/test/in_process_browser_test.cc
@@ -315,3 +315,9 @@ void InProcessBrowserTest::SetInitialTimeoutInMS(int timeout_value) {
DCHECK_GT(timeout_value, 0);
initial_timeout_ = timeout_value;
}
+
+void InProcessBrowserTest::RunAllPendingEvents() {
+ MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask());
+ ui_test_utils::RunMessageLoop();
+}
+
diff --git a/chrome/test/in_process_browser_test.h b/chrome/test/in_process_browser_test.h
index 6e922d9..dfcf6d6 100644
--- a/chrome/test/in_process_browser_test.h
+++ b/chrome/test/in_process_browser_test.h
@@ -114,6 +114,9 @@ class InProcessBrowserTest : public testing::Test {
void EnableDOMAutomation() { dom_automation_enabled_ = true; }
void EnableSingleProcess() { single_process_ = true; }
+ // Run all pending events in the message loop.
+ void RunAllPendingEvents();
+
private:
// Invokes CreateBrowser to create a browser, then RunTestOnMainThread, and
// destroys the browser.