// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_TAB_CONTENTS_DELEGATE_H_ #define CHROME_BROWSER_TAB_CONTENTS_DELEGATE_H_ // TODO(maruel): Remove once UINT and HWND are replaced / typedef. #include #include "chrome/browser/page_navigator.h" #include "chrome/common/navigation_types.h" namespace gfx { class Point; class Rect; } class TabContents; class HtmlDialogContentsDelegate; // Objects implement this interface to get notified about changes in the // TabContents and to provide necessary functionality. class TabContentsDelegate : public PageNavigator { public: // Opens a new URL inside the passed in TabContents, if source is 0 open // in the current front-most tab. virtual void OpenURLFromTab(TabContents* source, const GURL& url, const GURL& referrer, WindowOpenDisposition disposition, PageTransition::Type transition) = 0; virtual void OpenURL(const GURL& url, const GURL& referrer, WindowOpenDisposition disposition, PageTransition::Type transition) { OpenURLFromTab(NULL, url, referrer, disposition, transition); } // Called to inform the delegate that the tab content's navigation state // changed. The |changed_flags| indicates the parts of the navigation state // that have been updated, and is any combination of the // |TabContents::InvalidateTypes| bits. virtual void NavigationStateChanged(const TabContents* source, unsigned changed_flags) = 0; // Called to cause the delegate to replace the source contents with the new // contents. virtual void ReplaceContents(TabContents* source, TabContents* new_contents) = 0; // Creates a new tab with the already-created TabContents 'new_contents'. // The window for the added contents should be reparented correctly when this // method returns. If |disposition| is NEW_POPUP, |pos| should hold the // initial position. virtual void AddNewContents(TabContents* source, TabContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture) = 0; // Selects the specified contents, bringing its container to the front. virtual void ActivateContents(TabContents* contents) = 0; // Notifies the delegate that this contents is starting or is done loading // some resource. The delegate should use this notification to represent // loading feedback. See TabContents::is_loading() virtual void LoadingStateChanged(TabContents* source) = 0; // Request the delegate to close this tab contents, and do whatever cleanup // it needs to do. virtual void CloseContents(TabContents* source) = 0; // Request the delegate to move this tab contents to the specified position // in screen coordinates. virtual void MoveContents(TabContents* source, const gfx::Rect& pos) = 0; // Called to determine if the TabContents is contained in a popup window. virtual bool IsPopup(TabContents* source) = 0; // Returns the tab which contains the specified tab content if it is // constrained, NULL otherwise. virtual TabContents* GetConstrainingContents(TabContents* source) { return NULL; } // Notification that some of our content has changed size as // part of an animation. virtual void ToolbarSizeChanged(TabContents* source, bool is_animating) = 0; // Notification that the starredness of the current URL changed. virtual void URLStarredChanged(TabContents* source, bool starred) = 0; // Notification that the target URL has changed virtual void UpdateTargetURL(TabContents* source, const GURL& url) = 0; // Notification that the target URL has changed virtual void ContentsMouseEvent(TabContents* source, UINT message) { } // Request the delegate to change the zoom level of the current tab. virtual void ContentsZoomChange(bool zoom_in) { } // Check whether this contents is inside a window dedicated to running a web // application. virtual bool IsApplication() { return false; } // Detach the given tab and convert it to a "webapp" view. The tab must be // a WebContents with a valid WebApp set. virtual void ConvertContentsToApplication(TabContents* source) { } // Informs the TabContentsDelegate that some of our state has changed // for this tab. virtual void ContentsStateChanged(TabContents* source) {} // Return whether this tab contents should have a URL bar. Only web contents // opened with a minimal chrome and their popups can be displayed without a // URL bar. virtual bool ShouldDisplayURLField() { return true; } // Whether this tab can be blurred through a javascript obj.blur() // call. ConstrainedWindows shouldn't be able to be blurred. virtual bool CanBlur() const { return true; } // Show a dialog with HTML content. |delegate| contains a pointer to the // delegate who knows how to display the dialog (which file URL and JSON // string input to use during initialization). |parent_window| is the window // that should be parent of the dialog, or NULL for the default. virtual void ShowHtmlDialog(HtmlDialogContentsDelegate* delegate, void* parent_window) { } // Tells us that we've finished firing this tab's beforeunload event. // The proceed bool tells us whether the user chose to proceed closing the // tab. Returns true if the tab can continue on firing it's unload event. // If we're closing the entire browser, then we'll want to delay firing // unload events until all the beforeunload events have fired. virtual void BeforeUnloadFired(TabContents* tab, bool proceed, bool* proceed_to_fire_unload) { *proceed_to_fire_unload = true; } // Send IPC to external host. Default implementation is do nothing. virtual void ForwardMessageToExternalHost(const std::string& receiver, const std::string& message) {}; }; #endif // CHROME_BROWSER_TAB_CONTENTS_DELEGATE_H_