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