| Index: chrome/browser/ui/panels/panel_browsertest.cc
|
| ===================================================================
|
| --- chrome/browser/ui/panels/panel_browsertest.cc (revision 104349)
|
| +++ chrome/browser/ui/panels/panel_browsertest.cc (working copy)
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/bind.h"
|
| +#include "base/string_number_conversions.h"
|
| #include "chrome/browser/net/url_request_mock_util.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -177,6 +178,35 @@
|
| return expansion_states;
|
| }
|
|
|
| + std::vector<bool> GetAllPanelActiveStates() {
|
| + std::vector<Panel*> panels = PanelManager::GetInstance()->panels();
|
| + std::vector<bool> active_states;
|
| + for (size_t i = 0; i < panels.size(); i++)
|
| + active_states.push_back(panels[i]->IsActive());
|
| + return active_states;
|
| + }
|
| +
|
| + std::vector<bool> ProduceExpectedActiveStates(
|
| + int expected_active_panel_index) {
|
| + std::vector<Panel*> panels = PanelManager::GetInstance()->panels();
|
| + std::vector<bool> active_states;
|
| + for (int i = 0; i < static_cast<int>(panels.size()); i++)
|
| + active_states.push_back(i == expected_active_panel_index);
|
| + return active_states;
|
| + }
|
| +
|
| + void WaitForPanelActiveStates(const std::vector<bool>& old_states,
|
| + const std::vector<bool>& new_states) {
|
| + DCHECK(old_states.size() == new_states.size());
|
| + std::vector<Panel*> panels = PanelManager::GetInstance()->panels();
|
| + for (size_t i = 0; i < old_states.size(); i++) {
|
| + if (old_states[i] != new_states[i]){
|
| + WaitForPanelActiveState(
|
| + panels[i], new_states[i] ? SHOW_AS_ACTIVE : SHOW_AS_INACTIVE);
|
| + }
|
| + }
|
| + }
|
| +
|
| void TestDragging(int delta_x,
|
| int delta_y,
|
| size_t drag_index,
|
| @@ -1016,6 +1046,97 @@
|
| panel->Close();
|
| }
|
|
|
| +// TODO(jianli): To be enabled for other platforms.
|
| +#if defined(OS_WIN)
|
| +#define MAYBE_ActivateDeactivateBasic ActivateDeactivateBasic
|
| +#else
|
| +#define MAYBE_ActivateDeactivateBasic DISABLED_ActivateDeactivateBasic
|
| +#endif
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_ActivateDeactivateBasic) {
|
| + // Create an active panel.
|
| + Panel* panel = CreatePanel("PanelTest");
|
| + scoped_ptr<NativePanelTesting> native_panel_testing(
|
| + NativePanelTesting::Create(panel->native_panel()));
|
| + EXPECT_TRUE(panel->IsActive());
|
| + EXPECT_TRUE(native_panel_testing->VerifyActiveState(true));
|
| +
|
| + // Deactivate the panel.
|
| + panel->Deactivate();
|
| + WaitForPanelActiveState(panel, SHOW_AS_INACTIVE);
|
| + EXPECT_FALSE(panel->IsActive());
|
| + EXPECT_TRUE(native_panel_testing->VerifyActiveState(false));
|
| +
|
| + // Reactivate the panel.
|
| + panel->Activate();
|
| + WaitForPanelActiveState(panel, SHOW_AS_ACTIVE);
|
| + EXPECT_TRUE(panel->IsActive());
|
| + EXPECT_TRUE(native_panel_testing->VerifyActiveState(true));
|
| +}
|
| +
|
| +// TODO(jianli): To be enabled for other platforms.
|
| +#if defined(OS_WIN)
|
| +#define MAYBE_ActivateDeactivateMultiple ActivateDeactivateMultiple
|
| +#else
|
| +#define MAYBE_ActivateDeactivateMultiple DISABLED_ActivateDeactivateMultiple
|
| +#endif
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserTest, MAYBE_ActivateDeactivateMultiple) {
|
| + BrowserWindow* tabbed_window = BrowserList::GetLastActive()->window();
|
| +
|
| + // Create 4 panels in the following screen layout:
|
| + // P3 P2 P1 P0
|
| + const int kNumPanels = 4;
|
| + std::string panel_name_base("PanelTest");
|
| + for (int i = 0; i < kNumPanels; ++i) {
|
| + CreatePanelWithBounds(panel_name_base + base::IntToString(i),
|
| + gfx::Rect(0, 0, 100, 100));
|
| + }
|
| + const std::vector<Panel*>& panels = PanelManager::GetInstance()->panels();
|
| +
|
| + std::vector<bool> expected_active_states;
|
| + std::vector<bool> last_active_states;
|
| +
|
| + // The last created panel, P3, should be active.
|
| + expected_active_states = ProduceExpectedActiveStates(3);
|
| + EXPECT_EQ(expected_active_states, GetAllPanelActiveStates());
|
| + EXPECT_FALSE(tabbed_window->IsActive());
|
| +
|
| + // Activating P1 should cause P3 to lose focus.
|
| + panels[1]->Activate();
|
| + last_active_states = expected_active_states;
|
| + expected_active_states = ProduceExpectedActiveStates(1);
|
| + WaitForPanelActiveStates(last_active_states, expected_active_states);
|
| + EXPECT_EQ(expected_active_states, GetAllPanelActiveStates());
|
| +
|
| + // Minimizing inactive panel P2 should not affect other panels' active states.
|
| + panels[2]->SetExpansionState(Panel::MINIMIZED);
|
| + EXPECT_EQ(expected_active_states, GetAllPanelActiveStates());
|
| + EXPECT_FALSE(tabbed_window->IsActive());
|
| +
|
| + // Minimizing active panel P1 should activate last active panel P3.
|
| + panels[1]->SetExpansionState(Panel::MINIMIZED);
|
| + last_active_states = expected_active_states;
|
| + expected_active_states = ProduceExpectedActiveStates(3);
|
| + WaitForPanelActiveStates(last_active_states, expected_active_states);
|
| + EXPECT_EQ(expected_active_states, GetAllPanelActiveStates());
|
| + EXPECT_FALSE(tabbed_window->IsActive());
|
| +
|
| + // Minimizing active panel P3 should activate last active panel P0.
|
| + panels[3]->SetExpansionState(Panel::MINIMIZED);
|
| + last_active_states = expected_active_states;
|
| + expected_active_states = ProduceExpectedActiveStates(0);
|
| + WaitForPanelActiveStates(last_active_states, expected_active_states);
|
| + EXPECT_EQ(expected_active_states, GetAllPanelActiveStates());
|
| + EXPECT_FALSE(tabbed_window->IsActive());
|
| +
|
| + // Minimizing active panel P0 should activate last active tabbed window.
|
| + panels[0]->SetExpansionState(Panel::MINIMIZED);
|
| + last_active_states = expected_active_states;
|
| + expected_active_states = ProduceExpectedActiveStates(-1); // -1 means none.
|
| + WaitForPanelActiveStates(last_active_states, expected_active_states);
|
| + EXPECT_EQ(expected_active_states, GetAllPanelActiveStates());
|
| + EXPECT_TRUE(tabbed_window->IsActive());
|
| +}
|
| +
|
| class PanelDownloadTest : public PanelBrowserTest {
|
| public:
|
| PanelDownloadTest() : PanelBrowserTest() { }
|
|
|