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