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

Unified Diff: chrome/browser/devtools/devtools_sanity_browsertest.cc

Issue 2734123004: add a new set of commands to resize and position windows (Closed)
Patch Set: add tests Created 3 years, 9 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/devtools/devtools_sanity_browsertest.cc
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc
index 75002d3c3f5387f780372ab9b0154e97a7030cf6..012a8902a66a572e6c3afb66b8ced57b08944d3a 100644
--- a/chrome/browser/devtools/devtools_sanity_browsertest.cc
+++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -25,7 +25,9 @@
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/devtools/chrome_devtools_manager_delegate.h"
#include "chrome/browser/devtools/device/tcp_device_provider.h"
+#include "chrome/browser/devtools/devtools_protocol_constants.h"
#include "chrome/browser/devtools/devtools_window_testing.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_browsertest.h"
@@ -36,6 +38,8 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
@@ -1601,3 +1605,152 @@ IN_PROC_BROWSER_TEST_F(DevToolsSanityTest,
IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestDevToolsSharedWorker) {
RunTest("testDevToolsSharedWorker", url::kAboutBlankURL);
}
+
+// Encapsulates waiting for the browser window to change state. This is
+// needed for example on Chrome desktop linux, where window state change is done
+// asynchronously as an event received from a different process.
+class CheckWaiter {
+ public:
+ explicit CheckWaiter(base::Callback<bool()> callback, bool expected)
+ : callback_(callback), expected_(expected) {}
+ ~CheckWaiter() = default;
+
+ // Blocks until the browser window becomes maximized.
+ void Wait() {
+ if (Check())
+ return;
+
+ base::RunLoop run_loop;
+ quit_ = run_loop.QuitClosure();
+ run_loop.Run();
+ }
+
+ private:
+ bool Check() {
+ if (callback_.Run() != expected_) {
+ base::MessageLoop::current()->task_runner()->PostTask(
+ FROM_HERE, base::Bind(base::IgnoreResult(&CheckWaiter::Check),
+ base::Unretained(this)));
+ return false;
+ }
+
+ // Quit the run_loop to end the wait.
+ if (!quit_.is_null())
+ base::ResetAndReturn(&quit_).Run();
+ return true;
+ }
+
+ base::Callback<bool()> callback_;
+ bool expected_;
+
+ // The waiter's RunLoop quit closure.
+ base::Closure quit_;
+
+ DISALLOW_COPY_AND_ASSIGN(CheckWaiter);
+};
+
+class DevToolsManagerDelegateTest : public InProcessBrowserTest {
+ public:
+ std::unique_ptr<base::DictionaryValue> SendCommand(std::string state) {
+ std::unique_ptr<base::DictionaryValue> params(new base::DictionaryValue);
+ base::DictionaryValue* bounds_object = new base::DictionaryValue();
+ bounds_object->SetString("windowState", state);
+ params->Set("bounds", bounds_object);
+ params->SetInteger("windowId", browser()->session_id().id());
+ return ChromeDevToolsManagerDelegate::SetWindowBounds(0, params.release());
+ }
+
+ void CheckIsMaximized(bool maximized) {
+ CheckWaiter(base::Bind(&BrowserWindow::IsMaximized,
+ base::Unretained(browser()->window())),
+ maximized)
+ .Wait();
+ }
+
+ void CheckIsMinimized(bool minimized) {
+ CheckWaiter(base::Bind(&BrowserWindow::IsMinimized,
+ base::Unretained(browser()->window())),
+ minimized)
+ .Wait();
+ }
+
+ void CheckIsFullscreen(bool fullscreen) {
+ CheckWaiter(base::Bind(&BrowserWindow::IsFullscreen,
+ base::Unretained(browser()->window())),
+ fullscreen)
+ .Wait();
+ }
+};
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, MaximizeWindow) {
+ browser()->window()->SetBounds(gfx::Rect(500, 600));
+ CheckIsMaximized(false);
+ SendCommand("maximized");
+ CheckIsMaximized(true);
+
+ browser()->window()->Restore();
+ browser()->window()->Minimize();
+ CheckIsMaximized(false);
+ CheckIsMinimized(true);
+ SendCommand("maximized");
+ CheckIsMaximized(true);
+ CheckIsMinimized(false);
+
+ browser()->window()->Restore();
+ browser()->window()->GetExclusiveAccessContext()->EnterFullscreen(
+ GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
+ CheckIsMaximized(false);
+ CheckIsFullscreen(true);
+ SendCommand("maximized");
+ CheckIsMaximized(true);
+ CheckIsFullscreen(false);
+
+ browser()->window()->Maximize();
+ CheckIsMaximized(true);
+ SendCommand("maximized");
+ CheckIsMaximized(true);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, MinimizeWindow) {
+ browser()->window()->SetBounds(gfx::Rect(500, 600));
+ CheckIsMinimized(false);
+ SendCommand("minimized");
+ CheckIsMinimized(true);
+
+ browser()->window()->Show();
+ browser()->window()->Maximize();
+ CheckIsMinimized(false);
+ CheckIsMaximized(true);
+ SendCommand("minimized");
+ CheckIsMinimized(true);
+
+ browser()->window()->Show();
+ browser()->window()->GetExclusiveAccessContext()->EnterFullscreen(
+ GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE);
+ CheckIsMinimized(false);
+ CheckIsFullscreen(true);
+ SendCommand("minimized");
+ CheckIsMinimized(true);
+ CheckIsFullscreen(false);
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsManagerDelegateTest, FullscreenWindow) {
+ browser()->window()->SetBounds(gfx::Rect(500, 600));
+ CheckIsFullscreen(false);
+ SendCommand("fullscreen");
+ CheckIsFullscreen(true);
+
+ browser()->window()->GetExclusiveAccessContext()->ExitFullscreen();
+ browser()->window()->Maximize();
+ CheckIsFullscreen(false);
+ CheckIsMaximized(true);
+ SendCommand("fullscreen");
+ CheckIsFullscreen(true);
+
+ browser()->window()->GetExclusiveAccessContext()->ExitFullscreen();
+ browser()->window()->Minimize();
+ CheckIsFullscreen(false);
+ CheckIsMinimized(true);
+ SendCommand("fullscreen");
+ CheckIsFullscreen(true);
+}

Powered by Google App Engine
This is Rietveld 408576698