blob: fbfaeab1e04a1f1b2c8931e3a22183ce5746dc90 [file] [log] [blame]
// Copyright 2015 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 "content/shell/browser/shell_permission_manager.h"
#include "base/callback.h"
#include "base/command_line.h"
#include "content/public/browser/permission_type.h"
#include "content/public/common/content_switches.h"
#include "content/shell/common/shell_switches.h"
#include "media/base/media_switches.h"
namespace content {
namespace {
bool IsWhitelistedPermissionType(PermissionType permission) {
return permission == PermissionType::GEOLOCATION ||
permission == PermissionType::MIDI;
}
} // namespace
ShellPermissionManager::ShellPermissionManager()
: PermissionManager() {
}
ShellPermissionManager::~ShellPermissionManager() {
}
int ShellPermissionManager::RequestPermission(
PermissionType permission,
RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
const base::Callback<void(blink::mojom::PermissionStatus)>& callback) {
callback.Run(IsWhitelistedPermissionType(permission)
? blink::mojom::PermissionStatus::GRANTED
: blink::mojom::PermissionStatus::DENIED);
return kNoPendingOperation;
}
int ShellPermissionManager::RequestPermissions(
const std::vector<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) {
std::vector<blink::mojom::PermissionStatus> result;
for (const auto& permission : permissions) {
result.push_back(IsWhitelistedPermissionType(permission)
? blink::mojom::PermissionStatus::GRANTED
: blink::mojom::PermissionStatus::DENIED);
}
callback.Run(result);
return kNoPendingOperation;
}
void ShellPermissionManager::CancelPermissionRequest(int request_id) {
}
void ShellPermissionManager::ResetPermission(
PermissionType permission,
const GURL& requesting_origin,
const GURL& embedding_origin) {
}
blink::mojom::PermissionStatus ShellPermissionManager::GetPermissionStatus(
PermissionType permission,
const GURL& requesting_origin,
const GURL& embedding_origin) {
// Background sync browser tests require permission to be granted by default.
// TODO(nsatragno): add a command line flag so that it's only granted for
// tests.
if (permission == PermissionType::BACKGROUND_SYNC)
return blink::mojom::PermissionStatus::GRANTED;
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
if ((permission == PermissionType::AUDIO_CAPTURE ||
permission == PermissionType::VIDEO_CAPTURE) &&
command_line->HasSwitch(switches::kUseFakeDeviceForMediaStream) &&
command_line->HasSwitch(switches::kUseFakeUIForMediaStream)) {
return blink::mojom::PermissionStatus::GRANTED;
}
// Generic sensor browser tests require permission to be granted.
if (permission == PermissionType::SENSORS &&
command_line->HasSwitch(switches::kContentBrowserTest)) {
return blink::mojom::PermissionStatus::GRANTED;
}
return blink::mojom::PermissionStatus::DENIED;
}
int ShellPermissionManager::SubscribePermissionStatusChange(
PermissionType permission,
const GURL& requesting_origin,
const GURL& embedding_origin,
const base::Callback<void(blink::mojom::PermissionStatus)>& callback) {
return kNoPendingOperation;
}
void ShellPermissionManager::UnsubscribePermissionStatusChange(
int subscription_id) {
}
} // namespace content