|  | // Copyright 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "headless/lib/browser/headless_permission_manager.h" | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "content/public/browser/browser_context.h" | 
|  | #include "content/public/browser/permission_controller.h" | 
|  | #include "content/public/browser/permission_type.h" | 
|  |  | 
|  | namespace headless { | 
|  |  | 
|  | HeadlessPermissionManager::HeadlessPermissionManager( | 
|  | content::BrowserContext* browser_context) | 
|  | : browser_context_(browser_context) {} | 
|  |  | 
|  | HeadlessPermissionManager::~HeadlessPermissionManager() = default; | 
|  |  | 
|  | int HeadlessPermissionManager::RequestPermission( | 
|  | content::PermissionType permission, | 
|  | content::RenderFrameHost* render_frame_host, | 
|  | const GURL& requesting_origin, | 
|  | 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. Notifications are the exception to this, | 
|  | // which are explicitly disabled in Incognito mode. | 
|  | if (browser_context_->IsOffTheRecord() && | 
|  | permission == content::PermissionType::NOTIFICATIONS) { | 
|  | callback.Run(blink::mojom::PermissionStatus::DENIED); | 
|  | return content::PermissionController::kNoPendingOperation; | 
|  | } | 
|  |  | 
|  | callback.Run(blink::mojom::PermissionStatus::ASK); | 
|  | return content::PermissionController::kNoPendingOperation; | 
|  | } | 
|  |  | 
|  | int HeadlessPermissionManager::RequestPermissions( | 
|  | const std::vector<content::PermissionType>& permissions, | 
|  | content::RenderFrameHost* render_frame_host, | 
|  | const GURL& requesting_origin, | 
|  | bool user_gesture, | 
|  | const base::Callback< | 
|  | void(const std::vector<blink::mojom::PermissionStatus>&)>& callback) { | 
|  | // In headless mode we just pretent the user "closes" any permission prompt, | 
|  | // without accepting or denying. | 
|  | std::vector<blink::mojom::PermissionStatus> result( | 
|  | permissions.size(), blink::mojom::PermissionStatus::ASK); | 
|  | callback.Run(result); | 
|  | return content::PermissionController::kNoPendingOperation; | 
|  | } | 
|  |  | 
|  | void HeadlessPermissionManager::ResetPermission( | 
|  | content::PermissionType permission, | 
|  | const GURL& requesting_origin, | 
|  | const GURL& embedding_origin) {} | 
|  |  | 
|  | blink::mojom::PermissionStatus HeadlessPermissionManager::GetPermissionStatus( | 
|  | content::PermissionType permission, | 
|  | const GURL& requesting_origin, | 
|  | const GURL& embedding_origin) { | 
|  | return blink::mojom::PermissionStatus::ASK; | 
|  | } | 
|  |  | 
|  | blink::mojom::PermissionStatus | 
|  | HeadlessPermissionManager::GetPermissionStatusForFrame( | 
|  | content::PermissionType permission, | 
|  | content::RenderFrameHost* render_frame_host, | 
|  | const GURL& requesting_origin) { | 
|  | return blink::mojom::PermissionStatus::ASK; | 
|  | } | 
|  |  | 
|  | int HeadlessPermissionManager::SubscribePermissionStatusChange( | 
|  | content::PermissionType permission, | 
|  | content::RenderFrameHost* render_frame_host, | 
|  | const GURL& requesting_origin, | 
|  | const base::Callback<void(blink::mojom::PermissionStatus)>& callback) { | 
|  | return content::PermissionController::kNoPendingOperation; | 
|  | } | 
|  |  | 
|  | void HeadlessPermissionManager::UnsubscribePermissionStatusChange( | 
|  | int subscription_id) {} | 
|  |  | 
|  | }  // namespace headless |