blob: 170a672f3c51b1601be4ac207dd37525e7711ec1 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/arc/pip/arc_picture_in_picture_window_controller_impl.h"
#include "chrome/browser/chromeos/arc/pip/arc_pip_bridge.h"
#include "chrome/test/base/testing_profile.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/test/connection_holder_util.h"
#include "components/arc/test/fake_pip_instance.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace arc {
class ArcPipBridgeTest : public testing::Test {
public:
ArcPipBridgeTest() = default;
~ArcPipBridgeTest() override = default;
void SetUp() override {
arc_bridge_service_ = std::make_unique<ArcBridgeService>();
bridge_ = std::make_unique<ArcPipBridge>(&testing_profile_,
arc_bridge_service_.get());
pip_instance_ = std::make_unique<arc::FakePipInstance>();
arc_bridge_service_->pip()->SetInstance(pip_instance_.get());
WaitForInstanceReady(arc_bridge_service_->pip());
}
void TearDown() override {
arc_bridge_service_->pip()->CloseInstance(pip_instance_.get());
pip_instance_.reset();
bridge_.reset();
arc_bridge_service_.reset();
}
ArcPipBridge* bridge() { return bridge_.get(); }
FakePipInstance* pip_instance() { return pip_instance_.get(); }
private:
content::TestBrowserThreadBundle thread_bundle_;
TestingProfile testing_profile_;
std::unique_ptr<ArcBridgeService> arc_bridge_service_;
std::unique_ptr<ArcPipBridge> bridge_;
std::unique_ptr<FakePipInstance> pip_instance_;
};
TEST_F(ArcPipBridgeTest, ClosingPipTellsAndroidToClosePip) {
bridge()->ClosePip();
EXPECT_EQ(1, pip_instance()->num_closed());
}
// Test that when PictureInPictureWindowManager notices one Android PIP
// is being replaced by another we don't erroneously send a close command
// to Android.
TEST_F(ArcPipBridgeTest, OpeningAndroidPipTwiceElidesCloseCall) {
bridge()->OnPipEvent(arc::mojom::ArcPipEvent::ENTER);
EXPECT_EQ(0, pip_instance()->num_closed());
bridge()->OnPipEvent(arc::mojom::ArcPipEvent::ENTER);
EXPECT_EQ(0, pip_instance()->num_closed());
}
} // namespace arc