Home | History | Annotate | Download | only in tab_model
      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