// Copyright (c) 2010 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. // Defines the public interface for the blocked popup notifications. This // interface should only be used by TabContents. Users and subclasses of // TabContents should use the appropriate methods on TabContents to access // information about blocked popups. #ifndef CHROME_BROWSER_BLOCKED_POPUP_CONTAINER_H_ #define CHROME_BROWSER_BLOCKED_POPUP_CONTAINER_H_ #pragma once #include #include "chrome/browser/tab_contents/tab_contents_delegate.h" // Takes ownership of TabContents that are unrequested popup windows. class BlockedPopupContainer : public TabContentsDelegate { public: typedef std::vector BlockedContents; // Creates a container for a certain TabContents: explicit BlockedPopupContainer(TabContents* owner); // Adds a popup to this container. |bounds| are the window bounds requested by // the popup window. void AddTabContents(TabContents* tab_contents, const gfx::Rect& bounds); // Shows the blocked popup with TabContents |tab_contents|. void LaunchPopupForContents(TabContents* tab_contents); // Returns the number of blocked popups. size_t GetBlockedPopupCount() const; // Returns the contained TabContents pointers. |blocked_contents| must be // non-NULL. void GetBlockedContents(BlockedContents* blocked_contents) const; // Sets this object up to delete itself. void Destroy(); // Overridden from TabContentsDelegate: // Forwards OpenURLFromTab to our |owner_|. virtual void OpenURLFromTab(TabContents* source, const GURL& url, const GURL& referrer, WindowOpenDisposition disposition, PageTransition::Type transition); // Ignored; BlockedPopupContainer doesn't display a throbber. virtual void NavigationStateChanged(const TabContents* source, unsigned changed_flags) {} // Forwards AddNewContents to our |owner_|. virtual void AddNewContents(TabContents* source, TabContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_position, bool user_gesture); // Ignore activation/deactivation requests from the TabContents we're // blocking. virtual void ActivateContents(TabContents* contents) {} virtual void DeactivateContents(TabContents* contents) {} // Ignored; BlockedPopupContainer doesn't display a throbber. virtual void LoadingStateChanged(TabContents* source) {} // Removes |source| from our internal list of blocked popups. virtual void CloseContents(TabContents* source); // Changes the opening rectangle associated with |source|. virtual void MoveContents(TabContents* source, const gfx::Rect& new_bounds); // Always returns true. virtual bool IsPopup(const TabContents* source) const; // Returns our |owner_|. virtual TabContents* GetConstrainingContents(TabContents* source); // Ignored; BlockedPopupContainer doesn't display a toolbar. virtual void ToolbarSizeChanged(TabContents* source, bool is_animating) {} // Ignored; BlockedPopupContainer doesn't display a bookmarking star. virtual void URLStarredChanged(TabContents* source, bool starred) {} // Ignored; BlockedPopupContainer doesn't display a URL bar. virtual void UpdateTargetURL(TabContents* source, const GURL& url) {} // A number larger than the internal popup count on the Renderer; meant for // preventing a compromised renderer from exhausting GDI memory by spawning // infinite windows. static const size_t kImpossibleNumberOfPopups; protected: struct BlockedPopup; typedef std::vector BlockedPopups; private: // The TabContents that owns and constrains this BlockedPopupContainer. TabContents* owner_; // Information about all blocked popups. BlockedPopups blocked_popups_; DISALLOW_IMPLICIT_CONSTRUCTORS(BlockedPopupContainer); }; #endif // CHROME_BROWSER_BLOCKED_POPUP_CONTAINER_H_