#ifndef COMPONENTS_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_
#define COMPONENTS_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_
#include <stddef.h>
#include <stdint.h>
#include <map>
#include <memory>
#include "components/blocked_content/popup_blocker.h"
#include "components/blocked_content/url_list_manager.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "ui/base/window_open_disposition.h"
#include "url/gurl.h"
namespace blocked_content {
class PopupNavigationDelegate;
class PopupBlockerTabHelper
: public content::WebContentsObserver,
public content::WebContentsUserData<PopupBlockerTabHelper> {
public:
typedef std::map<int32_t, GURL> PopupIdMap;
enum class Action : int {
kInitiated = 0,
kBlocked = 1,
kClickedThroughNoGesture = 2,
kClickedThroughAbusive = 3,
kMaxValue = kClickedThroughAbusive
};
PopupBlockerTabHelper(const PopupBlockerTabHelper&) = delete;
PopupBlockerTabHelper& operator=(const PopupBlockerTabHelper&) = delete;
~PopupBlockerTabHelper() override;
size_t GetBlockedPopupsCount() const;
PopupIdMap GetBlockedPopupRequests();
void ShowBlockedPopup(int32_t popup_id, WindowOpenDisposition disposition);
void ShowAllBlockedPopups();
void AddBlockedPopup(std::unique_ptr<PopupNavigationDelegate> delegate,
const blink::mojom::WindowFeatures& window_features,
PopupBlockType block_type);
void DidFinishNavigation(
content::NavigationHandle* navigation_handle) override;
static void LogAction(Action action);
blocked_content::UrlListManager* manager() { return &manager_; }
private:
struct BlockedRequest;
friend class content::WebContentsUserData<PopupBlockerTabHelper>;
explicit PopupBlockerTabHelper(content::WebContents* web_contents);
void HidePopupNotification();
blocked_content::UrlListManager manager_;
std::map<int32_t, std::unique_ptr<BlockedRequest>> blocked_popups_;
int32_t next_id_ = 0;
WEB_CONTENTS_USER_DATA_KEY_DECL();
};
}
#endif