desktop_capture_apitest.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <queue> 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/command_line.h" 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/path_service.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/thread_task_runner_handle.h" 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/extensions/api/desktop_capture/desktop_capture_api.h" 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/media/fake_desktop_media_list.h" 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/dns/mock_host_resolver.h" 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/desktop_capture_types.h" 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace extensions { 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace { 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct TestFlags { 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool expect_screens; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool expect_windows; 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DesktopMediaID selected_source; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool cancelled; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Following flags are set by FakeDesktopMediaPicker when it's created and 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // deleted. 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool picker_created; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool picker_deleted; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class FakeDesktopMediaPicker : public DesktopMediaPicker { 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit FakeDesktopMediaPicker(TestFlags* expectation) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : expectation_(expectation), 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) weak_factory_(this) { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expectation_->picker_created = true; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~FakeDesktopMediaPicker() { 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expectation_->picker_deleted = true; 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // DesktopMediaPicker interface. 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void Show(gfx::NativeWindow context, 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::NativeWindow parent, 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& app_name, 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::string16& target_name, 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<DesktopMediaList> model, 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const DoneCallback& done_callback) OVERRIDE { 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!expectation_->cancelled) { 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Post a task to call the callback asynchronously. 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ThreadTaskRunnerHandle::Get()->PostTask( 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&FakeDesktopMediaPicker::CallCallback, 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_factory_.GetWeakPtr(), done_callback)); 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If we expect the dialog to be cancelled then store the callback to 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // retain reference to the callback handler. 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) done_callback_ = done_callback; 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void CallCallback(DoneCallback done_callback) { 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) done_callback.Run(expectation_->selected_source); 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags* expectation_; 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DoneCallback done_callback_; 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::WeakPtrFactory<FakeDesktopMediaPicker> weak_factory_; 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeDesktopMediaPicker); 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class FakeDesktopMediaPickerFactory : 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public DesktopCaptureChooseDesktopMediaFunction::PickerFactory { 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory() {} 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~FakeDesktopMediaPickerFactory() {} 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetTestFlags(TestFlags* test_flags, int tests_count) { 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_flags_ = test_flags; 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tests_count_ = tests_count; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) current_test_ = 0; 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // DesktopCaptureChooseDesktopMediaFunction::PickerFactory interface. 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual scoped_ptr<DesktopMediaList> CreateModel( 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool show_screens, 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool show_windows) OVERRIDE { 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_LE(current_test_, tests_count_); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (current_test_ >= tests_count_) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DesktopMediaList>(); 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(test_flags_[current_test_].expect_screens, show_screens); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(test_flags_[current_test_].expect_windows, show_windows); 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<DesktopMediaList>(new FakeDesktopMediaList()); 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual scoped_ptr<DesktopMediaPicker> CreatePicker() OVERRIDE { 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_LE(current_test_, tests_count_); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (current_test_ >= tests_count_) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DesktopMediaPicker>(); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ++current_test_; 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return scoped_ptr<DesktopMediaPicker>( 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new FakeDesktopMediaPicker(test_flags_ + current_test_ - 1)); 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags* test_flags_; 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int tests_count_; 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int current_test_; 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeDesktopMediaPickerFactory); 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class DesktopCaptureApiTest : public ExtensionApiTest { 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureApiTest() { 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureChooseDesktopMediaFunction:: 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetPickerFactoryForTests(&picker_factory_); 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~DesktopCaptureApiTest() { 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureChooseDesktopMediaFunction:: 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetPickerFactoryForTests(NULL); 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) protected: 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL GetURLForPath(const std::string& host, const std::string& path) { 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string port = base::IntToString(embedded_test_server()->port()); 1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL::Replacements replacements; 1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) replacements.SetHostStr(host); 1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) replacements.SetPortStr(port); 1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return embedded_test_server()->GetURL(path).ReplaceComponents(replacements); 1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory picker_factory_; 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Flaky on Windows: http://crbug.com/301887 149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_WIN) 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ChooseDesktopMedia DISABLED_ChooseDesktopMedia 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ChooseDesktopMedia ChooseDesktopMedia 1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DesktopCaptureApiTest, MAYBE_ChooseDesktopMedia) { 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Each element in the following array corresponds to one test in 1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chrome/test/data/extensions/api_test/desktop_capture/test.js . 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags test_flags[] = { 1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // pickerUiCanceled() 1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMedia() 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // screensOnly() 1653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, false, 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // WindowsOnly() 1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { false, true, 1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMediaAndGetStream() 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) webrtc::kFullDesktopScreenId) }, 1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMediaAndTryGetStreamWithInvalidId() 1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) webrtc::kFullDesktopScreenId) }, 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // cancelDialog() 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { true, true, 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::DesktopMediaID(), true }, 1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) picker_factory_.SetTestFlags(test_flags, arraysize(test_flags)); 1833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("desktop_capture")) << message_; 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test is flaky http://crbug.com/301887. 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DesktopCaptureApiTest, DISABLED_Delegation) { 1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Initialize test server. 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::FilePath test_data; 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data)); 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) embedded_test_server()->ServeFilesFromDirectory(test_data.AppendASCII( 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "extensions/api_test/desktop_capture_delegate")); 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) host_resolver()->AddRule("*", embedded_test_server()->base_url().host()); 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Load extension. 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::FilePath extension_path = 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) test_data_dir_.AppendASCII("desktop_capture_delegate"); 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const Extension* extension = LoadExtensionWithFlags( 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension_path, ExtensionBrowserTest::kFlagNone); 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(extension); 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui_test_utils::NavigateToURL( 2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) browser(), GetURLForPath("example.com", "/example.com.html")); 2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags test_flags[] = { 2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { true, true, 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0), true }, 2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) picker_factory_.SetTestFlags(test_flags, arraysize(test_flags)); 2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool result; 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* web_contents = 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents, "getStream()", &result)); 2233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(result); 2243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents, "getStreamWithInvalidId()", &result)); 2273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(result); 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Verify that the picker is closed once the tab is closed. 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContentsDestroyedWatcher destroyed_watcher(web_contents); 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents, "openPickerDialogAndReturn()", &result)); 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(result); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(test_flags[2].picker_created); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(test_flags[2].picker_deleted); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents->Close(); 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) destroyed_watcher.Wait(); 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(test_flags[2].picker_deleted); 2403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace extensions 243