172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/test/ui/ui_test.h" 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_path.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/message_loop.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/html_dialog_view.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/html_dialog_ui.h" 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/url_constants.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/test/in_process_browser_test.h" 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/test/ui_test_utils.h" 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_widget_host_view.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "testing/gtest/include/gtest/gtest.h" 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "views/widget/widget.h" 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "views/window/window.h" 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenusing testing::Eq; 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace { 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Window non-client-area means that the minimum size for the window 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// won't be the actual minimum size - our layout and resizing code 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// makes sure the chrome is always visible. 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenconst int kMinimumWidthToTestFor = 20; 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenconst int kMinimumHeightToTestFor = 30; 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TestHtmlDialogUIDelegate : public HtmlDialogUIDelegate { 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TestHtmlDialogUIDelegate() {} 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual ~TestHtmlDialogUIDelegate() {} 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // HTMLDialogUIDelegate implementation: 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual bool IsDialogModal() const { 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return true; 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual std::wstring GetDialogTitle() const { 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return std::wstring(L"Test"); 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual GURL GetDialogContentURL() const { 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return GURL(chrome::kAboutBlankURL); 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void GetWebUIMessageHandlers( 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<WebUIMessageHandler*>* handlers) const { } 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void GetDialogSize(gfx::Size* size) const { 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen size->set_width(40); 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen size->set_height(40); 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual std::string GetDialogArgs() const { 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return std::string(); 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnDialogClosed(const std::string& json_retval) { } 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnCloseContents(TabContents* source, bool* out_close_dialog) { 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (out_close_dialog) 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen *out_close_dialog = true; 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool ShouldShowDialogTitle() const { return true; } 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass HtmlDialogBrowserTest : public InProcessBrowserTest { 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HtmlDialogBrowserTest() {} 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#if defined(OS_WIN) 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen class WindowChangedObserver : public base::MessagePumpForUI::Observer { 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WindowChangedObserver() {} 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen static WindowChangedObserver* GetInstance() { 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return Singleton<WindowChangedObserver>::get(); 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This method is called before processing a message. 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void WillProcessMessage(const MSG& msg) {} 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This method is called after processing a message. 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void DidProcessMessage(const MSG& msg) { 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Either WM_PAINT or WM_TIMER indicates the actual work of 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // pushing through the window resizing messages is done since 86bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // they are lower priority (we don't get to see the 87bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // WM_WINDOWPOSCHANGED message here). 88bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (msg.message == WM_PAINT || msg.message == WM_TIMER) 89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Quit(); 90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#elif !defined(OS_MACOSX) 93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen class WindowChangedObserver : public base::MessagePumpForUI::Observer { 94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen WindowChangedObserver() {} 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen static WindowChangedObserver* GetInstance() { 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return Singleton<WindowChangedObserver>::get(); 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This method is called before processing a message. 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void WillProcessEvent(GdkEvent* event) {} 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This method is called after processing a message. 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void DidProcessEvent(GdkEvent* event) { 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Quit once the GDK_CONFIGURE event has been processed - seeing 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // this means the window sizing request that was made actually 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // happened. 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (event->type == GDK_CONFIGURE) 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen MessageLoop::current()->Quit(); 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define MAYBE_SizeWindow SizeWindow 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#else 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// http://code.google.com/p/chromium/issues/detail?id=52602 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Windows has some issues resizing windows- an off by one problem, 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// and a minimum size that seems too big. This file isn't included in 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Mac builds yet. On Chrome OS, this test doesn't apply since ChromeOS 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// doesn't allow resizing of windows. 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define MAYBE_SizeWindow DISABLED_SizeWindow 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian MonsenIN_PROC_BROWSER_TEST_F(HtmlDialogBrowserTest, MAYBE_SizeWindow) { 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HtmlDialogUIDelegate* delegate = new TestHtmlDialogUIDelegate(); 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HtmlDialogView* html_view = 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen new HtmlDialogView(browser()->profile(), delegate); 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen TabContents* tab_contents = browser()->GetSelectedTabContents(); 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ASSERT_TRUE(tab_contents != NULL); 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen views::Window::CreateChromeWindow(tab_contents->GetMessageBoxRootWindow(), 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::Rect(), html_view); 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->InitDialog(); 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->window()->Show(); 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MessageLoopForUI::current()->AddObserver( 14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WindowChangedObserver::GetInstance()); 141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 142dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen gfx::Rect bounds = html_view->GetWidget()->GetClientAreaScreenBounds(); 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::Rect set_bounds = bounds; 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen gfx::Rect actual_bounds, rwhv_bounds; 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Bigger than the default in both dimensions. 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_width(400); 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_height(300); 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->MoveContents(tab_contents, set_bounds); 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ui_test_utils::RunMessageLoop(); 153dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen actual_bounds = html_view->GetWidget()->GetClientAreaScreenBounds(); 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(set_bounds, actual_bounds); 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 156bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen rwhv_bounds = 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->tab_contents()->GetRenderWidgetHostView()->GetViewBounds(); 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, rwhv_bounds.width()); 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, rwhv_bounds.height()); 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_GE(set_bounds.width(), rwhv_bounds.width()); 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_GE(set_bounds.height(), rwhv_bounds.height()); 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Larger in one dimension and smaller in the other. 164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_width(550); 165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_height(250); 166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 167bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->MoveContents(tab_contents, set_bounds); 168bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ui_test_utils::RunMessageLoop(); 169dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen actual_bounds = html_view->GetWidget()->GetClientAreaScreenBounds(); 170bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(set_bounds, actual_bounds); 171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen rwhv_bounds = 173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->tab_contents()->GetRenderWidgetHostView()->GetViewBounds(); 174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, rwhv_bounds.width()); 175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, rwhv_bounds.height()); 176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_GE(set_bounds.width(), rwhv_bounds.width()); 177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_GE(set_bounds.height(), rwhv_bounds.height()); 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Get very small. 180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_width(kMinimumWidthToTestFor); 181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_height(kMinimumHeightToTestFor); 182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->MoveContents(tab_contents, set_bounds); 184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ui_test_utils::RunMessageLoop(); 185dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen actual_bounds = html_view->GetWidget()->GetClientAreaScreenBounds(); 186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_EQ(set_bounds, actual_bounds); 187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen rwhv_bounds = 189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->tab_contents()->GetRenderWidgetHostView()->GetViewBounds(); 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, rwhv_bounds.width()); 191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, rwhv_bounds.height()); 192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_GE(set_bounds.width(), rwhv_bounds.width()); 193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_GE(set_bounds.height(), rwhv_bounds.height()); 194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Check to make sure we can't get to 0x0 196bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_width(0); 197bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen set_bounds.set_height(0); 198bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 199bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen html_view->MoveContents(tab_contents, set_bounds); 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ui_test_utils::RunMessageLoop(); 201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen actual_bounds = html_view->GetWidget()->GetClientAreaScreenBounds(); 202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, actual_bounds.width()); 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen EXPECT_LT(0, actual_bounds.height()); 204bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 20521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen MessageLoopForUI::current()->RemoveObserver( 20621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WindowChangedObserver::GetInstance()); 207bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 208