19ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 29ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 39ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// found in the LICENSE file. 49ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#ifndef CHROME_BROWSER_UI_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_ 69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#define CHROME_BROWSER_UI_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_ 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include <map> 958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/id_map.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_window_params.h" 129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/web_contents_observer.h" 139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/web_contents_user_data.h" 149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace chrome { 169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochstruct NavigateParams; 1758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} 1858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 2058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochstruct WebWindowFeatures; 2158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} 2258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 2358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass GURL; 249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Per-tab class to manage blocked popups. 269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass PopupBlockerTabHelper 279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch : public content::WebContentsObserver, 289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch public content::WebContentsUserData<PopupBlockerTabHelper> { 299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch public: 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Mapping from popup IDs to blocked popup requests. 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef std::map<int32, GURL> PopupIdMap; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual ~PopupBlockerTabHelper(); 349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Returns true if the popup request defined by |params| should be blocked. 36558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // In that case, it is also added to the |blocked_popups_| container. 3758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch bool MaybeBlockPopup(const chrome::NavigateParams& params, 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebWindowFeatures& window_features); 399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Adds a popup request to the |blocked_popups_| container. 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void AddBlockedPopup(const BlockedWindowParams& params); 42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Creates the blocked popup with |popup_id|. 449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void ShowBlockedPopup(int32 popup_id); 459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Returns the number of blocked popups. 479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch size_t GetBlockedPopupsCount() const; 489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PopupIdMap GetBlockedPopupRequests(); 509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // content::WebContentsObserver overrides: 529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual void DidNavigateMainFrame( 539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const content::LoadCommittedDetails& details, 549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const content::FrameNavigateParams& params) OVERRIDE; 559ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch private: 5758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch struct BlockedRequest; 589ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch friend class content::WebContentsUserData<PopupBlockerTabHelper>; 599ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 6058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch explicit PopupBlockerTabHelper(content::WebContents* web_contents); 6158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Called when the blocked popup notification is shown or hidden. 639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void PopupNotificationVisibilityChanged(bool visible); 649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 6558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch IDMap<BlockedRequest, IDMapOwnPointer> blocked_popups_; 669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DISALLOW_COPY_AND_ASSIGN(PopupBlockerTabHelper); 689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}; 699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#endif // CHROME_BROWSER_UI_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_ 71