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
5package org.chromium.chrome.browser.tabmodel;
6
7import org.chromium.base.VisibleForTesting;
8import org.chromium.chrome.browser.Tab;
9import org.chromium.chrome.browser.profiles.Profile;
10
11/**
12 * Singleton class intended to stub out Tab model before it has been created.
13 */
14public class EmptyTabModel implements TabModel {
15
16    /**
17     * Used to mock TabModel. Application code should use getInstance() to construct an
18     * EmptyTabModel.
19     */
20    @VisibleForTesting
21    protected EmptyTabModel() {}
22
23    // "Initialization on demand holder idiom"
24    private static class LazyHolder {
25        private static final EmptyTabModel INSTANCE = new EmptyTabModel();
26    }
27
28    /**
29     * Get the singleton instance of EmptyTabModel.
30     * @return the instance of EmptyTabModel
31     */
32    public static EmptyTabModel getInstance() {
33        return LazyHolder.INSTANCE;
34    }
35
36    @Override
37    public Profile getProfile() {
38        return null;
39    }
40
41    @Override
42    public boolean isIncognito() {
43        return false;
44    }
45
46    @Override
47    public boolean closeTab(Tab tab) {
48        return false;
49    }
50
51    @Override
52    public Tab getNextTabIfClosed(int id) {
53        return null;
54    }
55
56    @Override
57    public void closeAllTabs() {
58    }
59
60    @Override
61    public int getCount() {
62        // We must return 0 to be consistent with getTab(i)
63        return 0;
64    }
65
66    @Override
67    public Tab getTabAt(int position) {
68        return null;
69    }
70
71    @Override
72    public int indexOf(Tab tab) {
73        return INVALID_TAB_INDEX;
74    }
75
76    @Override
77    public int index() {
78        return INVALID_TAB_INDEX;
79    }
80
81    @Override
82    public void setIndex(int i, TabSelectionType type) {}
83
84    @Override
85    public void moveTab(int id, int newIndex) {}
86
87    @Override
88    public void destroy() {}
89
90    @Override
91    public boolean isClosurePending(int tabId) {
92        return false;
93    }
94
95    @Override
96    public boolean closeTab(Tab tab, boolean animate, boolean uponExit, boolean canUndo) {
97        return false;
98    }
99
100    @Override
101    public TabList getComprehensiveModel() {
102        return this;
103    }
104
105    @Override
106    public void commitAllTabClosures() {
107    }
108
109    @Override
110    public void commitTabClosure(int tabId) {
111    }
112
113    @Override
114    public void cancelTabClosure(int tabId) {
115    }
116
117    @Override
118    public boolean supportsPendingClosures() {
119        return false;
120    }
121
122    @Override
123    public void addTab(Tab tab, int index, TabLaunchType type) {
124        assert false;
125    }
126
127    @Override
128    public void addObserver(TabModelObserver observer) {
129    }
130
131    @Override
132    public void removeObserver(TabModelObserver observer) {
133    }
134
135}
136