15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_TAB_CONTENTS_CORE_TAB_HELPER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_TAB_CONTENTS_CORE_TAB_HELPER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_user_data.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CoreTabHelperDelegate; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Per-tab class to handle functionality that is core to the operation of tabs. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CoreTabHelper : public content::WebContentsObserver, 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsUserData<CoreTabHelper> { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~CoreTabHelper(); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initial title assigned to NavigationEntries from Navigate. 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static base::string16 GetDefaultTitle(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a human-readable description the tab's loading state. 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 GetStatusText() const; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Notification that tab closing has started. This can be called multiple 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // times, subsequent calls are ignored. 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnCloseStarted(); 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Notification that tab closing was cancelled. This can happen when a user 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // cancels a window close via another tab's beforeunload dialog. 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnCloseCanceled(); 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Set the time during close when unload is started. Normally, this is set 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // after the beforeunload dialog. However, for a window close, it is set 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // after all the beforeunload dialogs have finished. 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnUnloadStarted(); 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Set the time during close when the tab is no longer visible. 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnUnloadDetachedStarted(); 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void UpdateContentRestrictions(int content_restrictions); 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CoreTabHelperDelegate* delegate() const { return delegate_; } 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void set_delegate(CoreTabHelperDelegate* d) { delegate_ = d; } 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void set_new_tab_start_time(const base::TimeTicks& time) { 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new_tab_start_time_ = time; 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks new_tab_start_time() const { return new_tab_start_time_; } 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int content_restrictions() const { return content_restrictions_; } 537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit CoreTabHelper(content::WebContents* web_contents); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class content::WebContentsUserData<CoreTabHelper>; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::WebContentsObserver overrides: 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void DidStartLoading( 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::RenderViewHost* render_view_host) OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WasShown() OVERRIDE; 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void WebContentsDestroyed() OVERRIDE; 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void BeforeUnloadFired(const base::TimeTicks& proceed_time) OVERRIDE; 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void BeforeUnloadDialogCancelled() OVERRIDE; 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool OnMessageReceived( 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const IPC::Message& message, 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderFrameHost* render_frame_host) OVERRIDE; 688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void OnRequestThumbnailForContextNodeACK(const SkBitmap& bitmap, 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const gfx::Size& original_size); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delegate for notifying our owner about stuff. Not owned by us. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelperDelegate* delegate_; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The time when we started to create the new tab page. This time is from 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // before we created this WebContents. 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks new_tab_start_time_; 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The time that we started to close this WebContents. 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks close_start_time_; 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The time when onbeforeunload ended. 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks before_unload_end_time_; 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The time when the tab was removed from view during close. 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks unload_detached_start_time_; 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 88ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Content restrictions, used to disable print/copy etc based on content's 89ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // (full-page plugins for now only) permissions. 90ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int content_restrictions_; 91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CoreTabHelper); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_TAB_CONTENTS_CORE_TAB_HELPER_H_ 96