blob: 641d9cbf27e18494cbc852c8de73f274a705457a [file] [log] [blame]
[email protected]fc44f242012-02-14 16:54:391// 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
[email protected]f6d9b282013-08-09 11:03:207#include "apps/shell_window_registry.h"
[email protected]fc44f242012-02-14 16:54:398#include "base/command_line.h"
[email protected]a8522032013-06-24 22:51:469#include "base/mac/scoped_nsobject.h"
[email protected]fc44f242012-02-14 16:54:3910#include "chrome/app/chrome_command_ids.h"
11#import "chrome/browser/app_controller_mac.h"
[email protected]bb4bec02013-08-15 11:26:5812#include "chrome/browser/apps/app_browsertest_util.h"
[email protected]ee9ccfd42013-07-23 02:31:4713#include "chrome/browser/extensions/extension_test_message_listener.h"
[email protected]52877dbc62012-06-29 22:22:0314#include "chrome/browser/ui/browser.h"
15#include "chrome/browser/ui/browser_list.h"
[email protected]ee9ccfd42013-07-23 02:31:4716#include "chrome/browser/ui/browser_window.h"
[email protected]b4207c42013-02-12 06:44:2017#include "chrome/browser/ui/host_desktop.h"
[email protected]617ee962013-01-29 20:49:1218#include "chrome/browser/ui/tabs/tab_strip_model.h"
[email protected]fc44f242012-02-14 16:54:3919#import "chrome/common/chrome_switches.h"
[email protected]131cbf232013-08-09 15:35:2820#include "chrome/common/extensions/extension.h"
[email protected]fc44f242012-02-14 16:54:3921#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
25namespace {
26
[email protected]ee9ccfd42013-07-23 02:31:4727class AppControllerPlatformAppBrowserTest
28 : public extensions::PlatformAppBrowserTest {
[email protected]fc44f242012-02-14 16:54:3929 protected:
[email protected]b4207c42013-02-12 06:44:2030 AppControllerPlatformAppBrowserTest()
[email protected]7d1a810b2013-06-26 19:51:5931 : active_browser_list_(BrowserList::GetInstance(
[email protected]ed2fa722013-06-25 20:37:3432 chrome::GetActiveDesktop())) {
[email protected]b4207c42013-02-12 06:44:2033 }
[email protected]fc44f242012-02-14 16:54:3934
35 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
[email protected]ee9ccfd42013-07-23 02:31:4736 PlatformAppBrowserTest::SetUpCommandLine(command_line);
[email protected]fc44f242012-02-14 16:54:3937 command_line->AppendSwitchASCII(switches::kAppId,
38 "1234");
39 }
[email protected]b4207c42013-02-12 06:44:2040
[email protected]7d1a810b2013-06-26 19:51:5941 const BrowserList* active_browser_list_;
[email protected]fc44f242012-02-14 16:54:3942};
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.
46IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest,
47 PlatformAppReopenWithWindows) {
[email protected]a8522032013-06-24 22:51:4648 base::scoped_nsobject<AppController> ac([[AppController alloc] init]);
[email protected]fc44f242012-02-14 16:54:3949 NSUInteger old_window_count = [[NSApp windows] count];
[email protected]7d1a810b2013-06-26 19:51:5950 EXPECT_EQ(1u, active_browser_list_->size());
[email protected]a25920ee2013-09-05 19:38:4951 [ac applicationShouldHandleReopen:NSApp hasVisibleWindows:YES];
52 // We do not EXPECT_TRUE the result here because the method
53 // deminiaturizes windows manually rather than return YES and have
54 // AppKit do it.
[email protected]fc44f242012-02-14 16:54:3955
[email protected]fc44f242012-02-14 16:54:3956 EXPECT_EQ(old_window_count, [[NSApp windows] count]);
[email protected]7d1a810b2013-06-26 19:51:5957 EXPECT_EQ(1u, active_browser_list_->size());
[email protected]fc44f242012-02-14 16:54:3958}
59
[email protected]2e29e2232013-07-26 10:40:5960IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest,
61 ActivationFocusesBrowserWindow) {
62 base::scoped_nsobject<AppController> app_controller(
63 [[AppController alloc] init]);
64
65 ExtensionTestMessageListener listener("Launched", false);
66 const extensions::Extension* app =
67 InstallAndLaunchPlatformApp("minimal");
68 ASSERT_TRUE(listener.WaitUntilSatisfied());
69
[email protected]f6d9b282013-08-09 11:03:2070 NSWindow* app_window = apps::ShellWindowRegistry::Get(profile())->
[email protected]2e29e2232013-07-26 10:40:5971 GetShellWindowsForApp(app->id()).front()->GetNativeWindow();
72 NSWindow* browser_window = browser()->window()->GetNativeWindow();
73
74 EXPECT_LE([[NSApp orderedWindows] indexOfObject:app_window],
75 [[NSApp orderedWindows] indexOfObject:browser_window]);
76 [app_controller applicationShouldHandleReopen:NSApp
77 hasVisibleWindows:YES];
78 EXPECT_LE([[NSApp orderedWindows] indexOfObject:browser_window],
79 [[NSApp orderedWindows] indexOfObject:app_window]);
80}
81
[email protected]fc44f242012-02-14 16:54:3982class AppControllerWebAppBrowserTest : public InProcessBrowserTest {
83 protected:
[email protected]b4207c42013-02-12 06:44:2084 AppControllerWebAppBrowserTest()
[email protected]7d1a810b2013-06-26 19:51:5985 : active_browser_list_(BrowserList::GetInstance(
[email protected]ed2fa722013-06-25 20:37:3486 chrome::GetActiveDesktop())) {
[email protected]b4207c42013-02-12 06:44:2087 }
[email protected]fc44f242012-02-14 16:54:3988
89 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
[email protected]90ca44272012-07-18 18:15:4890 command_line->AppendSwitchASCII(switches::kApp, GetAppURL());
[email protected]fc44f242012-02-14 16:54:3991 }
92
93 std::string GetAppURL() const {
94 return "http://example.com/";
95 }
[email protected]b4207c42013-02-12 06:44:2096
[email protected]7d1a810b2013-06-26 19:51:5997 const BrowserList* active_browser_list_;
[email protected]fc44f242012-02-14 16:54:3998};
99
100// Test that in web app mode a reopen event opens the app URL.
101IN_PROC_BROWSER_TEST_F(AppControllerWebAppBrowserTest,
102 WebAppReopenWithNoWindows) {
[email protected]a8522032013-06-24 22:51:46103 base::scoped_nsobject<AppController> ac([[AppController alloc] init]);
[email protected]7d1a810b2013-06-26 19:51:59104 EXPECT_EQ(1u, active_browser_list_->size());
[email protected]fc44f242012-02-14 16:54:39105 BOOL result = [ac applicationShouldHandleReopen:NSApp hasVisibleWindows:NO];
106
107 EXPECT_FALSE(result);
[email protected]7d1a810b2013-06-26 19:51:59108 EXPECT_EQ(2u, active_browser_list_->size());
[email protected]fc44f242012-02-14 16:54:39109
[email protected]7d1a810b2013-06-26 19:51:59110 Browser* browser = active_browser_list_->get(0);
[email protected]617ee962013-01-29 20:49:12111 GURL current_url =
112 browser->tab_strip_model()->GetActiveWebContents()->GetURL();
[email protected]fc44f242012-02-14 16:54:39113 EXPECT_EQ(GetAppURL(), current_url.spec());
114}
115
116} // namespace