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 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 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