Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: chrome/browser/ui/panels/old_base_panel_browser_test.cc

Issue 10545126: Made copies of existing Panel test files. No edits in any of the files. New files not added to .gyp… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/panels/old_base_panel_browser_test.cc
diff --git a/chrome/browser/ui/panels/old_base_panel_browser_test.cc b/chrome/browser/ui/panels/old_base_panel_browser_test.cc
new file mode 100644
index 0000000000000000000000000000000000000000..52180e76eb72eb10e67844bcd87ce4ffa635102c
--- /dev/null
+++ b/chrome/browser/ui/panels/old_base_panel_browser_test.cc
@@ -0,0 +1,492 @@
+// 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 "chrome/browser/ui/panels/base_panel_browser_test.h"
+
+#include "chrome/browser/ui/browser_list.h"
+
+#include "base/bind.h"
+#include "base/command_line.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop.h"
+#include "base/path_service.h"
+#include "base/string_number_conversions.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/panels/native_panel.h"
+#include "chrome/browser/ui/panels/panel_browser_window.h"
+#include "chrome/browser/ui/panels/panel_manager.h"
+#include "chrome/browser/ui/panels/panel_mouse_watcher.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/extension_manifest_constants.h"
+#include "chrome/common/string_ordinal.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/common/url_constants.h"
+#include "content/public/test/web_contents_tester.h"
+
+#if defined(OS_LINUX)
+#include "ui/base/x/x11_util.h"
+#endif
+
+#if defined(OS_MACOSX)
+#include "base/mac/scoped_nsautorelease_pool.h"
+#include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h"
+#include "chrome/browser/ui/cocoa/run_loop_testing.h"
+#endif
+
+using content::WebContentsTester;
+using extensions::Extension;
+
+namespace {
+
+const gfx::Rect kTestingPrimaryScreenArea = gfx::Rect(0, 0, 800, 600);
+const gfx::Rect kTestingWorkArea = gfx::Rect(0, 0, 800, 580);
+
+struct MockDesktopBar {
+ bool auto_hiding_enabled;
+ DisplaySettingsProvider::DesktopBarVisibility visibility;
+ int thickness;
+};
+
+class MockDisplaySettingsProviderImpl :
+ public BasePanelBrowserTest::MockDisplaySettingsProvider {
+ public:
+ explicit MockDisplaySettingsProviderImpl(PanelManager* panel_manager);
+ virtual ~MockDisplaySettingsProviderImpl() { }
+
+ // Overridden from DisplaySettingsProvider:
+ virtual gfx::Rect GetPrimaryScreenArea() const OVERRIDE;
+ virtual gfx::Rect GetWorkArea() const OVERRIDE;
+ virtual bool IsAutoHidingDesktopBarEnabled(
+ DesktopBarAlignment alignment) OVERRIDE;
+ virtual int GetDesktopBarThickness(
+ DesktopBarAlignment alignment) const OVERRIDE;
+ virtual DesktopBarVisibility GetDesktopBarVisibility(
+ DesktopBarAlignment alignment) const OVERRIDE;
+
+ // Overridden from MockDisplaySettingsProvider:
+ virtual void SetPrimaryScreenArea(
+ const gfx::Rect& primary_screen_area) OVERRIDE;
+ virtual void SetWorkArea(const gfx::Rect& work_area) OVERRIDE;
+ virtual void EnableAutoHidingDesktopBar(DesktopBarAlignment alignment,
+ bool enabled,
+ int thickness) OVERRIDE;
+ virtual void SetDesktopBarVisibility(
+ DesktopBarAlignment alignment, DesktopBarVisibility visibility) OVERRIDE;
+ virtual void SetDesktopBarThickness(DesktopBarAlignment alignment,
+ int thickness) OVERRIDE;
+
+ private:
+ gfx::Rect testing_primary_screen_area_;
+ gfx::Rect testing_work_area_;
+ MockDesktopBar mock_desktop_bars[3];
+
+ DISALLOW_COPY_AND_ASSIGN(MockDisplaySettingsProviderImpl);
+};
+
+
+MockDisplaySettingsProviderImpl::MockDisplaySettingsProviderImpl(
+ PanelManager* panel_manager) {
+ DisplaySettingsProvider* old_provider =
+ panel_manager->display_settings_provider();
+
+ ObserverListBase<DisplaySettingsProvider::DisplayAreaObserver>::Iterator
+ display_area_observers_iter(old_provider->display_area_observers());
+ AddDisplayAreaObserver(display_area_observers_iter.GetNext());
+ DCHECK(!display_area_observers_iter.GetNext());
+
+ ObserverListBase<DisplaySettingsProvider::DesktopBarObserver>::Iterator
+ desktop_bar_observer_iter(old_provider->desktop_bar_observers());
+ AddDesktopBarObserver(desktop_bar_observer_iter.GetNext());
+ DCHECK(!desktop_bar_observer_iter.GetNext());
+
+ ObserverListBase<DisplaySettingsProvider::FullScreenObserver>::Iterator
+ full_screen_observer_iter(old_provider->full_screen_observers());
+ AddFullScreenObserver(full_screen_observer_iter.GetNext());
+ DCHECK(!full_screen_observer_iter.GetNext());
+
+ panel_manager->set_display_settings_provider(this);
+
+ memset(mock_desktop_bars, 0, sizeof(mock_desktop_bars));
+}
+
+gfx::Rect MockDisplaySettingsProviderImpl::GetPrimaryScreenArea() const {
+ return testing_primary_screen_area_;
+}
+
+gfx::Rect MockDisplaySettingsProviderImpl::GetWorkArea() const {
+ return testing_work_area_;
+}
+
+bool MockDisplaySettingsProviderImpl::IsAutoHidingDesktopBarEnabled(
+ DesktopBarAlignment alignment) {
+ return mock_desktop_bars[static_cast<int>(alignment)].auto_hiding_enabled;
+}
+
+int MockDisplaySettingsProviderImpl::GetDesktopBarThickness(
+ DesktopBarAlignment alignment) const {
+ return mock_desktop_bars[static_cast<int>(alignment)].thickness;
+}
+
+DisplaySettingsProvider::DesktopBarVisibility
+MockDisplaySettingsProviderImpl::GetDesktopBarVisibility(
+ DesktopBarAlignment alignment) const {
+ return mock_desktop_bars[static_cast<int>(alignment)].visibility;
+}
+
+void MockDisplaySettingsProviderImpl::EnableAutoHidingDesktopBar(
+ DesktopBarAlignment alignment, bool enabled, int thickness) {
+ MockDesktopBar* bar = &(mock_desktop_bars[static_cast<int>(alignment)]);
+ bar->auto_hiding_enabled = enabled;
+ bar->thickness = thickness;
+ OnAutoHidingDesktopBarChanged();
+}
+
+void MockDisplaySettingsProviderImpl::SetPrimaryScreenArea(
+ const gfx::Rect& primary_screen_area) {
+ testing_primary_screen_area_ = primary_screen_area;
+}
+
+void MockDisplaySettingsProviderImpl::SetWorkArea(const gfx::Rect& work_area) {
+ testing_work_area_ = work_area;
+ OnDisplaySettingsChanged();
+}
+
+void MockDisplaySettingsProviderImpl::SetDesktopBarVisibility(
+ DesktopBarAlignment alignment, DesktopBarVisibility visibility) {
+ MockDesktopBar* bar = &(mock_desktop_bars[static_cast<int>(alignment)]);
+ if (!bar->auto_hiding_enabled)
+ return;
+ if (visibility == bar->visibility)
+ return;
+ bar->visibility = visibility;
+ OnAutoHidingDesktopBarChanged();
+}
+
+void MockDisplaySettingsProviderImpl::SetDesktopBarThickness(
+ DesktopBarAlignment alignment, int thickness) {
+ MockDesktopBar* bar = &(mock_desktop_bars[static_cast<int>(alignment)]);
+ if (!bar->auto_hiding_enabled)
+ return;
+ if (thickness == bar->thickness)
+ return;
+ bar->thickness = thickness;
+ OnAutoHidingDesktopBarChanged();
+}
+
+bool ExistsPanel(Panel* panel) {
+ std::vector<Panel*> panels = PanelManager::GetInstance()->panels();
+ return std::find(panels.begin(), panels.end(), panel) != panels.end();
+}
+
+} // namespace
+
+const FilePath::CharType* BasePanelBrowserTest::kTestDir =
+ FILE_PATH_LITERAL("panels");
+
+BasePanelBrowserTest::BasePanelBrowserTest()
+ : InProcessBrowserTest(),
+ mock_display_settings_enabled_(true) {
+#if defined(OS_MACOSX)
+ FindBarBridge::disable_animations_during_testing_ = true;
+#endif
+}
+
+BasePanelBrowserTest::~BasePanelBrowserTest() {
+}
+
+bool BasePanelBrowserTest::SkipTestIfIceWM() {
+#if defined(OS_LINUX)
+ return ui::GuessWindowManager() == ui::WM_ICE_WM;
+#else
+ return false;
+#endif
+}
+
+bool BasePanelBrowserTest::SkipTestIfCompizWM() {
+#if defined(OS_LINUX)
+ return ui::GuessWindowManager() == ui::WM_COMPIZ;
+#else
+ return false;
+#endif
+}
+
+void BasePanelBrowserTest::SetUpCommandLine(CommandLine* command_line) {
+ EnableDOMAutomation();
+ command_line->AppendSwitch(switches::kEnablePanels);
+}
+
+void BasePanelBrowserTest::SetUpOnMainThread() {
+ InProcessBrowserTest::SetUpOnMainThread();
+
+ // Setup the work area and desktop bar so that we have consistent testing
+ // environment for all panel related tests.
+ PanelManager* panel_manager = PanelManager::GetInstance();
+ if (mock_display_settings_enabled_) {
+ mock_display_settings_provider_ =
+ new MockDisplaySettingsProviderImpl(panel_manager);
+ SetTestingAreas(kTestingPrimaryScreenArea, kTestingWorkArea);
+ }
+
+ panel_manager->enable_auto_sizing(false);
+
+ PanelManager::shorten_time_intervals_for_testing();
+
+ // This is needed so the subsequently created panels can be activated.
+ // On a Mac, it transforms background-only test process into foreground one.
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+}
+
+void BasePanelBrowserTest::WaitForPanelActiveState(
+ Panel* panel, ActiveState expected_state) {
+ DCHECK(expected_state == SHOW_AS_ACTIVE ||
+ expected_state == SHOW_AS_INACTIVE);
+ ui_test_utils::WindowedNotificationObserver signal(
+ chrome::NOTIFICATION_PANEL_CHANGED_ACTIVE_STATUS,
+ content::Source<Panel>(panel));
+ if (panel->IsActive() == (expected_state == SHOW_AS_ACTIVE))
+ return; // Already in required state.
+ signal.Wait();
+ // Verify that transition happened in the desired direction.
+ EXPECT_TRUE(panel->IsActive() == (expected_state == SHOW_AS_ACTIVE));
+}
+
+void BasePanelBrowserTest::WaitForWindowSizeAvailable(Panel* panel) {
+ scoped_ptr<NativePanelTesting> panel_testing(
+ NativePanelTesting::Create(panel->native_panel()));
+ ui_test_utils::WindowedNotificationObserver signal(
+ chrome::NOTIFICATION_PANEL_WINDOW_SIZE_KNOWN,
+ content::Source<Panel>(panel));
+ if (panel_testing->IsWindowSizeKnown())
+ return;
+ signal.Wait();
+ EXPECT_TRUE(panel_testing->IsWindowSizeKnown());
+}
+
+void BasePanelBrowserTest::WaitForBoundsAnimationFinished(Panel* panel) {
+ scoped_ptr<NativePanelTesting> panel_testing(
+ NativePanelTesting::Create(panel->native_panel()));
+ ui_test_utils::WindowedNotificationObserver signal(
+ chrome::NOTIFICATION_PANEL_BOUNDS_ANIMATIONS_FINISHED,
+ content::Source<Panel>(panel));
+ if (!panel_testing->IsAnimatingBounds())
+ return;
+ signal.Wait();
+ EXPECT_TRUE(!panel_testing->IsAnimatingBounds());
+}
+
+void BasePanelBrowserTest::WaitForExpansionStateChanged(
+ Panel* panel, Panel::ExpansionState expansion_state) {
+ ui_test_utils::WindowedNotificationObserver signal(
+ chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE,
+ content::Source<Panel>(panel));
+ if (panel->expansion_state() == expansion_state)
+ return;
+ signal.Wait();
+ EXPECT_EQ(expansion_state, panel->expansion_state());
+}
+
+Panel* BasePanelBrowserTest::CreatePanelWithParams(
+ const CreatePanelParams& params) {
+#if defined(OS_MACOSX)
+ // Opening panels on a Mac causes NSWindowController of the Panel window
+ // to be autoreleased. We need a pool drained after it's done so the test
+ // can close correctly. The NSWindowController of the Panel window controls
+ // lifetime of the Browser object so we want to release it as soon as
+ // possible. In real Chrome, this is done by message pump.
+ // On non-Mac platform, this is an empty class.
+ base::mac::ScopedNSAutoreleasePool autorelease_pool;
+#endif
+
+ Browser* panel_browser = Browser::CreateWithParams(
+ Browser::CreateParams::CreateForApp(
+ Browser::TYPE_PANEL, params.name, params.bounds,
+ browser()->profile()));
+ EXPECT_TRUE(panel_browser->is_type_panel());
+
+ if (!params.url.is_empty()) {
+ ui_test_utils::WindowedNotificationObserver observer(
+ content::NOTIFICATION_LOAD_STOP,
+ content::NotificationService::AllSources());
+ panel_browser->AddSelectedTabWithURL(params.url,
+ content::PAGE_TRANSITION_START_PAGE);
+ observer.Wait();
+ }
+
+ PanelBrowserWindow* panel_browser_window =
+ static_cast<PanelBrowserWindow*>(panel_browser->window());
+ Panel* panel = panel_browser_window->panel();
+
+ if (!PanelManager::GetInstance()->auto_sizing_enabled() ||
+ params.bounds.width() || params.bounds.height()) {
+ EXPECT_FALSE(panel->auto_resizable());
+ } else {
+ EXPECT_TRUE(panel->auto_resizable());
+ }
+
+#if defined(OS_LINUX)
+ // On bots, we might have a simple window manager which always activates new
+ // windows, and can't always deactivate them. Keep track of the previously
+ // active window so we can activate that window back to ensure the new window
+ // is inactive.
+ Browser* last_active_browser_to_restore = NULL;
+ if (params.expected_active_state == SHOW_AS_INACTIVE &&
+ ui::GuessWindowManager() == ui::WM_ICE_WM) {
+ last_active_browser_to_restore = BrowserList::GetLastActive();
+ EXPECT_TRUE(last_active_browser_to_restore);
+ EXPECT_NE(last_active_browser_to_restore, panel_browser);
+ }
+#endif
+
+ if (params.show_flag == SHOW_AS_ACTIVE) {
+ panel->Show();
+ } else {
+ panel->ShowInactive();
+ }
+
+ if (params.wait_for_fully_created) {
+ MessageLoopForUI::current()->RunAllPending();
+
+#if defined(OS_LINUX)
+ // Restore focus where it was. It will deactivate the new panel.
+ if (last_active_browser_to_restore)
+ last_active_browser_to_restore->window()->Activate();
+#endif
+ // More waiting, because gaining or losing focus may require inter-process
+ // asynchronous communication, and it is not enough to just run the local
+ // message loop to make sure this activity has completed.
+ WaitForPanelActiveState(panel, params.expected_active_state);
+
+ // On Linux, window size is not available right away and we should wait
+ // before moving forward with the test.
+ WaitForWindowSizeAvailable(panel);
+
+ // Wait for the bounds animations on creation to finish.
+ WaitForBoundsAnimationFinished(panel);
+ }
+
+ return panel;
+}
+
+Panel* BasePanelBrowserTest::CreatePanelWithBounds(
+ const std::string& panel_name, const gfx::Rect& bounds) {
+ CreatePanelParams params(panel_name, bounds, SHOW_AS_ACTIVE);
+ return CreatePanelWithParams(params);
+}
+
+Panel* BasePanelBrowserTest::CreatePanel(const std::string& panel_name) {
+ CreatePanelParams params(panel_name, gfx::Rect(), SHOW_AS_ACTIVE);
+ return CreatePanelWithParams(params);
+}
+
+Panel* BasePanelBrowserTest::CreateDockedPanel(const std::string& name,
+ const gfx::Rect& bounds) {
+ Panel* panel = CreatePanelWithBounds(name, bounds);
+ EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type());
+ return panel;
+}
+
+Panel* BasePanelBrowserTest::CreateDetachedPanel(const std::string& name,
+ const gfx::Rect& bounds) {
+ Panel* panel = CreatePanelWithBounds(name, bounds);
+ panel->manager()->MovePanelToStrip(panel,
+ PanelStrip::DETACHED,
+ PanelStrip::DEFAULT_POSITION);
+ EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type());
+ // The panel is first created as docked panel, which ignores the specified
+ // origin in |bounds|. We need to reposition the panel after it becomes
+ // detached.
+ panel->SetPanelBounds(bounds);
+ WaitForBoundsAnimationFinished(panel);
+ return panel;
+}
+
+void BasePanelBrowserTest::CreateTestTabContents(Browser* browser) {
+ TabContentsWrapper* tab_contents =
+ new TabContentsWrapper(
+ WebContentsTester::CreateTestWebContents(browser->profile(), NULL));
+ browser->AddTab(tab_contents, content::PAGE_TRANSITION_LINK);
+}
+
+scoped_refptr<Extension> BasePanelBrowserTest::CreateExtension(
+ const FilePath::StringType& path,
+ Extension::Location location,
+ const DictionaryValue& extra_value) {
+#if defined(OS_WIN)
+ FilePath full_path(FILE_PATH_LITERAL("c:\\"));
+#else
+ FilePath full_path(FILE_PATH_LITERAL("/"));
+#endif
+ full_path = full_path.Append(path);
+
+ scoped_ptr<DictionaryValue> input_value(extra_value.DeepCopy());
+ input_value->SetString(extension_manifest_keys::kVersion, "1.0.0.0");
+ input_value->SetString(extension_manifest_keys::kName, "Sample Extension");
+
+ std::string error;
+ scoped_refptr<Extension> extension = Extension::Create(
+ full_path, location, *input_value, Extension::NO_FLAGS, &error);
+ EXPECT_TRUE(extension.get());
+ EXPECT_STREQ("", error.c_str());
+ browser()->profile()->GetExtensionService()->
+ OnExtensionInstalled(extension.get(), false, StringOrdinal());
+ return extension;
+}
+
+void BasePanelBrowserTest::SetTestingAreas(const gfx::Rect& primary_screen_area,
+ const gfx::Rect& work_area) {
+ DCHECK(primary_screen_area.Contains(work_area));
+ mock_display_settings_provider_->SetPrimaryScreenArea(primary_screen_area);
+ mock_display_settings_provider_->SetWorkArea(
+ work_area.IsEmpty() ? primary_screen_area : work_area);
+}
+
+void BasePanelBrowserTest::CloseWindowAndWait(Panel* panel) {
+ // Closing a panel may involve several async tasks. Need to use
+ // message pump and wait for the notification.
+ PanelManager* manager = PanelManager::GetInstance();
+ int panel_count = manager->num_panels();
+ ui_test_utils::WindowedNotificationObserver signal(
+ chrome::NOTIFICATION_PANEL_CLOSED,
+ content::Source<Panel>(panel));
+ panel->Close();
+ signal.Wait();
+ // Now we have one less panel.
+ EXPECT_EQ(panel_count - 1, manager->num_panels());
+
+#if defined(OS_MACOSX)
+ // Mac window controllers may be autoreleased, and in the non-test
+ // environment, may actually depend on the autorelease pool being recycled
+ // with the run loop in order to perform important work. Replicate this in
+ // the test environment.
+ AutoreleasePool()->Recycle();
+
+ // Make sure that everything has a chance to run.
+ chrome::testing::NSRunLoopRunAllPending();
+#endif // OS_MACOSX
+}
+
+void BasePanelBrowserTest::MoveMouseAndWaitForExpansionStateChange(
+ Panel* panel,
+ const gfx::Point& position) {
+ ui_test_utils::WindowedNotificationObserver signal(
+ chrome::NOTIFICATION_PANEL_CHANGED_EXPANSION_STATE,
+ content::Source<Panel>(panel));
+ MoveMouse(position);
+ signal.Wait();
+}
+
+void BasePanelBrowserTest::MoveMouse(const gfx::Point& position) {
+ PanelManager::GetInstance()->mouse_watcher()->NotifyMouseMovement(position);
+}
+
+std::string BasePanelBrowserTest::MakePanelName(int index) {
+ std::string panel_name("Panel");
+ return panel_name + base::IntToString(index);
+}
« no previous file with comments | « chrome/browser/ui/panels/old_base_panel_browser_test.h ('k') | chrome/browser/ui/panels/old_detached_panel_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698