172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Defines the public interface for the blocked content (including popup) 6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// notifications. This interface should only be used by TabContents. Users and 7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// subclasses of TabContents should use the appropriate methods on TabContents 8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// to access information about blocked content. 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#ifndef CHROME_BROWSER_BLOCKED_CONTENT_CONTAINER_H_ 11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#define CHROME_BROWSER_BLOCKED_CONTENT_CONTAINER_H_ 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <vector> 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents_delegate.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Takes ownership of TabContents that are unrequested popup windows. 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass BlockedContentContainer : public TabContentsDelegate { 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates a container for a certain TabContents: 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick explicit BlockedContentContainer(TabContents* owner); 23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ~BlockedContentContainer(); 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Adds a TabContents to this container. |bounds| are the window bounds 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // requested for the TabContents. 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddTabContents(TabContents* tab_contents, 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WindowOpenDisposition disposition, 29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const gfx::Rect& bounds, 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool user_gesture); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Shows the blocked TabContents |tab_contents|. 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void LaunchForContents(TabContents* tab_contents); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Returns the number of blocked contents. 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick size_t GetBlockedContentsCount() const; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the contained TabContents pointers. |blocked_contents| must be 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // non-NULL. 40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void GetBlockedContents(std::vector<TabContents*>* blocked_contents) const; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets this object up to delete itself. 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Destroy(); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Overridden from TabContentsDelegate: 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Forwards OpenURLFromTab to our |owner_|. 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OpenURLFromTab(TabContents* source, 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& url, const GURL& referrer, 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition, 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PageTransition::Type transition); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Ignored; BlockedContentContainer doesn't display a throbber. 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void NavigationStateChanged(const TabContents* source, 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unsigned changed_flags) {} 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Forwards AddNewContents to our |owner_|. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void AddNewContents(TabContents* source, 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* new_contents, 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition, 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_position, 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool user_gesture); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Ignore activation/deactivation requests from the TabContents we're 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // blocking. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ActivateContents(TabContents* contents) {} 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void DeactivateContents(TabContents* contents) {} 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Ignored; BlockedContentContainer doesn't display a throbber. 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void LoadingStateChanged(TabContents* source) {} 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Removes |source| from our internal list of blocked contents. 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void CloseContents(TabContents* source); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Changes the opening rectangle associated with |source|. 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void MoveContents(TabContents* source, const gfx::Rect& new_bounds); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Always returns true. 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual bool IsPopup(const TabContents* source) const; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns our |owner_|. 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TabContents* GetConstrainingContents(TabContents* source); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Ignored; BlockedContentContainer doesn't display a URL bar. 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateTargetURL(TabContents* source, const GURL& url) {} 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Maximum number of blocked contents we allow. No page should really need 88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // this many anyway. If reached it typically means there is a compromised 89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // renderer. 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const size_t kImpossibleNumberOfPopups; 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick struct BlockedContent; 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick typedef std::vector<BlockedContent> BlockedContents; 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // The TabContents that owns and constrains this BlockedContentContainer. 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* owner_; 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Information about all blocked contents. 101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BlockedContents blocked_contents_; 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DISALLOW_IMPLICIT_CONSTRUCTORS(BlockedContentContainer); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#endif // CHROME_BROWSER_BLOCKED_CONTENT_CONTAINER_H_ 107