1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/browser.h" 6#include "chrome/browser/ui/views/dom_view.h" 7#include "chrome/test/in_process_browser_test.h" 8#include "chrome/test/ui_test_utils.h" 9#include "views/widget/root_view.h" 10#include "views/widget/widget.h" 11 12using namespace views; 13 14class DOMViewTest : public InProcessBrowserTest { 15 public: 16 Widget* CreatePopupWindow() { 17 Widget::CreateParams params(Widget::CreateParams::TYPE_POPUP); 18 params.mirror_origin_in_rtl = false; 19 Widget* widget = Widget::CreateWidget(params); 20 widget->Init(NULL, gfx::Rect(0, 0, 400, 400)); 21 return widget; 22 } 23}; 24 25// Tests if creating and deleting dom_view 26// does not crash and leak memory. 27IN_PROC_BROWSER_TEST_F(DOMViewTest, TestShowAndHide) { 28 Widget* one = CreatePopupWindow(); 29 30 DOMView* dom_view = new DOMView(); 31 one->GetRootView()->AddChildView(dom_view); 32 33 dom_view->Init(browser()->profile(), NULL); 34 dom_view->LoadURL(GURL("http://www.google.com")); 35 ui_test_utils::WaitForNotification(NotificationType::LOAD_STOP); 36 one->Show(); 37 38 ui_test_utils::RunAllPendingInMessageLoop(); 39 40 one->Hide(); 41} 42 43// Tests if removing from tree then deleting dom_view 44// does not crash and leak memory. 45IN_PROC_BROWSER_TEST_F(DOMViewTest, TestRemoveAndDelete) { 46 Widget* one = CreatePopupWindow(); 47 48 DOMView* dom_view = new DOMView(); 49 one->GetRootView()->AddChildView(dom_view); 50 51 dom_view->Init(browser()->profile(), NULL); 52 dom_view->LoadURL(GURL("http://www.google.com")); 53 ui_test_utils::WaitForNotification(NotificationType::LOAD_STOP); 54 one->Show(); 55 56 ui_test_utils::RunAllPendingInMessageLoop(); 57 58 one->GetRootView()->RemoveChildView(dom_view); 59 60 delete dom_view; 61 62 one->Hide(); 63} 64 65// Tests if reparenting dom_view does not crash and does not leak 66// memory. 67IN_PROC_BROWSER_TEST_F(DOMViewTest, TestReparent) { 68 Widget* one = CreatePopupWindow(); 69 70 DOMView* dom_view = new DOMView(); 71 one->GetRootView()->AddChildView(dom_view); 72 73 dom_view->Init(browser()->profile(), NULL); 74 dom_view->LoadURL(GURL("http://www.google.com")); 75 ui_test_utils::WaitForNotification(NotificationType::LOAD_STOP); 76 one->Show(); 77 78 ui_test_utils::RunAllPendingInMessageLoop(); 79 80 one->GetRootView()->RemoveChildView(dom_view); 81 one->Hide(); 82 83 // Re-attach to another Widget. 84 Widget* two = CreatePopupWindow(); 85 two->GetRootView()->AddChildView(dom_view); 86 two->Show(); 87 88 ui_test_utils::RunAllPendingInMessageLoop(); 89 90 two->Hide(); 91} 92