15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/basictypes.h"
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h"
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/tab_helper.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_version_info.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/browser/render_frame_host.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_process_host.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_registry.h"
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/common/switches.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/result_catcher.h"
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN)
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/win/windows_version.h"
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH)
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/test/base/test_switches.h"
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace extensions {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kExtensionId[] = "ddchlicdkolnonkihahngkmmmjnjlkkf";
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabCaptureApiTest : public ExtensionApiTest {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void AddExtensionToCommandLineWhitelist() {
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CommandLine::ForCurrentProcess()->AppendSwitchASCII(
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        switches::kWhitelistedExtensionID, kExtensionId);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TabCaptureApiPixelTest : public TabCaptureApiTest {
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    EnablePixelOutput();
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    TabCaptureApiTest::SetUp();
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, ApiTests) {
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH)
52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Disable this test in Metro+Ash for now (http://crbug.com/262796).
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (CommandLine::ForCurrentProcess()->HasSwitch(::switches::kAshBrowserTests))
54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    return;
55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif
56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_WIN)
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // TODO(justinlin): Disabled for WinXP due to timeout issues.
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (base::win::GetVersion() < base::win::VERSION_VISTA) {
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddExtensionToCommandLineWhitelist();
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture", "api_tests.html")) << message_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, ApiTestsAudio) {
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_WIN)
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // TODO(justinlin): Disabled for WinXP due to timeout issues.
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (base::win::GetVersion() < base::win::VERSION_VISTA) {
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddExtensionToCommandLineWhitelist();
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture", "api_tests_audio.html"))
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      << message_;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Disabled on ChromeOS for http://crbug.com/406051
8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Disabled on other platforms for http://crbug.com/177163
8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if !defined(NDEBUG) || defined(OS_CHROMEOS)
847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_EndToEnd DISABLED_EndToEnd
857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else
867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_EndToEnd EndToEnd
877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiPixelTest, MAYBE_EndToEnd) {
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN)
907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // TODO(justinlin): Disabled for WinXP due to timeout issues.
917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (base::win::GetVersion() < base::win::VERSION_VISTA) {
927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return;
937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // This test is too slow to succeed with OSMesa on the bots.
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (UsingOSMesa())
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return;
987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  AddExtensionToCommandLineWhitelist();
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture", "end_to_end.html"))
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      << message_;
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163
105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG)
106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_GetUserMediaTest DISABLED_GetUserMediaTest
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else
108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_GetUserMediaTest GetUserMediaTest
109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that we can't get tabCapture streams using GetUserMedia directly.
111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, MAYBE_GetUserMediaTest) {
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ExtensionTestMessageListener listener("ready", true);
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture", "get_user_media_test.html"))
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      << message_;
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(listener.WaitUntilSatisfied());
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::OpenURLParams params(GURL("about:blank"), content::Referrer(),
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                NEW_FOREGROUND_TAB,
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                ui::PAGE_TRANSITION_LINK, false);
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebContents* web_contents = browser()->OpenURL(params);
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  content::RenderFrameHost* const main_frame = web_contents->GetMainFrame();
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_TRUE(main_frame);
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  listener.Reply(base::StringPrintf("web-contents-media-stream://%i:%i",
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                    main_frame->GetProcess()->GetID(),
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                    main_frame->GetRoutingID()));
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResultCatcher catcher;
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  catcher.RestrictToBrowserContext(browser()->profile());
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163
1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG)
137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ActiveTabPermission DISABLED_ActiveTabPermission
138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else
139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_ActiveTabPermission ActiveTabPermission
140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Make sure tabCapture.capture only works if the tab has been granted
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// permission via an extension icon click or the extension is whitelisted.
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, MAYBE_ActiveTabPermission) {
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionTestMessageListener before_open_tab("ready1", true);
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionTestMessageListener before_grant_permission("ready2", true);
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionTestMessageListener before_open_new_tab("ready3", true);
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionTestMessageListener before_whitelist_extension("ready4", true);
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture",
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  "active_tab_permission_test.html"))
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      << message_;
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Open a new tab and make sure capture is denied.
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(before_open_tab.WaitUntilSatisfied());
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  content::OpenURLParams params(GURL("http://google.com"), content::Referrer(),
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                NEW_FOREGROUND_TAB,
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                ui::PAGE_TRANSITION_LINK, false);
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  content::WebContents* web_contents = browser()->OpenURL(params);
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  before_open_tab.Reply("");
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Grant permission and make sure capture succeeds.
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(before_grant_permission.WaitUntilSatisfied());
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const Extension* extension = ExtensionRegistry::Get(
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      web_contents->GetBrowserContext())->enabled_extensions().GetByID(
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          kExtensionId);
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TabHelper::FromWebContents(web_contents)
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      ->active_tab_permission_granter()->GrantIfRequested(extension);
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  before_grant_permission.Reply("");
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Open a new tab and make sure capture is denied.
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(before_open_new_tab.WaitUntilSatisfied());
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  browser()->OpenURL(params);
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  before_open_new_tab.Reply("");
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Add extension to whitelist and make sure capture succeeds.
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(before_whitelist_extension.WaitUntilSatisfied());
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddExtensionToCommandLineWhitelist();
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  before_whitelist_extension.Reply("");
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ResultCatcher catcher;
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  catcher.RestrictToBrowserContext(browser()->profile());
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// http://crbug.com/177163
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN) && !defined(NDEBUG)
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define MAYBE_FullscreenEvents DISABLED_FullscreenEvents
188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#elif defined(USE_AURA) || defined(OS_MACOSX)
189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// These don't always fire fullscreen events when run in tests. Tested manually.
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define MAYBE_FullscreenEvents DISABLED_FullscreenEvents
191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#elif defined(OS_LINUX)
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Flaky to get out of fullscreen in tests. Tested manually.
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define MAYBE_FullscreenEvents DISABLED_FullscreenEvents
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define MAYBE_FullscreenEvents FullscreenEvents
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(TabCaptureApiTest, MAYBE_FullscreenEvents) {
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN)
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // TODO(justinlin): Disabled for WinXP due to timeout issues.
200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (base::win::GetVersion() < base::win::VERSION_VISTA) {
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return;
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AddExtensionToCommandLineWhitelist();
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::OpenURLParams params(GURL("chrome://version"),
208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                content::Referrer(),
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                CURRENT_TAB,
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                ui::PAGE_TRANSITION_LINK, false);
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* web_contents = browser()->OpenURL(params);
212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExtensionTestMessageListener listeners_setup("ready1", true);
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExtensionTestMessageListener fullscreen_entered("ready2", true);
215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture", "fullscreen_test.html"))
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      << message_;
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(listeners_setup.WaitUntilSatisfied());
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Toggle fullscreen after setting up listeners.
221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  browser()->fullscreen_controller()->ToggleFullscreenModeForTab(web_contents,
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                 true);
223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  listeners_setup.Reply("");
224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Toggle again after JS should have the event.
226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(fullscreen_entered.WaitUntilSatisfied());
227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  browser()->fullscreen_controller()->ToggleFullscreenModeForTab(web_contents,
228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                 false);
229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  fullscreen_entered.Reply("");
230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ResultCatcher catcher;
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  catcher.RestrictToBrowserContext(browser()->profile());
233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Times out on Win dbg bots: http://crbug.com/177163
237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// #if defined(OS_WIN) && !defined(NDEBUG)
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Times out on all Win bots, flaky on MSan bots: http://crbug.com/294431
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_WIN) || defined(MEMORY_SANITIZER)
240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define MAYBE_GrantForChromePages DISABLED_GrantForChromePages
241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#else
242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define MAYBE_GrantForChromePages GrantForChromePages
243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
244d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Make sure tabCapture API can be granted for Chrome:// pages.
245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, MAYBE_GrantForChromePages) {
246d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ExtensionTestMessageListener before_open_tab("ready1", true);
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture",
2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  "active_tab_chrome_pages.html"))
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      << message_;
250d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(before_open_tab.WaitUntilSatisfied());
251d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
252d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Open a tab on a chrome:// page and make sure we can capture.
253d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  content::OpenURLParams params(GURL("chrome://version"), content::Referrer(),
254d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                NEW_FOREGROUND_TAB,
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                ui::PAGE_TRANSITION_LINK, false);
256d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  content::WebContents* web_contents = browser()->OpenURL(params);
257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const Extension* extension = ExtensionRegistry::Get(
258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      web_contents->GetBrowserContext())->enabled_extensions().GetByID(
259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          kExtensionId);
260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TabHelper::FromWebContents(web_contents)
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ->active_tab_permission_granter()->GrantIfRequested(extension);
262d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  before_open_tab.Reply("");
263d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
264d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ResultCatcher catcher;
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  catcher.RestrictToBrowserContext(browser()->profile());
266d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
267d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
268d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
269a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if (defined(OS_WIN) && !defined(NDEBUG)) || defined(OS_MACOSX)
270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// http://crbug.com/326319
2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_CaptureInSplitIncognitoMode DISABLED_CaptureInSplitIncognitoMode
2724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else
2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_CaptureInSplitIncognitoMode CaptureInSplitIncognitoMode
2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Test that a tab can be captured in split incognito mode.
2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, MAYBE_CaptureInSplitIncognitoMode) {
2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  AddExtensionToCommandLineWhitelist();
2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture",
2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                  "incognito.html",
2804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                  kFlagEnableIncognito | kFlagUseIncognito))
2814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      << message_;
2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG)
2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_Constraints DISABLED_Constraints
2861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else
2871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_Constraints Constraints
2881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif
2891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabCaptureApiTest, MAYBE_Constraints) {
2901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AddExtensionToCommandLineWhitelist();
2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunExtensionSubtest("tab_capture", "constraints.html"))
2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      << message_;
2931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace extensions
298