1e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch// found in the LICENSE file.
4e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
5e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch#include "chrome/browser/ui/android/tab_model/tab_model.h"
6e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
7e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch#include "chrome/test/base/chrome_render_view_host_test_harness.h"
8e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch#include "chrome/test/base/testing_profile.h"
9e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch#include "content/public/browser/web_contents.h"
10e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
11e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
12e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdochnamespace {
13e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdochclass TabModelListTest : public ChromeRenderViewHostTestHarness {};
14e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch}  // namespace
15e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
16e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdochclass TestTabModel : public TabModel {
17e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch public:
18e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  explicit TestTabModel(Profile* profile) : TabModel(profile), tab_count_(0) {}
19e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
20e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual int GetTabCount() const override { return tab_count_; }
21e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual int GetActiveIndex() const override { return 0; }
22e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual content::WebContents* GetWebContentsAt(int index) const override {
23e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    return nullptr;
24e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  }
25e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual void CreateTab(content::WebContents* web_contents,
26e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch                         int parent_tab_id) override {}
27e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual content::WebContents* CreateNewTabForDevTools(
28e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      const GURL& url) override {
29e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    return nullptr;
30e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  }
31e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual bool IsSessionRestoreInProgress() const override { return false; }
32e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual TabAndroid* GetTabAt(int index) const override { return nullptr; }
33e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual void SetActiveIndex(int index) override {}
34e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual void CloseTabAt(int index) override {}
35e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
36e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // A fake value for the current number of tabs.
37e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  int tab_count_;
38e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch};
39e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
40e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch// Regression test for http://crbug.com/432685.
41e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben MurdochTEST_F(TabModelListTest, TestGetTabModelForWebContents) {
42e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  TestTabModel tab_model(profile());
43e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  TabModelList::AddTabModel(&tab_model);
44e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
45e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  scoped_ptr<content::WebContents> contents(CreateTestWebContents());
46e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
47e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // Should not crash when there are no tabs.
48e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
49e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
50e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // Should not crash when there is an uninitialized tab, i.e. when
51e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  // TabModel::GetTabAt returns NULL.
52e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  tab_model.tab_count_ = 1;
53e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  EXPECT_EQ(NULL, TabModelList::GetTabModelForWebContents(contents.get()));
54e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
55e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  TabModelList::RemoveTabModel(&tab_model);
56e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch}
57