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