Home | History | Annotate | Download | only in tab_contents
      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_TAB_CONTENTS_CORE_TAB_HELPER_H_
      6 #define CHROME_BROWSER_UI_TAB_CONTENTS_CORE_TAB_HELPER_H_
      7 
      8 #include "base/time/time.h"
      9 #include "content/public/browser/web_contents_observer.h"
     10 #include "content/public/browser/web_contents_user_data.h"
     11 
     12 class CoreTabHelperDelegate;
     13 
     14 // Per-tab class to handle functionality that is core to the operation of tabs.
     15 class CoreTabHelper : public content::WebContentsObserver,
     16                       public content::WebContentsUserData<CoreTabHelper> {
     17  public:
     18   virtual ~CoreTabHelper();
     19 
     20   // Initial title assigned to NavigationEntries from Navigate.
     21   static base::string16 GetDefaultTitle();
     22 
     23   // Returns a human-readable description the tab's loading state.
     24   base::string16 GetStatusText() const;
     25 
     26   // Notification that tab closing has started.  This can be called multiple
     27   // times, subsequent calls are ignored.
     28   void OnCloseStarted();
     29 
     30   // Notification that tab closing was cancelled. This can happen when a user
     31   // cancels a window close via another tab's beforeunload dialog.
     32   void OnCloseCanceled();
     33 
     34   // Set the time during close when unload is started. Normally, this is set
     35   // after the beforeunload dialog. However, for a window close, it is set
     36   // after all the beforeunload dialogs have finished.
     37   void OnUnloadStarted();
     38 
     39   // Set the time during close when the tab is no longer visible.
     40   void OnUnloadDetachedStarted();
     41 
     42   void UpdateContentRestrictions(int content_restrictions);
     43 
     44   CoreTabHelperDelegate* delegate() const { return delegate_; }
     45   void set_delegate(CoreTabHelperDelegate* d) { delegate_ = d; }
     46 
     47   void set_new_tab_start_time(const base::TimeTicks& time) {
     48     new_tab_start_time_ = time;
     49   }
     50 
     51   base::TimeTicks new_tab_start_time() const { return new_tab_start_time_; }
     52   int content_restrictions() const { return content_restrictions_; }
     53 
     54  private:
     55   explicit CoreTabHelper(content::WebContents* web_contents);
     56   friend class content::WebContentsUserData<CoreTabHelper>;
     57 
     58   // content::WebContentsObserver overrides:
     59   virtual void DidStartLoading(
     60       content::RenderViewHost* render_view_host) OVERRIDE;
     61   virtual void WasShown() OVERRIDE;
     62   virtual void WebContentsDestroyed() OVERRIDE;
     63   virtual void BeforeUnloadFired(const base::TimeTicks& proceed_time) OVERRIDE;
     64   virtual void BeforeUnloadDialogCancelled() OVERRIDE;
     65   virtual bool OnMessageReceived(
     66       const IPC::Message& message,
     67       content::RenderFrameHost* render_frame_host) OVERRIDE;
     68 
     69   void OnRequestThumbnailForContextNodeACK(const SkBitmap& bitmap,
     70                                            const gfx::Size& original_size);
     71 
     72   // Delegate for notifying our owner about stuff. Not owned by us.
     73   CoreTabHelperDelegate* delegate_;
     74 
     75   // The time when we started to create the new tab page.  This time is from
     76   // before we created this WebContents.
     77   base::TimeTicks new_tab_start_time_;
     78 
     79   // The time that we started to close this WebContents.
     80   base::TimeTicks close_start_time_;
     81 
     82   // The time when onbeforeunload ended.
     83   base::TimeTicks before_unload_end_time_;
     84 
     85   // The time when the tab was removed from view during close.
     86   base::TimeTicks unload_detached_start_time_;
     87 
     88   // Content restrictions, used to disable print/copy etc based on content's
     89   // (full-page plugins for now only) permissions.
     90   int content_restrictions_;
     91 
     92   DISALLOW_COPY_AND_ASSIGN(CoreTabHelper);
     93 };
     94 
     95 #endif  // CHROME_BROWSER_UI_TAB_CONTENTS_CORE_TAB_HELPER_H_
     96