Commit 0dd70bf6 authored by Peter Beverloo's avatar Peter Beverloo Committed by Commit Bot

Headless should deny push notification permission in Incognito

This matches Chromium's behaviour, part of which (unfortunately) is
defined in the //content layer in the form of DCHECKs.

BUG=

Change-Id: I4ea29bec34eb3348aa2640db55b1cef88443490f
Reviewed-on: https://chromium-review.googlesource.com/747222Reviewed-by: default avatarSami Kyöstilä <skyostil@chromium.org>
Commit-Queue: Peter Beverloo <peter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#512866}
parent 12ed8a7b
......@@ -83,9 +83,9 @@ HeadlessBrowserContextImpl::HeadlessBrowserContextImpl(
std::unique_ptr<HeadlessBrowserContextOptions> context_options)
: browser_(browser),
context_options_(std::move(context_options)),
resource_context_(new HeadlessResourceContext),
resource_context_(std::make_unique<HeadlessResourceContext>()),
should_remove_headers_(true),
permission_manager_(new HeadlessPermissionManager()),
permission_manager_(std::make_unique<HeadlessPermissionManager>(this)),
id_(base::GenerateGUID()) {
InitWhileIOAllowed();
}
......@@ -254,8 +254,6 @@ HeadlessBrowserContextImpl::GetSSLHostStateDelegate() {
}
content::PermissionManager* HeadlessBrowserContextImpl::GetPermissionManager() {
if (!permission_manager_.get())
permission_manager_.reset(new HeadlessPermissionManager());
return permission_manager_.get();
}
......
......@@ -5,11 +5,14 @@
#include "headless/lib/browser/headless_permission_manager.h"
#include "base/callback.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/permission_type.h"
namespace headless {
HeadlessPermissionManager::HeadlessPermissionManager() : PermissionManager() {}
HeadlessPermissionManager::HeadlessPermissionManager(
content::BrowserContext* browser_context)
: browser_context_(browser_context) {}
HeadlessPermissionManager::~HeadlessPermissionManager() {}
......@@ -20,7 +23,15 @@ int HeadlessPermissionManager::RequestPermission(
bool user_gesture,
const base::Callback<void(blink::mojom::PermissionStatus)>& callback) {
// In headless mode we just pretent the user "closes" any permission prompt,
// without accepting or denying.
// without accepting or denying. Push Notifications are the exception to this,
// which are explicitly disabled in Incognito mode.
if (browser_context_->IsOffTheRecord() &&
(permission == content::PermissionType::PUSH_MESSAGING ||
permission == content::PermissionType::NOTIFICATIONS)) {
callback.Run(blink::mojom::PermissionStatus::DENIED);
return kNoPendingOperation;
}
callback.Run(blink::mojom::PermissionStatus::ASK);
return kNoPendingOperation;
}
......
......@@ -9,11 +9,15 @@
#include "base/macros.h"
#include "content/public/browser/permission_manager.h"
namespace content {
class BrowserContext;
}
namespace headless {
class HeadlessPermissionManager : public content::PermissionManager {
public:
HeadlessPermissionManager();
explicit HeadlessPermissionManager(content::BrowserContext* browser_context);
~HeadlessPermissionManager() override;
// PermissionManager implementation.
......@@ -49,6 +53,8 @@ class HeadlessPermissionManager : public content::PermissionManager {
void UnsubscribePermissionStatusChange(int subscription_id) override;
private:
content::BrowserContext* browser_context_;
DISALLOW_COPY_AND_ASSIGN(HeadlessPermissionManager);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment