Home | History | Annotate | Download | only in panels
      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 "base/command_line.h"
      6 #include "chrome/browser/chromeos/wm_ipc.h"
      7 #include "chrome/browser/ui/browser.h"
      8 #include "chrome/browser/ui/browser_list.h"
      9 #include "chrome/browser/ui/browser_window.h"
     10 #include "chrome/common/chrome_switches.h"
     11 #include "chrome/test/in_process_browser_test.h"
     12 #include "chrome/test/ui_test_utils.h"
     13 #include "content/browser/renderer_host/render_view_host.h"
     14 #include "third_party/cros/chromeos_wm_ipc_enums.h"
     15 
     16 namespace chromeos {
     17 
     18 class PanelTest : public InProcessBrowserTest {
     19  public:
     20   PanelTest() {
     21     EnableDOMAutomation();
     22   }
     23 
     24  protected:
     25   virtual void SetUpCommandLine(CommandLine* command_line) {
     26     command_line->AppendSwitch(switches::kDisablePopupBlocking);
     27   }
     28 };
     29 
     30 // Small popups should open as a panel.
     31 IN_PROC_BROWSER_TEST_F(PanelTest, PanelOpenSmall) {
     32   const std::string HTML =
     33       "<html><head><title>PanelOpen</title></head>"
     34       "<body onload='window.setTimeout(run_tests, 0)'>"
     35       "<script>"
     36       "  function run_tests() {"
     37       "    window.open(null, null, 'width=100,height=100');"
     38       "  }"
     39       "</script>"
     40       "</body></html>";
     41   GURL url("data:text/html," + HTML);
     42   CommandLine::ForCurrentProcess()->AppendSwitch(
     43       switches::kDisablePopupBlocking);
     44 
     45   browser()->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::TYPED);
     46 
     47   // Wait for notification that window.open has been processed.
     48   ui_test_utils::WaitForNotification(NotificationType::TAB_ADDED);
     49 
     50   // Find the new browser.
     51   Browser* new_browser = NULL;
     52   for (BrowserList::const_iterator i = BrowserList::begin();
     53        i != BrowserList::end() && !new_browser; ++i) {
     54     if (*i != browser())
     55       new_browser = *i;
     56   }
     57 
     58   ASSERT_TRUE(new_browser);
     59   EXPECT_EQ(Browser::TYPE_POPUP, new_browser->type());
     60   // This window type tells the cros window manager to treat the window
     61   // as a panel.
     62   EXPECT_EQ(
     63       WM_IPC_WINDOW_CHROME_PANEL_CONTENT,
     64       WmIpc::instance()->GetWindowType(
     65           GTK_WIDGET(new_browser->window()->GetNativeHandle()), NULL));
     66 }
     67 
     68 // Large popups should open as new tab.
     69 IN_PROC_BROWSER_TEST_F(PanelTest, PanelOpenLarge) {
     70   const std::string HTML =
     71       "<html><head><title>PanelOpen</title></head>"
     72       "<body onload='window.setTimeout(run_tests, 0)'>"
     73       "<script>"
     74       "  function run_tests() {"
     75       "    window.open(null, null, 'width=1000,height=1000');"
     76       "  }"
     77         "</script>"
     78       "</body></html>";
     79   GURL url("data:text/html," + HTML);
     80   CommandLine::ForCurrentProcess()->AppendSwitch(
     81       switches::kDisablePopupBlocking);
     82   int old_tab_count = browser()->tab_count();
     83   browser()->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::TYPED);
     84 
     85   // Wait for notification that window.open has been processed.
     86   ui_test_utils::WaitForNotification(NotificationType::TAB_ADDED);
     87 
     88   // Shouldn't find a new browser.
     89   Browser* new_browser = NULL;
     90   for (BrowserList::const_iterator i = BrowserList::begin();
     91        i != BrowserList::end() && !new_browser; ++i) {
     92     if (*i != browser())
     93       new_browser = *i;
     94   }
     95   EXPECT_FALSE(new_browser);
     96 
     97   // Should find a new tab.
     98   EXPECT_EQ(old_tab_count + 1, browser()->tab_count());
     99 }
    100 
    101 }  // namespace chromeos
    102