// Copyright (c) 2012 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. #include "chrome/browser/ui/android/tab_model/tab_model.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/test/base/testing_profile.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_source.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" typedef testing::Test TabModelTest; namespace { class TabModelAndroidProfileMock : public TestingProfile { public: TabModelAndroidProfileMock() {} virtual ~TabModelAndroidProfileMock() {} MOCK_METHOD0(GetOffTheRecordProfile, Profile*()); MOCK_METHOD0(HasOffTheRecordProfile, bool()); }; } // namespace class TestTabModel : public TabModel { public: explicit TestTabModel(Profile* profile) : TabModel(profile) {} int GetTabCount() const OVERRIDE { return 0; } int GetActiveIndex() const OVERRIDE { return 0; } content::WebContents* GetWebContentsAt(int index) const OVERRIDE { return NULL; } SessionID::id_type GetTabIdAt(int index) const OVERRIDE { return 0; } void CreateTab(content::WebContents* web_contents) OVERRIDE {} bool IsSessionRestoreInProgress() const OVERRIDE { return false; } void OpenClearBrowsingData() const OVERRIDE {} }; TEST_F(TabModelTest, TestProfileHandling) { // Construct TabModel with standard Profile. TestingProfile testing_profile; TestTabModel tab_model(&testing_profile); // Verify TabModel has the correct profile and profile type. EXPECT_EQ(&testing_profile, tab_model.GetProfile()); EXPECT_FALSE(tab_model.IsOffTheRecord()); // Notify profile is being destroyed and verify pointer is cleared. content::NotificationService::current()->Notify( chrome::NOTIFICATION_PROFILE_DESTROYED, content::Source(&testing_profile), content::NotificationService::NoDetails()); EXPECT_EQ(NULL, tab_model.GetProfile()); } TEST_F(TabModelTest, TestProfileHandlingOffTheRecord) { // Construct TabModel with off-the-record Profile. TabModelAndroidProfileMock testing_profile; EXPECT_CALL(testing_profile, HasOffTheRecordProfile()) .WillOnce(testing::Return(true)); EXPECT_CALL(testing_profile, GetOffTheRecordProfile()) .WillOnce(testing::Return(&testing_profile)); TestTabModel tab_model(&testing_profile); // Verify TabModel has the correct profile and profile type. EXPECT_EQ(&testing_profile, tab_model.GetProfile()); EXPECT_TRUE(tab_model.IsOffTheRecord()); // Notify profile is being destroyed and verify pointer is cleared. content::NotificationService::current()->Notify( chrome::NOTIFICATION_PROFILE_DESTROYED, content::Source(&testing_profile), content::NotificationService::NoDetails()); EXPECT_EQ(NULL, tab_model.GetProfile()); }