Index: chrome/browser/ui/panels/base_panel_browser_test.cc |
diff --git a/chrome/browser/ui/panels/base_panel_browser_test.cc b/chrome/browser/ui/panels/base_panel_browser_test.cc |
deleted file mode 100644 |
index 10ffeb0e69ff0bda18ed3068d11141ee92f31b23..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/panels/base_panel_browser_test.cc |
+++ /dev/null |
@@ -1,590 +0,0 @@ |
-// 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 <string.h> |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/macros.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "build/build_config.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_window.h" |
-#include "chrome/browser/ui/panels/detached_panel_collection.h" |
-#include "chrome/browser/ui/panels/native_panel.h" |
-#include "chrome/browser/ui/panels/panel_collection.h" |
-#include "chrome/browser/ui/panels/panel_mouse_watcher.h" |
-#include "chrome/browser/ui/panels/stacked_panel_collection.h" |
-#include "chrome/browser/ui/panels/test_panel_active_state_observer.h" |
-#include "chrome/browser/ui/panels/test_panel_mouse_watcher.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/test/base/interactive_test_utils.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "components/sync/api/string_ordinal.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/common/url_constants.h" |
-#include "content/public/test/web_contents_tester.h" |
-#include "extensions/browser/extension_prefs.h" |
-#include "extensions/browser/extension_system.h" |
-#include "extensions/browser/install_flag.h" |
-#include "extensions/common/manifest_constants.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/run_loop_testing.h" |
-#endif |
- |
-using content::WebContentsTester; |
-using extensions::Extension; |
- |
-namespace { |
- |
-const gfx::Rect kTestingPrimaryDisplayArea = gfx::Rect(0, 0, 800, 600); |
-const gfx::Rect kTestingPrimaryWorkArea = gfx::Rect(0, 0, 800, 580); |
- |
-struct MockDesktopBar { |
- bool auto_hiding_enabled; |
- DisplaySettingsProvider::DesktopBarVisibility visibility; |
- int thickness; |
-}; |
- |
-class MockDisplaySettingsProviderImpl : |
- public BasePanelBrowserTest::MockDisplaySettingsProvider { |
- public: |
- MockDisplaySettingsProviderImpl(); |
- ~MockDisplaySettingsProviderImpl() override {} |
- |
- // Overridden from DisplaySettingsProvider: |
- gfx::Rect GetPrimaryDisplayArea() const override; |
- gfx::Rect GetPrimaryWorkArea() const override; |
- gfx::Rect GetDisplayAreaMatching(const gfx::Rect& bounds) const override; |
- gfx::Rect GetWorkAreaMatching(const gfx::Rect& bounds) const override; |
- bool IsAutoHidingDesktopBarEnabled(DesktopBarAlignment alignment) override; |
- int GetDesktopBarThickness(DesktopBarAlignment alignment) const override; |
- DesktopBarVisibility GetDesktopBarVisibility( |
- DesktopBarAlignment alignment) const override; |
- bool IsFullScreen() override; |
- |
- // Overridden from MockDisplaySettingsProvider: |
- void SetPrimaryDisplay(const gfx::Rect& display_area, |
- const gfx::Rect& work_area) override; |
- void SetSecondaryDisplay(const gfx::Rect& display_area, |
- const gfx::Rect& work_area) override; |
- void EnableAutoHidingDesktopBar(DesktopBarAlignment alignment, |
- bool enabled, |
- int thickness) override; |
- void SetDesktopBarVisibility(DesktopBarAlignment alignment, |
- DesktopBarVisibility visibility) override; |
- void SetDesktopBarThickness(DesktopBarAlignment alignment, |
- int thickness) override; |
- void EnableFullScreenMode(bool enabled) override; |
- |
- private: |
- gfx::Rect primary_display_area_; |
- gfx::Rect primary_work_area_; |
- gfx::Rect secondary_display_area_; |
- gfx::Rect secondary_work_area_; |
- MockDesktopBar mock_desktop_bars[3]; |
- bool full_screen_enabled_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MockDisplaySettingsProviderImpl); |
-}; |
- |
- |
-MockDisplaySettingsProviderImpl::MockDisplaySettingsProviderImpl() |
- : full_screen_enabled_(false) { |
- memset(mock_desktop_bars, 0, sizeof(mock_desktop_bars)); |
-} |
- |
-gfx::Rect MockDisplaySettingsProviderImpl::GetPrimaryDisplayArea() const { |
- return primary_display_area_; |
-} |
- |
-gfx::Rect MockDisplaySettingsProviderImpl::GetPrimaryWorkArea() const { |
- return primary_work_area_; |
-} |
- |
-gfx::Rect MockDisplaySettingsProviderImpl::GetDisplayAreaMatching( |
- const gfx::Rect& bounds) const { |
- if (secondary_display_area_.IsEmpty()) |
- return primary_display_area_; |
- |
- gfx::Rect primary_intersection = |
- gfx::IntersectRects(bounds, primary_display_area_); |
- int primary_intersection_size = |
- primary_intersection.width() * primary_intersection.height(); |
- |
- gfx::Rect secondary_intersection = |
- gfx::IntersectRects(bounds, secondary_display_area_); |
- int secondary_intersection_size = |
- secondary_intersection.width() * secondary_intersection.height(); |
- |
- return primary_intersection_size >= secondary_intersection_size ? |
- primary_display_area_ : secondary_display_area_; |
-} |
- |
-gfx::Rect MockDisplaySettingsProviderImpl::GetWorkAreaMatching( |
- const gfx::Rect& bounds) const { |
- if (secondary_work_area_.IsEmpty()) |
- return primary_work_area_; |
- |
- gfx::Rect primary_intersection = |
- gfx::IntersectRects(bounds, primary_work_area_); |
- int primary_intersection_size = |
- primary_intersection.width() * primary_intersection.height(); |
- |
- gfx::Rect secondary_intersection = |
- gfx::IntersectRects(bounds, secondary_work_area_); |
- int secondary_intersection_size = |
- secondary_intersection.width() * secondary_intersection.height(); |
- |
- return primary_intersection_size >= secondary_intersection_size ? |
- primary_work_area_ : secondary_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; |
-} |
- |
-bool MockDisplaySettingsProviderImpl::IsFullScreen() { |
- return full_screen_enabled_; |
-} |
- |
-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; |
-} |
- |
-void MockDisplaySettingsProviderImpl::SetPrimaryDisplay( |
- const gfx::Rect& display_area, const gfx::Rect& work_area) { |
- DCHECK(display_area.Contains(work_area)); |
- primary_display_area_ = display_area; |
- primary_work_area_ = work_area; |
- OnDisplaySettingsChanged(); |
-} |
- |
-void MockDisplaySettingsProviderImpl::SetSecondaryDisplay( |
- const gfx::Rect& display_area, const gfx::Rect& work_area) { |
- DCHECK(display_area.Contains(work_area)); |
- secondary_display_area_ = display_area; |
- secondary_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; |
- FOR_EACH_OBSERVER( |
- DesktopBarObserver, |
- desktop_bar_observers(), |
- OnAutoHidingDesktopBarVisibilityChanged(alignment, visibility)); |
-} |
- |
-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; |
- FOR_EACH_OBSERVER( |
- DesktopBarObserver, |
- desktop_bar_observers(), |
- OnAutoHidingDesktopBarThicknessChanged(alignment, thickness)); |
-} |
- |
-void MockDisplaySettingsProviderImpl::EnableFullScreenMode(bool enabled) { |
- full_screen_enabled_ = enabled; |
- CheckFullScreenMode(PERFORM_FULLSCREEN_CHECK); |
-} |
- |
-} // namespace |
- |
-const base::FilePath::CharType* BasePanelBrowserTest::kTestDir = |
- FILE_PATH_LITERAL("panels"); |
- |
-BasePanelBrowserTest::BasePanelBrowserTest() |
- : InProcessBrowserTest(), |
- mock_display_settings_enabled_(true) { |
-} |
- |
-BasePanelBrowserTest::~BasePanelBrowserTest() { |
-} |
- |
-void BasePanelBrowserTest::SetUpCommandLine(base::CommandLine* command_line) { |
- 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. |
- if (mock_display_settings_enabled_) { |
- mock_display_settings_provider_ = new MockDisplaySettingsProviderImpl(); |
- mock_display_settings_provider_->SetPrimaryDisplay( |
- kTestingPrimaryDisplayArea, kTestingPrimaryWorkArea); |
- PanelManager::SetDisplaySettingsProviderForTesting( |
- mock_display_settings_provider_); |
- } |
- |
- PanelManager* panel_manager = PanelManager::GetInstance(); |
- panel_manager->enable_auto_sizing(false); |
- |
- PanelManager::shorten_time_intervals_for_testing(); |
- |
- // Simulate the mouse movement so that tests are not affected by actual mouse |
- // events. |
- PanelMouseWatcher* mouse_watcher = new TestPanelMouseWatcher(); |
- panel_manager->SetMouseWatcherForTesting(mouse_watcher); |
- |
- // 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); |
- |
-#if defined(OS_MACOSX) |
- std::unique_ptr<NativePanelTesting> panel_testing( |
- CreateNativePanelTesting(panel)); |
- ASSERT_TRUE(panel_testing->EnsureApplicationRunOnForeground()) << |
- "Failed to bring application to foreground. Bail out."; |
-#endif |
- |
- PanelActiveStateObserver signal(panel, expected_state == SHOW_AS_ACTIVE); |
- signal.Wait(); |
-} |
- |
-void BasePanelBrowserTest::WaitForBoundsAnimationFinished(Panel* panel) { |
- std::unique_ptr<NativePanelTesting> panel_testing( |
- CreateNativePanelTesting(panel)); |
- // Sometimes there are several animations in sequence due to content |
- // auto resizing. Wait for all animations to finish. |
- while (panel_testing->IsAnimatingBounds()) { |
- content::WindowedNotificationObserver signal( |
- chrome::NOTIFICATION_PANEL_BOUNDS_ANIMATIONS_FINISHED, |
- content::Source<Panel>(panel)); |
- if (!panel_testing->IsAnimatingBounds()) |
- return; |
- signal.Wait(); |
- } |
-} |
- |
-BasePanelBrowserTest::CreatePanelParams::CreatePanelParams( |
- const std::string& name, |
- const gfx::Rect& bounds, |
- ActiveState show_flag) |
- : name(name), |
- bounds(bounds), |
- show_flag(show_flag), |
- wait_for_fully_created(true), |
- expected_active_state(show_flag), |
- create_mode(PanelManager::CREATE_AS_DOCKED), |
- profile(NULL) { |
-} |
- |
-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 Panel 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 |
- |
- content::WindowedNotificationObserver observer( |
- content::NOTIFICATION_LOAD_STOP, |
- content::NotificationService::AllSources()); |
- |
- PanelManager* manager = PanelManager::GetInstance(); |
- Panel* panel = manager->CreatePanel( |
- params.name, |
- params.profile ? params.profile : browser()->profile(), |
- params.url, |
- nullptr, |
- params.bounds, |
- params.create_mode); |
- |
- if (!params.url.is_empty()) |
- observer.Wait(); |
- |
- if (!manager->auto_sizing_enabled() || |
- params.bounds.width() || params.bounds.height()) { |
- EXPECT_FALSE(panel->auto_resizable()); |
- } else { |
- EXPECT_TRUE(panel->auto_resizable()); |
- } |
- |
- if (params.show_flag == SHOW_AS_ACTIVE) { |
- panel->Show(); |
- } else { |
- panel->ShowInactive(); |
- } |
- |
- if (params.wait_for_fully_created) { |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
- |
-#if defined(OS_LINUX) && defined(USE_X11) |
- // On bots, we might have a simple window manager which always activates new |
- // windows, and can't always deactivate them. Re-activate the main tabbed |
- // browser to "deactivate" the newly created panel. |
- if (params.expected_active_state == SHOW_AS_INACTIVE && |
- ui::GuessWindowManager() == ui::WM_ICE_WM) { |
- // Wait for new panel to become active before deactivating to ensure |
- // the activated notification is consumed before we wait for the panel |
- // to become inactive. |
- WaitForPanelActiveState(panel, SHOW_AS_ACTIVE); |
- browser()->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); |
- |
- // 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(PanelCollection::DOCKED, panel->collection()->type()); |
- return panel; |
-} |
- |
-Panel* BasePanelBrowserTest::CreateDetachedPanel(const std::string& name, |
- const gfx::Rect& bounds) { |
- Panel* panel = CreatePanelWithBounds(name, bounds); |
- PanelManager* panel_manager = panel->manager(); |
- panel_manager->MovePanelToCollection(panel, |
- panel_manager->detached_collection(), |
- PanelCollection::DEFAULT_POSITION); |
- EXPECT_EQ(PanelCollection::DETACHED, panel->collection()->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; |
-} |
- |
-Panel* BasePanelBrowserTest::CreateStackedPanel(const std::string& name, |
- const gfx::Rect& bounds, |
- StackedPanelCollection* stack) { |
- Panel* panel = CreateDetachedPanel(name, bounds); |
- panel->manager()->MovePanelToCollection( |
- panel, |
- stack, |
- static_cast<PanelCollection::PositioningMask>( |
- PanelCollection::DEFAULT_POSITION | |
- PanelCollection::COLLAPSE_TO_FIT)); |
- EXPECT_EQ(PanelCollection::STACKED, panel->collection()->type()); |
- WaitForBoundsAnimationFinished(panel); |
- return panel; |
-} |
- |
-Panel* BasePanelBrowserTest::CreateInactivePanel(const std::string& name) { |
- // Create an active panel first, instead of inactive panel. This is because |
- // certain window managers on Linux, like icewm, will always activate the |
- // new window. |
- Panel* panel = CreatePanel(name); |
- |
- DeactivatePanel(panel); |
- WaitForPanelActiveState(panel, SHOW_AS_INACTIVE); |
- |
- return panel; |
-} |
- |
-Panel* BasePanelBrowserTest::CreateInactiveDockedPanel( |
- const std::string& name, const gfx::Rect& bounds) { |
- // Create an active panel first, instead of inactive panel. This is because |
- // certain window managers on Linux, like icewm, will always activate the |
- // new window. |
- Panel* panel = CreateDockedPanel(name, bounds); |
- |
- DeactivatePanel(panel); |
- WaitForPanelActiveState(panel, SHOW_AS_INACTIVE); |
- |
- return panel; |
-} |
- |
-Panel* BasePanelBrowserTest::CreateInactiveDetachedPanel( |
- const std::string& name, const gfx::Rect& bounds) { |
- // Create an active panel first, instead of inactive panel. This is because |
- // certain window managers on Linux, like icewm, will always activate the |
- // new window. |
- Panel* panel = CreateDetachedPanel(name, bounds); |
- |
- DeactivatePanel(panel); |
- WaitForPanelActiveState(panel, SHOW_AS_INACTIVE); |
- |
- return panel; |
-} |
- |
-void BasePanelBrowserTest::ActivatePanel(Panel* panel) { |
- // For certain window managers on Linux, the window activation/deactivation |
- // signals might not be sent. To work around this, we explicitly deactivate |
- // all other panels first. |
-#if defined(OS_LINUX) |
- std::vector<Panel*> panels = PanelManager::GetInstance()->panels(); |
- for (std::vector<Panel*>::const_iterator iter = panels.begin(); |
- iter != panels.end(); ++iter) { |
- Panel* current_panel = *iter; |
- if (panel != current_panel) |
- current_panel->Deactivate(); |
- } |
-#endif |
- |
- panel->Activate(); |
-} |
- |
-void BasePanelBrowserTest::DeactivatePanel(Panel* panel) { |
-#if defined(OS_LINUX) |
- // For certain window managers on Linux, like icewm, panel activation and |
- // deactivation notification might not get tiggered when non-panel window is |
- // activated or deactivated. So we deactivate the panel directly. |
- panel->Deactivate(); |
-#else |
- // Make the panel lose focus by activating the browser window. This is |
- // because: |
- // 1) On Windows, deactivating the panel window might cause the application |
- // to lose the foreground status. When this occurs, trying to activate |
- // the panel window again will not be allowed by the system. |
- // 2) On MacOS, deactivating a window is not supported by Cocoa. |
- browser()->window()->Activate(); |
-#endif |
-} |
- |
-// static |
-NativePanelTesting* BasePanelBrowserTest::CreateNativePanelTesting( |
- Panel* panel) { |
- return panel->native_panel()->CreateNativePanelTesting(); |
-} |
- |
-scoped_refptr<Extension> BasePanelBrowserTest::CreateExtension( |
- const base::FilePath::StringType& path, |
- extensions::Manifest::Location location, |
- const base::DictionaryValue& extra_value) { |
- extensions::ExtensionPrefs* extension_prefs = |
- extensions::ExtensionPrefs::Get(browser()->profile()); |
- base::FilePath full_path = extension_prefs->install_directory().Append(path); |
- |
- std::unique_ptr<base::DictionaryValue> input_value(extra_value.DeepCopy()); |
- input_value->SetString(extensions::manifest_keys::kVersion, "1.0.0.0"); |
- input_value->SetString(extensions::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()); |
- extensions::ExtensionSystem::Get( |
- browser()->profile())->extension_service()->OnExtensionInstalled( |
- extension.get(), |
- syncer::StringOrdinal(), |
- extensions::kInstallFlagInstallImmediately); |
- return extension; |
-} |
- |
-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(); |
- content::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) { |
- content::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); |
-} |
- |
-bool BasePanelBrowserTest::WmSupportWindowActivation() { |
- return true; |
-} |