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. 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void Show(content::WebContents* web_contents, 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::NativeWindow context, 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::NativeWindow parent, 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& app_name, 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::string16& target_name, 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<DesktopMediaList> model, 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const DoneCallback& done_callback) OVERRIDE { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!expectation_->cancelled) { 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Post a task to call the callback asynchronously. 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ThreadTaskRunnerHandle::Get()->PostTask( 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&FakeDesktopMediaPicker::CallCallback, 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_factory_.GetWeakPtr(), done_callback)); 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If we expect the dialog to be cancelled then store the callback to 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // retain reference to the callback handler. 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) done_callback_ = done_callback; 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void CallCallback(DoneCallback done_callback) { 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) done_callback.Run(expectation_->selected_source); 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags* expectation_; 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DoneCallback done_callback_; 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::WeakPtrFactory<FakeDesktopMediaPicker> weak_factory_; 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeDesktopMediaPicker); 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class FakeDesktopMediaPickerFactory : 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public DesktopCaptureChooseDesktopMediaFunction::PickerFactory { 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory() {} 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~FakeDesktopMediaPickerFactory() {} 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetTestFlags(TestFlags* test_flags, int tests_count) { 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_flags_ = test_flags; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tests_count_ = tests_count; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) current_test_ = 0; 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // DesktopCaptureChooseDesktopMediaFunction::PickerFactory interface. 96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual scoped_ptr<DesktopMediaList> CreateModel( 97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool show_screens, 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool show_windows) OVERRIDE { 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_LE(current_test_, tests_count_); 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (current_test_ >= tests_count_) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DesktopMediaList>(); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(test_flags_[current_test_].expect_screens, show_screens); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(test_flags_[current_test_].expect_windows, show_windows); 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<DesktopMediaList>(new FakeDesktopMediaList()); 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual scoped_ptr<DesktopMediaPicker> CreatePicker() OVERRIDE { 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_LE(current_test_, tests_count_); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (current_test_ >= tests_count_) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return scoped_ptr<DesktopMediaPicker>(); 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ++current_test_; 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return scoped_ptr<DesktopMediaPicker>( 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new FakeDesktopMediaPicker(test_flags_ + current_test_ - 1)); 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags* test_flags_; 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int tests_count_; 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int current_test_; 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeDesktopMediaPickerFactory); 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class DesktopCaptureApiTest : public ExtensionApiTest { 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureApiTest() { 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureChooseDesktopMediaFunction:: 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetPickerFactoryForTests(&picker_factory_); 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~DesktopCaptureApiTest() { 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureChooseDesktopMediaFunction:: 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetPickerFactoryForTests(NULL); 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) protected: 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL GetURLForPath(const std::string& host, const std::string& path) { 1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string port = base::IntToString(embedded_test_server()->port()); 1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL::Replacements replacements; 1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) replacements.SetHostStr(host); 1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) replacements.SetPortStr(port); 1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return embedded_test_server()->GetURL(path).ReplaceComponents(replacements); 1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory picker_factory_; 1453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace 1483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Flaky on Windows: http://crbug.com/301887 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_WIN) 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ChooseDesktopMedia DISABLED_ChooseDesktopMedia 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ChooseDesktopMedia ChooseDesktopMedia 1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DesktopCaptureApiTest, MAYBE_ChooseDesktopMedia) { 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Each element in the following array corresponds to one test in 1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chrome/test/data/extensions/api_test/desktop_capture/test.js . 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags test_flags[] = { 1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // pickerUiCanceled() 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMedia() 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 1653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // screensOnly() 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, false, 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // WindowsOnly() 1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { false, true, 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMediaAndGetStream() 1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) webrtc::kFullDesktopScreenId) }, 1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMediaAndTryGetStreamWithInvalidId() 1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) webrtc::kFullDesktopScreenId) }, 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // cancelDialog() 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { true, true, 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::DesktopMediaID(), true }, 1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) picker_factory_.SetTestFlags(test_flags, arraysize(test_flags)); 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("desktop_capture")) << message_; 1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test is flaky http://crbug.com/301887. 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(DesktopCaptureApiTest, DISABLED_Delegation) { 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Initialize test server. 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::FilePath test_data; 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data)); 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) embedded_test_server()->ServeFilesFromDirectory(test_data.AppendASCII( 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "extensions/api_test/desktop_capture_delegate")); 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) host_resolver()->AddRule("*", embedded_test_server()->base_url().host()); 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Load extension. 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::FilePath extension_path = 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) test_data_dir_.AppendASCII("desktop_capture_delegate"); 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const Extension* extension = LoadExtensionWithFlags( 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension_path, ExtensionBrowserTest::kFlagNone); 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(extension); 2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui_test_utils::NavigateToURL( 2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) browser(), GetURLForPath("example.com", "/example.com.html")); 2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestFlags test_flags[] = { 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { true, true, 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0), true }, 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) picker_factory_.SetTestFlags(test_flags, arraysize(test_flags)); 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool result; 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* web_contents = 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents, "getStream()", &result)); 2243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(result); 2253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents, "getStreamWithInvalidId()", &result)); 2283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(result); 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Verify that the picker is closed once the tab is closed. 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContentsDestroyedWatcher destroyed_watcher(web_contents); 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents, "openPickerDialogAndReturn()", &result)); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(result); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(test_flags[2].picker_created); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(test_flags[2].picker_deleted); 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents->Close(); 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) destroyed_watcher.Wait(); 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(test_flags[2].picker_deleted); 2413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace extensions 244