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