Home | History | Annotate | Download | only in guest_view
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "extensions/browser/guest_view/guest_view_manager.h"
      6 
      7 #include "content/public/browser/notification_service.h"
      8 #include "content/public/test/test_browser_context.h"
      9 #include "content/public/test/test_browser_thread_bundle.h"
     10 #include "content/public/test/web_contents_tester.h"
     11 #include "extensions/browser/extensions_test.h"
     12 
     13 using content::WebContents;
     14 using content::WebContentsTester;
     15 
     16 namespace extensions {
     17 
     18 namespace guestview {
     19 
     20 // This class allows us to access some private variables in
     21 // GuestViewManager.
     22 class TestGuestViewManager : public GuestViewManager {
     23  public:
     24   explicit TestGuestViewManager(content::BrowserContext* context)
     25       : GuestViewManager(context) {}
     26 
     27   int last_instance_id_removed_for_testing() {
     28     return last_instance_id_removed_;
     29   }
     30 
     31   size_t GetRemovedInstanceIdSize() { return removed_instance_ids_.size(); }
     32 
     33  private:
     34   using GuestViewManager::last_instance_id_removed_;
     35   using GuestViewManager::removed_instance_ids_;
     36 
     37   DISALLOW_COPY_AND_ASSIGN(TestGuestViewManager);
     38 };
     39 
     40 } // namespace guestview
     41 
     42 namespace {
     43 
     44 class GuestViewManagerTest : public extensions::ExtensionsTest {
     45  public:
     46   GuestViewManagerTest() :
     47     notification_service_(content::NotificationService::Create()) {}
     48   virtual ~GuestViewManagerTest() {}
     49 
     50   scoped_ptr<WebContents> CreateWebContents() {
     51     return scoped_ptr<WebContents>(
     52         WebContentsTester::CreateTestWebContents(&browser_context_, NULL));
     53   }
     54 
     55  private:
     56   scoped_ptr<content::NotificationService> notification_service_;
     57   content::TestBrowserThreadBundle thread_bundle_;
     58   content::TestBrowserContext browser_context_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(GuestViewManagerTest);
     61 };
     62 
     63 }  // namespace
     64 
     65 TEST_F(GuestViewManagerTest, AddRemove) {
     66   content::TestBrowserContext browser_context;
     67   scoped_ptr<guestview::TestGuestViewManager> manager(
     68       new guestview::TestGuestViewManager(&browser_context));
     69 
     70   scoped_ptr<WebContents> web_contents1(CreateWebContents());
     71   scoped_ptr<WebContents> web_contents2(CreateWebContents());
     72   scoped_ptr<WebContents> web_contents3(CreateWebContents());
     73 
     74   EXPECT_EQ(0, manager->last_instance_id_removed_for_testing());
     75 
     76   EXPECT_TRUE(manager->CanUseGuestInstanceID(1));
     77   EXPECT_TRUE(manager->CanUseGuestInstanceID(2));
     78   EXPECT_TRUE(manager->CanUseGuestInstanceID(3));
     79 
     80   manager->AddGuest(1, web_contents1.get());
     81   manager->AddGuest(2, web_contents2.get());
     82   manager->RemoveGuest(2);
     83 
     84   // Since we removed 2, it would be an invalid ID.
     85   EXPECT_TRUE(manager->CanUseGuestInstanceID(1));
     86   EXPECT_FALSE(manager->CanUseGuestInstanceID(2));
     87   EXPECT_TRUE(manager->CanUseGuestInstanceID(3));
     88 
     89   EXPECT_EQ(0, manager->last_instance_id_removed_for_testing());
     90 
     91   EXPECT_TRUE(manager->CanUseGuestInstanceID(3));
     92 
     93   manager->AddGuest(3, web_contents3.get());
     94   manager->RemoveGuest(1);
     95   EXPECT_FALSE(manager->CanUseGuestInstanceID(1));
     96   EXPECT_FALSE(manager->CanUseGuestInstanceID(2));
     97 
     98   EXPECT_EQ(2, manager->last_instance_id_removed_for_testing());
     99   manager->RemoveGuest(3);
    100   EXPECT_EQ(3, manager->last_instance_id_removed_for_testing());
    101 
    102   EXPECT_FALSE(manager->CanUseGuestInstanceID(1));
    103   EXPECT_FALSE(manager->CanUseGuestInstanceID(2));
    104   EXPECT_FALSE(manager->CanUseGuestInstanceID(3));
    105 
    106   EXPECT_EQ(0u, manager->GetRemovedInstanceIdSize());
    107 }
    108 
    109 }  // namespace extensions
    110