core_tab_helper.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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
12class CoreTabHelperDelegate;
13
14// Per-tab class to handle functionality that is core to the operation of tabs.
15class 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(
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