Home | History | Annotate | Download | only in webui
      1 // Copyright (c) 2012 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/test/ui/ui_test.h"
      6 
      7 #include "base/strings/utf_string_conversions.h"
      8 #include "chrome/browser/profiles/profile.h"
      9 #include "chrome/browser/ui/browser.h"
     10 #include "chrome/browser/ui/tabs/tab_strip_model.h"
     11 #include "chrome/browser/ui/webui/constrained_web_dialog_ui.h"
     12 #include "chrome/common/url_constants.h"
     13 #include "chrome/test/base/in_process_browser_test.h"
     14 #include "chrome/test/base/ui_test_utils.h"
     15 #include "components/web_modal/web_contents_modal_dialog_manager.h"
     16 #include "content/public/browser/web_contents.h"
     17 #include "content/public/browser/web_contents_observer.h"
     18 #include "ui/web_dialogs/test/test_web_dialog_delegate.h"
     19 
     20 using content::WebContents;
     21 using ui::WebDialogDelegate;
     22 using web_modal::WebContentsModalDialogManager;
     23 
     24 namespace {
     25 
     26 class ConstrainedWebDialogBrowserTestObserver
     27     : public content::WebContentsObserver {
     28  public:
     29   explicit ConstrainedWebDialogBrowserTestObserver(WebContents* contents)
     30       : content::WebContentsObserver(contents),
     31         contents_destroyed_(false) {
     32   }
     33   virtual ~ConstrainedWebDialogBrowserTestObserver() {}
     34 
     35   bool contents_destroyed() { return contents_destroyed_; }
     36 
     37  private:
     38   virtual void WebContentsDestroyed(WebContents* tab) OVERRIDE {
     39     contents_destroyed_ = true;
     40   }
     41 
     42   bool contents_destroyed_;
     43 };
     44 
     45 }  // namespace
     46 
     47 class ConstrainedWebDialogBrowserTest : public InProcessBrowserTest {
     48  public:
     49   ConstrainedWebDialogBrowserTest() {}
     50 
     51  protected:
     52   bool IsShowingWebContentsModalDialog(WebContents* web_contents) const {
     53     WebContentsModalDialogManager* web_contents_modal_dialog_manager =
     54         WebContentsModalDialogManager::FromWebContents(web_contents);
     55     return web_contents_modal_dialog_manager->IsShowingDialog();
     56   }
     57 };
     58 
     59 // Tests that opening/closing the constrained window won't crash it.
     60 IN_PROC_BROWSER_TEST_F(ConstrainedWebDialogBrowserTest, BasicTest) {
     61   // The delegate deletes itself.
     62   WebDialogDelegate* delegate = new ui::test::TestWebDialogDelegate(
     63       GURL(chrome::kChromeUIConstrainedHTMLTestURL));
     64   WebContents* web_contents =
     65       browser()->tab_strip_model()->GetActiveWebContents();
     66   ASSERT_TRUE(web_contents);
     67 
     68   ConstrainedWebDialogDelegate* dialog_delegate =
     69       CreateConstrainedWebDialog(browser()->profile(),
     70                                  delegate,
     71                                  NULL,
     72                                  web_contents);
     73   ASSERT_TRUE(dialog_delegate);
     74   EXPECT_TRUE(dialog_delegate->GetNativeDialog());
     75   EXPECT_TRUE(IsShowingWebContentsModalDialog(web_contents));
     76 }
     77 
     78 // Tests that ReleaseWebContentsOnDialogClose() works.
     79 IN_PROC_BROWSER_TEST_F(ConstrainedWebDialogBrowserTest,
     80                        ReleaseWebContentsOnDialogClose) {
     81   // The delegate deletes itself.
     82   WebDialogDelegate* delegate = new ui::test::TestWebDialogDelegate(
     83       GURL(chrome::kChromeUIConstrainedHTMLTestURL));
     84   WebContents* web_contents =
     85       browser()->tab_strip_model()->GetActiveWebContents();
     86   ASSERT_TRUE(web_contents);
     87 
     88   ConstrainedWebDialogDelegate* dialog_delegate =
     89       CreateConstrainedWebDialog(browser()->profile(),
     90                                  delegate,
     91                                  NULL,
     92                                  web_contents);
     93   ASSERT_TRUE(dialog_delegate);
     94   scoped_ptr<WebContents> new_tab(dialog_delegate->GetWebContents());
     95   ASSERT_TRUE(new_tab.get());
     96   ASSERT_TRUE(IsShowingWebContentsModalDialog(web_contents));
     97 
     98   ConstrainedWebDialogBrowserTestObserver observer(new_tab.get());
     99   dialog_delegate->ReleaseWebContentsOnDialogClose();
    100   dialog_delegate->OnDialogCloseFromWebUI();
    101 
    102   ASSERT_FALSE(observer.contents_destroyed());
    103   EXPECT_FALSE(IsShowingWebContentsModalDialog(web_contents));
    104   new_tab.reset();
    105   EXPECT_TRUE(observer.contents_destroyed());
    106 }
    107