1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_manager.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/browser/notification_service.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/test/test_browser_context.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/test/web_contents_tester.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/extensions_test.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using content::WebContents; 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using content::WebContentsTester; 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions { 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace guestview { 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This class allows us to access some private variables in 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// GuestViewManager. 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TestGuestViewManager : public GuestViewManager { 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit TestGuestViewManager(content::BrowserContext* context) 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : GuestViewManager(context) {} 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int last_instance_id_removed_for_testing() { 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return last_instance_id_removed_; 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size_t GetRemovedInstanceIdSize() { return removed_instance_ids_.size(); } 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) using GuestViewManager::last_instance_id_removed_; 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) using GuestViewManager::removed_instance_ids_; 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestGuestViewManager); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} // namespace guestview 416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace { 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class GuestViewManagerTest : public extensions::ExtensionsTest { 456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) public: 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GuestViewManagerTest() : 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) notification_service_(content::NotificationService::Create()) {} 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual ~GuestViewManagerTest() {} 496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<WebContents> CreateWebContents() { 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return scoped_ptr<WebContents>( 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) WebContentsTester::CreateTestWebContents(&browser_context_, NULL)); 536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) private: 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<content::NotificationService> notification_service_; 576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::TestBrowserContext browser_context_; 596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GuestViewManagerTest); 616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}; 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} // namespace 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(GuestViewManagerTest, AddRemove) { 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::TestBrowserContext browser_context; 676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<guestview::TestGuestViewManager> manager( 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new guestview::TestGuestViewManager(&browser_context)); 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<WebContents> web_contents1(CreateWebContents()); 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<WebContents> web_contents2(CreateWebContents()); 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<WebContents> web_contents3(CreateWebContents()); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, manager->last_instance_id_removed_for_testing()); 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(manager->CanUseGuestInstanceID(1)); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(manager->CanUseGuestInstanceID(2)); 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(manager->CanUseGuestInstanceID(3)); 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) manager->AddGuest(1, web_contents1.get()); 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) manager->AddGuest(2, web_contents2.get()); 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) manager->RemoveGuest(2); 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Since we removed 2, it would be an invalid ID. 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(manager->CanUseGuestInstanceID(1)); 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(manager->CanUseGuestInstanceID(2)); 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(manager->CanUseGuestInstanceID(3)); 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0, manager->last_instance_id_removed_for_testing()); 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(manager->CanUseGuestInstanceID(3)); 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) manager->AddGuest(3, web_contents3.get()); 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) manager->RemoveGuest(1); 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(manager->CanUseGuestInstanceID(1)); 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(manager->CanUseGuestInstanceID(2)); 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(2, manager->last_instance_id_removed_for_testing()); 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) manager->RemoveGuest(3); 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(3, manager->last_instance_id_removed_for_testing()); 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(manager->CanUseGuestInstanceID(1)); 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(manager->CanUseGuestInstanceID(2)); 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(manager->CanUseGuestInstanceID(3)); 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(0u, manager->GetRemovedInstanceIdSize()); 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace extensions 110