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