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 "chrome/browser/ui/android/tab_model/tab_model.h"
6 #include "chrome/browser/ui/android/tab_model/tab_model_list.h"
7 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
8 #include "chrome/test/base/testing_profile.h"
9 #include "content/public/browser/web_contents.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace {
13 class TabModelListTest : public ChromeRenderViewHostTestHarness {};
14
15 class TestTabModel : public TabModel {
16 public:
TestTabModel(Profile * profile)17 explicit TestTabModel(Profile* profile)
18 : TabModel(profile, false), tab_count_(0) {}
19
GetTabCount() const20 int GetTabCount() const override { return tab_count_; }
GetActiveIndex() const21 int GetActiveIndex() const override { return 0; }
GetWebContentsAt(int index) const22 content::WebContents* GetWebContentsAt(int index) const override {
23 return nullptr;
24 }
CreateTab(TabAndroid * parent,content::WebContents * web_contents)25 void CreateTab(TabAndroid* parent,
26 content::WebContents* web_contents) override {}
HandlePopupNavigation(TabAndroid * parent,NavigateParams * params)27 void HandlePopupNavigation(TabAndroid* parent,
28 NavigateParams* params) override {}
CreateNewTabForDevTools(const GURL & url)29 content::WebContents* CreateNewTabForDevTools(const GURL& url) override {
30 return nullptr;
31 }
IsSessionRestoreInProgress() const32 bool IsSessionRestoreInProgress() const override { return false; }
IsActiveModel() const33 bool IsActiveModel() const override { return false; }
GetTabAt(int index) const34 TabAndroid* GetTabAt(int index) const override { return nullptr; }
SetActiveIndex(int index)35 void SetActiveIndex(int index) override {}
CloseTabAt(int index)36 void CloseTabAt(int index) override {}
AddObserver(TabModelObserver * observer)37 void AddObserver(TabModelObserver* observer) override {}
RemoveObserver(TabModelObserver * observer)38 void RemoveObserver(TabModelObserver* observer) override {}
39
40 // A fake value for the current number of tabs.
41 int tab_count_;
42 };
43 } // namespace
44
45 // Regression test for http://crbug.com/432685.
TEST_F(TabModelListTest,TestGetTabModelForWebContents)46 TEST_F(TabModelListTest, TestGetTabModelForWebContents) {
47 TestTabModel tab_model(profile());
48 TabModelList::AddTabModel(&tab_model);
49
50 std::unique_ptr<content::WebContents> contents(CreateTestWebContents());
51
52 // Should not crash when there are no tabs.
53 EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
54
55 // Should not crash when there is an uninitialized tab, i.e. when
56 // TabModel::GetTabAt returns NULL.
57 tab_model.tab_count_ = 1;
58 EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
59
60 TabModelList::RemoveTabModel(&tab_model);
61 }
62