• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
delegate()44   CoreTabHelperDelegate* delegate() const { return delegate_; }
set_delegate(CoreTabHelperDelegate * d)45   void set_delegate(CoreTabHelperDelegate* d) { delegate_ = d; }
46 
set_new_tab_start_time(const base::TimeTicks & time)47   void set_new_tab_start_time(const base::TimeTicks& time) {
48     new_tab_start_time_ = time;
49   }
50 
new_tab_start_time()51   base::TimeTicks new_tab_start_time() const { return new_tab_start_time_; }
content_restrictions()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(
63       content::WebContents* web_contents) OVERRIDE;
64   virtual void BeforeUnloadFired(const base::TimeTicks& proceed_time) OVERRIDE;
65   virtual void BeforeUnloadDialogCancelled() OVERRIDE;
66   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
67 
68   void OnRequestThumbnailForContextNodeACK(const SkBitmap& bitmap,
69                                            const gfx::Size& original_size);
70 
71   // Delegate for notifying our owner about stuff. Not owned by us.
72   CoreTabHelperDelegate* delegate_;
73 
74   // The time when we started to create the new tab page.  This time is from
75   // before we created this WebContents.
76   base::TimeTicks new_tab_start_time_;
77 
78   // The time that we started to close this WebContents.
79   base::TimeTicks close_start_time_;
80 
81   // The time when onbeforeunload ended.
82   base::TimeTicks before_unload_end_time_;
83 
84   // The time when the tab was removed from view during close.
85   base::TimeTicks unload_detached_start_time_;
86 
87   // Content restrictions, used to disable print/copy etc based on content's
88   // (full-page plugins for now only) permissions.
89   int content_restrictions_;
90 
91   DISALLOW_COPY_AND_ASSIGN(CoreTabHelper);
92 };
93 
94 #endif  // CHROME_BROWSER_UI_TAB_CONTENTS_CORE_TAB_HELPER_H_
95