| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import <Cocoa/Cocoa.h> |
| |
| #include "apps/shell_window_registry.h" |
| #include "base/command_line.h" |
| #include "base/mac/scoped_nsobject.h" |
| #include "chrome/app/chrome_command_ids.h" |
| #import "chrome/browser/app_controller_mac.h" |
| #include "chrome/browser/apps/app_browsertest_util.h" |
| #include "chrome/browser/extensions/extension_test_message_listener.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_list.h" |
| #include "chrome/browser/ui/browser_window.h" |
| #include "chrome/browser/ui/host_desktop.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #import "chrome/common/chrome_switches.h" |
| #include "chrome/common/extensions/extension.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| #include "content/public/browser/web_contents.h" |
| |
| namespace { |
| |
| class AppControllerPlatformAppBrowserTest |
| : public extensions::PlatformAppBrowserTest { |
| protected: |
| AppControllerPlatformAppBrowserTest() |
| : active_browser_list_(BrowserList::GetInstance( |
| chrome::GetActiveDesktop())) { |
| } |
| |
| virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| PlatformAppBrowserTest::SetUpCommandLine(command_line); |
| command_line->AppendSwitchASCII(switches::kAppId, |
| "1234"); |
| } |
| |
| const BrowserList* active_browser_list_; |
| }; |
| |
| // Test that if only a platform app window is open and no browser windows are |
| // open then a reopen event does nothing. |
| IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest, |
| PlatformAppReopenWithWindows) { |
| base::scoped_nsobject<AppController> ac([[AppController alloc] init]); |
| NSUInteger old_window_count = [[NSApp windows] count]; |
| EXPECT_EQ(1u, active_browser_list_->size()); |
| BOOL result = [ac applicationShouldHandleReopen:NSApp hasVisibleWindows:YES]; |
| |
| EXPECT_TRUE(result); |
| EXPECT_EQ(old_window_count, [[NSApp windows] count]); |
| EXPECT_EQ(1u, active_browser_list_->size()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest, |
| ActivationFocusesBrowserWindow) { |
| base::scoped_nsobject<AppController> app_controller( |
| [[AppController alloc] init]); |
| |
| ExtensionTestMessageListener listener("Launched", false); |
| const extensions::Extension* app = |
| InstallAndLaunchPlatformApp("minimal"); |
| ASSERT_TRUE(listener.WaitUntilSatisfied()); |
| |
| NSWindow* app_window = apps::ShellWindowRegistry::Get(profile())-> |
| GetShellWindowsForApp(app->id()).front()->GetNativeWindow(); |
| NSWindow* browser_window = browser()->window()->GetNativeWindow(); |
| |
| EXPECT_LE([[NSApp orderedWindows] indexOfObject:app_window], |
| [[NSApp orderedWindows] indexOfObject:browser_window]); |
| [app_controller applicationShouldHandleReopen:NSApp |
| hasVisibleWindows:YES]; |
| EXPECT_LE([[NSApp orderedWindows] indexOfObject:browser_window], |
| [[NSApp orderedWindows] indexOfObject:app_window]); |
| } |
| |
| class AppControllerWebAppBrowserTest : public InProcessBrowserTest { |
| protected: |
| AppControllerWebAppBrowserTest() |
| : active_browser_list_(BrowserList::GetInstance( |
| chrome::GetActiveDesktop())) { |
| } |
| |
| virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| command_line->AppendSwitchASCII(switches::kApp, GetAppURL()); |
| } |
| |
| std::string GetAppURL() const { |
| return "http://example.com/"; |
| } |
| |
| const BrowserList* active_browser_list_; |
| }; |
| |
| // Test that in web app mode a reopen event opens the app URL. |
| IN_PROC_BROWSER_TEST_F(AppControllerWebAppBrowserTest, |
| WebAppReopenWithNoWindows) { |
| base::scoped_nsobject<AppController> ac([[AppController alloc] init]); |
| EXPECT_EQ(1u, active_browser_list_->size()); |
| BOOL result = [ac applicationShouldHandleReopen:NSApp hasVisibleWindows:NO]; |
| |
| EXPECT_FALSE(result); |
| EXPECT_EQ(2u, active_browser_list_->size()); |
| |
| Browser* browser = active_browser_list_->get(0); |
| GURL current_url = |
| browser->tab_strip_model()->GetActiveWebContents()->GetURL(); |
| EXPECT_EQ(GetAppURL(), current_url.spec()); |
| } |
| |
| } // namespace |