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