// Copyright 2015 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. #import "ios/web/web_view_counter_impl.h" #import "base/mac/scoped_nsobject.h" #include "base/memory/scoped_ptr.h" #include "ios/web/public/browser_state.h" #include "ios/web/public/test/scoped_testing_web_client.h" #include "ios/web/public/test/test_browser_state.h" #import "ios/web/public/test/test_web_client.h" #include "ios/web/public/test/test_web_thread_bundle.h" #include "ios/web/public/test/web_test_util.h" #include "ios/web/public/web_client.h" #import "ios/web/public/web_view_counter.h" #import "ios/web/public/web_view_creation_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" namespace web { namespace { // A test fixture that sets up web-related classes for testing a // |WebViewCounter|. class WebViewCounterTest : public PlatformTest { public: WebViewCounterTest() : web_client_(make_scoped_ptr(new web::TestWebClient)) {} protected: void SetUp() override { PlatformTest::SetUp(); browser_state_.reset(new TestBrowserState()); } // Used to create TestWebThreads. TestWebThreadBundle thread_bundle_; // Required by web::CreateWebView/web::CreateWKWebView functions. web::ScopedTestingWebClient web_client_; // The BrowserState used for testing purposes. scoped_ptr browser_state_; }; } // namespace // Tests that WebViewCounter correctly maintains the count of WKWebViews. TEST_F(WebViewCounterTest, WKWebViewCount) { CR_TEST_REQUIRES_WK_WEB_VIEW(); WebViewCounterImpl* web_view_counter = WebViewCounterImpl::FromBrowserState(browser_state_.get()); ASSERT_TRUE(web_view_counter); base::scoped_nsobject web_view_1( web::CreateWKWebView(CGRectZero, browser_state_.get())); web_view_counter->InsertWKWebView(web_view_1); base::scoped_nsobject web_view_2( web::CreateWKWebView(CGRectZero, browser_state_.get())); web_view_counter->InsertWKWebView(web_view_2); EXPECT_EQ(2U, web_view_counter->GetWKWebViewCount()); // Deallocate WKWebViews. web_view_2.reset(); EXPECT_EQ(1U, web_view_counter->GetWKWebViewCount()); web_view_1.reset(); EXPECT_EQ(0U, web_view_counter->GetWKWebViewCount()); } } // namespace web