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