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