desktop_capture_apitest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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" 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/media/desktop_media_picker.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" 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/window_capturer.h" 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace extensions { 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace { 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class FakeDesktopMediaPicker : public DesktopMediaPicker { 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) explicit FakeDesktopMediaPicker(const content::DesktopMediaID& source, 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool expect_cancelled) 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) : source_(source), 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) expect_cancelled_(expect_cancelled), 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) weak_factory_(this) { 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~FakeDesktopMediaPicker() {} 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // DesktopMediaPicker interface. 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void Show(gfx::NativeWindow context, 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::NativeWindow parent, 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const string16& app_name, 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<DesktopMediaPickerModel> model, 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const DoneCallback& done_callback) OVERRIDE { 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!expect_cancelled_) { 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Post a task to call the callback asynchronously. 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::ThreadTaskRunnerHandle::Get()->PostTask( 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&FakeDesktopMediaPicker::CallCallback, 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_factory_.GetWeakPtr(), done_callback)); 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // If we expect the dialog to be canceled then store the callback to 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // retain reference to the callback handler. 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) done_callback_ = done_callback; 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void CallCallback(DoneCallback done_callback) { 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) done_callback.Run(source_); 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID source_; 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool expect_cancelled_; 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DoneCallback done_callback_; 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::WeakPtrFactory<FakeDesktopMediaPicker> weak_factory_; 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeDesktopMediaPicker); 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class FakeDesktopMediaPickerFactory : 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public DesktopCaptureChooseDesktopMediaFunction::PickerFactory { 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) struct Expectation { 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool screens; 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool windows; 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID selected_source; 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool cancelled; 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory() {} 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~FakeDesktopMediaPickerFactory() {} 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void SetExpectations(const Expectation* expectation_array, int size) { 843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (int i = 0; i < size; ++i) { 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations_.push(expectation_array[i]); 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // DesktopCaptureChooseDesktopMediaFunction::PickerFactory interface. 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual scoped_ptr<DesktopMediaPickerModel> CreateModel( 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<webrtc::ScreenCapturer> screen_capturer, 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<webrtc::WindowCapturer> window_capturer) OVERRIDE { 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(!expectations_.empty()); 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!expectations_.empty()) { 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(expectations_.front().screens, !!screen_capturer.get()); 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_EQ(expectations_.front().windows, !!window_capturer.get()); 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return scoped_ptr<DesktopMediaPickerModel>( 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new DesktopMediaPickerModelImpl(screen_capturer.Pass(), 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) window_capturer.Pass())); 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual scoped_ptr<DesktopMediaPicker> CreatePicker() OVERRIDE { 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID next_source; 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool expect_cancelled = false; 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!expectations_.empty()) { 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) next_source = expectations_.front().selected_source; 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) expect_cancelled = expectations_.front().cancelled; 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations_.pop(); 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return scoped_ptr<DesktopMediaPicker>( 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new FakeDesktopMediaPicker(next_source, expect_cancelled)); 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::queue<Expectation> expectations_; 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeDesktopMediaPickerFactory); 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class DesktopCaptureApiTest : public ExtensionApiTest { 1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureApiTest() { 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureChooseDesktopMediaFunction:: 1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetPickerFactoryForTests(&picker_factory_); 1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~DesktopCaptureApiTest() { 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DesktopCaptureChooseDesktopMediaFunction:: 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetPickerFactoryForTests(NULL); 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) protected: 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL GetURLForPath(const std::string& host, const std::string& path) { 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string port = base::IntToString(embedded_test_server()->port()); 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL::Replacements replacements; 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) replacements.SetHostStr(host); 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) replacements.SetPortStr(port); 1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return embedded_test_server()->GetURL(path).ReplaceComponents(replacements); 1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory picker_factory_; 1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace 1443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Flaky on Windows: http://crbug.com/301887 1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_WIN) 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ChooseDesktopMedia DISABLED_ChooseDesktopMedia 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ChooseDesktopMedia ChooseDesktopMedia 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DesktopCaptureApiTest, MAYBE_ChooseDesktopMedia) { 1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Each of the following expectations corresponds to one test in 1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chrome/test/data/extensions/api_test/desktop_capture/test.js . 1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory::Expectation picker_expectations[] = { 1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // pickerUiCanceled() 1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMedia() 1593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // screensOnly() 1623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, false, 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // WindowsOnly() 1653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { false, true, 1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID() }, 1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMediaAndGetStream() 1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // chooseMediaAndTryGetStreamWithInvalidId() 1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // cancelDialog() 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) { true, true, 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::DesktopMediaID(), true }, 1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 1773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) picker_factory_.SetExpectations(picker_expectations, 1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) arraysize(picker_expectations)); 1793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("desktop_capture")) << message_; 1803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(DesktopCaptureApiTest, Delegation) { 1833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Initialize test server. 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::FilePath test_data; 1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data)); 1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) embedded_test_server()->ServeFilesFromDirectory(test_data.AppendASCII( 1873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "extensions/api_test/desktop_capture_delegate")); 1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) host_resolver()->AddRule("*", embedded_test_server()->base_url().host()); 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Load extension. 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::FilePath extension_path = 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) test_data_dir_.AppendASCII("desktop_capture_delegate"); 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const Extension* extension = LoadExtensionWithFlags( 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) extension_path, ExtensionBrowserTest::kFlagNone); 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(extension); 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui_test_utils::NavigateToURL( 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) browser(), GetURLForPath("example.com", "/example.com.html")); 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) FakeDesktopMediaPickerFactory::Expectation picker_expectations[] = { 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { true, true, 2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0) }, 2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) }; 2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) picker_factory_.SetExpectations(picker_expectations, 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) arraysize(picker_expectations)); 2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool result; 2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "getStream()", &result)); 2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(result); 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) "getStreamWithInvalidId()", &result)); 2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(result); 2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} // namespace extensions 224