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/sync/glue/synced_window_delegate.h" 10 #include "chrome/browser/ui/toolbar/toolbar_model.h" 11 #include "chrome/browser/ui/toolbar/toolbar_model_delegate.h" 12 #include "components/sessions/session_id.h" 13 #include "content/public/browser/notification_observer.h" 14 #include "content/public/browser/notification_registrar.h" 15 16 namespace browser_sync { 17 class SyncedWindowDelegate; 18 class SyncedWindowDelegateAndroid; 19 } 20 21 namespace content { 22 class WebContents; 23 } 24 25 class Profile; 26 class 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. 31 class 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 // This will return NULL if the tab has not yet been initialized. 42 virtual TabAndroid* GetTabAt(int index) const = 0; 43 44 virtual void SetActiveIndex(int index) = 0; 45 virtual void CloseTabAt(int index) = 0; 46 47 // Used for restoring tabs from synced foreign sessions. 48 virtual void CreateTab(content::WebContents* web_contents, 49 int parent_tab_id) = 0; 50 51 // Used by Developer Tools to create a new tab with a given URL. 52 // Replaces CreateTabForTesting. 53 virtual content::WebContents* CreateNewTabForDevTools(const GURL& url) = 0; 54 55 // Return true if we are currently restoring sessions asynchronously. 56 virtual bool IsSessionRestoreInProgress() const = 0; 57 58 protected: 59 explicit TabModel(Profile* profile); 60 virtual ~TabModel(); 61 62 // Instructs the TabModel to broadcast a notification that all tabs are now 63 // loaded from storage. 64 void BroadcastSessionRestoreComplete(); 65 66 ToolbarModel* GetToolbarModel(); 67 68 private: 69 // Determines how TabModel will interact with the profile. 70 virtual void Observe(int type, 71 const content::NotificationSource& source, 72 const content::NotificationDetails& details) OVERRIDE; 73 74 // The profile associated with this TabModel. 75 Profile* profile_; 76 77 // Describes if this TabModel contains an off-the-record profile. 78 bool is_off_the_record_; 79 80 // The SyncedWindowDelegate associated with this TabModel. 81 scoped_ptr<browser_sync::SyncedWindowDelegateAndroid> synced_window_delegate_; 82 83 // Unique identifier of this TabModel for session restore. This id is only 84 // unique within the current session, and is not guaranteed to be unique 85 // across sessions. 86 SessionID session_id_; 87 88 // The Registrar used to register TabModel for notifications. 89 content::NotificationRegistrar registrar_; 90 91 DISALLOW_COPY_AND_ASSIGN(TabModel); 92 }; 93 94 #endif // CHROME_BROWSER_UI_ANDROID_TAB_MODEL_TAB_MODEL_H_ 95