1 // Copyright (c) 2011 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 // Defines the public interface for the blocked content (including popup) 6 // notifications. This interface should only be used by TabContents. Users and 7 // subclasses of TabContents should use the appropriate methods on TabContents 8 // to access information about blocked content. 9 10 #ifndef CHROME_BROWSER_BLOCKED_CONTENT_CONTAINER_H_ 11 #define CHROME_BROWSER_BLOCKED_CONTENT_CONTAINER_H_ 12 #pragma once 13 14 #include <vector> 15 16 #include "content/browser/tab_contents/tab_contents_delegate.h" 17 18 // Takes ownership of TabContents that are unrequested popup windows. 19 class BlockedContentContainer : public TabContentsDelegate { 20 public: 21 // Creates a container for a certain TabContents: 22 explicit BlockedContentContainer(TabContents* owner); 23 virtual ~BlockedContentContainer(); 24 25 // Adds a TabContents to this container. |bounds| are the window bounds 26 // requested for the TabContents. 27 void AddTabContents(TabContents* tab_contents, 28 WindowOpenDisposition disposition, 29 const gfx::Rect& bounds, 30 bool user_gesture); 31 32 // Shows the blocked TabContents |tab_contents|. 33 void LaunchForContents(TabContents* tab_contents); 34 35 // Returns the number of blocked contents. 36 size_t GetBlockedContentsCount() const; 37 38 // Returns the contained TabContents pointers. |blocked_contents| must be 39 // non-NULL. 40 void GetBlockedContents(std::vector<TabContents*>* blocked_contents) const; 41 42 // Sets this object up to delete itself. 43 void Destroy(); 44 45 // Overridden from TabContentsDelegate: 46 47 // Forwards OpenURLFromTab to our |owner_|. 48 virtual void OpenURLFromTab(TabContents* source, 49 const GURL& url, const GURL& referrer, 50 WindowOpenDisposition disposition, 51 PageTransition::Type transition); 52 53 // Ignored; BlockedContentContainer doesn't display a throbber. NavigationStateChanged(const TabContents * source,unsigned changed_flags)54 virtual void NavigationStateChanged(const TabContents* source, 55 unsigned changed_flags) {} 56 57 // Forwards AddNewContents to our |owner_|. 58 virtual void AddNewContents(TabContents* source, 59 TabContents* new_contents, 60 WindowOpenDisposition disposition, 61 const gfx::Rect& initial_position, 62 bool user_gesture); 63 64 // Ignore activation/deactivation requests from the TabContents we're 65 // blocking. ActivateContents(TabContents * contents)66 virtual void ActivateContents(TabContents* contents) {} DeactivateContents(TabContents * contents)67 virtual void DeactivateContents(TabContents* contents) {} 68 69 // Ignored; BlockedContentContainer doesn't display a throbber. LoadingStateChanged(TabContents * source)70 virtual void LoadingStateChanged(TabContents* source) {} 71 72 // Removes |source| from our internal list of blocked contents. 73 virtual void CloseContents(TabContents* source); 74 75 // Changes the opening rectangle associated with |source|. 76 virtual void MoveContents(TabContents* source, const gfx::Rect& new_bounds); 77 78 // Always returns true. 79 virtual bool IsPopup(const TabContents* source) const; 80 81 // Returns our |owner_|. 82 virtual TabContents* GetConstrainingContents(TabContents* source); 83 84 // Ignored; BlockedContentContainer doesn't display a URL bar. UpdateTargetURL(TabContents * source,const GURL & url)85 virtual void UpdateTargetURL(TabContents* source, const GURL& url) {} 86 87 // Maximum number of blocked contents we allow. No page should really need 88 // this many anyway. If reached it typically means there is a compromised 89 // renderer. 90 static const size_t kImpossibleNumberOfPopups; 91 92 private: 93 struct BlockedContent; 94 95 typedef std::vector<BlockedContent> BlockedContents; 96 97 // The TabContents that owns and constrains this BlockedContentContainer. 98 TabContents* owner_; 99 100 // Information about all blocked contents. 101 BlockedContents blocked_contents_; 102 103 DISALLOW_IMPLICIT_CONSTRUCTORS(BlockedContentContainer); 104 }; 105 106 #endif // CHROME_BROWSER_BLOCKED_CONTENT_CONTAINER_H_ 107