Chromium Code Reviews| Index: chrome/browser/ui/panels/panel_browser_view_browsertest.cc |
| =================================================================== |
| --- chrome/browser/ui/panels/panel_browser_view_browsertest.cc (revision 87324) |
| +++ chrome/browser/ui/panels/panel_browser_view_browsertest.cc (working copy) |
| @@ -8,7 +8,6 @@ |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_window.h" |
| -#include "chrome/browser/ui/panels/about_panel_bubble.h" |
| #include "chrome/browser/ui/panels/panel.h" |
| #include "chrome/browser/ui/panels/panel_browser_frame_view.h" |
| #include "chrome/browser/ui/panels/panel_browser_view.h" |
| @@ -21,9 +20,11 @@ |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/base/animation/slide_animation.h" |
| #include "views/controls/button/image_button.h" |
| +#include "views/controls/button/menu_button.h" |
| #include "views/controls/image_view.h" |
| #include "views/controls/label.h" |
| #include "views/controls/link.h" |
| +#include "views/controls/menu/menu_2.h" |
| #include "views/controls/textfield/textfield.h" |
| class PanelBrowserViewTest : public InProcessBrowserTest { |
| @@ -35,6 +36,11 @@ |
| } |
| protected: |
| + struct MenuItem { |
| + int id; |
| + bool enabled; |
| + }; |
| + |
| class MockMouseWatcher : public PanelBrowserFrameView::MouseWatcher { |
| public: |
| explicit MockMouseWatcher(PanelBrowserFrameView* view) |
| @@ -161,6 +167,92 @@ |
| } |
| } |
| } |
| + |
| + void ValidateWrenchMenuItems(ui::SimpleMenuModel* wrench_menu_contents, |
|
jennb
2011/06/01 22:24:14
which parameter is the expected menu items?
jianli
2011/06/01 23:23:38
Renamed items to prefix with expected.
|
| + size_t count, |
| + MenuItem* items) { |
| + ASSERT_TRUE(wrench_menu_contents); |
| + EXPECT_EQ(static_cast<int>(count), wrench_menu_contents->GetItemCount()); |
| + for (size_t i = 0; i < count; ++i) { |
| + if (items[i].id == -1) { |
| + EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, |
| + wrench_menu_contents->GetTypeAt(i)); |
| + } else { |
| + EXPECT_EQ(items[i].id, wrench_menu_contents->GetCommandIdAt(i)); |
| + EXPECT_EQ(items[i].enabled, wrench_menu_contents->IsEnabledAt(i)); |
| + } |
| + } |
| + } |
| + |
| + void TestCreateWrenchMenuForExtension(const FilePath::StringType& path, |
| + Extension::Location location, |
| + const std::string& homepage_url, |
| + const std::string& options_page) { |
| + // Creates a testing extension. |
| +#if defined(OS_WIN) |
| + FilePath full_path(FILE_PATH_LITERAL("c:\\")); |
| +#else |
| + FilePath full_path(FILE_PATH_LITERAL("/")); |
| +#endif |
| + full_path.Append(path); |
| + DictionaryValue input_value; |
| + input_value.SetString(extension_manifest_keys::kVersion, "1.0.0.0"); |
| + input_value.SetString(extension_manifest_keys::kName, "Sample Extension"); |
| + if (!homepage_url.empty()) { |
| + input_value.SetString(extension_manifest_keys::kHomepageURL, |
| + homepage_url); |
| + } |
| + if (!options_page.empty()) { |
| + input_value.SetString(extension_manifest_keys::kOptionsPage, |
| + options_page); |
| + } |
| + std::string error; |
| + scoped_refptr<Extension> extension = Extension::Create( |
| + full_path, location, input_value, Extension::STRICT_ERROR_CHECKS, |
| + &error); |
| + ASSERT_TRUE(extension.get()); |
| + EXPECT_STREQ("", error.c_str()); |
| + browser()->GetProfile()->GetExtensionService()->AddExtension( |
| + extension.get()); |
| + |
| + // Makes sure that async task ExtensionPrefs::OnExtensionInstalled gets a |
| + // chance to be procesed. |
| + MessageLoop::current()->RunAllPending(); |
| + |
| + // Creates a panel with the app name that comes from the extension ID. |
| + PanelBrowserView* browser_view = CreatePanelBrowserView( |
| + web_app::GenerateApplicationNameFromExtensionId(extension->id())); |
| + PanelBrowserFrameView* frame_view = browser_view->GetFrameView(); |
| + |
| + frame_view->EnsureCreateWrenchMenu(); |
| + ASSERT_TRUE(frame_view->wrench_menu_.get()); |
| + ASSERT_TRUE(frame_view->wrench_menu_contents_.get()); |
| + |
| + // Validates the wrench menu items. |
| + MenuItem panel_menu[] = { |
| + { PanelBrowserFrameView::COMMAND_NAME, false }, |
| + { -1, false }, // Separator |
| + { PanelBrowserFrameView::COMMAND_CONFIGURE, false }, |
| + { PanelBrowserFrameView::COMMAND_DISABLE, false }, |
| + { PanelBrowserFrameView::COMMAND_UNINSTALL, false }, |
| + { -1, false }, // Separator |
| + { PanelBrowserFrameView::COMMAND_MANAGE, true } |
| + }; |
| + if (!homepage_url.empty()) |
| + panel_menu[0].enabled = true; |
| + if (!options_page.empty()) |
| + panel_menu[2].enabled = true; |
| + if (location != Extension::EXTERNAL_POLICY_DOWNLOAD) { |
| + panel_menu[3].enabled = true; |
| + panel_menu[4].enabled = true; |
| + } |
| + size_t panel_menu_count = arraysize(panel_menu); |
| + ValidateWrenchMenuItems(frame_view->wrench_menu_contents_.get(), |
| + panel_menu_count, |
| + panel_menu); |
| + |
| + browser_view->panel()->Close(); |
| + } |
| }; |
| // Panel is not supported for Linux view yet. |
| @@ -173,11 +265,11 @@ |
| // first time. |
| EXPECT_FALSE(browser_view->bounds_animator_.get()); |
| - // We should have icon, text, options button and close button. |
| + // We should have icon, text, wrench button and close button. |
| EXPECT_EQ(4, frame_view->child_count()); |
| EXPECT_TRUE(frame_view->Contains(frame_view->title_icon_)); |
| EXPECT_TRUE(frame_view->Contains(frame_view->title_label_)); |
| - EXPECT_TRUE(frame_view->Contains(frame_view->info_button_)); |
| + EXPECT_TRUE(frame_view->Contains(frame_view->wrench_button_)); |
| EXPECT_TRUE(frame_view->Contains(frame_view->close_button_)); |
| // These controls should be visible. |
| @@ -194,18 +286,18 @@ |
| EXPECT_GT(frame_view->title_label_->width(), 0); |
| EXPECT_GT(frame_view->title_label_->height(), 0); |
| EXPECT_LT(frame_view->title_label_->height(), title_bar_height); |
| - EXPECT_GT(frame_view->info_button_->width(), 0); |
| - EXPECT_GT(frame_view->info_button_->height(), 0); |
| - EXPECT_LT(frame_view->info_button_->height(), title_bar_height); |
| + EXPECT_GT(frame_view->wrench_button_->width(), 0); |
| + EXPECT_GT(frame_view->wrench_button_->height(), 0); |
| + EXPECT_LT(frame_view->wrench_button_->height(), title_bar_height); |
| EXPECT_GT(frame_view->close_button_->width(), 0); |
| EXPECT_GT(frame_view->close_button_->height(), 0); |
| EXPECT_LT(frame_view->close_button_->height(), title_bar_height); |
| EXPECT_LT(frame_view->title_icon_->x() + frame_view->title_icon_->width(), |
| frame_view->title_label_->x()); |
| EXPECT_LT(frame_view->title_label_->x() + frame_view->title_label_->width(), |
| - frame_view->info_button_->x()); |
| + frame_view->wrench_button_->x()); |
| EXPECT_LT( |
| - frame_view->info_button_->x() + frame_view->info_button_->width(), |
| + frame_view->wrench_button_->x() + frame_view->wrench_button_->width(), |
| frame_view->close_button_->x()); |
| // Validate that the controls should be updated when the activation state is |
| @@ -217,7 +309,7 @@ |
| EXPECT_NE(title_label_font1.GetStyle(), title_label_font2.GetStyle()); |
| } |
| -IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, ShowOrHideInfoButton) { |
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, ShowOrHideWrenchButton) { |
| PanelBrowserView* browser_view = CreatePanelBrowserView("PanelTest"); |
| PanelBrowserFrameView* frame_view = browser_view->GetFrameView(); |
| @@ -231,21 +323,21 @@ |
| // test the cases that the panel is active first. |
| EXPECT_TRUE(browser_view->panel()->IsActive()); |
| - // When the panel is active, the info button should always be visible. |
| + // When the panel is active, the wrench button should always be visible. |
| mouse_watcher->MoveMouse(true); |
| - EXPECT_TRUE(frame_view->info_button_->IsVisible()); |
| + EXPECT_TRUE(frame_view->wrench_button_->IsVisible()); |
| mouse_watcher->MoveMouse(false); |
| - EXPECT_TRUE(frame_view->info_button_->IsVisible()); |
| + EXPECT_TRUE(frame_view->wrench_button_->IsVisible()); |
| - // When the panel is inactive, the info button is active per the mouse over |
| + // When the panel is inactive, the options button is active per the mouse over |
| // the panel or not. |
| browser_view->panel()->Deactivate(); |
| EXPECT_FALSE(browser_view->panel()->IsActive()); |
| mouse_watcher->MoveMouse(true); |
| - EXPECT_TRUE(frame_view->info_button_->IsVisible()); |
| + EXPECT_TRUE(frame_view->wrench_button_->IsVisible()); |
| mouse_watcher->MoveMouse(false); |
| - EXPECT_FALSE(frame_view->info_button_->IsVisible()); |
| + EXPECT_FALSE(frame_view->wrench_button_->IsVisible()); |
| } |
| IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, TitleBarMouseEvent) { |
| @@ -423,97 +515,6 @@ |
| } |
| } |
| -IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, AboutPanelBubble) { |
| - ExtensionService* extension_service = |
| - browser()->GetProfile()->GetExtensionService(); |
| - |
| - // Create a testing extension. |
| -#if defined(OS_WIN) |
| - FilePath path(FILE_PATH_LITERAL("c:\\foo")); |
| -#else |
| - FilePath path(FILE_PATH_LITERAL("/foo")); |
| -#endif |
| - DictionaryValue input_value; |
| - input_value.SetString(extension_manifest_keys::kVersion, "1.0.0.0"); |
| - input_value.SetString(extension_manifest_keys::kName, "Sample Extension"); |
| - input_value.SetString(extension_manifest_keys::kDescription, |
| - "Sample Description"); |
| - scoped_refptr<Extension> extension(Extension::Create(path, Extension::INVALID, |
| - input_value, Extension::STRICT_ERROR_CHECKS, NULL)); |
| - ASSERT_TRUE(extension.get()); |
| - extension_service->AddExtension(extension.get()); |
| - // Make sure that async task ExtensionPrefs::OnExtensionInstalled gets a |
| - // chance to be procesed. |
| - MessageLoop::current()->RunAllPending(); |
| - |
| - extension_service->extension_prefs()->OnExtensionInstalled( |
| - extension, Extension::ENABLED); |
| - |
| - // Create a panel with the app name that comes from the extension ID. |
| - PanelBrowserView* browser_view = CreatePanelBrowserView( |
| - web_app::GenerateApplicationNameFromExtensionId(extension->id())); |
| - |
| - AboutPanelBubble* bubble = AboutPanelBubble::Show( |
| - browser_view->GetWidget(), |
| - gfx::Rect(), |
| - BubbleBorder::BOTTOM_RIGHT, |
| - SkBitmap(), |
| - browser_view->browser()); |
| - AboutPanelBubble::AboutPanelBubbleView* contents = |
| - static_cast<AboutPanelBubble::AboutPanelBubbleView*>(bubble->contents()); |
| - |
| - // We should have the expected controls. |
| - EXPECT_EQ(6, contents->child_count()); |
| - EXPECT_TRUE(contents->Contains(contents->icon_)); |
| - EXPECT_TRUE(contents->Contains(contents->title_)); |
| - EXPECT_TRUE(contents->Contains(contents->install_date_)); |
| - EXPECT_TRUE(contents->Contains(contents->description_)); |
| - EXPECT_TRUE(contents->Contains(contents->uninstall_link_)); |
| - EXPECT_TRUE(contents->Contains(contents->report_abuse_link_)); |
| - |
| - // These controls should be visible. |
| - EXPECT_TRUE(contents->icon_->IsVisible()); |
| - EXPECT_TRUE(contents->title_->IsVisible()); |
| - EXPECT_TRUE(contents->install_date_->IsVisible()); |
| - EXPECT_TRUE(contents->description_->IsVisible()); |
| - EXPECT_TRUE(contents->uninstall_link_->IsVisible()); |
| - EXPECT_TRUE(contents->report_abuse_link_->IsVisible()); |
| - |
| - // Validate their layouts. |
| - EXPECT_GT(contents->title_->x(), contents->icon_->x()); |
| - EXPECT_GT(contents->title_->width(), 0); |
| - EXPECT_GT(contents->title_->height(), 0); |
| - EXPECT_EQ(contents->install_date_->x(), contents->title_->x()); |
| - EXPECT_GT(contents->install_date_->y(), contents->title_->y()); |
| - EXPECT_GT(contents->install_date_->width(), 0); |
| - EXPECT_GT(contents->install_date_->height(), 0); |
| - EXPECT_EQ(contents->description_->x(), contents->install_date_->x()); |
| - EXPECT_GT(contents->description_->y(), contents->install_date_->y()); |
| - EXPECT_GT(contents->description_->width(), 0); |
| - EXPECT_GT(contents->description_->height(), 0); |
| - EXPECT_EQ(contents->uninstall_link_->x(), contents->description_->x()); |
| - EXPECT_GT(contents->uninstall_link_->y(), contents->description_->y()); |
| - EXPECT_GT(contents->uninstall_link_->width(), 0); |
| - EXPECT_GT(contents->uninstall_link_->height(), 0); |
| - EXPECT_GT(contents->report_abuse_link_->x(), contents->uninstall_link_->x()); |
| - EXPECT_EQ(contents->report_abuse_link_->y(), contents->uninstall_link_->y()); |
| - EXPECT_GT(contents->report_abuse_link_->width(), 0); |
| - EXPECT_GT(contents->report_abuse_link_->height(), 0); |
| - |
| - // Validates the texts. |
| - base::Time install_time = |
| - extension_service->extension_prefs()->GetInstallTime(extension->id()); |
| - string16 time_text = l10n_util::GetStringFUTF16( |
| - IDS_ABOUT_PANEL_BUBBLE_EXTENSION_INSTALL_DATE, |
| - base::TimeFormatFriendlyDate( |
| - extension_service->extension_prefs()->GetInstallTime( |
| - extension->id()))); |
| - EXPECT_STREQ(UTF16ToUTF8(time_text).c_str(), |
| - WideToUTF8(contents->install_date_->GetText()).c_str()); |
| - EXPECT_STREQ(extension->description().c_str(), |
| - UTF16ToUTF8(contents->description_->text()).c_str()); |
| -} |
| - |
| IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, SetBoundsAnimation) { |
| PanelBrowserView* browser_view = CreatePanelBrowserView("PanelTest"); |
| @@ -550,4 +551,13 @@ |
| browser_view->panel()->Close(); |
| } |
| + |
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, CreateWrenchMenu) { |
| + TestCreateWrenchMenuForExtension( |
| + FILE_PATH_LITERAL("extension1"), Extension::EXTERNAL_POLICY_DOWNLOAD, |
| + "", ""); |
| + TestCreateWrenchMenuForExtension( |
| + FILE_PATH_LITERAL("extension2"), Extension::INVALID, |
| + "http://home", "options.html"); |
| +} |
| #endif |