1 // Copyright 2013 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.
5 #include "chrome/browser/apps/app_browsertest_util.h"
6 #include "chrome/browser/extensions/extension_test_message_listener.h"
7 #include "chrome/browser/profiles/profile.h"
8 #include "chrome/common/chrome_switches.h"
9 #include "content/public/browser/web_contents_view.h"
10 #include "content/public/test/browser_test_utils.h"
11 #include "extensions/browser/process_manager.h"
13 class WindowControlsTest
: public extensions::PlatformAppBrowserTest
{
15 virtual void SetUpCommandLine(CommandLine
* command_line
) OVERRIDE
{
16 extensions::PlatformAppBrowserTest::SetUpCommandLine(command_line
);
17 command_line
->AppendSwitch(switches::kEnableAppWindowControls
);
19 content::WebContents
* GetWebContentsForExtensionWindow(
20 const extensions::Extension
* extension
);
23 content::WebContents
* WindowControlsTest::GetWebContentsForExtensionWindow(
24 const extensions::Extension
* extension
) {
25 extensions::ProcessManager
* process_manager
=
26 extensions::ExtensionSystem::Get(profile())->process_manager();
28 // Lookup render view host for background page.
29 const extensions::ExtensionHost
* extension_host
=
30 process_manager
->GetBackgroundHostForExtension(extension
->id());
31 content::RenderViewHost
* background_view_host
=
32 extension_host
->render_view_host();
34 // Go through all active views, looking for the first window of the extension
35 const extensions::ProcessManager::ViewSet all_views
=
36 process_manager
->GetAllViews();
37 extensions::ProcessManager::ViewSet::const_iterator it
= all_views
.begin();
38 for (; it
!= all_views
.end(); ++it
) {
39 content::RenderViewHost
* host
= *it
;
41 // Filter out views not part of this extension
42 if (process_manager
->GetExtensionForRenderViewHost(host
) == extension
) {
43 // Filter out the background page view
44 if (host
!= background_view_host
) {
45 content::WebContents
* web_contents
=
46 content::WebContents::FromRenderViewHost(host
);
54 IN_PROC_BROWSER_TEST_F(WindowControlsTest
, CloseControlWorks
) {
55 // Launch app and wait for window to show up
56 ExtensionTestMessageListener
window_opened("window-opened", false);
57 const extensions::Extension
* extension
=
58 LoadAndLaunchPlatformApp("window_controls/buttons");
59 ASSERT_TRUE(window_opened
.WaitUntilSatisfied());
61 // Find WebContents of window
62 content::WebContents
* web_contents
=
63 GetWebContentsForExtensionWindow(extension
);
64 ASSERT_TRUE(web_contents
!= NULL
);
66 // Send a left click on the "Close" button and wait for the close action
68 ExtensionTestMessageListener
window_closed("window-closed", false);
70 // Send mouse click somewhere inside the [x] button
71 const int controlOffset
= 25;
72 int x
= web_contents
->GetView()->GetContainerSize().width() - controlOffset
;
73 int y
= controlOffset
;
74 content::SimulateMouseClickAt(web_contents
,
76 blink::WebMouseEvent::ButtonLeft
,
79 ASSERT_TRUE(window_closed
.WaitUntilSatisfied());