Home | History | Annotate | Download | only in browser
      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 #import <Cocoa/Cocoa.h>
      6 
      7 #include "apps/shell_window_registry.h"
      8 #include "base/command_line.h"
      9 #include "base/mac/scoped_nsobject.h"
     10 #include "chrome/app/chrome_command_ids.h"
     11 #import "chrome/browser/app_controller_mac.h"
     12 #include "chrome/browser/extensions/extension_test_message_listener.h"
     13 #include "chrome/browser/extensions/platform_app_browsertest_util.h"
     14 #include "chrome/browser/ui/browser.h"
     15 #include "chrome/browser/ui/browser_list.h"
     16 #include "chrome/browser/ui/browser_window.h"
     17 #include "chrome/browser/ui/host_desktop.h"
     18 #include "chrome/browser/ui/tabs/tab_strip_model.h"
     19 #import "chrome/common/chrome_switches.h"
     20 #include "chrome/common/extensions/extension.h"
     21 #include "chrome/test/base/in_process_browser_test.h"
     22 #include "chrome/test/base/ui_test_utils.h"
     23 #include "content/public/browser/web_contents.h"
     24 
     25 namespace {
     26 
     27 class AppControllerPlatformAppBrowserTest
     28     : public extensions::PlatformAppBrowserTest {
     29  protected:
     30   AppControllerPlatformAppBrowserTest()
     31       : active_browser_list_(BrowserList::GetInstance(
     32                                 chrome::GetActiveDesktop())) {
     33   }
     34 
     35   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     36     PlatformAppBrowserTest::SetUpCommandLine(command_line);
     37     command_line->AppendSwitchASCII(switches::kAppId,
     38                                     "1234");
     39   }
     40 
     41   const BrowserList* active_browser_list_;
     42 };
     43 
     44 // Test that if only a platform app window is open and no browser windows are
     45 // open then a reopen event does nothing.
     46 IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest,
     47                        PlatformAppReopenWithWindows) {
     48   base::scoped_nsobject<AppController> ac([[AppController alloc] init]);
     49   NSUInteger old_window_count = [[NSApp windows] count];
     50   EXPECT_EQ(1u, active_browser_list_->size());
     51   BOOL result = [ac applicationShouldHandleReopen:NSApp hasVisibleWindows:YES];
     52 
     53   EXPECT_TRUE(result);
     54   EXPECT_EQ(old_window_count, [[NSApp windows] count]);
     55   EXPECT_EQ(1u, active_browser_list_->size());
     56 }
     57 
     58 IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest,
     59                        ActivationFocusesBrowserWindow) {
     60   base::scoped_nsobject<AppController> app_controller(
     61       [[AppController alloc] init]);
     62 
     63   ExtensionTestMessageListener listener("Launched", false);
     64   const extensions::Extension* app =
     65       InstallAndLaunchPlatformApp("minimal");
     66   ASSERT_TRUE(listener.WaitUntilSatisfied());
     67 
     68   NSWindow* app_window = apps::ShellWindowRegistry::Get(profile())->
     69       GetShellWindowsForApp(app->id()).front()->GetNativeWindow();
     70   NSWindow* browser_window = browser()->window()->GetNativeWindow();
     71 
     72   EXPECT_LE([[NSApp orderedWindows] indexOfObject:app_window],
     73             [[NSApp orderedWindows] indexOfObject:browser_window]);
     74   [app_controller applicationShouldHandleReopen:NSApp
     75                               hasVisibleWindows:YES];
     76   EXPECT_LE([[NSApp orderedWindows] indexOfObject:browser_window],
     77             [[NSApp orderedWindows] indexOfObject:app_window]);
     78 }
     79 
     80 class AppControllerWebAppBrowserTest : public InProcessBrowserTest {
     81  protected:
     82   AppControllerWebAppBrowserTest()
     83       : active_browser_list_(BrowserList::GetInstance(
     84                                 chrome::GetActiveDesktop())) {
     85   }
     86 
     87   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     88     command_line->AppendSwitchASCII(switches::kApp, GetAppURL());
     89   }
     90 
     91   std::string GetAppURL() const {
     92     return "http://example.com/";
     93   }
     94 
     95   const BrowserList* active_browser_list_;
     96 };
     97 
     98 // Test that in web app mode a reopen event opens the app URL.
     99 IN_PROC_BROWSER_TEST_F(AppControllerWebAppBrowserTest,
    100                        WebAppReopenWithNoWindows) {
    101   base::scoped_nsobject<AppController> ac([[AppController alloc] init]);
    102   EXPECT_EQ(1u, active_browser_list_->size());
    103   BOOL result = [ac applicationShouldHandleReopen:NSApp hasVisibleWindows:NO];
    104 
    105   EXPECT_FALSE(result);
    106   EXPECT_EQ(2u, active_browser_list_->size());
    107 
    108   Browser* browser = active_browser_list_->get(0);
    109   GURL current_url =
    110       browser->tab_strip_model()->GetActiveWebContents()->GetURL();
    111   EXPECT_EQ(GetAppURL(), current_url.spec());
    112 }
    113 
    114 }  // namespace
    115