tab_model.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright (c) 2012 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#ifndef CHROME_BROWSER_UI_ANDROID_TAB_MODEL_TAB_MODEL_H_
6#define CHROME_BROWSER_UI_ANDROID_TAB_MODEL_TAB_MODEL_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "chrome/browser/sessions/session_id.h"
10#include "chrome/browser/sync/glue/synced_window_delegate.h"
11#include "chrome/browser/ui/toolbar/toolbar_model.h"
12#include "chrome/browser/ui/toolbar/toolbar_model_delegate.h"
13#include "content/public/browser/notification_observer.h"
14#include "content/public/browser/notification_registrar.h"
15
16namespace browser_sync {
17class SyncedWindowDelegate;
18class SyncedWindowDelegateAndroid;
19}
20
21namespace content {
22class WebContents;
23}
24
25class Profile;
26class TabAndroid;
27
28// Abstract representation of a Tab Model for Android.  Since Android does
29// not use Browser/BrowserList, this is required to allow Chrome to interact
30// with Android's Tabs and Tab Model.
31class TabModel : public content::NotificationObserver {
32 public:
33  virtual Profile* GetProfile() const;
34  virtual bool IsOffTheRecord() const;
35  virtual browser_sync::SyncedWindowDelegate* GetSyncedWindowDelegate() const;
36  virtual SessionID::id_type GetSessionId() const;
37
38  virtual int GetTabCount() const = 0;
39  virtual int GetActiveIndex() const = 0;
40  virtual content::WebContents* GetWebContentsAt(int index) const = 0;
41  virtual TabAndroid* GetTabAt(int index) const = 0;
42
43  virtual void SetActiveIndex(int index) = 0;
44  virtual void CloseTabAt(int index) = 0;
45
46  // Used for restoring tabs from synced foreign sessions.
47  virtual void CreateTab(content::WebContents* web_contents,
48                         int parent_tab_id) = 0;
49
50  // Used by Developer Tools to create a new tab with a given URL.
51  // Replaces CreateTabForTesting.
52  virtual content::WebContents* CreateNewTabForDevTools(const GURL& url) = 0;
53
54  // Return true if we are currently restoring sessions asynchronously.
55  virtual bool IsSessionRestoreInProgress() const = 0;
56
57 protected:
58  explicit TabModel(Profile* profile);
59  virtual ~TabModel();
60
61  // Instructs the TabModel to broadcast a notification that all tabs are now
62  // loaded from storage.
63  void BroadcastSessionRestoreComplete();
64
65  ToolbarModel* GetToolbarModel();
66
67 private:
68  // Determines how TabModel will interact with the profile.
69  virtual void Observe(int type,
70                       const content::NotificationSource& source,
71                       const content::NotificationDetails& details) OVERRIDE;
72
73  // The profile associated with this TabModel.
74  Profile* profile_;
75
76  // Describes if this TabModel contains an off-the-record profile.
77  bool is_off_the_record_;
78
79  // The SyncedWindowDelegate associated with this TabModel.
80  scoped_ptr<browser_sync::SyncedWindowDelegateAndroid> synced_window_delegate_;
81
82  // Unique identifier of this TabModel for session restore. This id is only
83  // unique within the current session, and is not guaranteed to be unique
84  // across sessions.
85  SessionID session_id_;
86
87  // The Registrar used to register TabModel for notifications.
88  content::NotificationRegistrar registrar_;
89
90  DISALLOW_COPY_AND_ASSIGN(TabModel);
91};
92
93#endif  // CHROME_BROWSER_UI_ANDROID_TAB_MODEL_TAB_MODEL_H_
94