Home | History | Annotate | Download | only in sidebar
      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 "base/file_path.h"
      7 #include "base/memory/ref_counted.h"
      8 #include "base/path_service.h"
      9 #include "chrome/browser/extensions/extension_browsertest.h"
     10 #include "chrome/browser/sidebar/sidebar_manager.h"
     11 #include "chrome/browser/ui/browser.h"
     12 #include "chrome/browser/ui/browser_window.h"
     13 #include "chrome/browser/ui/views/frame/browser_view.h"
     14 #include "chrome/common/chrome_paths.h"
     15 #include "chrome/common/chrome_switches.h"
     16 #include "chrome/common/extensions/extension.h"
     17 #include "chrome/test/in_process_browser_test.h"
     18 #include "chrome/test/ui_test_utils.h"
     19 #include "content/browser/tab_contents/tab_contents.h"
     20 #include "net/test/test_server.h"
     21 
     22 #include "chrome/browser/extensions/extension_service.h"
     23 #include "chrome/browser/profiles/profile.h"
     24 
     25 namespace {
     26 
     27 const char kSimplePage[] = "files/sidebar/simple_page.html";
     28 
     29 class SidebarTest : public ExtensionBrowserTest {
     30  public:
     31   SidebarTest() {
     32     CommandLine::ForCurrentProcess()->AppendSwitch(
     33         switches::kEnableExperimentalExtensionApis);
     34   }
     35 
     36  protected:
     37   // InProcessBrowserTest overrides.
     38   virtual void SetUpOnMainThread() {
     39     ExtensionBrowserTest::SetUpOnMainThread();
     40 
     41     // Load test sidebar extension.
     42     FilePath extension_path;
     43     ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extension_path));
     44     extension_path = extension_path.AppendASCII("sidebar");
     45 
     46     ASSERT_TRUE(LoadExtension(extension_path));
     47 
     48     // For now content_id == extension_id.
     49     content_id_ = last_loaded_extension_id_;
     50   }
     51 
     52   void ShowSidebarForCurrentTab() {
     53     ShowSidebar(browser()->GetSelectedTabContents());
     54   }
     55 
     56   void ExpandSidebarForCurrentTab() {
     57     ExpandSidebar(browser()->GetSelectedTabContents());
     58   }
     59 
     60   void CollapseSidebarForCurrentTab() {
     61     CollapseSidebar(browser()->GetSelectedTabContents());
     62   }
     63 
     64   void HideSidebarForCurrentTab() {
     65     HideSidebar(browser()->GetSelectedTabContents());
     66   }
     67 
     68   void NavigateSidebarForCurrentTabTo(const std::string& test_page) {
     69     GURL url = test_server()->GetURL(test_page);
     70 
     71     TabContents* tab = browser()->GetSelectedTabContents();
     72 
     73     SidebarManager* sidebar_manager = SidebarManager::GetInstance();
     74 
     75     sidebar_manager->NavigateSidebar(tab, content_id_, url);
     76 
     77     SidebarContainer* sidebar_container =
     78         sidebar_manager->GetSidebarContainerFor(tab, content_id_);
     79 
     80     TabContents* client_contents = sidebar_container->sidebar_contents();
     81     ui_test_utils::WaitForNavigation(&client_contents->controller());
     82   }
     83 
     84   void ShowSidebar(TabContents* tab) {
     85     SidebarManager* sidebar_manager = SidebarManager::GetInstance();
     86     sidebar_manager->ShowSidebar(tab, content_id_);
     87   }
     88 
     89   void ExpandSidebar(TabContents* tab) {
     90     SidebarManager* sidebar_manager = SidebarManager::GetInstance();
     91     sidebar_manager->ExpandSidebar(tab, content_id_);
     92     if (browser()->GetSelectedTabContents() == tab)
     93       EXPECT_GT(browser_view()->GetSidebarWidth(), 0);
     94   }
     95 
     96   void CollapseSidebar(TabContents* tab) {
     97     SidebarManager* sidebar_manager = SidebarManager::GetInstance();
     98     sidebar_manager->CollapseSidebar(tab, content_id_);
     99     if (browser()->GetSelectedTabContents() == tab)
    100       EXPECT_EQ(0, browser_view()->GetSidebarWidth());
    101   }
    102 
    103   void HideSidebar(TabContents* tab) {
    104     SidebarManager* sidebar_manager = SidebarManager::GetInstance();
    105     sidebar_manager->HideSidebar(tab, content_id_);
    106     if (browser()->GetSelectedTabContents() == tab)
    107       EXPECT_EQ(0, browser_view()->GetSidebarWidth());
    108   }
    109 
    110   TabContents* tab_contents(int i) {
    111     return browser()->GetTabContentsAt(i);
    112   }
    113 
    114   BrowserView* browser_view() const {
    115     return static_cast<BrowserView*>(browser()->window());
    116   }
    117 
    118  private:
    119   std::string content_id_;
    120 };
    121 
    122 IN_PROC_BROWSER_TEST_F(SidebarTest, OpenClose) {
    123   ShowSidebarForCurrentTab();
    124 
    125   ExpandSidebarForCurrentTab();
    126   CollapseSidebarForCurrentTab();
    127 
    128   ExpandSidebarForCurrentTab();
    129   CollapseSidebarForCurrentTab();
    130 
    131   ExpandSidebarForCurrentTab();
    132   CollapseSidebarForCurrentTab();
    133 
    134   HideSidebarForCurrentTab();
    135 
    136   ShowSidebarForCurrentTab();
    137 
    138   ExpandSidebarForCurrentTab();
    139   CollapseSidebarForCurrentTab();
    140 
    141   HideSidebarForCurrentTab();
    142 }
    143 
    144 IN_PROC_BROWSER_TEST_F(SidebarTest, SwitchingTabs) {
    145   ShowSidebarForCurrentTab();
    146   ExpandSidebarForCurrentTab();
    147 
    148   browser()->NewTab();
    149 
    150   // Make sure sidebar is not visbile for the newly opened tab.
    151   EXPECT_EQ(0, browser_view()->GetSidebarWidth());
    152 
    153   // Switch back to the first tab.
    154   browser()->SelectNumberedTab(0);
    155 
    156   // Make sure it is visible now.
    157   EXPECT_GT(browser_view()->GetSidebarWidth(), 0);
    158 
    159   HideSidebarForCurrentTab();
    160 }
    161 
    162 IN_PROC_BROWSER_TEST_F(SidebarTest, SidebarOnInactiveTab) {
    163   ShowSidebarForCurrentTab();
    164   ExpandSidebarForCurrentTab();
    165 
    166   browser()->NewTab();
    167 
    168   // Hide sidebar on inactive (first) tab.
    169   HideSidebar(tab_contents(0));
    170 
    171   // Switch back to the first tab.
    172   browser()->SelectNumberedTab(0);
    173 
    174   // Make sure sidebar is not visbile anymore.
    175   EXPECT_EQ(0, browser_view()->GetSidebarWidth());
    176 
    177   // Show sidebar on inactive (second) tab.
    178   ShowSidebar(tab_contents(1));
    179   ExpandSidebar(tab_contents(1));
    180   // Make sure sidebar is not visible yet.
    181   EXPECT_EQ(0, browser_view()->GetSidebarWidth());
    182 
    183   // Switch back to the second tab.
    184   browser()->SelectNumberedTab(1);
    185   // Make sure sidebar is visible now.
    186   EXPECT_GT(browser_view()->GetSidebarWidth(), 0);
    187 
    188   HideSidebarForCurrentTab();
    189 }
    190 
    191 IN_PROC_BROWSER_TEST_F(SidebarTest, SidebarNavigate) {
    192   ASSERT_TRUE(test_server()->Start());
    193 
    194   ShowSidebarForCurrentTab();
    195 
    196   NavigateSidebarForCurrentTabTo(kSimplePage);
    197 
    198   HideSidebarForCurrentTab();
    199 }
    200 
    201 }  // namespace
    202 
    203