summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-16 20:39:22 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-16 20:39:22 +0000
commit92b004f5485530d81daab60b5b02207507d1a2bd (patch)
treef51c808a3ab217334071a1a29c2437cdeaaf337b
parent1ca98fa0e8a26783b2b2c139f0d3638449435a76 (diff)
downloadchromium_src-92b004f5485530d81daab60b5b02207507d1a2bd.zip
chromium_src-92b004f5485530d81daab60b5b02207507d1a2bd.tar.gz
chromium_src-92b004f5485530d81daab60b5b02207507d1a2bd.tar.bz2
Port most of browser action apitest to linux.
BUG=27224 Review URL: http://codereview.chromium.org/385085 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32085 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/browser_action_apitest.cc204
-rwxr-xr-xchrome/chrome.gyp3
2 files changed, 150 insertions, 57 deletions
diff --git a/chrome/browser/extensions/browser_action_apitest.cc b/chrome/browser/extensions/browser_action_apitest.cc
index 6a220a6..d4043eb 100644
--- a/chrome/browser/extensions/browser_action_apitest.cc
+++ b/chrome/browser/extensions/browser_action_apitest.cc
@@ -10,21 +10,133 @@
#include "chrome/browser/extensions/extensions_service.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/common/extensions/extension_action.h"
+#include "chrome/test/ui_test_utils.h"
+
+#if defined(OS_WIN)
#include "chrome/browser/views/browser_actions_container.h"
#include "chrome/browser/views/extensions/extension_popup.h"
#include "chrome/browser/views/toolbar_view.h"
-#include "chrome/common/extensions/extension_action.h"
-#include "chrome/test/ui_test_utils.h"
+#elif defined(OS_LINUX)
+#include "chrome/browser/gtk/view_id_util.h"
+#endif
+
+class BrowserActionTest : public ExtensionApiTest {
+ public:
+ BrowserActionTest() { }
+ virtual ~BrowserActionTest() { }
+
+ int NumberOfBrowserActions() {
+ int rv = -1;
+
+#if defined(OS_WIN)
+ BrowserActionsContainer* browser_actions =
+ browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
+ browser_actions();
+ if (browser_actions)
+ rv = browser_actions->num_browser_actions();
+#elif defined(OS_LINUX)
+ GtkWidget* toolbar = ViewIDUtil::GetWidget(
+ GTK_WIDGET(browser()->window()->GetNativeHandle()),
+ VIEW_ID_BROWSER_ACTION_TOOLBAR);
+
+ if (toolbar) {
+ GList* children = gtk_container_get_children(GTK_CONTAINER(toolbar));
+ rv = g_list_length(children);
+ g_list_free(children);
+ }
+#endif
-IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserAction) {
+ EXPECT_NE(-1, rv);
+ return rv;
+ }
+
+ bool IsIconNull(int index) {
+#if defined(OS_WIN)
+ BrowserActionsContainer* browser_actions =
+ browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
+ browser_actions();
+ // We can't ASSERT_TRUE in non-void functions.
+ if (browser_actions) {
+ return browser_actions->GetBrowserActionViewAt(index)->button()->icon().
+ empty();
+ } else {
+ EXPECT_TRUE(false);
+ }
+#elif defined(OS_LINUX)
+ GtkWidget* button = GetButton(index);
+ if (button)
+ return gtk_button_get_image(GTK_BUTTON(button)) == NULL;
+ else
+ EXPECT_TRUE(false);
+#endif
+
+ return false;
+ }
+
+ void ExecuteBrowserAction(int index) {
+#if defined(OS_WIN)
+ BrowserActionsContainer* browser_actions =
+ browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
+ browser_actions();
+ ASSERT_TRUE(browser_actions);
+ browser_actions->TestExecuteBrowserAction(index);
+#elif defined(OS_LINUX)
+ GtkWidget* button = GetButton(index);
+ ASSERT_TRUE(button);
+ gtk_button_clicked(GTK_BUTTON(button));
+#endif
+ }
+
+ std::string GetTooltip(int index) {
+#if defined(OS_WIN)
+ BrowserActionsContainer* browser_actions =
+ browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
+ browser_actions();
+ if (browser_actions) {
+ std::wstring text;
+ EXPECT_TRUE(browser_actions->GetBrowserActionViewAt(0)->button()->
+ GetTooltipText(0, 0, &text));
+ return WideToUTF8(text);
+ }
+#elif defined(OS_LINUX)
+ GtkWidget* button = GetButton(index);
+ if (button) {
+ gchar* text = gtk_widget_get_tooltip_text(button);
+ std::string rv = std::string(text);
+ g_free(text);
+ return rv;
+ }
+#endif
+ EXPECT_TRUE(false);
+ return std::string();
+ }
+
+ private:
+#if defined(OS_LINUX)
+ GtkWidget* GetButton(int index) {
+ GtkWidget* rv = NULL;
+ GtkWidget* toolbar = ViewIDUtil::GetWidget(
+ GTK_WIDGET(browser()->window()->GetNativeHandle()),
+ VIEW_ID_BROWSER_ACTION_TOOLBAR);
+
+ if (toolbar) {
+ GList* children = gtk_container_get_children(GTK_CONTAINER(toolbar));
+ rv = static_cast<GtkWidget*>(g_list_nth(children, index)->data);
+ g_list_free(children);
+ }
+
+ return rv;
+ }
+#endif
+};
+
+IN_PROC_BROWSER_TEST_F(BrowserActionTest, Basic) {
StartHTTPServer();
ASSERT_TRUE(RunExtensionTest("browser_action")) << message_;
// Test that there is a browser action in the toolbar.
- BrowserActionsContainer* browser_actions =
- browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
- browser_actions();
- ASSERT_EQ(1, browser_actions->num_browser_actions());
+ ASSERT_EQ(1, NumberOfBrowserActions());
// Tell the extension to update the browser action state.
ResultCatcher catcher;
@@ -45,7 +157,6 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserAction) {
ui_test_utils::NavigateToURL(browser(),
GURL("http://localhost:1337/files/extensions/test_file.txt"));
- int window_id = ExtensionTabUtil::GetWindowId(browser());
ExtensionBrowserEventRouter::GetInstance()->BrowserActionExecuted(
browser()->profile(), action->extension_id(), browser());
@@ -61,16 +172,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserAction) {
ASSERT_TRUE(result);
}
-IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DynamicBrowserAction) {
+IN_PROC_BROWSER_TEST_F(BrowserActionTest, DynamicBrowserAction) {
ASSERT_TRUE(RunExtensionTest("browser_action_no_icon")) << message_;
// Test that there is a browser action in the toolbar and that it has no icon.
- BrowserActionsContainer* browser_actions =
- browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
- browser_actions();
- ASSERT_EQ(1, browser_actions->num_browser_actions());
- ASSERT_TRUE(browser_actions->GetBrowserActionViewAt(0)->button()->icon()
- .empty());
+ ASSERT_EQ(1, NumberOfBrowserActions());
+ EXPECT_TRUE(IsIconNull(0));
// Tell the extension to update the icon using setIcon({imageData:...}).
ResultCatcher catcher;
@@ -81,8 +188,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DynamicBrowserAction) {
ASSERT_TRUE(catcher.GetNextResult());
// Test that we received the changes.
- ASSERT_FALSE(browser_actions->GetBrowserActionViewAt(0)->button()->icon()
- .empty());
+ EXPECT_FALSE(IsIconNull(0));
// Tell the extension to update using setIcon({path:...});
ui_test_utils::NavigateToURL(browser(),
@@ -90,63 +196,44 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, DynamicBrowserAction) {
ASSERT_TRUE(catcher.GetNextResult());
// Test that we received the changes.
- ASSERT_FALSE(browser_actions->GetBrowserActionViewAt(0)->button()->icon()
- .empty());
+ EXPECT_FALSE(IsIconNull(0));
// TODO(aa): Would be nice here to actually compare that the pixels change.
}
-IN_PROC_BROWSER_TEST_F(ExtensionApiTest, TabSpecificBrowserActionState) {
- ASSERT_TRUE(RunExtensionTest("browser_action_tab_specific_state"))
- << message_;
+IN_PROC_BROWSER_TEST_F(BrowserActionTest, TabSpecificBrowserActionState) {
+ ASSERT_TRUE(RunExtensionTest("browser_action_tab_specific_state")) <<
+ message_;
- // Test that there is a browser action in the toolbar and that it has no icon.
- BrowserActionsContainer* browser_actions =
- browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
- browser_actions();
- ASSERT_EQ(1, browser_actions->num_browser_actions());
- ASSERT_FALSE(browser_actions->GetBrowserActionViewAt(0)->button()->icon()
- .empty());
+ // Test that there is a browser action in the toolbar and that it has an icon.
+ ASSERT_EQ(1, NumberOfBrowserActions());
+ EXPECT_FALSE(IsIconNull(0));
- // Execute the action, its title should change
- std::wstring text;
+ // Execute the action, its title should change.
ResultCatcher catcher;
- browser_actions->TestExecuteBrowserAction(0);
+ ExecuteBrowserAction(0);
ASSERT_TRUE(catcher.GetNextResult());
- ASSERT_TRUE(
- browser_actions->GetBrowserActionViewAt(0)->button()->GetTooltipText(
- 0, 0, &text));
- ASSERT_EQ(L"Showing icon 2", text);
+ EXPECT_EQ("Showing icon 2", GetTooltip(0));
- // open a new tab, the title should go back
+ // Open a new tab, the title should go back.
browser()->NewTab();
- ASSERT_TRUE(
- browser_actions->GetBrowserActionViewAt(0)->button()->GetTooltipText(
- 0, 0, &text));
- ASSERT_EQ(L"hi!", text);
+ EXPECT_EQ("hi!", GetTooltip(0));
- // go back to first tab, changed title should reappear
+ // Go back to first tab, changed title should reappear.
browser()->SelectTabContentsAt(0, true);
- ASSERT_TRUE(
- browser_actions->GetBrowserActionViewAt(0)->button()->GetTooltipText(
- 0, 0, &text));
- ASSERT_EQ(L"Showing icon 2", text);
+ EXPECT_EQ("Showing icon 2", GetTooltip(0));
- // reload that tab, default title should come back
+ // Reload that tab, default title should come back.
ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
- ASSERT_TRUE(
- browser_actions->GetBrowserActionViewAt(0)->button()->GetTooltipText(
- 0, 0, &text));
- ASSERT_EQ(L"hi!", text);
+ EXPECT_EQ("hi!", GetTooltip(0));
}
-IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserActionPopup) {
+// TODO(estade): port to Linux.
+#if defined(OS_WIN)
+IN_PROC_BROWSER_TEST_F(BrowserActionTest, BrowserActionPopup) {
ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("popup")));
ResultCatcher catcher;
- BrowserActionsContainer* browser_actions =
- browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
- browser_actions();
// This value is in api_test/popup/popup.html.
const int growFactor = 500;
@@ -159,9 +246,13 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserActionPopup) {
int width = ExtensionPopup::kMinWidth;
int height = ExtensionPopup::kMinHeight;
+ BrowserActionsContainer* browser_actions =
+ browser()->window()->GetBrowserWindowTesting()->GetToolbarView()->
+ browser_actions();
+ ASSERT_TRUE(browser_actions);
// Simulate a click on the browser action and verify the size of the resulting
// popup. The first one tries to be 0x0, so it should be the min values.
- browser_actions->TestExecuteBrowserAction(0);
+ ExecuteBrowserAction(0);
EXPECT_TRUE(browser_actions->TestGetPopup() != NULL);
ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
gfx::Rect bounds = browser_actions->TestGetPopup()->view()->bounds();
@@ -195,3 +286,4 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserActionPopup) {
browser_actions->HidePopup();
EXPECT_TRUE(browser_actions->TestGetPopup() == NULL);
}
+#endif
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index ae65611..a6a6270 100755
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -60,6 +60,7 @@
'browser/download/save_page_browsertest.cc',
'browser/extensions/autoupdate_interceptor.cc',
'browser/extensions/autoupdate_interceptor.h',
+ 'browser/extensions/browser_action_apitest.cc',
'browser/extensions/cross_origin_xhr_apitest.cc',
'browser/extensions/execute_script_apitest.cc',
'browser/extensions/extension_apitest.cc',
@@ -88,7 +89,6 @@
'browser/views/find_bar_host_browsertest.cc',
],
'browser_tests_sources_win_specific': [
- 'browser/extensions/browser_action_apitest.cc',
'browser/extensions/extension_devtools_browsertest.cc',
'browser/extensions/extension_devtools_browsertest.h',
'browser/extensions/extension_devtools_browsertests.cc',
@@ -108,6 +108,7 @@
'browser/views/browser_views_accessibility_browsertest.cc',
],
'browser_tests_sources_exclude_on_mac': [
+ 'browser/extensions/browser_action_apitest.cc',
'browser/extensions/cross_origin_xhr_apitest.cc',
'browser/extensions/execute_script_apitest.cc',
'browser/extensions/extension_apitest.cc',