tab_model_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/android/tab_model/tab_model.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_notification_types.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_source.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef testing::Test TabModelTest; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TabModelAndroidProfileMock : public TestingProfile { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabModelAndroidProfileMock() {} 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TabModelAndroidProfileMock() {} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(GetOffTheRecordProfile, Profile*()); 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(HasOffTheRecordProfile, bool()); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestTabModel : public TabModel { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit TestTabModel(Profile* profile) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : TabModel(profile) {} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetTabCount() const OVERRIDE { return 0; } 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetActiveIndex() const OVERRIDE { return 0; } 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* GetWebContentsAt(int index) const OVERRIDE { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionID::id_type GetTabIdAt(int index) const OVERRIDE { return 0; } 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CreateTab(content::WebContents* web_contents) OVERRIDE {} 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsSessionRestoreInProgress() const OVERRIDE { return false; } 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OpenClearBrowsingData() const OVERRIDE {} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TabModelTest, TestProfileHandling) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Construct TabModel with standard Profile. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingProfile testing_profile; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestTabModel tab_model(&testing_profile); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify TabModel has the correct profile and profile type. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(&testing_profile, tab_model.GetProfile()); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(tab_model.IsOffTheRecord()); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify profile is being destroyed and verify pointer is cleared. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::current()->Notify( 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_PROFILE_DESTROYED, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Source<Profile>(&testing_profile), 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::NoDetails()); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, tab_model.GetProfile()); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TabModelTest, TestProfileHandlingOffTheRecord) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Construct TabModel with off-the-record Profile. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabModelAndroidProfileMock testing_profile; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(testing_profile, HasOffTheRecordProfile()) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(testing::Return(true)); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(testing_profile, GetOffTheRecordProfile()) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillOnce(testing::Return(&testing_profile)); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestTabModel tab_model(&testing_profile); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify TabModel has the correct profile and profile type. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(&testing_profile, tab_model.GetProfile()); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(tab_model.IsOffTheRecord()); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify profile is being destroyed and verify pointer is cleared. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::current()->Notify( 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_PROFILE_DESTROYED, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Source<Profile>(&testing_profile), 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::NoDetails()); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, tab_model.GetProfile()); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 79